otherOrderController.go 58 KB

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