otherOrderService.go 75 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039
  1. package order
  2. import (
  3. "config"
  4. "database/sql"
  5. "encoding/json"
  6. "errors"
  7. "fmt"
  8. "log"
  9. "math"
  10. "mongodb"
  11. m "mongodb"
  12. "net/http"
  13. qutil "qfw/util"
  14. "qfw/util/redis"
  15. "qfw/util/usercenter"
  16. "regexp"
  17. "strings"
  18. "time"
  19. "util"
  20. "go.mongodb.org/mongo-driver/bson"
  21. )
  22. const (
  23. NewOther = "newother"
  24. PowerCacheDb = "other"
  25. PowerCacheKey = "bigmember_power_3_%s"
  26. IsGetUserBaseInfoRedisKey = "baseinfo_%s"
  27. RedisMenuKeyPC = "jy_workdesktopmenu_10000_PC_menu1_%s" //剑鱼appid:10000
  28. RedisMenuKeyWX = "jy_workdesktopmenu_10000_WX_menu1_%s" //剑鱼appid:10000
  29. RedisMenuKeyAPP = "jy_workdesktopmenu_10000_APP_menu1_%s" //剑鱼appid:10000
  30. UserPowerRedisKey = "jy_userpowerredis_10000_%d_%s" //工作桌面 用户功能缓存(类似bigmember_power_3_%s)
  31. )
  32. // 插入合同表信息和订单表信息
  33. func createOtherOrder(param *CreateOtherOrderParams, code string) bool {
  34. var contractStatus int
  35. if param.ContractFileUrl != "" && len(param.ContractFileUrl) > 0 {
  36. contractStatus = 1
  37. } else {
  38. contractStatus = 0
  39. }
  40. filter_map := map[string]interface{}{
  41. "source": "qmx",
  42. "product": param.Product,
  43. "remark": param.Remark,
  44. "contractStatus": contractStatus,
  45. }
  46. s_m_openid := ""
  47. s_nickname := ""
  48. price := 0
  49. packNum := 0
  50. if param.ProductType == "广告" {
  51. filter_map["adSource"] = AdSourceMap[param.AdSource]
  52. } else if param.ProductType == "数据流量包" {
  53. userData, ok := util.MQFW.FindOne("user", map[string]interface{}{"_id": mongodb.StringTOBsonId(param.UserId)})
  54. if ok && userData != nil && len(*userData) > 0 {
  55. if (*userData)["s_m_openid"] != nil {
  56. s_m_openid = fmt.Sprint((*userData)["s_m_openid"])
  57. } else if (*userData)["s_nickname"] != nil {
  58. s_nickname = fmt.Sprint((*userData)["s_nickname"])
  59. }
  60. }
  61. //根据id查询流量包价格
  62. packDetail, err := util.JyDataExportPack.GetPackDetailById(param.PackId)
  63. if err != nil {
  64. log.Println(err)
  65. }
  66. filter_map = map[string]interface{}{
  67. "pType": packDetail.PackType,
  68. "pNum": packDetail.PackNum,
  69. "validYear": packDetail.ValidYear,
  70. "price": packDetail.Price,
  71. "badge": "give",
  72. }
  73. if param.OrderChannel == "d03" {
  74. filter_map["badge"] = ""
  75. }
  76. price = packDetail.Price
  77. packNum = packDetail.PackNum
  78. }
  79. if param.DataType == "1" {
  80. param.DataType = "高级字段包"
  81. } else if param.DataType == "2" {
  82. param.DataType = "标准字段包"
  83. } else if param.DataType == "3" {
  84. param.DataType = "自定义字段包"
  85. }
  86. if param.OrderChannel == "d03" {
  87. filter_map["source"] = ""
  88. filter_map["canInvoice"] = false
  89. }
  90. return util.JysqlDB.ExecTx("创建其他订单生成订单信息和合同信息", func(tx *sql.Tx) bool {
  91. filter, _ := json.Marshal(filter_map)
  92. insertData := map[string]interface{}{
  93. "user_phone": param.Phone,
  94. "product_type": param.ProductType,
  95. "salesperson": param.SalesPerson,
  96. "salesperson_id": param.SalesPersonId, // 销售人员在剑鱼后台的id
  97. "filter": string(filter),
  98. "order_code": code,
  99. "create_time": param.CreateTime, // 当前时间
  100. "prepay_time": qutil.NowFormat(qutil.Date_Full_Layout),
  101. "create_person": param.CreatePerson, // 创建人
  102. "order_money": param.OrderMoney,
  103. "pay_money": param.ContractMoney,
  104. "data_count": param.DataNum,
  105. "data_spec": param.DataType,
  106. "vip_starttime": param.StartTime,
  107. "is_backstage_order": 1,
  108. "billingMode": param.ChargeMode,
  109. "vip_endtime": param.EndTime,
  110. "order_status": param.OrderStatus,
  111. "user_id": "",
  112. "return_status": qutil.If(param.ContractMoney == 0, 1, 0),
  113. "refund_status": 0,
  114. "company_name": param.CompanyName,
  115. "sale_time": qutil.If(param.SaleTime == "", nil, param.SaleTime), // 业务统计时间
  116. "commission": param.Commission, // 佣金 2021-12-29 订单优化需求新增字段
  117. "procedures_money": param.ProceduresMoney, // 手续费 2021-12-29 订单优化需求新增字段
  118. "distribution_channel": param.SalesChannel,
  119. "order_channel": param.OrderChannel,
  120. "out_trade_no": param.OutTradeNo,
  121. "signing_subject": param.PaybackCompany,
  122. "audit_status": param.AuditStatus,
  123. "pay_way": param.PayType,
  124. "saleDep": param.SaleDep,
  125. }
  126. if param.BuySubject == "2" {
  127. insertData["buy_subject"] = 2
  128. entId, err, userPositionId := AutomaticallyCreatingEnt(param.CompanyName, param.Phone, code, param.OrderStatus, param.UserId)
  129. if err != nil {
  130. log.Printf("AutomaticallyCreatingEnt 自动创建企业信息失败:code:%s,err:%s", code, err.Error())
  131. return false
  132. } else {
  133. if entId != 0 {
  134. insertData["ent_id"] = entId
  135. param.UserId = fmt.Sprint(qutil.Int64All(userPositionId))
  136. insertData["user_id"] = userPositionId
  137. }
  138. }
  139. } else {
  140. insertData["buy_subject"] = 1
  141. }
  142. insertData["buy_count"] = param.BuyCount
  143. if param.Pay_time != "" {
  144. insertData["pay_time"] = param.Pay_time
  145. }
  146. if param.ProductType == "历史数据" {
  147. insertData["service_status"] = 1
  148. } else if param.ProductType == "数据流量包" || param.ProductType == "数据文件" {
  149. insertData["original_price"] = param.OrderMoney
  150. insertData["user_id"] = param.UserId
  151. insertData["user_nickname"] = s_nickname
  152. insertData["user_openid"] = s_m_openid
  153. if param.OrderChannel == "d03" {
  154. insertData["order_money"] = param.OrderMoney
  155. insertData["discount_price"] = 0
  156. } else {
  157. insertData["order_money"] = 0
  158. insertData["discount_price"] = price
  159. }
  160. }
  161. contractData := map[string]interface{}{
  162. "order_code": code,
  163. "customer_name": param.CustomerName,
  164. "contract_code": param.ContractCode,
  165. "contract_time": param.ContractTime,
  166. "contract_status": param.ContractStatus,
  167. "contract_money": param.ContractMoney,
  168. "contract_file_url": param.ContractFileUrl,
  169. "contract_archive_status": qutil.If(param.ContractStatus == 0, nil, param.ContractArchiveStatus),
  170. "contract_archive_num": qutil.If(param.ContractStatus == 0, nil, param.ContractArchiveNum),
  171. }
  172. if param.ContractArchiveTime != "" {
  173. contractData["contract_archive_time"] = param.ContractArchiveTime
  174. }
  175. if param.ProductType == "广告" || param.ProductType == "线下课程培训" ||
  176. param.ProductType == "课程分销" || param.ProductType == "标书制作" || param.ProductType == "打赏" ||
  177. param.ProductType == "ISO体系认证" || param.ProductType == "3A信用认证" || param.ProductType == "权益码" {
  178. delete(insertData, "data_count")
  179. delete(insertData, "data_spec")
  180. }
  181. if qutil.IntAll(param.ContractStatus) == 0 {
  182. delete(contractData, "contract_time")
  183. delete(contractData, "contract_code")
  184. }
  185. if param.StartTime == "" {
  186. delete(insertData, "vip_starttime")
  187. }
  188. if param.EndTime == "" {
  189. delete(insertData, "vip_endtime")
  190. }
  191. if param.ContractTime == "" {
  192. delete(contractData, "contract_time")
  193. }
  194. //订单中台
  195. if param.ProductType == "数据流量包" || param.ProductType == "数据文件" {
  196. if param.OrderChannel == "d03" {
  197. filter_map["badge"] = ""
  198. delete(insertData, "return_status")
  199. }
  200. }
  201. ok_1 := util.JysqlDB.InsertByTx(tx, "dataexport_order", insertData)
  202. //资源中台
  203. var ok_2 int64
  204. ok_3 := true
  205. if param.ProductType != "数据流量包" {
  206. ok_2 = util.JysqlDB.InsertByTx(tx, "contract", contractData)
  207. } else {
  208. //待转化为时间戳的字符串 注意 这里的小时和分钟还要秒必须写 因为是跟着模板走的 修改模板的话也可以不写
  209. //转化为时间戳 类型是int64
  210. purchaseData := map[string]interface{}{
  211. "accountId": param.UserId,
  212. "number": packNum,
  213. "spec": "条",
  214. "appId": "10000",
  215. "endTime": param.EndTime[0:10],
  216. "remarks": string(filter),
  217. }
  218. if param.DataType == "高级字段包" {
  219. purchaseData["name"] = "数据流包"
  220. purchaseData["resourceType"] = "高级字段包"
  221. } else {
  222. purchaseData["name"] = "数据流包"
  223. purchaseData["resourceType"] = "标准字段包"
  224. }
  225. ok_3 = util.PurchaseUserBalance(purchaseData)
  226. }
  227. return ok_1 != 0 && ok_2 != -1 && ok_3 != false
  228. })
  229. }
  230. func createEntnicheOrder(param *CreateOtherOrderParams, code string) bool {
  231. var contractStatus int
  232. if param.ContractFileUrl != "" && len(param.ContractFileUrl) > 0 {
  233. contractStatus = 1
  234. } else {
  235. contractStatus = 0
  236. }
  237. filterMap := map[string]interface{}{
  238. "source": "qmx",
  239. "product": param.Product,
  240. "remark": param.Remark,
  241. "contractStatus": contractStatus,
  242. "personnum": param.PersonNum,
  243. }
  244. return util.JysqlDB.ExecTx("创建商机管理生成订单信息和合同信息", func(tx *sql.Tx) bool {
  245. filter, _ := json.Marshal(filterMap)
  246. var insertData = map[string]interface{}{
  247. "user_phone": param.Phone,
  248. "product_type": param.ProductType,
  249. "salesperson": param.SalesPerson,
  250. "salesperson_id": param.SalesPersonId,
  251. "filter": string(filter),
  252. "order_code": code,
  253. "create_time": param.CreateTime, // 当前时间
  254. "create_person": param.CreatePerson, // 创建人
  255. "prepay_time": qutil.NowFormat(qutil.Date_Full_Layout),
  256. "order_money": param.OrderMoney, // 2021-12-29 订单优化需求改为录入字段
  257. "pay_money": param.ContractMoney,
  258. "data_spec": param.DataType,
  259. "vip_starttime": param.StartTime,
  260. "is_backstage_order": 1,
  261. "vip_endtime": param.EndTime,
  262. "order_status": param.OrderStatus,
  263. "user_id": "",
  264. "pay_time": qutil.NowFormat(qutil.Date_Full_Layout),
  265. "return_status": qutil.If(param.ContractMoney == 0, 1, 0),
  266. "refund_status": 0,
  267. "company_name": param.CompanyName,
  268. "sale_time": param.SaleTime, // 业务统计时间
  269. "commission": param.Commission, // 佣金 2021-12-29 订单优化需求新增字段
  270. "procedures_money": param.ProceduresMoney, // 手续费 2021-12-29 订单优化需求新增字段
  271. "salesChannel": param.SalesChannel,
  272. "orderChannel": param.OrderChannel,
  273. "paybackCompany": param.PaybackCompany,
  274. "audit_status": param.AuditStatus,
  275. "pay_way": param.PayType,
  276. "saleDep": param.SaleDep,
  277. }
  278. contractData := map[string]interface{}{
  279. "order_code": code,
  280. "customer_name": param.CustomerName,
  281. "contract_code": param.ContractCode,
  282. "contract_time": param.ContractTime,
  283. "contract_status": param.ContractStatus,
  284. "contract_money": param.ContractMoney,
  285. "contract_file_url": param.ContractFileUrl,
  286. "contract_archive_status": qutil.If(param.ContractStatus == 0, nil, param.ContractArchiveStatus),
  287. "contract_archive_num": qutil.If(param.ContractStatus == 0, nil, param.ContractArchiveNum),
  288. }
  289. if param.ContractArchiveTime != "" {
  290. contractData["contract_archive_time"] = param.ContractArchiveTime
  291. }
  292. if qutil.IntAll(param.ContractStatus) == 0 {
  293. delete(contractData, "contract_time")
  294. delete(contractData, "contract_code")
  295. }
  296. if param.StartTime == "" {
  297. delete(insertData, "vip_starttime")
  298. }
  299. if param.EndTime == "" {
  300. delete(insertData, "vip_endtime")
  301. }
  302. if param.ContractTime == "" {
  303. delete(contractData, "contract_time")
  304. }
  305. if param.BuySubject == "2" {
  306. insertData["buySubject"] = 2
  307. entId, err, userPositionId := AutomaticallyCreatingEnt(param.CompanyName, param.Phone, code, param.OrderStatus, param.UserId)
  308. if err != nil {
  309. log.Printf("AutomaticallyCreatingEnt 自动创建企业信息失败:code:%s,err:%s", code, err.Error())
  310. return false
  311. } else {
  312. if entId != 0 {
  313. insertData["entId"] = entId
  314. insertData["user_id"] = userPositionId
  315. param.UserId = userPositionId
  316. }
  317. }
  318. } else {
  319. insertData["buySubject"] = 1
  320. }
  321. insertData["buyCount"] = param.BuyCount
  322. //ok_1 := util.JysqlDB.InsertByTx(tx, "dataexport_order", insertData)
  323. ok1 := util.JyOrder("/CreateOrder", insertData)
  324. ok2 := util.JysqlDB.InsertByTx(tx, "contract", contractData)
  325. return ok1 != -1 && ok2 != -1
  326. })
  327. }
  328. func updateOtherOrder(oldFilter string, param *CreateOtherOrderParams, code string, returnStatus int) bool {
  329. var contractStatus int
  330. if param.ContractFileUrl != "" && len(param.ContractFileUrl) > 0 {
  331. contractStatus = 1
  332. } else {
  333. contractStatus = 0
  334. }
  335. var filterMap = map[string]interface{}{
  336. "source": "qmx",
  337. "product": param.Product,
  338. "remark": param.Remark,
  339. "contractStatus": contractStatus,
  340. }
  341. sMOpenid := ""
  342. sNickname := ""
  343. price := 0
  344. packNum := 0
  345. if param.ProductType == "广告" {
  346. filterMap["adSource"] = AdSourceMap[param.AdSource]
  347. } else if param.ProductType == "数据流量包" {
  348. userData, ok := util.MQFW.FindOne("user", map[string]interface{}{"_id": mongodb.StringTOBsonId(param.UserId)})
  349. if ok && userData != nil && len(*userData) > 0 {
  350. if (*userData)["s_m_openid"] != nil {
  351. sMOpenid = fmt.Sprint((*userData)["s_m_openid"])
  352. } else if (*userData)["s_nickname"] != nil {
  353. sNickname = fmt.Sprint((*userData)["s_nickname"])
  354. }
  355. }
  356. //根据id查询流量包价格
  357. packDetail, err := util.JyDataExportPack.GetPackDetailById(param.PackId)
  358. if err != nil {
  359. log.Println(err)
  360. }
  361. filterMap = map[string]interface{}{
  362. "pType": packDetail.PackType,
  363. "pNum": packDetail.PackNum,
  364. "validYear": packDetail.ValidYear,
  365. "price": packDetail.Price,
  366. "badge": "give",
  367. }
  368. price = packDetail.Price
  369. packNum = packDetail.PackNum
  370. }
  371. if param.DataType == "1" {
  372. param.DataType = "高级字段包"
  373. } else if param.DataType == "2" {
  374. param.DataType = "标准字段包"
  375. } else if param.DataType == "3" {
  376. param.DataType = "自定义字段包"
  377. }
  378. // 如果本来就包含人工审核字段就在filter里面赋值人工审核字段
  379. if strings.Contains(oldFilter, "人工审核") {
  380. filterMap["audit_type"] = "人工审核"
  381. }
  382. return util.JysqlDB.ExecTx("修改订单信息和创建合同信息", func(tx *sql.Tx) bool {
  383. filter, _ := json.Marshal(filterMap)
  384. insertData := map[string]interface{}{
  385. "order_code": param.OrderCode,
  386. "user_phone": param.Phone,
  387. "product_type": param.ProductType,
  388. "salesperson": param.SalesPerson,
  389. "salesperson_id": param.SalesPersonId, // 销售人员在剑鱼后台的id
  390. "filter": string(filter),
  391. "order_money": param.OrderMoney, // 2021-12-29 订单优化需求改为录入字段
  392. "pay_money": param.ContractMoney,
  393. "data_count": param.DataNum,
  394. "data_spec": param.DataType,
  395. "vip_starttime": param.StartTime,
  396. "vip_endtime": param.EndTime,
  397. "order_status": param.OrderStatus,
  398. "company_name": param.CompanyName,
  399. "sale_time": param.SaleTime, // 业务统计时间
  400. "commission": param.Commission, // 佣金 2021-12-29 订单优化需求新增字段
  401. "procedures_money": param.ProceduresMoney, // 手续费 2021-12-29 订单优化需求新增字段
  402. "salesChannel": param.SalesChannel,
  403. "orderChannel": param.OrderChannel,
  404. "paybackCompany": param.PaybackCompany,
  405. "last_update_person": param.CreatePerson,
  406. "last_update_time": qutil.NowFormat(qutil.Date_Full_Layout),
  407. }
  408. if param.BuySubject == "2" {
  409. insertData["buySubject"] = 2
  410. entId, err, userPositionId := AutomaticallyCreatingEnt(param.CompanyName, param.Phone, code, param.OrderStatus, param.UserId)
  411. if err != nil {
  412. log.Printf("AutomaticallyCreatingEnt 自动创建企业信息失败:code:%s,err:%s", code, err.Error())
  413. return false
  414. } else {
  415. if entId != 0 {
  416. insertData["entId"] = entId
  417. param.UserId = userPositionId
  418. insertData["user_id"] = userPositionId
  419. }
  420. }
  421. } else {
  422. insertData["buySubject"] = 1
  423. }
  424. insertData["buyCount"] = param.BuyCount
  425. if param.ProductType == "历史数据" {
  426. insertData["service_status"] = 1
  427. } else if param.ProductType == "数据流量包" {
  428. insertData["original_price"] = price
  429. insertData["order_money"] = 0
  430. insertData["discount_price"] = price
  431. insertData["user_id"] = param.UserId
  432. insertData["user_nickname"] = sNickname
  433. insertData["user_openid"] = sMOpenid
  434. }
  435. contractData := map[string]interface{}{
  436. "customer_name": param.CustomerName,
  437. "contract_code": param.ContractCode,
  438. "contract_time": param.ContractTime,
  439. "contract_status": param.ContractStatus,
  440. "contract_money": param.ContractMoney,
  441. "contract_file_url": param.ContractFileUrl,
  442. "contract_archive_status": qutil.If(param.ContractStatus == 0, nil, param.ContractArchiveStatus),
  443. "contract_archive_num": qutil.If(param.ContractStatus == 0, nil, param.ContractArchiveNum),
  444. }
  445. if param.ContractArchiveTime != "" {
  446. contractData["contract_archive_time"] = param.ContractArchiveTime
  447. }
  448. if param.ProductType == "广告" || param.ProductType == "线下课程培训" || param.ProductType == "课程分销" ||
  449. param.ProductType == "标书制作" || param.ProductType == "打赏" ||
  450. param.ProductType == "ISO体系认证" || param.ProductType == "3A信用认证" || param.ProductType == "权益码" {
  451. delete(insertData, "data_count")
  452. delete(insertData, "data_spec")
  453. }
  454. if qutil.IntAll(param.ContractStatus) == 0 {
  455. delete(contractData, "contract_time")
  456. delete(contractData, "contract_code")
  457. }
  458. if param.StartTime == "" {
  459. delete(insertData, "vip_starttime")
  460. }
  461. if param.EndTime == "" {
  462. delete(insertData, "vip_endtime")
  463. }
  464. if param.ContractTime == "" {
  465. delete(contractData, "contract_time")
  466. }
  467. //订单中台
  468. if param.ProductType == "数据流量包" {
  469. insertData["return_status"] = 1
  470. } else {
  471. insertData["return_status"] = returnStatus
  472. }
  473. ok_1 := util.JyOrder("/UpdateOrder", insertData)
  474. //资源中台
  475. ok_2 := false
  476. //ok_3 := true
  477. if param.ProductType != "数据流量包" {
  478. ok_2 = util.JysqlDB.UpdateByTx(tx, "contract", map[string]interface{}{
  479. "order_code": code,
  480. }, contractData)
  481. } else {
  482. //待转化为时间戳的字符串 注意 这里的小时和分钟还要秒必须写 因为是跟着模板走的 修改模板的话也可以不写
  483. //转化为时间戳 类型是int64
  484. purchaseData := map[string]interface{}{
  485. "accountId": param.UserId,
  486. "number": packNum,
  487. "spec": "条",
  488. "appId": "10000",
  489. "endTime": param.EndTime[0:10],
  490. "remarks": string(filter),
  491. }
  492. if param.DataType == "高级字段包" {
  493. purchaseData["name"] = "数据流包"
  494. purchaseData["resourceType"] = "高级字段包"
  495. } else {
  496. purchaseData["name"] = "数据流包"
  497. purchaseData["resourceType"] = "标准字段包"
  498. }
  499. //ok_3 = util.PurchaseUserBalance(purchaseData)
  500. }
  501. //return ok_1 != 0 && ok_2 && ok_3 != false
  502. return ok_1 != 0 && ok_2
  503. })
  504. }
  505. func updateEntnicheOrder(oldFilter string, param *CreateOtherOrderParams, code string, returnStatus int) bool {
  506. var contractStatus int
  507. if param.ContractFileUrl != "" && len(param.ContractFileUrl) > 0 {
  508. contractStatus = 1
  509. } else {
  510. contractStatus = 0
  511. }
  512. filter_map := map[string]interface{}{
  513. "source": "qmx",
  514. "product": param.Product,
  515. "remark": param.Remark,
  516. "contractStatus": contractStatus,
  517. "personnum": param.PersonNum,
  518. }
  519. // 如果本来就包含人工审核字段就在filter里面赋值人工审核字段
  520. if strings.Contains(oldFilter, "人工审核") {
  521. filter_map["audit_type"] = "人工审核"
  522. }
  523. return util.JysqlDB.ExecTx("创建商机管理生成订单信息和合同信息", func(tx *sql.Tx) bool {
  524. filter, _ := json.Marshal(filter_map)
  525. insertData := map[string]interface{}{
  526. "user_phone": param.Phone,
  527. "product_type": param.ProductType,
  528. "salesperson": param.SalesPerson,
  529. "salesperson_id": param.SalesPersonId,
  530. "filter": string(filter),
  531. "order_code": code,
  532. "prepay_time": qutil.NowFormat(qutil.Date_Full_Layout),
  533. "order_money": param.OrderMoney, // 2021-12-29 订单优化需求改为录入字段
  534. "pay_money": param.ContractMoney,
  535. "data_spec": param.DataType,
  536. "vip_starttime": param.StartTime,
  537. "vip_endtime": param.EndTime,
  538. "order_status": param.OrderStatus,
  539. "return_status": returnStatus,
  540. "company_name": param.CompanyName,
  541. "sale_time": param.SaleTime, // 业务统计时间
  542. "commission": param.Commission, // 佣金 2021-12-29 订单优化需求新增字段
  543. "procedures_money": param.ProceduresMoney, // 手续费 2021-12-29 订单优化需求新增字段
  544. "salesChannel": param.SalesChannel,
  545. "orderChannel": param.OrderChannel,
  546. "paybackCompany": param.PaybackCompany,
  547. "last_update_person": param.CreatePerson,
  548. "last_update_time": qutil.NowFormat(qutil.Date_Full_Layout),
  549. }
  550. contractData := map[string]interface{}{
  551. "customer_name": param.CustomerName,
  552. "contract_code": param.ContractCode,
  553. "contract_time": param.ContractTime,
  554. "contract_status": param.ContractStatus,
  555. "contract_money": param.ContractMoney,
  556. "contract_file_url": param.ContractFileUrl,
  557. "contract_archive_status": qutil.If(param.ContractStatus == 0, nil, param.ContractArchiveStatus),
  558. "contract_archive_num": qutil.If(param.ContractStatus == 0, nil, param.ContractArchiveNum),
  559. }
  560. if param.ContractArchiveTime != "" {
  561. contractData["contract_archive_time"] = param.ContractArchiveTime
  562. }
  563. if qutil.IntAll(param.ContractStatus) == 0 {
  564. delete(contractData, "contract_time")
  565. delete(contractData, "contract_code")
  566. }
  567. if param.StartTime == "" {
  568. delete(insertData, "vip_starttime")
  569. }
  570. if param.EndTime == "" {
  571. delete(insertData, "vip_endtime")
  572. }
  573. if param.ContractTime == "" {
  574. delete(contractData, "contract_time")
  575. }
  576. if param.BuySubject == "2" {
  577. insertData["buySubject"] = 2
  578. entId, err, userPositionId := AutomaticallyCreatingEnt(param.CompanyName, param.Phone, code, param.OrderStatus, param.UserId)
  579. if err != nil {
  580. log.Printf("AutomaticallyCreatingEnt 自动创建企业信息失败:code:%s,err:%s", code, err.Error())
  581. return false
  582. } else {
  583. if entId != 0 {
  584. insertData["entId"] = entId
  585. param.UserId = userPositionId
  586. insertData["user_id"] = userPositionId
  587. }
  588. }
  589. } else {
  590. insertData["buySubject"] = 1
  591. }
  592. insertData["buyCount"] = param.BuyCount
  593. ok_1 := util.JyOrder("/UpdateOrder", insertData)
  594. ok_2 := util.JysqlDB.UpdateByTx(tx, "contract", map[string]interface{}{
  595. "order_code": code,
  596. }, contractData)
  597. return ok_1 != -1 && ok_2
  598. })
  599. }
  600. // 创建VIP订单
  601. func createVipOrder(param *CreateOtherOrderParams, code string) (bool, string) {
  602. var contractStatus int
  603. if param.ContractFileUrl != "" && len(param.ContractFileUrl) > 0 {
  604. contractStatus = 1
  605. } else {
  606. contractStatus = 0
  607. }
  608. month := 0
  609. if param.VipStartTime != "" {
  610. if param.CycleUnit == 1 {
  611. month = param.CycleCount * 12
  612. } else if param.CycleUnit == 2 {
  613. month = param.CycleCount
  614. } else if param.CycleUnit == 4 {
  615. month = param.CycleCount * 3
  616. }
  617. }
  618. //处理购买省份
  619. buyArea := map[string]interface{}{}
  620. if !strings.Contains(param.Area, "全国") {
  621. arr := strings.Split(param.Area, ",")
  622. for _, v := range arr {
  623. buyArea[v] = []interface{}{}
  624. }
  625. }
  626. var endTime time.Time
  627. vipStartTime, _ := time.ParseInLocation(qutil.Date_Short_Layout, param.VipStartTime, time.Local)
  628. if param.VipType == 1 {
  629. d, _ := time.ParseDuration("-24h")
  630. vipStartTime = vipStartTime.Add(d)
  631. }
  632. if param.CycleUnit == 3 {
  633. _endTime := vipStartTime.AddDate(0, 0, param.CycleCount)
  634. t := _endTime.Format(qutil.Date_Short_Layout) + " 23:59:59"
  635. endTime, _ = time.ParseInLocation(qutil.Date_Full_Layout, t, time.Local)
  636. } else {
  637. endTime = GetDATE1(month, vipStartTime.Unix())
  638. }
  639. //开通超级订阅权限
  640. areaCount := 0
  641. if strings.Contains(param.Area, "全国") {
  642. areaCount = -1
  643. } else {
  644. areaCount = len(buyArea)
  645. }
  646. dateType := 1
  647. if param.VipStartTime != "" {
  648. if vipStartTime.Unix() > time.Now().Unix() {
  649. dateType = 2
  650. }
  651. }
  652. //新购买简单详情
  653. newBuySet := SubvipBuySet{
  654. Upgrade: 1,
  655. AreaCount: areaCount,
  656. NewCitys: []int{},
  657. BuyerclassCount: -1,
  658. }
  659. vms := VipSimpleMsg{
  660. Area: &buyArea,
  661. Industry: []string{},
  662. Cyclecount: param.CycleCount,
  663. Cycleunit: param.CycleUnit,
  664. NewBuyset: &newBuySet,
  665. OrderType: 1,
  666. DisWord: "",
  667. ContractStatus: contractStatus,
  668. Source: "qmx",
  669. Remark: param.Remark,
  670. }
  671. if param.OrderChannel == "d03" {
  672. vms.Source = ""
  673. }
  674. if param.Badge != "" {
  675. vms.Badge = param.Badge
  676. }
  677. userData := &map[string]interface{}{}
  678. ok := false
  679. if param.UserId == "" {
  680. userData, ok = util.MQFW.FindOne("user", map[string]interface{}{"s_phone": param.Phone})
  681. } else {
  682. userData, ok = util.MQFW.FindOne("user", map[string]interface{}{"_id": mongodb.StringTOBsonId(param.UserId)})
  683. }
  684. userId := ""
  685. var vet string
  686. if ok && userData != nil && len(*userData) > 0 {
  687. userId = mongodb.BsonIdToSId((*userData)["_id"])
  688. // st := qutil.Int64All((*userData)["l_vip_starttime"])
  689. et := qutil.Int64All((*userData)["l_vip_endtime"])
  690. // vst = qutil.FormatDateByInt64(&st, qutil.Date_Full_Layout)
  691. vet = qutil.FormatDateByInt64(&et, qutil.Date_Full_Layout)
  692. if param.VipType == 1 {
  693. vipInfo := qutil.ObjToMap((*userData)["o_vipjy"])
  694. buySet := qutil.ObjToMap((*vipInfo)["o_buyset"])
  695. areaCount = qutil.IntAll((*buySet)["areacount"])
  696. // 超级订阅续费
  697. vms.NewBuyset.AreaCount = areaCount
  698. }
  699. } else {
  700. userDatas := &map[string]interface{}{}
  701. oks := false
  702. if param.UserId == "" {
  703. userDatas, oks = util.MQFW.FindOne("user", map[string]interface{}{"s_m_phone": param.Phone})
  704. } else {
  705. userDatas, oks = util.MQFW.FindOne("user", map[string]interface{}{"_id": mongodb.StringTOBsonId(param.UserId)})
  706. }
  707. if oks && userDatas != nil && len(*userDatas) > 0 {
  708. userId = mongodb.BsonIdToSId((*userDatas)["_id"])
  709. // st := qutil.Int64All((*userDatas)["l_vip_starttime"])
  710. et := qutil.Int64All((*userDatas)["l_vip_endtime"])
  711. // vst = qutil.FormatDateByInt64(&st, qutil.Date_Full_Layout)
  712. vet = qutil.FormatDateByInt64(&et, qutil.Date_Full_Layout)
  713. if param.VipType == 1 {
  714. vipInfo := qutil.ObjToMap((*userDatas)["o_vipjy"])
  715. buySet := qutil.ObjToMap((*vipInfo)["o_buyset"])
  716. areaCount = qutil.IntAll((*buySet)["areacount"])
  717. // 超级订阅续费
  718. vms.NewBuyset.AreaCount = areaCount
  719. }
  720. } else {
  721. if param.VipType == 0 {
  722. now := time.Now()
  723. data := map[string]interface{}{
  724. "i_appid": 2,
  725. "s_phone": param.Phone,
  726. "s_password": "",
  727. "l_registedate": now.Unix(),
  728. "i_ts_guide": 2,
  729. "o_jy": map[string]interface{}{
  730. "i_apppush": 1,
  731. "i_ratemode": 2,
  732. "l_modifydate": now.Unix(),
  733. },
  734. "s_regsource": "qmx_admin",
  735. }
  736. _id := util.MQFW.Save("user", data)
  737. if _id != "" {
  738. userId = _id
  739. formdata := map[string]interface{}{
  740. "appid": config.SysConfigs.AppId,
  741. "phone": param.Phone,
  742. "password": "",
  743. }
  744. if !strings.HasPrefix(param.Phone, "9") {
  745. ck := &http.Cookie{}
  746. usercenter.AddBaseUser(*util.MQFW, config.SysConfigs.UserCenterUrl, _id, formdata, ck)
  747. }
  748. }
  749. }
  750. }
  751. }
  752. // payWay := "wx_app"
  753. // // returnStatus := 1
  754. // if param.ChargeMode == 1 {
  755. // // returnStatus = 0
  756. // if param.Pay_way == "" {
  757. // payWay = "transferAccounts"
  758. // }
  759. // }
  760. // // if param.ReturnStatus == 1 {
  761. // // returnStatus = 1
  762. // // }
  763. // if param.Badge != "" {
  764. // payWay = ""
  765. // }
  766. var (
  767. entId int
  768. err error
  769. userPositionId string
  770. )
  771. if param.BuySubject == "2" {
  772. entId, err, userPositionId = AutomaticallyCreatingEnt(param.CompanyName, param.Phone, code, param.OrderStatus, userId)
  773. if err != nil {
  774. log.Printf("AutomaticallyCreatingEnt 自动创建企业信息失败:code:%s,err:%s", code, err.Error())
  775. return false, "自动创建企业信息失败"
  776. }
  777. }
  778. b := util.JysqlDB.ExecTx("创建超级订阅生成订单信息和合同信息", func(tx *sql.Tx) bool {
  779. filter, _ := json.Marshal(vms)
  780. if param.Badge != "" {
  781. param.ContractMoney = 0
  782. }
  783. insertData := map[string]interface{}{
  784. "user_phone": param.Phone,
  785. "product_type": param.ProductType,
  786. "salesperson": param.SalesPerson,
  787. "salesperson_id": param.SalesPersonId,
  788. "filter": string(filter),
  789. "order_code": code,
  790. "create_time": param.CreateTime, // 当前时间
  791. "prepay_time": qutil.NowFormat(qutil.Date_Full_Layout),
  792. "order_money": param.OrderMoney, // 2021-12-29 订单优化需求改为录入字段
  793. "pay_money": param.ContractMoney,
  794. "data_spec": param.DataType, //数据规格 1-标准字段包 2-高级字段包
  795. "vip_starttime": param.VipStartTime + " 00:00:00",
  796. "vip_endtime": qutil.FormatDate(&endTime, qutil.Date_Full_Layout),
  797. "is_backstage_order": 1,
  798. "order_status": param.OrderStatus,
  799. "user_id": userId,
  800. "out_trade_no": code,
  801. "return_status": qutil.If(param.ContractMoney == 0, 1, 0),
  802. "refund_status": 0,
  803. "company_name": param.CompanyName,
  804. "billingMode": param.ChargeMode, //计费模式 0 免费 1 收费
  805. "sale_time": qutil.If(param.SaleTime == "", nil, param.SaleTime), // 业务统计时间
  806. "commission": param.Commission, // 佣金 2021-12-29 订单优化需求新增字段
  807. "procedures_money": param.ProceduresMoney, // 手续费 2021-12-29 订单优化需求新增字段
  808. "distribution_channel": param.SalesChannel,
  809. "order_channel": param.OrderChannel,
  810. "signing_subject": param.PaybackCompany,
  811. "create_person": param.CreatePerson,
  812. "audit_status": param.AuditStatus,
  813. "pay_way": param.PayType,
  814. "saleDep": param.SaleDep,
  815. }
  816. if param.Pay_time != "" {
  817. insertData["pay_time"] = param.Pay_time
  818. }
  819. if param.OrderMoney != 0 {
  820. insertData["order_money"] = param.OrderMoney
  821. }
  822. if param.DisCountPrice != 0 {
  823. insertData["discount_price"] = param.DisCountPrice
  824. }
  825. if param.VipType == 1 {
  826. insertData["vip_type"] = 1
  827. } else if param.VipType == 2 {
  828. insertData["vip_type"] = 2
  829. insertData["vip_starttime"] = qutil.NowFormat(qutil.Date_Full_Layout)
  830. insertData["vip_endtime"] = vet
  831. }
  832. if param.Badge != "" {
  833. insertData["original_price"] = param.DisCountPrice
  834. insertData["return_status"] = 1
  835. insertData["vip_type"] = 0
  836. }
  837. if param.OrderChannel == "d03" {
  838. insertData["original_price"] = param.OrderMoney
  839. delete(insertData, "return_status")
  840. }
  841. contractData := map[string]interface{}{
  842. "order_code": code,
  843. "customer_name": param.CustomerName,
  844. "contract_code": param.ContractCode,
  845. "contract_time": param.ContractTime,
  846. "contract_status": param.ContractStatus,
  847. "contract_money": param.ContractMoney,
  848. "contract_file_url": param.ContractFileUrl,
  849. "contract_archive_status": qutil.If(param.ContractStatus == 0, nil, param.ContractArchiveStatus),
  850. "contract_archive_num": qutil.If(param.ContractStatus == 0, nil, param.ContractArchiveNum),
  851. }
  852. if param.ContractArchiveTime != "" {
  853. contractData["contract_archive_time"] = param.ContractArchiveTime
  854. }
  855. if qutil.IntAll(param.ContractStatus) == 0 {
  856. delete(contractData, "contract_time")
  857. delete(contractData, "contract_code")
  858. }
  859. if param.ContractTime == "" {
  860. delete(contractData, "contract_time")
  861. }
  862. if param.BuySubject == "2" {
  863. insertData["buy_subject"] = 2
  864. if entId != 0 {
  865. insertData["ent_id"] = entId
  866. insertData["user_id"] = userPositionId
  867. }
  868. } else {
  869. insertData["buy_subject"] = 1
  870. }
  871. insertData["buy_count"] = param.BuyCount
  872. ok1 := util.JysqlDB.InsertByTx(tx, "dataexport_order", insertData)
  873. ok2 := util.JysqlDB.InsertByTx(tx, "contract", contractData)
  874. return ok1 != 0 && ok2 != -1
  875. })
  876. if b {
  877. // 销售渠道为内部员工赠送及豁免用户赠送时更新用户人群分类
  878. if param.SalesChannel == util.SaleChannel052 || param.SalesChannel == util.SaleChannel053 {
  879. UpdateUserType(param.SalesChannel, userId)
  880. }
  881. if param.BuySubject == "2" {
  882. var (
  883. entService bool
  884. userCount int
  885. ss int64
  886. )
  887. if strings.Contains(param.VipStartTime, "2099") {
  888. ss = 4070880000
  889. }
  890. _d := util.JysqlDB.FindOne("dataexport_order", map[string]interface{}{"order_code": code}, "id,ent_id", "")
  891. if _d != nil && len(*_d) > 0 {
  892. entService, userCount = EntServiceOpen(qutil.IntAll((*_d)["ent_id"]), param.Phone, param.ProductType, ss)
  893. orderId := qutil.IntAll((*_d)["id"])
  894. if qutil.IntAll((*_d)["ent_id"]) != 0 && param.Open && param.VipStartTime != "2099-01-01" && param.BuyCount > 0 {
  895. regRuler := "^1[3456789]{1}\\d{9}$"
  896. reg := regexp.MustCompile(regRuler)
  897. if param.OrderStatus == 1 && reg.MatchString(param.Phone) && param.CompanyName != "" {
  898. err := EntLicense(qutil.IntAll((*_d)["ent_id"]), param.BuyCount, newBuySet.AreaCount, orderId, userCount, param.ProductType, param.VipStartTime+" 00:00:00", qutil.FormatDate(&endTime, qutil.Date_Full_Layout), param.Phone)
  899. if err != nil {
  900. log.Printf("EntLicense 创建企业授权信息失败:code:%s,err:%s", code, err.Error())
  901. }
  902. }
  903. }
  904. }
  905. if !entService {
  906. ClearBigVipUserPower(userId)
  907. return true, ""
  908. }
  909. }
  910. // 不开通权限、执行到这结束
  911. if param.Open == false {
  912. return true, ""
  913. }
  914. //0 购买 1 续费 2 升级
  915. if param.VipType == 0 {
  916. //为用户开通超级订阅权限
  917. //是否开通超级订阅 -1 试用到期 -2 正式到期 1 试用 2 开通
  918. isTrial := false
  919. if param.VipStartTime == "2099-01-01" || dateType == 2 {
  920. isTrial = true
  921. }
  922. isOk := false
  923. set := map[string]interface{}{
  924. "o_vipjy.i_trial": -1, //已激活试用
  925. "o_vipjy.o_area": buyArea, //设置地区
  926. "o_vipjy.o_buyset": newBuySet, //购买内容 城市、省份、行业数量
  927. "l_vip_starttime": vipStartTime.Unix(), //开始时间
  928. "l_vip_endtime": endTime.Unix(), //结束时间
  929. "i_vip_status": qutil.If(isTrial, -2, 2), //1试用 2正式 -2 试用到期
  930. "i_vip_expire_tip": 0, //消息提示初始化
  931. "o_vipjy.a_buyerclass": []interface{}{}, //设置行业
  932. }
  933. if param.BuySubject == "1" {
  934. isOk = StartSubVip(set, userId)
  935. } else {
  936. isOk = UpdateRule(entId, map[string]interface{}{
  937. "$set": set,
  938. }, param.Phone)
  939. }
  940. return isOk, qutil.FormatDate(&endTime, qutil.Date_Full_Layout)
  941. }
  942. // 续费和升级 我的订单-创建订单只生成订单信息不开通权益
  943. if !param.Open {
  944. return true, qutil.FormatDate(&endTime, qutil.Date_Full_Layout)
  945. }
  946. if param.VipType == 1 { //续费
  947. set := map[string]interface{}{
  948. "l_vip_endtime": endTime.Unix(),
  949. "i_vip_expire_tip": 0,
  950. "i_vip_status": 2,
  951. }
  952. if param.BuySubject != "2" {
  953. if !util.MQFW.UpdateById("user", userId,
  954. bson.M{"$set": set}) {
  955. log.Printf("%s更新结束%d日期出错\n", userId, endTime.Unix())
  956. return false, ""
  957. }
  958. }
  959. if !util.MQFW.UpdateById("user", userId,
  960. bson.M{"$set": set}) {
  961. log.Printf("%s更新结束%d日期出错\n", userId, endTime.Unix())
  962. return false, ""
  963. }
  964. return true, qutil.FormatDate(&endTime, qutil.Date_Full_Layout)
  965. } else { //2 升级
  966. //失效未执行续费
  967. if !util.MQFW.Update("vip_upgrade",
  968. &map[string]interface{}{"s_userid": userId, "i_isvalid": 0},
  969. &map[string]interface{}{
  970. "$set": map[string]interface{}{
  971. "i_isvalid": 1,
  972. },
  973. }, false, true) {
  974. log.Printf("%s vip_upgrade 更新失败 时间:%d\n", userId, endTime.Unix())
  975. return false, ""
  976. }
  977. updata := map[string]interface{}{
  978. "o_vipjy.o_buyset": newBuySet,
  979. "i_vip_expire_tip": 0,
  980. "i_vip_status": 2,
  981. }
  982. if vms.Area != nil {
  983. updata["o_vipjy.o_area"] = vms.Area //设置地区
  984. }
  985. if vms.Industry != nil {
  986. updata["o_vipjy.a_buyerclass"] = vms.Industry //设置行业
  987. }
  988. isOk := true
  989. if param.BuySubject != "2" {
  990. isOk = util.MQFW.UpdateById("user", userId, map[string]interface{}{
  991. "$set": updata,
  992. })
  993. }
  994. if !isOk {
  995. log.Printf("%s更新用户出错 %+v\n", userId, updata)
  996. return false, ""
  997. } else {
  998. go ClearBigVipUserPower(userId)
  999. return true, qutil.FormatDate(&endTime, qutil.Date_Full_Layout)
  1000. }
  1001. }
  1002. }
  1003. return false, ""
  1004. }
  1005. func updateVipOrder(oldFilter string, param *CreateOtherOrderParams, code string, returnStatus int) (bool, string) {
  1006. var contractStatus int
  1007. if param.ContractFileUrl != "" && len(param.ContractFileUrl) > 0 {
  1008. contractStatus = 1
  1009. } else {
  1010. contractStatus = 0
  1011. }
  1012. month := 0
  1013. if param.VipStartTime != "" {
  1014. if param.CycleUnit == 1 {
  1015. month = param.CycleCount * 12
  1016. } else if param.CycleUnit == 2 {
  1017. month = param.CycleCount
  1018. } else if param.CycleUnit == 4 {
  1019. month = param.CycleCount * 3
  1020. }
  1021. }
  1022. //处理购买省份
  1023. buyArea := map[string]interface{}{}
  1024. if !strings.Contains(param.Area, "全国") {
  1025. arr := strings.Split(param.Area, ",")
  1026. for _, v := range arr {
  1027. buyArea[v] = []interface{}{}
  1028. }
  1029. }
  1030. var endTime time.Time
  1031. vipStartTime, _ := time.ParseInLocation(qutil.Date_Short_Layout, param.VipStartTime, time.Local)
  1032. if param.VipType == 1 {
  1033. d, _ := time.ParseDuration("-24h")
  1034. vipStartTime = vipStartTime.Add(d)
  1035. }
  1036. if param.CycleUnit == 3 {
  1037. _endTime := vipStartTime.AddDate(0, 0, param.CycleCount)
  1038. t := _endTime.Format(qutil.Date_Short_Layout) + " 23:59:59"
  1039. endTime, _ = time.ParseInLocation(qutil.Date_Full_Layout, t, time.Local)
  1040. } else {
  1041. endTime = GetDATE1(month, vipStartTime.Unix())
  1042. }
  1043. //开通超级订阅权限
  1044. areaCount := 0
  1045. if strings.Contains(param.Area, "全国") {
  1046. areaCount = -1
  1047. } else {
  1048. areaCount = len(buyArea)
  1049. }
  1050. dateType := 1
  1051. if param.VipStartTime != "" {
  1052. if vipStartTime.Unix() > time.Now().Unix() {
  1053. dateType = 2
  1054. }
  1055. }
  1056. //新购买简单详情
  1057. newBuySet := SubvipBuySet{
  1058. Upgrade: 1,
  1059. AreaCount: areaCount,
  1060. NewCitys: []int{},
  1061. BuyerclassCount: -1,
  1062. }
  1063. vms := VipSimpleMsg{
  1064. Area: &buyArea,
  1065. Industry: []string{},
  1066. Cyclecount: param.CycleCount,
  1067. Cycleunit: param.CycleUnit,
  1068. NewBuyset: &newBuySet,
  1069. OrderType: 1,
  1070. DisWord: "",
  1071. ContractStatus: contractStatus,
  1072. Source: "qmx",
  1073. Remark: param.Remark,
  1074. }
  1075. if param.Badge != "" {
  1076. vms.Badge = param.Badge
  1077. }
  1078. var vet string
  1079. userId := ""
  1080. userData := &map[string]interface{}{}
  1081. ok := false
  1082. if param.UserId == "" {
  1083. userData, ok = util.MQFW.FindOne("user", map[string]interface{}{"s_phone": param.Phone})
  1084. } else {
  1085. userData, ok = util.MQFW.FindOne("user", map[string]interface{}{"_id": mongodb.StringTOBsonId(param.UserId)})
  1086. }
  1087. if ok && userData != nil && len(*userData) > 0 {
  1088. userId = mongodb.BsonIdToSId((*userData)["_id"])
  1089. // st := qutil.Int64All((*userData)["l_vip_starttime"])
  1090. et := qutil.Int64All((*userData)["l_vip_endtime"])
  1091. // vst = qutil.FormatDateByInt64(&st, qutil.Date_Full_Layout)
  1092. vet = qutil.FormatDateByInt64(&et, qutil.Date_Full_Layout)
  1093. if param.VipType == 1 {
  1094. vipInfo := qutil.ObjToMap((*userData)["o_vipjy"])
  1095. buySet := qutil.ObjToMap((*vipInfo)["o_buyset"])
  1096. areaCount = qutil.IntAll((*buySet)["areacount"])
  1097. // 超级订阅续费
  1098. vms.NewBuyset.AreaCount = areaCount
  1099. }
  1100. } else {
  1101. userDatas := &map[string]interface{}{}
  1102. oks := false
  1103. if param.UserId == "" {
  1104. userDatas, oks = util.MQFW.FindOne("user", map[string]interface{}{"s_m_phone": param.Phone})
  1105. } else {
  1106. userDatas, oks = util.MQFW.FindOne("user", map[string]interface{}{"_id": mongodb.StringTOBsonId(param.UserId)})
  1107. }
  1108. if oks && userDatas != nil && len(*userDatas) > 0 {
  1109. userId = mongodb.BsonIdToSId((*userDatas)["_id"])
  1110. // st := qutil.Int64All((*userDatas)["l_vip_starttime"])
  1111. et := qutil.Int64All((*userDatas)["l_vip_endtime"])
  1112. // vst = qutil.FormatDateByInt64(&st, qutil.Date_Full_Layout)
  1113. vet = qutil.FormatDateByInt64(&et, qutil.Date_Full_Layout)
  1114. if param.VipType == 1 {
  1115. vipInfo := qutil.ObjToMap((*userDatas)["o_vipjy"])
  1116. buySet := qutil.ObjToMap((*vipInfo)["o_buyset"])
  1117. areaCount = qutil.IntAll((*buySet)["areacount"])
  1118. // 超级订阅续费
  1119. vms.NewBuyset.AreaCount = areaCount
  1120. }
  1121. }
  1122. }
  1123. var (
  1124. entId int
  1125. err error
  1126. userPositionId string
  1127. )
  1128. if param.BuySubject == "2" {
  1129. entId, err, userPositionId = AutomaticallyCreatingEnt(param.CompanyName, param.Phone, code, param.OrderStatus, userId)
  1130. if err != nil {
  1131. log.Printf("AutomaticallyCreatingEnt 自动创建企业信息失败:code:%s,err:%s", code, err.Error())
  1132. return false, "自动创建企业信息失败"
  1133. }
  1134. userId = userPositionId
  1135. }
  1136. // 如果本来就包含人工审核字段就在filter里面赋值人工审核字段
  1137. if strings.Contains(oldFilter, "人工审核") {
  1138. vms.AuditType = "人工审核"
  1139. }
  1140. b := util.JysqlDB.ExecTx("修改订单信息和合同信息", func(tx *sql.Tx) bool {
  1141. filter, _ := json.Marshal(vms)
  1142. if param.Badge != "" {
  1143. param.ContractMoney = 0
  1144. }
  1145. insertData := map[string]interface{}{
  1146. "user_phone": param.Phone,
  1147. "product_type": param.ProductType,
  1148. "salesperson": param.SalesPerson,
  1149. "salesperson_id": param.SalesPersonId,
  1150. "filter": string(filter),
  1151. "create_person": param.CreatePerson, // 创建人
  1152. "prepay_time": qutil.NowFormat(qutil.Date_Full_Layout),
  1153. "order_money": param.OrderMoney, // 2021-12-29 订单优化需求改为录入字段
  1154. "pay_money": param.ContractMoney,
  1155. "data_spec": param.DataType, //数据规格 1-标准字段包 2-高级字段包
  1156. "vip_starttime": param.VipStartTime,
  1157. "vip_endtime": qutil.FormatDate(&endTime, qutil.Date_Full_Layout),
  1158. "order_status": param.OrderStatus,
  1159. "user_id": userId,
  1160. "out_trade_no": code,
  1161. "return_status": returnStatus,
  1162. "company_name": param.CompanyName,
  1163. "billingMode": param.ChargeMode, //计费模式 0 免费 1 收费
  1164. "sale_time": qutil.If(param.SaleTime == "", nil, param.SaleTime), // 业务统计时间
  1165. "commission": param.Commission, // 佣金 2021-12-29 订单优化需求新增字段
  1166. "procedures_money": param.ProceduresMoney, // 手续费 2021-12-29 订单优化需求新增字段
  1167. "distribution_channel": param.SalesChannel,
  1168. "order_channel": param.OrderChannel,
  1169. "signing_subject": param.PaybackCompany,
  1170. "last_update_person": param.CreatePerson,
  1171. "last_update_time": qutil.NowFormat(qutil.Date_Full_Layout),
  1172. }
  1173. if param.Pay_time != "" {
  1174. insertData["pay_time"] = param.Pay_time
  1175. }
  1176. if param.OrderMoney != 0 {
  1177. insertData["order_money"] = param.OrderMoney
  1178. }
  1179. if param.DisCountPrice != 0 {
  1180. insertData["discount_price"] = param.DisCountPrice
  1181. }
  1182. if param.VipType == 1 {
  1183. insertData["vip_type"] = 1
  1184. } else if param.VipType == 2 {
  1185. insertData["vip_type"] = 2
  1186. // insertData["vip_starttime"] = vst
  1187. insertData["vip_starttime"] = param.CreateTime
  1188. insertData["vip_endtime"] = vet
  1189. }
  1190. if param.Badge != "" {
  1191. insertData["original_price"] = param.DisCountPrice
  1192. insertData["return_status"] = 1
  1193. insertData["vip_type"] = 0
  1194. }
  1195. contractData := map[string]interface{}{
  1196. "customer_name": param.CustomerName,
  1197. "contract_code": param.ContractCode,
  1198. "contract_time": param.ContractTime,
  1199. "contract_status": param.ContractStatus,
  1200. "contract_money": param.ContractMoney,
  1201. "contract_file_url": param.ContractFileUrl,
  1202. "contract_archive_status": qutil.If(param.ContractStatus == 0, nil, param.ContractArchiveStatus),
  1203. "contract_archive_num": qutil.If(param.ContractStatus == 0, nil, param.ContractArchiveNum),
  1204. }
  1205. if param.ContractArchiveTime != "" {
  1206. contractData["contract_archive_time"] = param.ContractArchiveTime
  1207. }
  1208. if qutil.IntAll(param.ContractStatus) == 0 {
  1209. delete(contractData, "contract_time")
  1210. delete(contractData, "contract_code")
  1211. }
  1212. if param.ContractTime == "" {
  1213. delete(contractData, "contract_time")
  1214. }
  1215. if param.BuySubject == "2" {
  1216. if entId != 0 {
  1217. insertData["ent_id"] = entId
  1218. insertData["user_id"] = userPositionId
  1219. }
  1220. insertData["buy_subject"] = 2
  1221. } else {
  1222. insertData["buy_subject"] = 1
  1223. }
  1224. insertData["buy_count"] = param.BuyCount
  1225. ok1 := util.JysqlDB.UpdateByTx(tx, "dataexport_order", map[string]interface{}{
  1226. "order_code": code,
  1227. }, insertData)
  1228. ok2 := util.JysqlDB.UpdateByTx(tx, "contract", map[string]interface{}{
  1229. "order_code": code,
  1230. }, contractData)
  1231. return ok1 && ok2
  1232. })
  1233. if b {
  1234. //企业主体不开通权益
  1235. if param.BuySubject == "2" {
  1236. var (
  1237. userCount int
  1238. entService bool
  1239. ss int64
  1240. )
  1241. if strings.Contains(param.StartTime, "2099") {
  1242. ss = 4070880000
  1243. }
  1244. _d := util.JysqlDB.FindOne("dataexport_order", map[string]interface{}{"order_code": code}, "id,ent_id", "")
  1245. if _d != nil && len(*_d) > 0 {
  1246. entService, userCount = EntServiceOpen(qutil.IntAll((*_d)["ent_id"]), param.Phone, param.ProductType, ss)
  1247. orderId := qutil.IntAll((*_d)["id"])
  1248. if qutil.IntAll((*_d)["ent_id"]) != 0 && param.VipStartTime != "2099-01-01" && param.BuyCount > 0 {
  1249. regRuler := "^1[3456789]{1}\\d{9}$"
  1250. reg := regexp.MustCompile(regRuler)
  1251. if param.OrderStatus == 1 && reg.MatchString(param.Phone) && param.CompanyName != "" {
  1252. err := EntLicense(qutil.IntAll((*_d)["ent_id"]), param.BuyCount, newBuySet.AreaCount, orderId, userCount, param.ProductType, param.VipStartTime, qutil.FormatDate(&endTime, qutil.Date_Full_Layout), param.Phone)
  1253. if err != nil {
  1254. log.Printf("EntLicense 创建企业授权信息失败:code:%s,err:%s", code, err.Error())
  1255. }
  1256. }
  1257. }
  1258. }
  1259. if !entService {
  1260. ClearBigVipUserPower(userId)
  1261. return true, ""
  1262. }
  1263. }
  1264. //0 购买 1 续费 2 升级
  1265. if param.VipType == 0 {
  1266. if param.OrderStatus == -2 {
  1267. set := map[string]interface{}{
  1268. "o_vipjy.i_trial": -1, //已激活试用
  1269. "o_vipjy.o_area": "", //设置地区
  1270. "o_vipjy.o_buyset": "", //购买内容 城市、省份、行业数量
  1271. "l_vip_starttime": time.Now().Unix(), //开始时间
  1272. "l_vip_endtime": time.Now().Unix(), //结束时间
  1273. "i_vip_status": 0, //1试用 2正式
  1274. "i_vip_expire_tip": 0, //消息提示初始化
  1275. "o_vipjy.a_buyerclass": []interface{}{}, //设置行业
  1276. }
  1277. if param.BuySubject == "1" {
  1278. util.MQFW.UpdateById("user", userId, bson.M{
  1279. "$set": set,
  1280. })
  1281. ClearBigVipUserPower(userId)
  1282. return true, ""
  1283. } else {
  1284. UpdateRule(entId, map[string]interface{}{
  1285. "$set": set,
  1286. }, param.Phone)
  1287. ClearBigVipUserPower(userId)
  1288. return true, ""
  1289. }
  1290. }
  1291. //为用户开通超级订阅权限
  1292. //是否开通超级订阅 -1 试用到期 -2 正式到期 1 试用 2 开通
  1293. isTrial := false
  1294. if param.VipStartTime == "2099-01-01" || dateType == 2 {
  1295. isTrial = true
  1296. }
  1297. if param.UpdateType == 0 {
  1298. set := map[string]interface{}{
  1299. "o_vipjy.i_trial": -1, //已激活试用
  1300. "o_vipjy.o_area": buyArea, //设置地区
  1301. "o_vipjy.o_buyset": newBuySet, //购买内容 城市、省份、行业数量
  1302. "l_vip_starttime": vipStartTime.Unix(), //开始时间
  1303. "l_vip_endtime": endTime.Unix(), //结束时间
  1304. "i_vip_status": qutil.If(isTrial, -2, 2), //1试用 2正式 -2 试用到期
  1305. "i_vip_expire_tip": 0, //消息提示初始化
  1306. "o_vipjy.a_buyerclass": []interface{}{}, //设置行业
  1307. }
  1308. isOk := false
  1309. if param.BuySubject == "1" {
  1310. isOk = StartSubVip(set, userId)
  1311. } else {
  1312. isOk = UpdateRule(entId, map[string]interface{}{
  1313. "$set": set,
  1314. }, param.Phone)
  1315. }
  1316. return isOk, qutil.FormatDate(&endTime, qutil.Date_Full_Layout)
  1317. } else {
  1318. return true, ""
  1319. }
  1320. }
  1321. return true, ""
  1322. }
  1323. return false, ""
  1324. }
  1325. /*//当大会员状态改变时清除此状态
  1326. func ClearBigVipUserPower(userId string) bool {
  1327. cacheKey := fmt.Sprintf(PowerCacheKey, userId)
  1328. return redis.Del(NewOther, cacheKey)
  1329. }*/
  1330. // 当大会员状态改变时清除此状态
  1331. func ClearBigVipUserPower(userId string) {
  1332. if mongodb.IsObjectIdHex(userId) {
  1333. user_id := userId
  1334. //大会员主账号清理
  1335. userDatas, ok := util.MQFW.Find("user", map[string]interface{}{"s_member_mainid": user_id, "i_member_sub_status": 1}, nil, nil, false, -1, -1)
  1336. if ok && userDatas != nil && len(*userDatas) > 0 {
  1337. for _, v := range *userDatas {
  1338. user_id := m.BsonIdToSId(v["_id"])
  1339. userData, ok := util.MQFW.FindById("user", user_id, `"base_user_id":1`)
  1340. if userData != nil && len(*userData) > 0 && ok {
  1341. baseUserId := qutil.Int64All((*userData)["base_user_id"])
  1342. positionData := util.BaseDB.FindOne(util.BasePosition, map[string]interface{}{
  1343. "type": 0,
  1344. "ent_id": 0,
  1345. "user_id": baseUserId,
  1346. }, "id", "")
  1347. if positionData != nil && len(*positionData) > 0 {
  1348. user_id = fmt.Sprint(qutil.Int64All((*positionData)["id"]))
  1349. redis.Del("newother", config.SysConfigs.BigmemberKey+user_id)
  1350. }
  1351. }
  1352. }
  1353. }
  1354. //通过mongo查找职位标识
  1355. userData, ok := util.MQFW.FindById("user", userId, `"base_user_id":1`)
  1356. if userData != nil && len(*userData) > 0 && ok {
  1357. baseUserId := qutil.Int64All((*userData)["base_user_id"])
  1358. positionData := util.BaseDB.FindOne(util.BasePosition, map[string]interface{}{
  1359. "type": 0,
  1360. "ent_id": 0,
  1361. "user_id": baseUserId,
  1362. }, "id", "")
  1363. if positionData != nil && len(*positionData) > 0 {
  1364. userId = fmt.Sprint(qutil.Int64All((*positionData)["id"]))
  1365. }
  1366. }
  1367. }
  1368. cacheKey := fmt.Sprintf(PowerCacheKey, userId)
  1369. baseInfoCacheKey := fmt.Sprintf(IsGetUserBaseInfoRedisKey, userId)
  1370. redisMenuKeyPC := fmt.Sprintf(RedisMenuKeyPC, userId)
  1371. redisMenuKeyWX := fmt.Sprintf(RedisMenuKeyWX, userId)
  1372. redisMenuKeyAPP := fmt.Sprintf(RedisMenuKeyAPP, userId)
  1373. userPowerRedisKey := fmt.Sprintf(UserPowerRedisKey, time.Now().Day(), userId)
  1374. redis.Del(NewOther, cacheKey)
  1375. redis.Del("newother", config.SysConfigs.BigmemberKey+userId)
  1376. redis.Del(NewOther, fmt.Sprintf("jy_workdesktopmenu_10000_menu1_%s", userId))
  1377. redis.Del(NewOther, fmt.Sprintf("jy_userpowerredis_10000_17_%s", userId))
  1378. redis.Del(NewOther, fmt.Sprintf("jy_workdesktopmenu_10000_menu2_%s", userId))
  1379. redis.Del(NewOther, fmt.Sprintf("jy_workdesktopmenu_10000_PC_menu2_%s", userId))
  1380. redis.Del(NewOther, fmt.Sprintf("jy_workdesktopmenu_10000_WX_menu2_%s", userId))
  1381. redis.Del(NewOther, fmt.Sprintf("jy_workdesktopmenu_10000_APP_menu2_%s", userId))
  1382. redis.Del(NewOther, fmt.Sprintf("user_power_info_%s", userId))
  1383. redis.Del(NewOther, baseInfoCacheKey)
  1384. redis.Del(NewOther, redisMenuKeyPC)
  1385. redis.Del(NewOther, redisMenuKeyWX)
  1386. redis.Del(NewOther, redisMenuKeyAPP)
  1387. redis.Del(NewOther, userPowerRedisKey)
  1388. redis.Del(NewOther, "pl_indexMessage_"+userId)
  1389. }
  1390. // 开始使用超级订阅
  1391. func StartSubVip(set map[string]interface{}, userId string) bool {
  1392. isOk := util.MQFW.UpdateById("user", userId, bson.M{
  1393. "$set": set,
  1394. })
  1395. go func() {
  1396. MergeKws(userId)
  1397. }()
  1398. ClearBigVipUserPower(userId)
  1399. if isOk {
  1400. return true
  1401. } else {
  1402. return false
  1403. }
  1404. }
  1405. // 初始化vip订阅关键词
  1406. func MergeKws(userId string) {
  1407. defer qutil.Catch()
  1408. if userId == "" { //11-11 取消此操作
  1409. return
  1410. }
  1411. data, ok := util.MQFW.FindById("user", userId, `{"o_jy":1,"o_vipjy":1}`)
  1412. var o_vipjy map[string]interface{}
  1413. if ok && data != nil && len(*data) > 0 {
  1414. o_vipjy, _ = (*data)["o_vipjy"].(map[string]interface{})
  1415. a_items, _ := o_vipjy["a_items"].([]interface{})
  1416. if a_items == nil { //首次
  1417. util.MQFW.UpdateById("user", userId, bson.M{
  1418. "$set": bson.M{"o_vipjy.i_matchway": 1, "o_vipjy.i_ratemode": 1, "o_vipjy.i_wxpush": 1, "o_vipjy.i_apppush": 1, "o_vipjy.i_projectmatch": 0, "o_vipjy.a_infotype": []string{}, "o_vipjy.a_items": []string{}, "o_vipjy.l_modifydate": time.Now().Unix()},
  1419. })
  1420. }
  1421. }
  1422. }
  1423. // 编辑回款信息
  1424. func UpdateReturnInfo(param *UpdateReturnParams, orderData map[string]interface{}) bool {
  1425. returninvoceRes := util.JysqlDB.SelectBySql("SELECT DISTINCT return_invoice_status from return_money_record where order_code=? and state=1", param.OrderCode)
  1426. //// 当回款交易详情中的发票状态全部为“未申请发票”或暂无回款交易详情信息时,此处默认显示“未申请”
  1427. ////当回款交易详情中的发票状态有“已申请发票”时,此处显示“已申请”
  1428. ////当回款交易详情中的发票状态为“已开具发票”和其他状态时,此处显示“部分开票”
  1429. ////当回款交易详情中的发票状态全部为“已开具发票”时,此处显示“已开具”
  1430. ////回款发票状态,0-未申请 1-已申请 2-已开具
  1431. weishenqFlag := false
  1432. yishenqFlag := false
  1433. yikaijuFlag := false
  1434. invoiceStatus := 0
  1435. var invoiceMap []map[string]interface{}
  1436. if returninvoceRes != nil {
  1437. invoiceMap = *returninvoceRes
  1438. }
  1439. invoiceMap = append(invoiceMap, map[string]interface{}{"return_invoice_status": param.ReturnInvoiceStatus})
  1440. for _, invoice := range invoiceMap {
  1441. if invoice == nil || qutil.IntAll(invoice["return_invoice_status"]) == 0 {
  1442. weishenqFlag = true
  1443. }
  1444. if invoice != nil && qutil.IntAll(invoice["return_invoice_status"]) == 1 {
  1445. yishenqFlag = true
  1446. }
  1447. if invoice != nil && qutil.IntAll(invoice["return_invoice_status"]) == 2 {
  1448. yikaijuFlag = true
  1449. }
  1450. }
  1451. if weishenqFlag == true && yikaijuFlag == false && yishenqFlag == false {
  1452. invoiceStatus = 0
  1453. }
  1454. if yishenqFlag == true {
  1455. invoiceStatus = 1
  1456. }
  1457. if yikaijuFlag == true && yishenqFlag == false && weishenqFlag == false {
  1458. invoiceStatus = 2
  1459. }
  1460. if yikaijuFlag == true && (yishenqFlag == true || weishenqFlag == true) {
  1461. invoiceStatus = 3
  1462. }
  1463. return util.JysqlDB.ExecTx("编辑回款信息", func(tx *sql.Tx) bool {
  1464. insertData := map[string]interface{}{
  1465. "order_code": param.OrderCode,
  1466. "return_time": param.ReturnTime,
  1467. "return_money": param.ReturnMoney,
  1468. "return_type": param.ReturnType,
  1469. "return_remark": param.ReturnRemark,
  1470. "return_code": param.ReturnCode,
  1471. "return_invoice_status": param.ReturnInvoiceStatus,
  1472. "return_voucher_url": param.ReturnVoucherUrl,
  1473. "operate_person": param.OperatePerson,
  1474. "operate_time": qutil.NowFormat(qutil.Date_Full_Layout),
  1475. "state": 1,
  1476. }
  1477. filterMap := qutil.ObjToMap(orderData["filter"])
  1478. if param.ReturnStatus == 1 {
  1479. (*filterMap)["isAll"] = 1
  1480. } else if param.ReturnStatus == 2 {
  1481. (*filterMap)["isAll"] = 3
  1482. }
  1483. filter_map, _ := json.Marshal(filterMap)
  1484. updateData := map[string]interface{}{
  1485. "return_status": param.ReturnStatus,
  1486. "applybill_status": invoiceStatus,
  1487. "filter": string(filter_map),
  1488. "pay_time": qutil.NowFormat(qutil.Date_Full_Layout),
  1489. }
  1490. ok1 := util.JysqlDB.UpdateByTx(tx, "dataexport_order", map[string]interface{}{"id": param.Id}, updateData)
  1491. ok2 := util.JysqlDB.InsertByTx(tx, "return_money_record", insertData)
  1492. return ok1 && ok2 != -1
  1493. })
  1494. }
  1495. // 编辑回款信息
  1496. func UpdateBatchReturnInfo(transactionData *map[string]interface{}, orderArr map[string]map[string]interface{}, operatePerson string, param *Return) bool {
  1497. return util.JysqlDB.ExecTx("编辑回款信息", func(tx *sql.Tx) bool {
  1498. return_id := ""
  1499. money := int(math.Floor(float64(float32(qutil.Float64All((*transactionData)["TRSBAL"]))*100 + 0.5))) //流水
  1500. for key, value := range orderArr {
  1501. return_money := qutil.IntAll(value["realPrice"])
  1502. insertData := map[string]interface{}{
  1503. "order_code": key,
  1504. "return_time": (*transactionData)["BNKTIM"],
  1505. "return_money": return_money,
  1506. "return_type": 3,
  1507. "return_remark": (*transactionData)["NUSAGE"],
  1508. "return_code": "",
  1509. "bank_flow": (*transactionData)["BNKFLW"],
  1510. "return_invoice_status": 0,
  1511. "return_voucher_url": value["returnVoucherUrl"],
  1512. "flow_money": money,
  1513. "bank_name": (*transactionData)["BNKNAM"],
  1514. "operate_person": operatePerson,
  1515. "operate_time": qutil.NowFormat(qutil.Date_Full_Layout),
  1516. "flow_type": param.FlowType,
  1517. "pay_account_name": param.PayAccountName,
  1518. "state": 1,
  1519. }
  1520. filterMap := qutil.ObjToMap(value["filter"])
  1521. (*filterMap)["isAll"] = 1
  1522. filter_map, _ := json.Marshal(filterMap)
  1523. updateData := map[string]interface{}{
  1524. "applybill_status": 0,
  1525. "filter": string(filter_map),
  1526. "pay_time": (*transactionData)["BNKTIM"],
  1527. }
  1528. returnData := util.JysqlDB.SelectBySql(`select IFNULL(sum(return_money),0) as return_money from return_money_record where order_code=? and state=1`, key)
  1529. refundData := util.JysqlDB.SelectBySql(`select IFNULL(sum(refund_money),0) as refund_money from refund_record where order_code=?`, key)
  1530. return_moneys := qutil.IntAll((*returnData)[0]["return_money"])
  1531. refund_money := qutil.IntAll((*refundData)[0]["refund_money"])
  1532. if return_money+return_moneys == refund_money {
  1533. updateData["refund_status"] = 1
  1534. } else if return_money+return_moneys > refund_money && refund_money > 0 {
  1535. updateData["refund_status"] = 2
  1536. }
  1537. if return_money == qutil.IntAll(value["outstandingPayment"]) {
  1538. updateData["return_status"] = 1
  1539. } else {
  1540. updateData["return_status"] = 2
  1541. }
  1542. if qutil.IntAll(value["order_status"]) == 0 {
  1543. updateData["order_status"] = 1
  1544. }
  1545. contract := util.JysqlDB.FindOne("contract", map[string]interface{}{"order_code": qutil.ObjToString(value["order_code"])}, "", "")
  1546. count := util.JysqlDB.Count("return_money_record", map[string]interface{}{"order_code": qutil.ObjToString(value["order_code"])})
  1547. if count < 1 && contract != nil && qutil.IntAll((*contract)["contract_archive_status"]) != 1 {
  1548. updateData["sale_time"] = (*transactionData)["BNKTIM"]
  1549. }
  1550. ok_1 := util.JysqlDB.UpdateByTx(tx, "dataexport_order", map[string]interface{}{"id": value["id"]}, updateData)
  1551. ok_2 := util.JysqlDB.InsertByTx(tx, "return_money_record", insertData)
  1552. if ok_1 && ok_2 != -1 {
  1553. return_id = return_id + fmt.Sprint(ok_2) + ","
  1554. } else {
  1555. break
  1556. return false
  1557. }
  1558. }
  1559. //修改回款流水记录
  1560. updateTransactionData := map[string]interface{}{
  1561. "return_id": return_id[:len(return_id)-1],
  1562. "ISRELATION": 1,
  1563. }
  1564. ok1 := util.CbsDB.Update("transaction", map[string]interface{}{"id": (*transactionData)["id"]}, updateTransactionData)
  1565. return ok1
  1566. })
  1567. }
  1568. // 手动录入编辑回款信息
  1569. func ManualUpdateBatchReturnInfo(orderArr map[string]map[string]interface{}, operatePerson string, param *Return) bool {
  1570. return util.JysqlDB.ExecTx("编辑回款信息", func(tx *sql.Tx) bool {
  1571. return_id := ""
  1572. for key, value := range orderArr {
  1573. returnMoney := qutil.IntAll(value["realPrice"])
  1574. insertData := map[string]interface{}{
  1575. "order_code": key,
  1576. "return_time": param.BNKTIM,
  1577. "return_money": returnMoney,
  1578. "return_type": param.ReturnType,
  1579. "return_remark": param.ReturnRemarks,
  1580. "return_code": param.ReturnCode,
  1581. "bank_flow": param.BNKFLW,
  1582. "return_invoice_status": 0,
  1583. "return_voucher_url": value["returnVoucherUrl"],
  1584. "flow_money": param.ReturnMoney,
  1585. "bank_name": param.BNKNAM,
  1586. "operate_person": operatePerson,
  1587. "operate_time": qutil.NowFormat(qutil.Date_Full_Layout),
  1588. "flow_type": param.FlowType,
  1589. "pay_account_name": param.PayAccountName,
  1590. "state": 1,
  1591. }
  1592. filterMap := qutil.ObjToMap(value["filter"])
  1593. (*filterMap)["isAll"] = 1
  1594. filter_map, _ := json.Marshal(filterMap)
  1595. updateData := map[string]interface{}{
  1596. "applybill_status": 0,
  1597. "filter": string(filter_map),
  1598. "pay_time": param.BNKTIM,
  1599. }
  1600. returnData := util.JysqlDB.SelectBySql(`select IFNULL(sum(return_money),0) as return_money from return_money_record where order_code=? and state=1`, key)
  1601. refundData := util.JysqlDB.SelectBySql(`select IFNULL(sum(refund_money),0) as refund_money from refund_record where order_code=?`, key)
  1602. return_moneys := qutil.IntAll((*returnData)[0]["return_money"])
  1603. refund_money := qutil.IntAll((*refundData)[0]["refund_money"])
  1604. if returnMoney+return_moneys == refund_money {
  1605. updateData["refund_status"] = 1
  1606. } else if returnMoney+return_moneys > refund_money && refund_money > 0 {
  1607. updateData["refund_status"] = 2
  1608. }
  1609. if returnMoney == qutil.IntAll(value["outstandingPayment"]) {
  1610. updateData["return_status"] = 1
  1611. } else {
  1612. updateData["return_status"] = 2
  1613. }
  1614. if qutil.IntAll(value["order_status"]) == 0 {
  1615. updateData["order_status"] = 1
  1616. }
  1617. contract := util.JysqlDB.FindOne("contract", map[string]interface{}{"order_code": qutil.ObjToString(value["order_code"])}, "", "")
  1618. count := util.JysqlDB.Count("return_money_record", map[string]interface{}{"order_code": qutil.ObjToString(value["order_code"])})
  1619. if count < 1 && contract != nil && qutil.IntAll((*contract)["contract_archive_status"]) != 1 {
  1620. updateData["sale_time"] = param.BNKTIM
  1621. }
  1622. ok1 := util.JysqlDB.UpdateByTx(tx, "dataexport_order", map[string]interface{}{"id": value["id"]}, updateData)
  1623. ok2 := util.JysqlDB.InsertByTx(tx, "return_money_record", insertData)
  1624. if ok1 && ok2 != -1 {
  1625. return_id = return_id + fmt.Sprint(ok2) + ","
  1626. } else {
  1627. return false
  1628. }
  1629. }
  1630. return true
  1631. })
  1632. }
  1633. // 上传合同
  1634. func UpdateContractFile(id int, contractFileUrl string, orderData *map[string]interface{}) bool {
  1635. filterMap := qutil.ObjToMap((*orderData)["filter"])
  1636. (*filterMap)["contractStatus"] = 1
  1637. filter_map, _ := json.Marshal(filterMap)
  1638. updateData := map[string]interface{}{
  1639. "contract_file_url": contractFileUrl,
  1640. }
  1641. return util.JysqlDB.ExecTx("上传合同", func(tx *sql.Tx) bool {
  1642. ok_1 := util.JysqlDB.UpdateByTx(tx, "contract", map[string]interface{}{"id": id}, updateData)
  1643. status := util.JysqlDB.UpdateByTx(tx, "dataexport_order", map[string]interface{}{"id": (*orderData)["id"]}, map[string]interface{}{
  1644. "filter": string(filter_map),
  1645. })
  1646. return ok_1 && status
  1647. })
  1648. }
  1649. func insertContractFile(orderCode string, contractFileUrl string, contractMoney int, orderData *map[string]interface{}) bool {
  1650. updateData := map[string]interface{}{
  1651. "contract_file_url": contractFileUrl,
  1652. "order_code": orderCode,
  1653. "contract_money": contractMoney,
  1654. }
  1655. filterMap := qutil.ObjToMap((*orderData)["filter"])
  1656. (*filterMap)["contractStatus"] = 1
  1657. filter_map, _ := json.Marshal(filterMap)
  1658. return util.JysqlDB.ExecTx("新增合同记录", func(tx *sql.Tx) bool {
  1659. ok_1 := util.JysqlDB.InsertByTx(tx, "contract", updateData)
  1660. status := util.JysqlDB.UpdateByTx(tx, "dataexport_order", map[string]interface{}{"id": (*orderData)["id"]}, map[string]interface{}{
  1661. "filter": string(filter_map),
  1662. })
  1663. return ok_1 > 0 && status
  1664. })
  1665. }
  1666. // 广告和结构化数据订单详情
  1667. func SupplementaryOrder(res *map[string]interface{}) map[string]interface{} {
  1668. // 产品信息
  1669. orderMoney := qutil.Float64All((*res)["order_money"]) / 100
  1670. (*res)["order_money"] = orderMoney
  1671. filterMap := map[string]interface{}{}
  1672. filterData := (*res)["filter"]
  1673. if err := json.Unmarshal([]byte(filterData.(string)), &filterMap); err == nil {
  1674. (*res)["product_name"] = filterMap["product"] //产品信息里的产品名称
  1675. (*res)["remark"] = filterMap["remark"] //备注
  1676. }
  1677. if (*res)["product_type"] == "历史数据" {
  1678. (*res)["product_type"] = "历史数据导出"
  1679. }
  1680. if (*res)["data_spec"] == "1" {
  1681. (*res)["data_spec"] = "高级字段包"
  1682. } else if (*res)["data_spec"] == "2" {
  1683. (*res)["data_spec"] = "标准字段包"
  1684. } else if (*res)["data_spec"] == "3" {
  1685. (*res)["data_spec"] = "自定义字段包"
  1686. }
  1687. // 回款信息
  1688. returnInfo := util.JysqlDB.SelectBySql("SELECT COUNT(*) count,SUM(return_money) money from return_money_record WHERE order_code=? and state=1", (*res)["order_code"])
  1689. // 回款交易详情列表
  1690. returnRes := util.JysqlDB.Find("return_money_record", map[string]interface{}{"order_code": (*res)["order_code"], "state": 1}, "", "", 0, 0)
  1691. applybill_status := qutil.IntAll((*res)["applybill_status"])
  1692. // 发票信息
  1693. //returninvoceRes := util.JysqlDB.SelectBySql("SELECT DISTINCT return_invoice_status from return_money_record WHERE order_code=? ", (*res)["order_code"])
  1694. (*res)["invoice"] = []map[string]interface{}{}
  1695. if applybill_status == 1 || applybill_status == 2 || applybill_status == 3 {
  1696. //2020-4-22电子发票
  1697. data := util.JysqlDB.Find("invoice", map[string]interface{}{"order_code": (*res)["order_code"]}, "", "create_time desc", 0, 0)
  1698. if *data != nil && len(*data) != 0 {
  1699. invoiceList := []map[string]interface{}{}
  1700. for _, invoiceData := range *data {
  1701. switch qutil.IntAll(invoiceData["invoice_status"]) {
  1702. case -1:
  1703. invoiceData["invoice_status"] = "失败"
  1704. case 0:
  1705. invoiceData["invoice_status"] = "已申请"
  1706. case 1:
  1707. invoiceData["invoice_status"] = "已开具"
  1708. case -2:
  1709. invoiceData["invoice_status"] = "已冲红"
  1710. }
  1711. switch qutil.IntAll(invoiceData["source"]) {
  1712. case 1:
  1713. {
  1714. invoiceData["source"] = "线下开票" // 开票渠道
  1715. invoiceData["apply_invoice_date"] = "" // 线下申请开票日期为空 线上取创建时间
  1716. }
  1717. default:
  1718. {
  1719. // 判断历史数据是不是线下的
  1720. if qutil.ObjToString(invoiceData["operator"]) != "" {
  1721. invoiceData["source"] = "线下开票" // 开票渠道
  1722. invoiceData["apply_invoice_date"] = "" // 线下申请开票日期为空 线上取创建时间
  1723. } else {
  1724. applyInvoiceDate := qutil.Int64All(invoiceData["create_time"])
  1725. invoiceData["apply_invoice_date"] = qutil.FormatDateByInt64(&applyInvoiceDate, qutil.Date_Full_Layout) // 申请开票日期
  1726. invoiceData["source"] = "线上开票" // 开票渠道
  1727. invoiceData["invoice_variety"] = "普通发票(电子发票)" // 发票种类
  1728. }
  1729. }
  1730. }
  1731. invoiceData["order_company"] = (*res)["company_name"] //公司名称取订单中的公司名称
  1732. // 开票时间 转换
  1733. billTime := qutil.Int64All(invoiceData["billing_time"])
  1734. if billTime != 0 {
  1735. invoiceData["billing_time"] = qutil.FormatDateByInt64(&billTime, qutil.Date_Full_Layout)
  1736. }
  1737. invoiceList = append(invoiceList, invoiceData)
  1738. }
  1739. (*res)["invoice"] = invoiceList
  1740. }
  1741. if qutil.IntAll((*res)["order_status"]) == -3 {
  1742. (*res)["applybill_status"] = "已冲红"
  1743. } else {
  1744. (*res)["applybill_status"] = "已申请"
  1745. }
  1746. if applybill_status == 2 {
  1747. (*res)["applybill_status"] = "已开具"
  1748. }
  1749. if applybill_status == 3 {
  1750. (*res)["applybill_status"] = "部分开票"
  1751. }
  1752. } else if applybill_status == 0 {
  1753. (*res)["applybill_status"] = "未申请"
  1754. }
  1755. // 合同
  1756. contractRes := util.JysqlDB.FindOne("contract", map[string]interface{}{"order_code": (*res)["order_code"]}, "", "")
  1757. result := map[string]interface{}{}
  1758. delete(*res, "filter")
  1759. //delete(*res, "order_money")
  1760. //合同金额
  1761. if contractRes != nil && len(*contractRes) != 0 {
  1762. if (*contractRes)["contract_file_url"] != nil && len((*contractRes)["contract_file_url"].(string)) > 0 {
  1763. index_ := strings.LastIndex((*contractRes)["contract_file_url"].(string), "/")
  1764. if index_ != -1 {
  1765. (*contractRes)["contract_file_name"] = (*contractRes)["contract_file_url"].(string)[index_+1:]
  1766. }
  1767. }
  1768. result["contractRes"] = *contractRes
  1769. } else {
  1770. result["contractRes"] = map[string]interface{}{}
  1771. }
  1772. if returnRes != nil && len(*returnRes) != 0 {
  1773. for _, d := range *returnRes {
  1774. if d["return_voucher_url"] != nil && len(d["return_voucher_url"].(string)) > 0 {
  1775. index_ := strings.LastIndex(d["return_voucher_url"].(string), "/")
  1776. if index_ != -1 {
  1777. d["return_voucher_name"] = d["return_voucher_url"].(string)[index_+1:]
  1778. }
  1779. }
  1780. }
  1781. result["returnRes"] = *returnRes
  1782. } else {
  1783. result["returnRes"] = []map[string]interface{}{}
  1784. }
  1785. //退款信息
  1786. refundRes := util.JysqlDB.Find("refund_record", map[string]interface{}{"order_code": (*res)["order_code"]}, "", "", 0, 0)
  1787. if refundRes != nil && len(*refundRes) > 0 {
  1788. result["refundRes"] = *refundRes
  1789. } else {
  1790. result["refundRes"] = []map[string]interface{}{}
  1791. }
  1792. result["res"] = *res
  1793. result["filterData"] = filterMap
  1794. result["returnInfo"] = returnInfo
  1795. return result
  1796. }
  1797. // 创建课程订单
  1798. func createCourseOrder(param *CreateOtherOrderParams, code string) (bool, string) {
  1799. //订单创建
  1800. data, _ := util.MQFW.FindById("jy_course", param.CourseId, false)
  1801. price := qutil.IntAll((*data)["i_price"])
  1802. //生成订单号
  1803. detail := map[string]interface{}{
  1804. "_id": param.CourseId,
  1805. "s_fileUrl": (*data)["s_fileUrl"],
  1806. "s_picUrl": (*data)["s_picUrl"],
  1807. "s_courseDate": (*data)["s_courseDate"],
  1808. "l_endtime": (*data)["l_endtime"],
  1809. "i_price": price,
  1810. "phone": param.Phone,
  1811. "courseType": "中标必听课",
  1812. "i_exist": (*data)["i_exist"],
  1813. "i_num": (*data)["i_num"],
  1814. "i_drawer": (*data)["i_drawer"],
  1815. "out_trade_no": param.OutTradeNo,
  1816. "s_name": (*data)["s_name"], //此处传课程展示的信息;比如课程名称 结束时间 图片之类的("_id"课程mgo库id),
  1817. }
  1818. filterStr, _ := json.Marshal(detail)
  1819. payWay := "wx_app"
  1820. if param.ChargeMode == 1 {
  1821. if param.Pay_way == "" {
  1822. payWay = "transferAccounts"
  1823. }
  1824. }
  1825. insertData := map[string]interface{}{
  1826. "user_phone": param.Phone,
  1827. "product_type": "中标必听课",
  1828. "salesperson": "",
  1829. "filter": string(filterStr),
  1830. "order_code": code,
  1831. "original_price": price,
  1832. "create_time": param.CreateTime, // 当前时间
  1833. "prepay_time": param.CreateTime,
  1834. "order_money": param.OrderMoney, // 2021-12-29 订单优化需求改为录入字段
  1835. "pay_money": param.ContractMoney,
  1836. "is_backstage_order": 1,
  1837. "order_status": 1,
  1838. "out_trade_no": code,
  1839. "user_id": param.UserId,
  1840. "refund_status": 0,
  1841. "company_name": param.CompanyName,
  1842. "billingMode": param.ChargeMode, //计费模式 0 免费 1 收费
  1843. "sale_time": qutil.If(param.SaleTime == "", nil, param.SaleTime), // 订单补录需求20210926 补充需求 该字段取订单时间
  1844. "pay_way": payWay,
  1845. "commission": param.Commission, // 佣金 2021-12-29 订单优化需求新增字段
  1846. "procedures_money": param.ProceduresMoney, // 手续费 2021-12-29 订单优化需求新增字段
  1847. "distribution_channel": param.SalesChannel,
  1848. "order_channel": param.OrderChannel,
  1849. "signing_subject": param.PaybackCompany,
  1850. "filter_id": param.CourseId,
  1851. "audit_status": param.AuditStatus,
  1852. }
  1853. if param.Pay_time != "" {
  1854. insertData["pay_time"] = param.Pay_time
  1855. }
  1856. ok_1 := util.JysqlDB.Insert("dataexport_order", insertData)
  1857. return ok_1 > 0, ""
  1858. }
  1859. func GetNameList(name string) (rs *[]map[string]interface{}) {
  1860. if name != "" {
  1861. rs = util.AdminDB.SelectBySql(fmt.Sprintf("select id,username from admin_user where status =1 and username like '%%%v%%'", name))
  1862. } else {
  1863. rs = util.AdminDB.SelectBySql("select id,username from admin_user where status =1")
  1864. }
  1865. return rs
  1866. }
  1867. // 企业订阅时间修改
  1868. func UpdateRule(entId int, update map[string]interface{}, phone string) bool {
  1869. ok := false
  1870. if entId > 0 && phone != "" {
  1871. //查找之前数据是否存在
  1872. userData := util.JysqlDB.FindOne("entniche_user", map[string]interface{}{
  1873. "ent_id": entId,
  1874. "phone": phone,
  1875. }, `id`, "")
  1876. if userData == nil {
  1877. return false
  1878. }
  1879. up1, up2 := map[string]interface{}{}, map[string]interface{}{}
  1880. var tp int
  1881. for k, v := range update {
  1882. vm, ok := v.(map[string]interface{})
  1883. if !ok {
  1884. return false
  1885. }
  1886. up11, up22 := map[string]interface{}{}, map[string]interface{}{}
  1887. key := ""
  1888. for kk, vv := range vm {
  1889. if (key == "" || key == "o_jy") && (kk == "o_jy" || strings.HasPrefix(kk, "o_jy.")) {
  1890. key = "o_jy"
  1891. up22[strings.ReplaceAll(kk, key, "o_entniche")] = vv
  1892. tp = 2
  1893. } else if (key == "" || key == "o_vipjy") && (kk == "o_vipjy" || strings.HasPrefix(kk, "o_vipjy.")) {
  1894. key = "o_vipjy"
  1895. up22[strings.ReplaceAll(kk, key, "o_entniche")] = vv
  1896. tp = 1
  1897. } else if (key == "" || key == "o_member_jy") && (kk == "o_member_jy" || strings.HasPrefix(kk, "o_member_jy.")) {
  1898. key = "o_member_jy"
  1899. up22[strings.ReplaceAll(kk, key, "o_entniche")] = vv
  1900. tp = 1
  1901. } else if (key == "" || key == "o_entniche") && (kk == "o_entniche" || strings.HasPrefix(kk, "o_entniche.")) {
  1902. key = "o_entniche"
  1903. up22[strings.ReplaceAll(kk, key, "o_entniche")] = vv
  1904. tp = 0
  1905. } else {
  1906. up11[kk] = vv
  1907. }
  1908. }
  1909. if len(up11) > 0 {
  1910. up1[k] = up11
  1911. }
  1912. if len(up22) > 0 {
  1913. up2[k] = up22
  1914. }
  1915. }
  1916. ok1, ok2 := false, false
  1917. //查看之前是否有数据
  1918. data, ok := util.MQFW.Find("entniche_rule", map[string]interface{}{
  1919. "i_entid": entId,
  1920. "i_userid": (*userData)["id"],
  1921. "i_type": tp,
  1922. }, `{"i_time":-1}`, nil, false, -1, -1)
  1923. if ok && len(*data) == 0 {
  1924. up3 := map[string]interface{}{
  1925. "$set": map[string]interface{}{"o_entniche.i_matchway": 1, "o_entniche.i_ratemode": 1, "o_entniche.i_wxpush": 1, "o_entniche.i_apppush": 1, "o_entniche.i_projectmatch": 0, "o_entniche.a_infotype": []string{}, "o_entniche.a_items": []string{}, "o_entniche.l_modifydate": time.Now().Unix()},
  1926. }
  1927. util.MQFW.Update("entniche_rule", map[string]interface{}{
  1928. "i_entid": entId,
  1929. "i_userid": (*userData)["id"],
  1930. "i_type": tp,
  1931. }, up3, true, false)
  1932. }
  1933. if len(up1) > 0 {
  1934. ok1 = util.MQFW.Update("ent_user", map[string]interface{}{
  1935. "i_entid": entId,
  1936. "i_userid": (*userData)["id"],
  1937. }, up1, true, false)
  1938. }
  1939. if len(up2) > 0 {
  1940. ok2 = util.MQFW.Update("entniche_rule", map[string]interface{}{
  1941. "i_entid": entId,
  1942. "i_userid": (*userData)["id"],
  1943. "i_type": tp,
  1944. }, up2, true, false)
  1945. }
  1946. //默认数据处理
  1947. return ok1 || ok2
  1948. }
  1949. return ok
  1950. }
  1951. var productMap = map[string]interface{}{
  1952. "1": "广告",
  1953. "2": "结构化数据",
  1954. "3": "企业商机管理",
  1955. "4": "历史数据",
  1956. "5": "VIP订阅",
  1957. "6": "线下课程培训",
  1958. "7": "课程分销",
  1959. "8": "标书制作",
  1960. "9": "打赏",
  1961. "10": "数据流量包",
  1962. "11": "数据文件",
  1963. "12": "ISO体系认证",
  1964. "13": "3A信用认证",
  1965. "14": "权益码",
  1966. }
  1967. // GetProductTypeByIndex 创建其他订单获取对应产品类型
  1968. func GetProductTypeByIndex(pIndex string, adSource int) (productType string, err error) {
  1969. if pIndex == "1" {
  1970. if _, ok := AdSourceMap[adSource]; !ok {
  1971. return "", errors.New("广告来源有误")
  1972. }
  1973. }
  1974. if productType, ok := productMap[pIndex]; ok {
  1975. return qutil.InterfaceToStr(productType), nil
  1976. }
  1977. return "", errors.New("产品类型有误")
  1978. }