otherOrderController.go 61 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583
  1. package order
  2. import (
  3. "config"
  4. "database/sql"
  5. "encoding/json"
  6. "errors"
  7. "fmt"
  8. "log"
  9. "math"
  10. "mongodb"
  11. "net/http"
  12. qutil "qfw/util"
  13. "qfw/util/usercenter"
  14. "strings"
  15. "time"
  16. "util"
  17. "github.com/baiy/Cadmin-server-go/admin"
  18. "go.mongodb.org/mongo-driver/bson"
  19. )
  20. /*20210517 订单补录需求增加
  21. 创建其他订单
  22. 添加回款信息
  23. 上传合同
  24. */
  25. var AdSourceMap = map[int]string{
  26. 1: "广告联盟",
  27. 2: "微信流量主",
  28. 3: "剑鱼广告位",
  29. }
  30. // 创建其他订单
  31. type CreateOtherOrderParams struct {
  32. Phone string `form:"phone"` // 手机号 必填
  33. ProductType string `form:"productType"` // 产品类型 必填
  34. SalesPerson string `form:"salesPerson"` // 销售人员 必填
  35. SalesPersonId int `form:"salesPersonId"` // 销售人剑鱼后台id
  36. ContractTime string `form:"contractTime"` // 协议签订时间
  37. CustomerName string `form:"customerName"` // 客户名称
  38. ContractStatus int `form:"contractStatus"` // 协议状态 1-已签协议 0-不签协议
  39. ContractMoney int `form:"contractMoney"` // 合同金额 单位:分
  40. ContractCode string `form:"contractCode"` // 协议编号
  41. Product string `form:"product"` // 购买产品 增量数据、历史数据、增量+历史数据
  42. StartTime string `form:"startTime"` // 开始时间
  43. EndTime string `form:"endTime"` // 结束时间
  44. DataNum int64 `form:"dataNum"` // 数据条数
  45. DataType string `form:"dataType"` // 数据类型 高级、标准、自定义
  46. ContractFileUrl string `form:"contract_file_url"` // 上传合同地址
  47. Remark string `form:"remark"` // 备注
  48. PersonNum string `form:"personNum"` // 人数
  49. CompanyName string `form:"companyName"` //公司名称
  50. Area string `form:"area"` //超级订阅购买省份
  51. ChargeMode int `form:"chargeMode"` //计费模式 0 免费 1 收费
  52. CycleCount int `form:"cycleCount"` //周期
  53. CycleUnit int `form:"cycleUnit"` //单位 (1:年 2:月 3:天 4:季)
  54. VipStartTime string `form:"vipStartTime"` //超级订阅开始时间
  55. IsOpen int `form:"isOpen"` //0 暂不开通 1 开通
  56. OrderSource int `form:"orderSource"` //订单来源
  57. AdSource int `form:"adSource"` //广告来源 1:"广告联盟", 2:"微信流量主", 3:"剑鱼广告位",
  58. CreateTime string `form:"createTime"` // 创建时间
  59. VipType int `form:"vipType"` //VIP类型 0 购买 1:续费 2:升级
  60. UserId string `form:"userId"` //用户标识
  61. OrderMoney int `form:"orderMoney"`
  62. DisCountPrice int `form:"disCountPrice"`
  63. Badge string `form:"badge"`
  64. PackId string `form:"packId"`
  65. Commission string `form:"commission"` // 佣金
  66. ProceduresMoney string `form:"proceduresMoney"` // 手续费 单位分
  67. SalesChannel string `form:"salesChannel"` // 销售渠道
  68. OrderChannel string `form:"orderChannel"` // 下单渠道
  69. PaybackCompany string `form:"paybackCompany"` //签约主体 回款公司
  70. CourseId string `form:"courseId"` //课程标识
  71. OrderCode string `form:"orderCode"` //
  72. Transaction_id string `form:"transaction_id"` //
  73. Pay_time string `form:"pay_time"` //
  74. Pay_way string `form:"pay_way"` //
  75. ReturnStatus int `form:"returnStatus"` //
  76. OrderStatus int `form:"order_status"` // 订单状态 0 未完成 1 已完成
  77. SaleTime string `form:"sale_time"` // 业务统计时间
  78. ContractArchiveStatus int `form:"contract_archive_status"` // 协议归档状态 1 已归档 0 未归档
  79. ContractArchiveTime string `form:"contract_archive_time"` // 协议归档时间
  80. ContractArchiveNum int `form:"contract_archive_num"` // 协议归档份数
  81. CreatePerson string // 创建人
  82. UpdateType int `form:"updateType"` // 修改状态 0暂不开通修改 1开通修改
  83. OutTradeNo string `form:"out_trade_no"`
  84. AuditStatus int // 审核状态 0:待提交 1:待审核 2:一审通过 3:审核通过 -2 一审退回 -3 二审退回
  85. Open bool // 是否开通权限
  86. Save int `form:"save"` // 1-暂存 2-提交
  87. BuySubject string `form:"buySubject"` //购买主体 1 个人, 2公司
  88. BuyCount int `form:"buyCount"` //大会员、超级订阅购买数量
  89. }
  90. type UpdateReturnParams struct {
  91. Id int `form:"id"` //订单id
  92. OrderCode string `form:"orderCode"` //订单编号
  93. ReturnStatus int `form:"return_status"` //回款状态
  94. ReturnTime string `form:"returnTime"` //回款时间
  95. ReturnMoney int `form:"returnMoney"` //回款金额 单位:分
  96. ReturnRemark string `form:"returnRemark"` //回款说明 非必填
  97. ReturnType int `form:"returnType"` //支付方式 1-微信 2-支付宝 3-对公转账',
  98. ReturnCode string `form:"returnCode"` //回款单号
  99. ReturnInvoiceStatus int `form:"returnInvoiceStatus"` //回款发票状态 回款发票状态,0-未申请 1-已申请 2-已开具
  100. ReturnVoucherUrl string `form:"returnVoucherUrl"` //回款凭证地址
  101. OperateTime time.Time `form:"operateTime"` //操作时间
  102. OperatePerson string `form:"operate_person"` //操作人
  103. }
  104. type Return struct {
  105. ReturnType int `form:"returnType"`
  106. FlowType int `form:"flowType"`
  107. ReturnCode string `form:"returnCode"`
  108. TransactionId int `form:"transactionId"`
  109. OrderArr []map[string]interface{} `form:"orderArr"`
  110. ReturnVoucherUrl string `form:"returnVoucherUrl"`
  111. ReturnRemarks string `form:"returnRemarks"`
  112. ReturnMoney int `form:"returnMoney"`
  113. PayAccountName string `form:"payAccountName"`
  114. BNKTIM string `form:"BNKTIM"`
  115. BNKFLW string `form:"BNKFLW"`
  116. BNKNAM string `form:"BNKNAM"`
  117. }
  118. // 创建其他订单
  119. func CreateOtherOrder(context *admin.Context) (interface{}, error) {
  120. param := &CreateOtherOrderParams{}
  121. err := context.Form(param)
  122. if err != nil {
  123. return nil, err
  124. }
  125. // 根据url 判断是否是我的创建其他订单
  126. if context.Request.Call == "Baiy.Cadmin.Order.myCreateOtherOrder" {
  127. if param.Save == util.SAVE {
  128. // 暂存 订单审核状态为待提交
  129. param.AuditStatus = util.OrderUncommitted
  130. } else if param.Save == util.COMMIT {
  131. // 提交 我的创建订单 订单审核状态为待一审
  132. param.AuditStatus = util.OrderPending
  133. } else {
  134. return nil, errors.New("缺少提交类型")
  135. }
  136. // 订单状态为未完成
  137. param.OrderStatus = 0
  138. // 不开通权益
  139. param.Open = false
  140. } else {
  141. param.AuditStatus = util.OrderPassed // 0:待提交 1:待审核 2:一审通过 3:审核通过 -2 一审退回 -3 二审退回
  142. param.Open = true
  143. }
  144. param.CreateTime = qutil.NowFormat(qutil.Date_Full_Layout) // 取当前时间为创建时间
  145. if param.ProductType == "" {
  146. return nil, errors.New("缺少产品类型")
  147. }
  148. if param.ContractMoney < 0 {
  149. return nil, errors.New("缺少合同金额")
  150. }
  151. if param.SalesChannel == "" {
  152. return nil, errors.New("缺少销售渠道")
  153. }
  154. if param.OrderChannel == "" {
  155. return nil, errors.New("缺少下单渠道")
  156. }
  157. if param.PaybackCompany == "" {
  158. return nil, errors.New("缺少签约主体")
  159. }
  160. if param.BuySubject == "" {
  161. return nil, errors.New("缺少购买主体")
  162. }
  163. if param.BuySubject == "2" {
  164. if param.BuyCount == 0 && param.ProductType == "5" {
  165. return nil, errors.New("缺少购买数量")
  166. }
  167. if param.CompanyName == "" {
  168. return nil, errors.New("缺少公司名称")
  169. }
  170. }
  171. if param.ContractMoney != 0 { // 如果合同金额不为0 则计费模式为收费
  172. param.ChargeMode = 1
  173. }
  174. if param.ProductType == "1" {
  175. param.ProductType = "广告"
  176. if _, ok := AdSourceMap[param.AdSource]; !ok {
  177. return nil, errors.New("广告来源有误")
  178. }
  179. log.Println(param.AdSource)
  180. } else if param.ProductType == "2" {
  181. param.ProductType = "结构化数据"
  182. } else if param.ProductType == "3" {
  183. param.ProductType = "企业商机管理"
  184. } else if param.ProductType == "4" {
  185. param.ProductType = "历史数据"
  186. } else if param.ProductType == "5" {
  187. param.ProductType = "VIP订阅"
  188. } else if param.ProductType == "6" {
  189. param.ProductType = "线下课程培训"
  190. } else if param.ProductType == "7" {
  191. param.ProductType = "课程分销"
  192. } else if param.ProductType == "8" {
  193. param.ProductType = "标书制作"
  194. } else if param.ProductType == "9" {
  195. param.ProductType = "打赏"
  196. } else if param.ProductType == "10" {
  197. param.ProductType = "数据流量包"
  198. } else if param.ProductType == "11" {
  199. param.ProductType = "数据文件"
  200. } else if param.ProductType == "12" {
  201. param.ProductType = "ISO体系认证"
  202. } else if param.ProductType == "13" {
  203. param.ProductType = "3A信用认证"
  204. }
  205. param.CreatePerson = context.User.Username
  206. code := fmt.Sprintf("%s%s", time.Now().Format("150405"), qutil.GetRandom(6))
  207. if param.ProductType == "企业商机管理" {
  208. if !createEntnicheOrder(param, code) {
  209. return nil, errors.New("创建其他订单失败")
  210. }
  211. } else if param.ProductType == "VIP订阅" {
  212. if param.BuySubject != "2" {
  213. if ExistProcessOrder(param.Phone, SUPERSUB, "") {
  214. return nil, errors.New("该手机号存在未审核通过的单子")
  215. }
  216. }
  217. orderStatus, _ := createVipOrder(param, code)
  218. if !orderStatus {
  219. return nil, errors.New("创建VIP订单失败")
  220. }
  221. } else {
  222. if !createOtherOrder(param, code) {
  223. return nil, errors.New("创建其他订单失败")
  224. }
  225. }
  226. // 销售渠道为内部员工赠送及豁免用户赠送时更新用户人群分类
  227. var userId string
  228. if param.UserId != "" {
  229. userId = param.UserId
  230. } else {
  231. userId = GetUserIdByPhone(param.Phone)
  232. }
  233. if userId == "" {
  234. return nil, nil
  235. }
  236. if param.SalesChannel == util.SaleChannel052 || param.SalesChannel == util.SaleChannel053 {
  237. UpdateUserType(param.SalesChannel, userId)
  238. }
  239. // 如果是我的订单则新增审核轨迹 全部订单则新增为已通过 如果是暂存则不用新增
  240. if param.Save == util.SAVE {
  241. return nil, nil
  242. }
  243. saveData := map[string]interface{}{
  244. "operator": context.User.Username,
  245. "create_time": qutil.NowFormat(qutil.Date_Full_Layout),
  246. "operator_type": util.OperateCreate,
  247. "audit_status": param.AuditStatus,
  248. "order_code": code,
  249. "audit_type": util.AuditCreate,
  250. }
  251. if !InsertAudit(saveData) {
  252. return nil, errors.New("审核轨迹保存失败")
  253. }
  254. return nil, nil
  255. }
  256. // 修改其他订单
  257. func UpdateOtherOrder(context *admin.Context) (interface{}, error) {
  258. param := &CreateOtherOrderParams{}
  259. err := context.Form(param)
  260. if err != nil {
  261. return nil, err
  262. }
  263. if param.OrderCode == "" {
  264. return nil, errors.New("缺少订单编号")
  265. }
  266. if param.ProductType == "" {
  267. return nil, errors.New("缺少产品类型")
  268. }
  269. if param.ContractMoney < 0 {
  270. return nil, errors.New("缺少合同金额")
  271. }
  272. if param.SalesChannel == "" {
  273. return nil, errors.New("缺少销售渠道")
  274. }
  275. if param.OrderChannel == "" {
  276. return nil, errors.New("缺少下单渠道")
  277. }
  278. if param.PaybackCompany == "" {
  279. return nil, errors.New("缺少签约主体")
  280. }
  281. if param.BuySubject == "" {
  282. return nil, errors.New("缺少购买主体")
  283. }
  284. if param.BuySubject == "2" {
  285. if param.BuyCount == 0 && param.ProductType == "5" {
  286. return nil, errors.New("缺少购买数量")
  287. }
  288. if param.CompanyName == "" {
  289. return nil, errors.New("缺少公司名称")
  290. }
  291. }
  292. if param.ProductType == "1" {
  293. param.ProductType = "广告"
  294. if _, ok := AdSourceMap[param.AdSource]; !ok {
  295. return nil, errors.New("广告来源有误")
  296. }
  297. log.Println(param.AdSource)
  298. } else if param.ProductType == "2" {
  299. param.ProductType = "结构化数据"
  300. } else if param.ProductType == "3" {
  301. param.ProductType = "企业商机管理"
  302. } else if param.ProductType == "4" {
  303. param.ProductType = "历史数据"
  304. } else if param.ProductType == "5" {
  305. param.ProductType = "VIP订阅"
  306. } else if param.ProductType == "6" {
  307. param.ProductType = "线下课程培训"
  308. } else if param.ProductType == "7" {
  309. param.ProductType = "课程分销"
  310. } else if param.ProductType == "8" {
  311. param.ProductType = "标书制作"
  312. } else if param.ProductType == "9" {
  313. param.ProductType = "打赏"
  314. } else if param.ProductType == "10" {
  315. param.ProductType = "数据流量包"
  316. } else if param.ProductType == "11" {
  317. param.ProductType = "数据文件"
  318. } else if param.ProductType == "12" {
  319. param.ProductType = "ISO体系认证"
  320. } else if param.ProductType == "13" {
  321. param.ProductType = "3A信用认证"
  322. }
  323. if param.ContractMoney != 0 { // 如果合同金额不为0 则计费模式为收费
  324. param.ChargeMode = 1
  325. }
  326. param.CreatePerson = context.User.Username
  327. code := param.OrderCode
  328. //订单信息获取
  329. res := map[string]interface{}{}
  330. data := util.JysqlDB.SelectBySql("SELECT d.* FROM `dataexport_order` d WHERE d.order_code = ?", param.OrderCode)
  331. if data != nil && len(*data) > 0 {
  332. res = (*data)[0]
  333. } else {
  334. return nil, errors.New("查不到此订单")
  335. }
  336. // 全部订单-仅可编辑订单审核状态为已通过的订单
  337. auditStatus := res["audit_status"]
  338. saleChannel := qutil.ObjToString(res["distribution_channel"])
  339. if qutil.IntAll(auditStatus) != util.OrderPassed {
  340. return nil, errors.New("仅可编辑订单审核状态为已通过的订单")
  341. }
  342. //判断手机号是否修改
  343. userId, vipStatus := "", 0
  344. if res["user_phone"] != param.Phone {
  345. userData, ok := util.MQFW.FindOne("user", map[string]interface{}{"s_phone": param.Phone})
  346. if ok && userData != nil && len(*userData) > 0 {
  347. userId = mongodb.BsonIdToSId((*userData)["_id"])
  348. vipStatus = qutil.IntAll((*userData)["i_vip_status"])
  349. } else {
  350. userDatas, oks := util.MQFW.FindOne("user", map[string]interface{}{"s_m_phone": param.Phone})
  351. if oks && userDatas != nil && len(*userDatas) > 0 {
  352. userId = mongodb.BsonIdToSId((*userDatas)["_id"])
  353. vipStatus = qutil.IntAll((*userDatas)["i_vip_status"])
  354. }
  355. }
  356. if userId == "" {
  357. //没有用户需要新建用户
  358. data := map[string]interface{}{
  359. "i_appid": 2,
  360. "s_phone": param.Phone,
  361. "s_password": "",
  362. "l_registedate": time.Now().Unix(),
  363. "i_ts_guide": 2,
  364. "o_jy": map[string]interface{}{
  365. "i_apppush": 1,
  366. "i_ratemode": 2,
  367. "l_modifydate": time.Now().Unix(),
  368. },
  369. "s_regsource": "qmx_admin",
  370. }
  371. _id := util.MQFW.Save("user", data)
  372. log.Println("新增用户", _id)
  373. if _id != "" {
  374. userId = _id
  375. formdata := map[string]interface{}{
  376. "appid": config.SysConfigs.AppId,
  377. "phone": param.Phone,
  378. "password": "",
  379. }
  380. if !strings.HasPrefix(param.Phone, "9") {
  381. log.Println("addBaseUser start")
  382. ck := &http.Cookie{}
  383. usercenter.AddBaseUser(*util.MQFW, config.SysConfigs.UserCenterUrl, _id, formdata, ck)
  384. log.Println("addBaseUser end")
  385. } else {
  386. log.Println("prefix with 9")
  387. }
  388. }
  389. }
  390. if param.ProductType == "VIP订阅" && param.BuySubject != "2" {
  391. if vipStatus > 0 {
  392. return nil, errors.New("此手机号已有vip订阅权限,无法修改!")
  393. }
  394. //需要修改老用户上的订阅信息 企业用户不修改
  395. set := map[string]interface{}{
  396. "o_vipjy.i_trial": -1, //已激活试用
  397. "o_vipjy.o_area": "", //设置地区
  398. "o_vipjy.o_buyset": "", //购买内容 城市、省份、行业数量
  399. "l_vip_starttime": time.Now().Unix(), //开始时间
  400. "l_vip_endtime": time.Now().Unix(), //结束时间
  401. "i_vip_status": 0, //1试用 2正式
  402. "i_vip_expire_tip": 0, //消息提示初始化
  403. "o_vipjy.a_buyerclass": []interface{}{}, //设置行业
  404. }
  405. util.MQFW.UpdateById("user", qutil.ObjToString(res["user_id"]), bson.M{
  406. "$set": set,
  407. })
  408. }
  409. util.JysqlDB.Update("dataexport_order", map[string]interface{}{"order_code": qutil.ObjToString(param.OrderCode)}, map[string]interface{}{"user_phone": param.Phone, "user_id": userId})
  410. }
  411. //处理订单状态
  412. //原来实收金额
  413. payMoney := qutil.IntAll(qutil.If(res["pay_money"] == "", 0, res["pay_money"]))
  414. commission := qutil.IntAll(qutil.If(res["commission"] == "", 0, res["commission"]))
  415. proceduresMoney := qutil.IntAll(qutil.If(res["procedures_money"] == "", 0, res["procedures_money"]))
  416. originalPayMoney := payMoney - commission - proceduresMoney
  417. //修改后的金额
  418. nowPayMoney := param.ContractMoney - qutil.IntAll(param.Commission) - qutil.IntAll(param.ProceduresMoney)
  419. //查看是否需要修改
  420. returnStatus := qutil.IntAll(res["return_status"])
  421. if originalPayMoney != nowPayMoney {
  422. //价格变动了
  423. if returnStatus == 1 {
  424. returnStatus = 2
  425. }
  426. }
  427. if param.ProductType == "企业商机管理" {
  428. if !updateEntnicheOrder(param, code, returnStatus) {
  429. return nil, errors.New("编辑其他订单失败")
  430. }
  431. } else if param.ProductType == "VIP订阅" {
  432. orderStatus, _ := updateVipOrder(param, code, returnStatus)
  433. if !orderStatus {
  434. return nil, errors.New("编辑VIP订单失败")
  435. }
  436. } else {
  437. if !updateOtherOrder(param, code, returnStatus) {
  438. return nil, errors.New("编辑其他订单失败")
  439. }
  440. }
  441. // 判断是否需要修改用户类型
  442. // 销售渠道为内部员工赠送及豁免用户赠送时更新用户人群分类
  443. if (param.SalesChannel == util.SaleChannel052 || param.SalesChannel == util.SaleChannel053) && saleChannel != param.SalesChannel {
  444. UpdateUserType(param.SalesChannel, userId)
  445. }
  446. saveData := map[string]interface{}{
  447. "operator": context.User.Username,
  448. "create_time": qutil.NowFormat(qutil.Date_Full_Layout),
  449. "operator_type": util.OperateEdit,
  450. "audit_status": util.OrderPassed,
  451. "order_code": code,
  452. "audit_type": util.AuditCreate,
  453. }
  454. if !InsertAudit(saveData) {
  455. return nil, errors.New("审核轨迹保存失败")
  456. }
  457. return nil, nil
  458. }
  459. // 我的订单修改其他订单
  460. func MyUpdateOtherOrder(context *admin.Context) (interface{}, error) {
  461. param := &CreateOtherOrderParams{}
  462. err := context.Form(param)
  463. if err != nil {
  464. return nil, err
  465. }
  466. if param.OrderCode == "" {
  467. return nil, errors.New("缺少订单编号")
  468. }
  469. if param.ProductType == "" {
  470. return nil, errors.New("缺少产品类型")
  471. }
  472. if param.ContractMoney < 0 {
  473. return nil, errors.New("缺少合同金额")
  474. }
  475. if param.SalesChannel == "" {
  476. return nil, errors.New("缺少销售渠道")
  477. }
  478. if param.OrderChannel == "" {
  479. return nil, errors.New("缺少下单渠道")
  480. }
  481. if param.PaybackCompany == "" {
  482. return nil, errors.New("缺少签约主体")
  483. }
  484. if param.BuySubject == "" {
  485. return nil, errors.New("缺少购买主体")
  486. }
  487. if param.BuySubject == "2" {
  488. if param.BuyCount == 0 && param.ProductType == "5" {
  489. return nil, errors.New("缺少购买数量")
  490. }
  491. if param.CompanyName == "" {
  492. return nil, errors.New("缺少公司名称")
  493. }
  494. }
  495. if param.ProductType == "1" {
  496. param.ProductType = "广告"
  497. if _, ok := AdSourceMap[param.AdSource]; !ok {
  498. return nil, errors.New("广告来源有误")
  499. }
  500. log.Println(param.AdSource)
  501. } else if param.ProductType == "2" {
  502. param.ProductType = "结构化数据"
  503. } else if param.ProductType == "3" {
  504. param.ProductType = "企业商机管理"
  505. } else if param.ProductType == "4" {
  506. param.ProductType = "历史数据"
  507. } else if param.ProductType == "5" {
  508. param.ProductType = "VIP订阅"
  509. } else if param.ProductType == "6" {
  510. param.ProductType = "线下课程培训"
  511. } else if param.ProductType == "7" {
  512. param.ProductType = "课程分销"
  513. } else if param.ProductType == "8" {
  514. param.ProductType = "标书制作"
  515. } else if param.ProductType == "9" {
  516. param.ProductType = "打赏"
  517. } else if param.ProductType == "10" {
  518. param.ProductType = "数据流量包"
  519. } else if param.ProductType == "11" {
  520. param.ProductType = "数据文件"
  521. } else if param.ProductType == "12" {
  522. param.ProductType = "ISO体系认证"
  523. } else if param.ProductType == "13" {
  524. param.ProductType = "3A信用认证"
  525. }
  526. if param.ContractMoney != 0 { // 如果合同金额不为0 则计费模式为收费
  527. param.ChargeMode = 1
  528. }
  529. param.CreatePerson = context.User.Username
  530. code := param.OrderCode
  531. //订单信息获取
  532. res := map[string]interface{}{}
  533. data := GetOrderByCode(param.OrderCode)
  534. if data == nil || len(*data) == 0 {
  535. return nil, errors.New("查不到此订单")
  536. }
  537. res = *data
  538. auditStatus := qutil.IntAll(res["audit_status"])
  539. saleChannel := qutil.ObjToString(res["distribution_channel"])
  540. // 处理订单审核轨迹状态
  541. saveAuditStatus, err := SwitchAudit(auditStatus)
  542. if err != nil {
  543. return nil, err
  544. }
  545. //判断手机号是否修改
  546. userId, vipStatus := "", 0
  547. if res["user_phone"] != param.Phone {
  548. userData, ok := util.MQFW.FindOne("user", map[string]interface{}{"s_phone": param.Phone})
  549. if ok && userData != nil && len(*userData) > 0 {
  550. userId = mongodb.BsonIdToSId((*userData)["_id"])
  551. vipStatus = qutil.IntAll((*userData)["i_vip_status"])
  552. } else {
  553. userDatas, oks := util.MQFW.FindOne("user", map[string]interface{}{"s_m_phone": param.Phone})
  554. if oks && userDatas != nil && len(*userDatas) > 0 {
  555. userId = mongodb.BsonIdToSId((*userDatas)["_id"])
  556. vipStatus = qutil.IntAll((*userDatas)["i_vip_status"])
  557. }
  558. }
  559. if userId == "" {
  560. //没有用户需要新建用户
  561. userId = SaveUserInfo(param.Phone)
  562. }
  563. // 创建的时候 修改手机号需要移除原有账号权限、 升级续费的时候由于没有生成权限信息,所以不需要操作用户 企业用户无权限信息
  564. if param.ProductType == "VIP订阅" && param.VipType == 0 && param.BuySubject != "2" {
  565. if vipStatus > 0 {
  566. return nil, errors.New("此手机号已有vip订阅权限,无法修改!")
  567. }
  568. //需要修改老用户上的订阅信息
  569. set := map[string]interface{}{
  570. "o_vipjy.i_trial": -1, //已激活试用
  571. "o_vipjy.o_area": "", //设置地区
  572. "o_vipjy.o_buyset": "", //购买内容 城市、省份、行业数量
  573. "l_vip_starttime": time.Now().Unix(), //开始时间
  574. "l_vip_endtime": time.Now().Unix(), //结束时间
  575. "i_vip_status": 0, //1试用 2正式
  576. "i_vip_expire_tip": 0, //消息提示初始化
  577. "o_vipjy.a_buyerclass": []interface{}{}, //设置行业
  578. }
  579. util.MQFW.UpdateById("user", qutil.ObjToString(res["user_id"]), bson.M{
  580. "$set": set,
  581. })
  582. }
  583. util.JysqlDB.Update("dataexport_order", map[string]interface{}{"order_code": qutil.ObjToString(param.OrderCode)}, map[string]interface{}{"user_phone": param.Phone, "user_id": userId})
  584. }
  585. //处理订单状态
  586. //原来实收金额
  587. payMoney := qutil.IntAll(qutil.If(res["pay_money"] == "", 0, res["pay_money"]))
  588. commission := qutil.IntAll(qutil.If(res["commission"] == "", 0, res["commission"]))
  589. proceduresMoney := qutil.IntAll(qutil.If(res["procedures_money"] == "", 0, res["procedures_money"]))
  590. originalPayMoney := payMoney - commission - proceduresMoney
  591. //修改后的金额
  592. nowPayMoney := param.ContractMoney - qutil.IntAll(param.Commission) - qutil.IntAll(param.ProceduresMoney)
  593. //查看是否需要修改
  594. returnStatus := qutil.IntAll(res["return_status"])
  595. if originalPayMoney != nowPayMoney {
  596. //价格变动了
  597. if returnStatus == 1 {
  598. returnStatus = 2
  599. }
  600. }
  601. if param.ProductType == "企业商机管理" {
  602. if !updateEntnicheOrder(param, code, returnStatus) {
  603. return nil, errors.New("编辑其他订单失败")
  604. }
  605. } else if param.ProductType == "VIP订阅" {
  606. // 购买订单走原有编辑逻辑 开始时间为暂不开通
  607. if param.VipType == util.SuperSubCreate {
  608. param.VipStartTime = "2099-01-01"
  609. orderStatus, _ := updateVipOrder(param, code, returnStatus)
  610. if !orderStatus {
  611. return nil, errors.New("编辑VIP订单失败")
  612. }
  613. } else {
  614. // 升级和续费 只更新订单信息
  615. myUpdateSupSub(param, code, returnStatus)
  616. }
  617. } else {
  618. if !updateOtherOrder(param, code, returnStatus) {
  619. return nil, errors.New("编辑其他订单失败")
  620. }
  621. }
  622. // 判断是否需要修改用户类型
  623. // 销售渠道为内部员工赠送及豁免用户赠送时更新用户人群分类
  624. if (param.SalesChannel == util.SaleChannel052 || param.SalesChannel == util.SaleChannel053) && saleChannel != param.SalesChannel {
  625. UpdateUserType(param.SalesChannel, userId)
  626. }
  627. saveData := map[string]interface{}{
  628. "operator": context.User.Username,
  629. "create_time": qutil.NowFormat(qutil.Date_Full_Layout),
  630. "operator_type": util.OperateEdit,
  631. "audit_status": saveAuditStatus,
  632. "order_code": code,
  633. "audit_type": util.AuditCreate,
  634. }
  635. if !UpdateAudit(code, saveAuditStatus, saveData) {
  636. return nil, errors.New("更新订单审核状态及新增审核记录异常")
  637. }
  638. return nil, nil
  639. }
  640. // 修改订单
  641. func UpdateOrder(context *admin.Context) (interface{}, error) {
  642. param := &CreateOtherOrderParams{}
  643. err := context.Form(param)
  644. if err != nil {
  645. return nil, err
  646. }
  647. if param.OrderCode == "" {
  648. return nil, errors.New("缺少订单编号")
  649. }
  650. if param.SalesChannel == "" {
  651. return nil, errors.New("缺少销售渠道")
  652. }
  653. param.CreatePerson = context.User.Username
  654. insertData := map[string]interface{}{
  655. "salesperson": param.SalesPerson,
  656. "salesperson_id": param.SalesPersonId,
  657. "sale_time": qutil.If(param.SaleTime == "", nil, param.SaleTime), // 业务统计时间, // 业务统计时间
  658. "distribution_channel": param.SalesChannel,
  659. "last_update_person": param.CreatePerson,
  660. "last_update_time": qutil.NowFormat(qutil.Date_Full_Layout),
  661. }
  662. ok_1 := util.JysqlDB.Update("dataexport_order", map[string]interface{}{
  663. "order_code": param.OrderCode,
  664. }, insertData)
  665. if ok_1 {
  666. saveData := map[string]interface{}{
  667. "operator": context.User.Username,
  668. "create_time": qutil.NowFormat(qutil.Date_Full_Layout),
  669. "operator_type": util.OperateEdit,
  670. "audit_status": util.OrderPassed,
  671. "order_code": param.OrderCode,
  672. "audit_type": util.AuditCreate,
  673. }
  674. if !InsertAudit(saveData) {
  675. return nil, errors.New("审核轨迹保存失败")
  676. }
  677. return nil, nil
  678. } else {
  679. return nil, errors.New("修改订单失败")
  680. }
  681. }
  682. // 编辑回款信息
  683. func EditReturnMoneyInfo(context *admin.Context) (interface{}, error) {
  684. param := &UpdateReturnParams{}
  685. err := context.Form(param)
  686. if err != nil {
  687. return nil, err
  688. }
  689. if param.OrderCode == "" || param.ReturnMoney == 0 {
  690. return nil, errors.New("缺少关键参数")
  691. }
  692. //if param.ReturnVoucherUrl == "" {
  693. // return nil, errors.New("缺少回款凭证")
  694. //}
  695. orderData := util.JysqlDB.FindOne("dataexport_order", map[string]interface{}{"id": param.Id}, "", "")
  696. if orderData == nil || len(*orderData) == 0 {
  697. return nil, errors.New("未找到该订单")
  698. }
  699. return_status := qutil.IntAll((*orderData)["return_status"])
  700. if return_status == 1 {
  701. return nil, errors.New("订单已全额回款")
  702. }
  703. param.OperatePerson = context.User.Username
  704. status := UpdateReturnInfo(param, *orderData)
  705. return map[string]interface{}{"status": status}, nil
  706. }
  707. // 批量回款
  708. func EditBatchReturnMoneyInfo(context *admin.Context) (interface{}, error) {
  709. param := &Return{}
  710. err := context.Form(param)
  711. if err != nil {
  712. return nil, err
  713. }
  714. if param.OrderArr == nil {
  715. return nil, errors.New("缺少关键参数")
  716. }
  717. status := false
  718. realPrice := 0
  719. orderArr := map[string]map[string]interface{}{}
  720. if param.FlowType == 0 {
  721. //cbs回款
  722. price := 0
  723. //查询回款流水记录
  724. transactionData := util.CbsDB.FindOne("transaction", map[string]interface{}{"id": param.TransactionId}, "return_id,BNKNAM,BNKFLW,id,ACTNBR,TRSBAL,BNKTIM,OTHNAM,NUSAGE", "")
  725. if transactionData == nil || len(*transactionData) == 0 || qutil.ObjToString((*transactionData)["return_id"]) != "" {
  726. return nil, errors.New("未找到该流水")
  727. }
  728. //查询订单金额
  729. for _, value := range param.OrderArr {
  730. orderData := util.JysqlDB.SelectBySql("select (IFNULL( a.pay_money, 0 )-IFNULL(a.commission,0)-IFNULL(a.procedures_money,0))-(select IFNULL(sum(b.return_money),0) from return_money_record b where b.order_code=a.order_code and b.state=1) as outstandingPayment, a.* from dataexport_order a where a.id=? ", value["orderId"])
  731. if orderData == nil {
  732. continue
  733. }
  734. if qutil.IntAll(value["money"]) > qutil.IntAll((*orderData)[0]["outstandingPayment"]) {
  735. return nil, errors.New(qutil.ObjToString((*orderData)[0]["order_code"]) + "回款金额过大")
  736. }
  737. (*orderData)[0]["realPrice"] = qutil.IntAll(value["money"]) //回款
  738. (*orderData)[0]["returnVoucherUrl"] = param.ReturnVoucherUrl
  739. realPrice += qutil.IntAll(value["money"])
  740. orderArr[qutil.ObjToString((*orderData)[0]["order_code"])] = (*orderData)[0]
  741. log.Println(qutil.IntAll((*orderData)[0]["pay_money"]))
  742. price = price + qutil.IntAll((*orderData)[0]["outstandingPayment"]) //剩余回款
  743. }
  744. if price == 0 {
  745. return nil, errors.New("订单回款失败,回款金额不符合")
  746. }
  747. money := int(math.Floor(float64(float64(qutil.Float64All((*transactionData)["TRSBAL"]))*100 + 0.5))) //流水
  748. if realPrice > price {
  749. return nil, errors.New("订单回款失败,回款金额不符合")
  750. }
  751. if money == realPrice {
  752. //回款操作
  753. operatePerson := context.User.Username
  754. status = UpdateBatchReturnInfo(transactionData, orderArr, operatePerson, param)
  755. } else {
  756. return nil, errors.New("订单回款失败,回款金额不符合")
  757. }
  758. } else {
  759. //手动录入回款
  760. //查询订单金额
  761. for _, value := range param.OrderArr {
  762. orderData := util.JysqlDB.SelectBySql("select (IFNULL( a.pay_money, 0 )-IFNULL(a.commission,0)-IFNULL(a.procedures_money,0))-(select IFNULL(sum(b.return_money),0) from return_money_record b where b.order_code=a.order_code and b.state=1) as outstandingPayment, a.* from dataexport_order a where a.id=?", value["orderId"])
  763. if orderData == nil {
  764. continue
  765. }
  766. if qutil.IntAll(value["money"]) > qutil.IntAll((*orderData)[0]["outstandingPayment"]) {
  767. return nil, errors.New(qutil.ObjToString((*orderData)[0]["order_code"]) + "回款金额过大")
  768. }
  769. orderArr[qutil.ObjToString((*orderData)[0]["order_code"])] = (*orderData)[0]
  770. realPrice += qutil.IntAll(value["money"])
  771. (*orderData)[0]["realPrice"] = qutil.IntAll(value["money"]) //回款
  772. (*orderData)[0]["returnVoucherUrl"] = param.ReturnVoucherUrl
  773. }
  774. if param.ReturnMoney == realPrice {
  775. //回款操作
  776. operatePerson := context.User.Username
  777. status = ManualUpdateBatchReturnInfo(orderArr, operatePerson, param)
  778. } else {
  779. return nil, errors.New("订单回款失败,回款金额不符合")
  780. }
  781. }
  782. if status {
  783. return map[string]interface{}{"status": status}, nil
  784. } else {
  785. return nil, errors.New("订单回款失败")
  786. }
  787. }
  788. // 删除回款信息
  789. func DeleteBatchReturnMoneyInfo(context *admin.Context) (interface{}, error) {
  790. param := new(struct {
  791. Id string `form:"id"`
  792. })
  793. err := context.Form(param)
  794. if err != nil {
  795. return nil, err
  796. }
  797. if param.Id == "" {
  798. return nil, errors.New("缺少回款记录标识")
  799. }
  800. //先查看该回款是否存在
  801. returnData := util.JysqlDB.SelectBySql("select * from return_money_record where id =" + qutil.ObjToString(param.Id) + " and state=1")
  802. if returnData == nil || len(*returnData) == 0 {
  803. return nil, errors.New("查不到该条回款记录信息")
  804. }
  805. status := util.JysqlDB.ExecTx("编辑回款信息", func(tx *sql.Tx) bool {
  806. //判断是cbs还是手动录入hffv
  807. if qutil.Int64All((*returnData)[0]["flow_type"]) == 0 {
  808. //cbs数据需要特殊处理
  809. cbsData := util.CbsDB.SelectBySql("select * from `transaction` where FIND_IN_SET(" + qutil.ObjToString(param.Id) + ",return_id)")
  810. if cbsData != nil && len(*cbsData) > 0 {
  811. //修改回款流水记录
  812. updateTransactionData := map[string]interface{}{
  813. "return_id": "",
  814. "ISRELATION": 0,
  815. }
  816. ok_1 := util.CbsDB.Update("transaction", map[string]interface{}{"id": (*cbsData)[0]["id"]}, updateTransactionData)
  817. if !ok_1 {
  818. return false
  819. }
  820. }
  821. returnListData := &[]map[string]interface{}{}
  822. if qutil.ObjToString((*returnData)[0]["bank_flow"]) != "" {
  823. returnListData = util.JysqlDB.SelectBySql("select * from return_money_record where bank_flow ='" + qutil.ObjToString((*returnData)[0]["bank_flow"]) + "' and state=1")
  824. } else {
  825. returnListData = returnData
  826. }
  827. for _, value := range *returnListData {
  828. //查看该订单是否还存在别的回款信息
  829. returnData = util.JysqlDB.SelectBySql("select * from return_money_record where order_code ='" + qutil.ObjToString(value["order_code"]) + "' and state=1")
  830. if returnData == nil || len(*returnData) == 0 {
  831. return false
  832. }
  833. updateData := map[string]interface{}{
  834. "state": 0,
  835. }
  836. recordOk := util.JysqlDB.UpdateByTx(tx, "return_money_record", map[string]interface{}{"id": value["id"]}, updateData)
  837. if !recordOk {
  838. return false
  839. }
  840. orderData := map[string]interface{}{}
  841. if len((*returnData)) > 1 {
  842. //说明还有别的订单,订单回款需要改为部分回款
  843. orderData["return_status"] = 2
  844. } else if len((*returnData)) == 1 {
  845. //回款改为未回款
  846. orderData["return_status"] = 0
  847. }
  848. orderOk := util.JysqlDB.UpdateByTx(tx, "dataexport_order", map[string]interface{}{"order_code": value["order_code"]}, orderData)
  849. if !orderOk {
  850. return false
  851. }
  852. }
  853. } else {
  854. returnListData := &[]map[string]interface{}{}
  855. //手动录入处理简单,也会存在多个订单
  856. if qutil.Int64All((*returnData)[0]["return_type"]) == 3 {
  857. //回款方式,3-对公转账 通过银行流水号查找相同的
  858. returnListData = util.JysqlDB.SelectBySql("select * from return_money_record where bank_flow ='" + qutil.ObjToString((*returnData)[0]["bank_flow"]) + "' and state=1 and return_type=3")
  859. } else {
  860. //回款方式,通过支付单号查找相同的
  861. returnListData = util.JysqlDB.SelectBySql("select * from return_money_record where return_code ='" + qutil.ObjToString((*returnData)[0]["return_code"]) + "' and state=1 and return_type!=3")
  862. }
  863. for _, value := range *returnListData {
  864. //查看该订单是否还存在别的回款信息
  865. returnData = util.JysqlDB.SelectBySql("select * from return_money_record where order_code ='" + qutil.ObjToString(value["order_code"]) + "' and state=1")
  866. if returnData == nil || len(*returnData) == 0 {
  867. return false
  868. }
  869. updateData := map[string]interface{}{
  870. "state": 0,
  871. }
  872. recordOk := util.JysqlDB.UpdateByTx(tx, "return_money_record", map[string]interface{}{"id": value["id"]}, updateData)
  873. if !recordOk {
  874. return false
  875. }
  876. orderData := map[string]interface{}{}
  877. if len((*returnData)) > 1 {
  878. //说明还有别的订单,订单回款需要改为部分回款
  879. orderData["return_status"] = 2
  880. } else if len((*returnData)) == 1 {
  881. //回款改为未回款
  882. orderData["return_status"] = 0
  883. }
  884. orderOk := util.JysqlDB.UpdateByTx(tx, "dataexport_order", map[string]interface{}{"order_code": value["order_code"]}, orderData)
  885. if !orderOk {
  886. return false
  887. }
  888. }
  889. }
  890. return true
  891. })
  892. if status {
  893. return nil, err
  894. } else {
  895. return nil, errors.New("订单回款失败")
  896. }
  897. }
  898. // 回款流水
  899. func CollectionFlow(context *admin.Context) (interface{}, error) {
  900. param := new(struct {
  901. Offset int `form:"offset"`
  902. PageSize int `form:"pageSize"`
  903. CorporateName string `form:"corporateName"` //
  904. })
  905. err := context.Form(param)
  906. if err != nil {
  907. return nil, err
  908. }
  909. status := true
  910. if param.CorporateName == "" {
  911. return map[string]interface{}{"status": status, "list": []map[string]interface{}{}, "total": 0}, nil
  912. }
  913. transactionList := util.CbsDB.SelectBySql("select NUSAGE,BNKNAM,BNKFLW,id,TRSBAL,BNKTIM,OTHNAM from transaction where OTHNAM=? and ISRELATION =0 order by BNKTIM desc limit ? , ? ", param.CorporateName, param.Offset, param.PageSize)
  914. count := util.CbsDB.CountBySql("select count(id) from transaction where OTHNAM=? and ISRELATION =0 ", param.CorporateName)
  915. return map[string]interface{}{"status": status, "list": transactionList, "total": count}, nil
  916. }
  917. // 订单剩余回款计算
  918. func SurplusPrice(context *admin.Context) (interface{}, error) {
  919. param := new(struct {
  920. OrderArr []map[string]interface{} `form:"orderArr"`
  921. })
  922. err := context.Form(param)
  923. if err != nil {
  924. return nil, err
  925. }
  926. if param.OrderArr == nil {
  927. return nil, errors.New("请填入订单信息")
  928. }
  929. price := int(0)
  930. for key, value := range param.OrderArr {
  931. orderData := util.JysqlDB.SelectBySql("select (IFNULL( a.pay_money, 0 )-IFNULL(a.commission,0)-IFNULL(a.procedures_money,0))-(select IFNULL(sum(b.return_money),0) from return_money_record b where b.order_code=a.order_code and b.state=1) as outstandingPayment from dataexport_order a where a.id=?", value["orderId"])
  932. if orderData == nil {
  933. continue
  934. }
  935. param.OrderArr[key]["money"] = qutil.IntAll((*orderData)[0]["outstandingPayment"])
  936. price += qutil.IntAll((*orderData)[0]["outstandingPayment"])
  937. }
  938. status := true
  939. return map[string]interface{}{"status": status, "orderArr": param.OrderArr, "price": price}, nil
  940. }
  941. // 上传合同
  942. func UploadContractFile(context *admin.Context) (interface{}, error) {
  943. param := new(struct {
  944. Id int `form:"contractId"`
  945. ContractFileUrl string `form:"contractFileUrl"`
  946. OrderCode string `form:"orderCode"`
  947. })
  948. err := context.Form(param)
  949. if err != nil {
  950. return nil, err
  951. }
  952. if param.ContractFileUrl == "" {
  953. return nil, errors.New("缺少合同文件")
  954. }
  955. orderData := util.JysqlDB.FindOne("dataexport_order", map[string]interface{}{"order_code": param.OrderCode}, "", "")
  956. contractData := util.JysqlDB.FindOne("contract", map[string]interface{}{"id": param.Id}, "", "")
  957. var status bool
  958. if contractData == nil || len(*contractData) == 0 {
  959. if orderData == nil || len(*orderData) == 0 {
  960. return nil, errors.New("未找到该订单")
  961. } else {
  962. status = insertContractFile(param.OrderCode, param.ContractFileUrl, qutil.IntAll((*orderData)["order_money"]), orderData)
  963. }
  964. } else {
  965. status = UpdateContractFile(param.Id, param.ContractFileUrl, orderData)
  966. }
  967. return map[string]interface{}{"status": status}, nil
  968. }
  969. // 更新订单内容
  970. func UpdateSalesperson(context *admin.Context) (interface{}, error) {
  971. param := new(struct {
  972. OrderCode string `form:"orderCode"` //订单编号
  973. Salesperson string `form:"salesperson"` //销售人员名称
  974. Phone string `form:"phone"` //变更后手机号
  975. UserPhone string `form:"userPhone"` //变更前手机号
  976. UserId string `form:"userId"` //用户id
  977. StartTime int64 `form:"startTime"` //开始日期
  978. Cycle int `form:"cycle"` //周期
  979. CycleType int `form:"cycleType"` //周期类型
  980. SaleTime string `form:"saleTime"` //销售统计日期
  981. })
  982. err := context.Form(param)
  983. if err != nil {
  984. return nil, err
  985. }
  986. log.Println(param)
  987. orderData := util.JysqlDB.FindOne("dataexport_order", map[string]interface{}{"order_code": param.OrderCode}, "filter,is_backstage_order,sale_time", "")
  988. if param.Phone == "" && param.Salesperson == "" && param.StartTime == 0 && param.SaleTime == "" {
  989. return nil, errors.New("输入内容不能为空")
  990. }
  991. if param.Phone != "" {
  992. userData, ok := util.MQFW.FindOne("user", map[string]interface{}{"s_phone": param.Phone})
  993. userId, memberStatus := "", 0
  994. if ok && userData != nil && len(*userData) > 0 {
  995. userId = mongodb.BsonIdToSId((*userData)["_id"])
  996. memberStatus = qutil.IntAll((*userData)["i_member_status"])
  997. } else {
  998. userDatas, oks := util.MQFW.FindOne("user", map[string]interface{}{"s_m_phone": param.Phone})
  999. if oks && userDatas != nil && len(*userDatas) > 0 {
  1000. userId = mongodb.BsonIdToSId((*userDatas)["_id"])
  1001. memberStatus = qutil.IntAll((*userDatas)["i_member_status"])
  1002. }
  1003. }
  1004. if memberStatus > 0 {
  1005. return nil, errors.New("此手机号已有大会员权限,无法修改!")
  1006. }
  1007. if userId == "" {
  1008. datas, oks := util.MQFW.FindOne("user", map[string]interface{}{"_id": mongodb.StringTOBsonId(param.UserId)})
  1009. memberState, bigStart, bigEnd, paySub, freeSub := 0, int64(0), int64(0), 0, 0
  1010. if oks && datas != nil && len(*datas) > 0 {
  1011. memberState = qutil.IntAll((*datas)["i_member_status"])
  1012. bigStart = qutil.Int64All((*datas)["i_member_starttime"])
  1013. bigEnd = qutil.Int64All((*datas)["i_member_endtime"])
  1014. paySub = qutil.IntAll((*datas)["i_pay_sub_num"])
  1015. freeSub = qutil.IntAll((*datas)["i_free_sub_num"])
  1016. }
  1017. if memberState > 0 {
  1018. return nil, errors.New("订单大会员权益已经生效,无法修改!")
  1019. }
  1020. data := map[string]interface{}{
  1021. "i_appid": 2,
  1022. "s_phone": param.Phone,
  1023. "s_password": "",
  1024. "l_registedate": time.Now().Unix(),
  1025. "i_ts_guide": 2,
  1026. "o_jy": map[string]interface{}{
  1027. "i_apppush": 1,
  1028. "i_ratemode": 2,
  1029. "l_modifydate": time.Now().Unix(),
  1030. },
  1031. "s_regsource": "qmx_admin",
  1032. "i_mainaccount": 1,
  1033. "i_member_status": memberState,
  1034. "i_member_starttime": bigStart,
  1035. "i_member_endtime": bigEnd,
  1036. "i_pay_sub_num": paySub,
  1037. "i_free_sub_num": freeSub,
  1038. }
  1039. _id := util.MQFW.Save("user", data)
  1040. log.Println("新增用户", _id)
  1041. if _id != "" {
  1042. userId = _id
  1043. formdata := map[string]interface{}{
  1044. "appid": config.SysConfigs.AppId,
  1045. "phone": param.Phone,
  1046. "password": "",
  1047. }
  1048. if !strings.HasPrefix(param.Phone, "9") {
  1049. log.Println("addBaseUser start")
  1050. ck := &http.Cookie{}
  1051. usercenter.AddBaseUser(*util.MQFW, config.SysConfigs.UserCenterUrl, _id, formdata, ck)
  1052. log.Println("addBaseUser end")
  1053. } else {
  1054. log.Println("prefix with 9")
  1055. }
  1056. }
  1057. } else {
  1058. datas, oks := util.MQFW.FindOne("user", map[string]interface{}{"_id": mongodb.StringTOBsonId(param.UserId)})
  1059. memberState, bigStart, bigEnd, paySub, freeSub := 0, int64(0), int64(0), 0, 0
  1060. if oks && datas != nil && len(*datas) > 0 {
  1061. memberState = qutil.IntAll((*datas)["i_member_status"])
  1062. bigStart = qutil.Int64All((*datas)["i_member_starttime"])
  1063. bigEnd = qutil.Int64All((*datas)["i_member_endtime"])
  1064. paySub = qutil.IntAll((*datas)["i_pay_sub_num"])
  1065. freeSub = qutil.IntAll((*datas)["i_free_sub_num"])
  1066. }
  1067. if memberState > 0 {
  1068. return nil, errors.New("大会员权益已经生效,无法修改!")
  1069. }
  1070. sets := map[string]interface{}{
  1071. "i_member_status": memberState,
  1072. "i_member_starttime": bigStart,
  1073. "i_member_endtime": bigEnd,
  1074. "i_mainaccount": 1,
  1075. }
  1076. if paySub > 0 || freeSub > 0 {
  1077. sets["i_pay_sub_num"] = paySub
  1078. sets["i_free_sub_num"] = freeSub
  1079. }
  1080. set := map[string]interface{}{
  1081. "$set": sets,
  1082. }
  1083. util.MQFW.UpdateById("user", userId, set)
  1084. }
  1085. subData, okss := util.MQFW.Find("user", map[string]interface{}{"s_member_mainid": param.UserId}, nil, nil, false, -1, -1)
  1086. if okss && subData != nil && len(*subData) > 0 {
  1087. for _, v := range *subData {
  1088. util.MQFW.UpdateById("user", mongodb.BsonIdToSId(v["_id"]), map[string]interface{}{"$set": map[string]interface{}{"s_member_mainid": userId}})
  1089. }
  1090. }
  1091. oks := util.JysqlDB.Update("dataexport_order", map[string]interface{}{"order_code": param.OrderCode}, map[string]interface{}{"user_phone": param.Phone, "user_id": userId})
  1092. oks = util.JysqlDB.Update("dataexport_order", map[string]interface{}{"user_phone": param.UserPhone}, map[string]interface{}{"user_phone": param.Phone, "user_id": userId})
  1093. if oks {
  1094. okss := util.JysqlDB.Update("bigmember_service_user", map[string]interface{}{"s_userid": param.UserId}, map[string]interface{}{"s_userid": userId})
  1095. if okss {
  1096. log.Println("用户服务表修改用户id成功", param.UserId, userId)
  1097. if strings.HasPrefix(param.UserPhone, "9") {
  1098. util.MQFW.Del("user", map[string]interface{}{"s_phone": param.UserPhone})
  1099. util.JysqlDB.Delete("user", map[string]interface{}{"user_id": param.UserId})
  1100. }
  1101. } else {
  1102. log.Println("用户服务表修改用户id失败", param.UserId, userId)
  1103. }
  1104. } else {
  1105. log.Println("订单表修改用户手机号失败", param.OrderCode, param.Phone)
  1106. }
  1107. ClearBigVipUserPower(userId)
  1108. return map[string]interface{}{"status": ok}, nil
  1109. }
  1110. if param.Salesperson != "" {
  1111. ok := util.JysqlDB.Update("dataexport_order", map[string]interface{}{"order_code": param.OrderCode}, map[string]interface{}{"salesperson": param.Salesperson})
  1112. return map[string]interface{}{"status": ok}, nil
  1113. }
  1114. if param.StartTime != 0 {
  1115. startdate := time.Unix(param.StartTime, 0)
  1116. enddate := GetDATE(param.Cycle, param.CycleType, param.StartTime)
  1117. filterMap := qutil.ObjToMap((*orderData)["filter"])
  1118. (*filterMap)["effective_date"] = enddate.Format("2006/01/02")
  1119. filter_map, _ := json.Marshal(filterMap)
  1120. set := map[string]interface{}{
  1121. "$set": map[string]interface{}{
  1122. "i_member_starttime": param.StartTime,
  1123. "i_member_endtime": enddate.Unix(),
  1124. },
  1125. }
  1126. _, max := GetDayMinMax(time.Now())
  1127. datas, oks := util.MQFW.FindOne("user", map[string]interface{}{"_id": mongodb.StringTOBsonId(param.UserId)})
  1128. log.Println(datas, oks)
  1129. memberState, buyStart := 0, int64(0)
  1130. if oks && datas != nil && len(*datas) > 0 {
  1131. memberState = qutil.IntAll((*datas)["i_member_status"])
  1132. buyStart = qutil.Int64All((*datas)["i_member_starttime"])
  1133. }
  1134. log.Println(buyStart, time.Now().Unix())
  1135. if time.Now().Unix() >= buyStart {
  1136. if !strings.HasPrefix(param.UserPhone, "9") {
  1137. return nil, errors.New("大会员权益已生效,不能修改开始时间!")
  1138. }
  1139. }
  1140. if param.StartTime < max {
  1141. set = map[string]interface{}{
  1142. "$set": map[string]interface{}{
  1143. "i_member_starttime": param.StartTime,
  1144. "i_member_endtime": enddate.Unix(),
  1145. "i_member_status": qutil.If(memberState > 0, memberState, -memberState),
  1146. },
  1147. }
  1148. util.JysqlDB.Update("bigmember_service_user", map[string]interface{}{"s_userid": param.UserId}, map[string]interface{}{
  1149. "l_starttime": qutil.FormatDate(&startdate, qutil.Date_Full_Layout),
  1150. "l_endtime": qutil.FormatDate(&enddate, qutil.Date_Full_Layout),
  1151. "i_status": 0,
  1152. })
  1153. } else {
  1154. util.JysqlDB.Update("bigmember_service_user", map[string]interface{}{"s_userid": param.UserId}, map[string]interface{}{
  1155. "l_starttime": qutil.FormatDate(&startdate, qutil.Date_Full_Layout),
  1156. "l_endtime": qutil.FormatDate(&enddate, qutil.Date_Full_Layout),
  1157. })
  1158. }
  1159. util.JysqlDB.Update("dataexport_order", map[string]interface{}{"order_code": param.OrderCode}, map[string]interface{}{
  1160. "vip_starttime": qutil.FormatDate(&startdate, qutil.Date_Full_Layout),
  1161. "vip_endtime": qutil.FormatDate(&enddate, qutil.Date_Full_Layout),
  1162. "filter": string(filter_map),
  1163. })
  1164. // 同步修改子账号的有效时间 查询条件为大会员订单的创建时间同一天的和手机号。
  1165. //1. 计算出当天的时间范围
  1166. orderData2 := util.JysqlDB.FindOne("dataexport_order", map[string]interface{}{"order_code": param.OrderCode}, "filter,create_time,user_phone", "")
  1167. today, _ := time.ParseInLocation(qutil.Date_Full_Layout, qutil.ObjToString((*orderData2)["create_time"]), time.Local)
  1168. updateSubPhone := (*orderData2)["user_phone"]
  1169. createMin, createMax := GetDayMinMax(today)
  1170. //2. 根据查询条件查询出需要更新订单
  1171. log.Println("userphone")
  1172. subDataList := util.JysqlDB.SelectBySql("select * from dataexport_order where user_phone=? and create_time>=? and create_time<=?", updateSubPhone, qutil.FormatDateByInt64(&createMin, qutil.Date_Full_Layout), qutil.FormatDateByInt64(&createMax, qutil.Date_Full_Layout))
  1173. if subDataList != nil && len(*subDataList) > 0 {
  1174. //3. 执行更新操作
  1175. for _, subData := range *subDataList {
  1176. // 拿出原来的filter
  1177. filterMapSub := qutil.ObjToMap((subData)["filter"])
  1178. // 修改有效周期
  1179. (*filterMapSub)["effective_date"] = enddate.Format("2006/01/02")
  1180. filter_map_sub, _ := json.Marshal(filterMapSub)
  1181. // 执行更新
  1182. util.JysqlDB.Update("dataexport_order", map[string]interface{}{"order_code": (subData)["order_code"]}, map[string]interface{}{
  1183. "filter": string(filter_map_sub),
  1184. })
  1185. }
  1186. } else {
  1187. log.Println("未找到与之关联的订单", param.OrderCode, param.UserPhone, qutil.FormatDateByInt64(&createMin, qutil.Date_Full_Layout), qutil.FormatDateByInt64(&createMax, qutil.Date_Short_Layout))
  1188. }
  1189. util.MQFW.UpdateById("user", param.UserId, set)
  1190. ClearBigVipUserPower(param.UserId)
  1191. }
  1192. // 订单补录需求0926 补充需求添加
  1193. if param.SaleTime != "" {
  1194. if orderData != nil {
  1195. isBack := (*orderData)["is_backstage_order"]
  1196. log.Println(isBack, (*orderData))
  1197. if qutil.IntAll(isBack) == 1 {
  1198. return nil, errors.New("后台创建订单不可修改销售统计时间")
  1199. } else {
  1200. orderSaleTime := (*orderData)["sale_time"]
  1201. if orderSaleTime != nil {
  1202. return nil, errors.New("线上的单子修改后不能再次修改")
  1203. }
  1204. }
  1205. }
  1206. ok := util.JysqlDB.Update("dataexport_order", map[string]interface{}{"order_code": param.OrderCode}, map[string]interface{}{"sale_time": param.SaleTime})
  1207. return map[string]interface{}{"status": ok}, nil
  1208. }
  1209. return map[string]interface{}{"status": true}, nil
  1210. }
  1211. func GetDayMinMax(t time.Time) (int64, int64) {
  1212. min := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, time.Local).Unix()
  1213. return min, min + 86400
  1214. }
  1215. // 创建超级订阅订单选择升级、续费回显结束日期
  1216. func VipInfo(context *admin.Context) (interface{}, error) {
  1217. param := new(struct {
  1218. Phone string `form:"phone"`
  1219. OrderCode string `form:"orderCode"`
  1220. BuySubject string `form:"buySubject"`
  1221. })
  1222. err := context.Form(param)
  1223. if err != nil {
  1224. return nil, err
  1225. }
  1226. var willEffect bool
  1227. //先判断用户是否有即将生效的超级订阅订单
  1228. query := map[string]interface{}{
  1229. "s_phone": param.Phone,
  1230. "l_vip_starttime": map[string]interface{}{
  1231. "$gt": time.Now().Unix(),
  1232. },
  1233. }
  1234. log.Println(query)
  1235. count1 := util.MQFW.Count("user", query)
  1236. if count1 > 0 {
  1237. willEffect = true
  1238. } else {
  1239. query2 := map[string]interface{}{
  1240. "s_m_phone": param.Phone,
  1241. "l_vip_starttime": map[string]interface{}{
  1242. "$gt": time.Now().Unix(),
  1243. },
  1244. }
  1245. count2 := util.MQFW.Count("user", query2)
  1246. if count2 > 0 {
  1247. willEffect = true
  1248. }
  1249. }
  1250. if param.OrderCode != "" && willEffect == true { // 如果是编辑订单并且用户开始时间大于当前时间,需要再验证一下是否
  1251. notStart := ExistNotStartOrder(param.Phone, SUPERSUB, param.OrderCode)
  1252. if !notStart {
  1253. willEffect = false
  1254. }
  1255. }
  1256. // 增加如若存在订单审核状态为“待一审”、“待二审”、“已退回”的超级订阅订单的则不允许创建
  1257. if ExistProcessOrder(param.Phone, SUPERSUB, param.OrderCode) {
  1258. willEffect = true
  1259. }
  1260. if willEffect {
  1261. return map[string]interface{}{
  1262. "willEffect": true,
  1263. }, nil
  1264. }
  1265. //判断用户购买过超级订阅并且在有效期内 i_vip_status 开启状态:0-暂不使用vip订阅 1-试用 2-正式 -1-试用到期 -2-正式到期
  1266. userInfo := map[string]interface{}{}
  1267. userData, ok := util.MQFW.FindOneByField("user", map[string]interface{}{"s_phone": param.Phone, "i_vip_status": 2}, `{"_id":1,"i_vip_expire_tip":1,"i_vip_status":1,"l_vip_endtime":1,"l_vip_starttime":1,"o_vipjy":1}`)
  1268. if ok && userData != nil && len(*userData) > 0 {
  1269. userInfo = *userData
  1270. } else {
  1271. userDatas, oks := util.MQFW.FindOneByField("user", map[string]interface{}{"s_m_phone": param.Phone, "i_vip_status": 2}, `{"_id":1,"i_vip_expire_tip":1,"i_vip_status":1,"l_vip_endtime":1,"l_vip_starttime":1,"o_vipjy":1}`)
  1272. if oks && userDatas != nil && len(*userDatas) > 0 {
  1273. userInfo = *userDatas
  1274. } else {
  1275. return map[string]interface{}{
  1276. "willEffect": false,
  1277. "userData": nil,
  1278. "vipExist": false,
  1279. }, nil
  1280. }
  1281. }
  1282. if userInfo != nil && len(userInfo) > 0 {
  1283. log.Println(userInfo)
  1284. userId := mongodb.BsonIdToSId(userInfo["_id"])
  1285. //查询订单信息获取客户名称
  1286. orderInfo := util.JysqlDB.SelectBySql("SELECT c.customer_name,d.company_name FROM dataexport_order d LEFT JOIN contract c ON c.order_code = d.order_code WHERE product_type = 'VIP订阅' and user_id = ? ORDER BY d.id DESC", userId)
  1287. if len(*orderInfo) == 0 && param.BuySubject != "2" {
  1288. return nil, errors.New("查询订单表没有查到订单信息")
  1289. }
  1290. vipInfo := qutil.ObjToMap(userInfo["o_vipjy"])
  1291. buySet := qutil.ObjToMap((*vipInfo)["o_buyset"])
  1292. areaCount := qutil.IntAll((*buySet)["areacount"])
  1293. //判断购买区域是否是全国
  1294. nationwide := false
  1295. //log.Println(area)
  1296. if areaCount == -1 {
  1297. nationwide = true
  1298. }
  1299. if areaCount == -1 {
  1300. areaCount = 0
  1301. }
  1302. //area := qutil.ObjToMap((*vipInfo)["o_area"])
  1303. userInfo["areaCount"] = areaCount
  1304. //判断是新版超级订阅还是老版超级订阅
  1305. newVip := false
  1306. if qutil.IntAll((*buySet)["upgrade"]) == 1 {
  1307. newVip = true
  1308. }
  1309. t := qutil.Int64All(userInfo["l_vip_endtime"])
  1310. _t := time.Unix(t, 0)
  1311. userInfo["vipStartTime"] = (_t.AddDate(0, 0, 1)).Format(qutil.Date_Short_Layout)
  1312. data := map[string]interface{}{
  1313. "willEffect": false,
  1314. "vipExist": true,
  1315. "nationwide": nationwide,
  1316. "userData": userInfo,
  1317. "newVip": newVip,
  1318. }
  1319. if len((*orderInfo)) > 0 {
  1320. data["orderInfo"] = (*orderInfo)[0]
  1321. }
  1322. return data, nil
  1323. }
  1324. return map[string]interface{}{
  1325. "willEffect": false,
  1326. "userData": nil,
  1327. "vipExist": false,
  1328. "nationwide": false,
  1329. "new": false,
  1330. }, nil
  1331. //return nil, nil
  1332. }
  1333. func CreateVipOrder(context *admin.Context) (interface{}, error) {
  1334. param := &CreateOtherOrderParams{}
  1335. err := context.Form(param)
  1336. if err != nil {
  1337. return nil, err
  1338. }
  1339. param.Area = "北京"
  1340. param.VipStartTime = time.Now().Format(qutil.Date_Short_Layout)
  1341. param.CreateTime = time.Now().Format(qutil.Date_Full_Layout)
  1342. param.ProductType = "VIP订阅"
  1343. param.ChargeMode = 1
  1344. param.VipType = 0
  1345. param.ContractStatus = 0
  1346. param.VipType = 0
  1347. newCity := []int{}
  1348. subvipBuySet := &util.SubvipBuySet{
  1349. Upgrade: 0,
  1350. AreaCount: 1,
  1351. NewCitys: newCity,
  1352. BuyerclassCount: -1,
  1353. }
  1354. renew_price := 0
  1355. if param.CycleUnit != 3 {
  1356. renew_price = util.GetSubVipPriceByBuySet(subvipBuySet, param.CycleCount, param.CycleUnit, false)
  1357. }
  1358. param.ContractMoney = renew_price
  1359. //查找之前是否开通超级订阅
  1360. userInfo, oks := util.MQFW.FindOneByField("user", map[string]interface{}{"_id": mongodb.StringTOBsonId(param.UserId)}, `{"_id":1,"i_vip_expire_tip":1,"i_vip_status":1,"l_vip_endtime":1,"l_vip_starttime":1,"o_vipjy":1,"s_m_phone":1,"s_phone":1}`)
  1361. if oks && userInfo != nil && len(*userInfo) > 0 {
  1362. if (*userInfo)["s_phone"] == nil {
  1363. param.Phone = fmt.Sprint((*userInfo)["s_m_phone"])
  1364. } else {
  1365. param.Phone = fmt.Sprint((*userInfo)["s_phone"])
  1366. }
  1367. //先判断用户是否有即将生效的超级订阅订单
  1368. query := map[string]interface{}{
  1369. "_id": mongodb.StringTOBsonId(param.UserId),
  1370. "l_vip_starttime": map[string]interface{}{
  1371. "$gt": time.Now().Unix(),
  1372. },
  1373. }
  1374. count1 := util.MQFW.Count("user", query)
  1375. if count1 > 0 {
  1376. //有即将生效的
  1377. //查询到截止时间
  1378. //查询订单信息获取客户名称
  1379. vipInfo := qutil.ObjToMap((*userInfo)["o_vipjy"])
  1380. buySet := qutil.ObjToMap((*vipInfo)["o_buyset"])
  1381. areaCount := qutil.IntAll((*buySet)["areacount"])
  1382. if areaCount == -1 {
  1383. //全国省份
  1384. } else {
  1385. //单个省份
  1386. oArea := qutil.ObjToMap((*vipInfo)["o_area"])
  1387. area := ""
  1388. for key, _ := range *oArea {
  1389. area += key + ","
  1390. }
  1391. if len(area) > 0 {
  1392. area = area[:len(area)-1]
  1393. }
  1394. param.Area = area
  1395. }
  1396. t := qutil.Int64All((*userInfo)["l_vip_endtime"])
  1397. _t := time.Unix(t, 0)
  1398. vipStartTime := (_t.AddDate(0, 0, 1)).Format(qutil.Date_Short_Layout)
  1399. param.StartTime = vipStartTime
  1400. param.VipStartTime = vipStartTime
  1401. param.VipType = 1
  1402. newCity, _ := (*buySet)["newcitys"].([]interface{})
  1403. subvipBuySet := &util.SubvipBuySet{
  1404. Upgrade: qutil.IntAll((*buySet)["upgrade"]),
  1405. AreaCount: qutil.IntAll((*buySet)["areacount"]),
  1406. NewCitys: util.ConfirmIntArr(newCity),
  1407. BuyerclassCount: qutil.IntAll((*buySet)["buyerclasscount"]),
  1408. }
  1409. if param.CycleUnit != 3 {
  1410. renew_price = util.GetSubVipPriceByBuySet(subvipBuySet, param.CycleCount, param.CycleUnit, false)
  1411. }
  1412. param.ContractMoney = renew_price
  1413. }
  1414. //查询是有是超级订阅的数据
  1415. //判断用户购买过超级订阅并且在有效期内 i_vip_status 开启状态:0-暂不使用vip订阅 1-试用 2-正式 -1-试用到期 -2-正式到期
  1416. userDatas, oks := util.MQFW.FindOneByField("user", map[string]interface{}{"_id": mongodb.StringTOBsonId(param.UserId), "i_vip_status": 2}, `{"_id":1,"i_vip_expire_tip":1,"i_vip_status":1,"l_vip_endtime":1,"l_vip_starttime":1,"o_vipjy":1}`)
  1417. if oks && userDatas != nil && len(*userDatas) > 0 {
  1418. //正在生效的
  1419. if fmt.Sprint((*userInfo)["i_vip_status"]) == "2" {
  1420. //查询订单信息获取客户名称
  1421. vipInfo := qutil.ObjToMap((*userInfo)["o_vipjy"])
  1422. buySet := qutil.ObjToMap((*vipInfo)["o_buyset"])
  1423. areaCount := qutil.IntAll((*buySet)["areacount"])
  1424. if areaCount == -1 {
  1425. //全国省份
  1426. param.Area = "全国"
  1427. } else {
  1428. //单个省份
  1429. oArea := qutil.ObjToMap((*vipInfo)["o_area"])
  1430. area := ""
  1431. for key, _ := range *oArea {
  1432. area += key + ","
  1433. }
  1434. if len(area) > 0 {
  1435. area = area[:len(area)-1]
  1436. }
  1437. param.Area = area
  1438. }
  1439. t := qutil.Int64All((*userInfo)["l_vip_endtime"])
  1440. _t := time.Unix(t, 0)
  1441. vipStartTime := (_t.AddDate(0, 0, 1)).Format(qutil.Date_Short_Layout)
  1442. param.StartTime = time.Now().Format(qutil.Date_Short_Layout)
  1443. param.VipStartTime = vipStartTime
  1444. param.VipType = 1
  1445. newCity, _ := (*buySet)["newcitys"].([]interface{})
  1446. subvipBuySet := &util.SubvipBuySet{
  1447. Upgrade: qutil.IntAll((*buySet)["upgrade"]),
  1448. AreaCount: qutil.IntAll((*buySet)["areacount"]),
  1449. NewCitys: util.ConfirmIntArr(newCity),
  1450. BuyerclassCount: qutil.IntAll((*buySet)["buyerclasscount"]),
  1451. }
  1452. if param.CycleUnit != 3 {
  1453. renew_price = util.GetSubVipPriceByBuySet(subvipBuySet, param.CycleCount, param.CycleUnit, false)
  1454. }
  1455. param.ContractMoney = renew_price
  1456. }
  1457. }
  1458. }
  1459. code := fmt.Sprintf("%s%s", time.Now().Format("150405"), qutil.GetRandom(6))
  1460. //param.OrderMoney = param.ContractMoney
  1461. param.DisCountPrice = param.ContractMoney
  1462. param.Badge = "give"
  1463. param.ChargeMode = 0
  1464. param.ProceduresMoney = "0"
  1465. param.OrderChannel = "xdqd02"
  1466. param.Commission = "0"
  1467. param.SalesChannel = util.SaleChannel051
  1468. param.PaybackCompany = "h01"
  1469. param.OrderStatus = 1
  1470. param.AuditStatus = 3 // 0:待提交 1:待审核 2:一审通过 3:审核通过 -2 一审退回 -3 二审退回
  1471. param.Open = true // 开通权限
  1472. fool, endTime := createVipOrder(param, code)
  1473. if !fool {
  1474. return nil, errors.New("创建VIP订单失败")
  1475. }
  1476. saveData := map[string]interface{}{
  1477. "operator": "_",
  1478. "create_time": qutil.NowFormat(qutil.Date_Full_Layout),
  1479. "operator_type": util.OperateCreate,
  1480. "audit_status": util.OrderPassed,
  1481. "order_code": code,
  1482. "audit_type": util.AuditCreate,
  1483. }
  1484. if !InsertAudit(saveData) {
  1485. return nil, errors.New("审核轨迹保存失败")
  1486. }
  1487. return map[string]interface{}{
  1488. "code": code,
  1489. "vipStartTime": param.VipStartTime,
  1490. "vipEndTime": endTime,
  1491. }, nil
  1492. }
  1493. func CreateResourcesOrder(context *admin.Context) (interface{}, error) {
  1494. param := &CreateOtherOrderParams{}
  1495. err := context.Form(param)
  1496. if err != nil {
  1497. return nil, err
  1498. }
  1499. param.ProductType = "数据流量包"
  1500. param.ProceduresMoney = "0"
  1501. param.OrderChannel = "xdqd02"
  1502. param.Commission = "0"
  1503. param.SalesChannel = util.SaleChannel051
  1504. param.PaybackCompany = "h01"
  1505. param.OrderStatus = 1
  1506. param.CreateTime = qutil.NowFormat(qutil.Date_Full_Layout) // 取当前时间为创建时间
  1507. param.AuditStatus = 3 // 0:待提交 1:待审核 2:一审通过 3:审核通过 -2 一审退回 -3 二审退回
  1508. param.Open = true // 开通权限
  1509. code := fmt.Sprintf("%s%s", time.Now().Format("150405"), qutil.GetRandom(6))
  1510. if !createOtherOrder(param, code) {
  1511. return nil, errors.New("创建数据流量包订单失败")
  1512. }
  1513. saveData := map[string]interface{}{
  1514. "operator": "_",
  1515. "create_time": qutil.NowFormat(qutil.Date_Full_Layout),
  1516. "operator_type": util.OperateCreate,
  1517. "audit_status": util.OrderPassed,
  1518. "order_code": code,
  1519. "audit_type": util.AuditCreate,
  1520. }
  1521. if !InsertAudit(saveData) {
  1522. return nil, errors.New("审核轨迹保存失败")
  1523. }
  1524. return map[string]interface{}{
  1525. "code": code,
  1526. }, nil
  1527. }
  1528. func NameList(context *admin.Context) (interface{}, error) {
  1529. param := new(struct {
  1530. Name string `form:"name"`
  1531. })
  1532. err := context.Form(param)
  1533. if err != nil {
  1534. return nil, err
  1535. }
  1536. rs := GetNameList(param.Name)
  1537. var names []map[string]interface{}
  1538. if rs != nil && len(*rs) > 0 {
  1539. names = *rs
  1540. }
  1541. return map[string]interface{}{
  1542. "lists": names,
  1543. "total": len(names),
  1544. }, nil
  1545. }