InvoiceService.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578
  1. package service
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "entity"
  6. "fmt"
  7. "github.com/robfig/cron"
  8. "io/ioutil"
  9. "math/rand"
  10. "net/http"
  11. "spirit/redis"
  12. "spirit/web/core"
  13. "strconv"
  14. "strings"
  15. "time"
  16. "util"
  17. )
  18. type InvoiceService struct{}
  19. var (
  20. invoiceService = InvoiceService{}
  21. )
  22. // 发票开具
  23. func (u *InvoiceService) InvoiceAdd(solgan *entity.Invoice, resType string, isLoop int, isRed string) (string, int, interface{}) {
  24. util.Loger.Println("流水号:", solgan.Swno)
  25. rand.Seed(time.Now().Unix())
  26. solgan.InvoMemo = solgan.Swno
  27. solgan.OrderCode = solgan.Swno
  28. if isLoop == 0 {
  29. solgan.Swno = strings.Replace(fmt.Sprintln(solgan.Swno+fmt.Sprintf("%06v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(1000000))), "\n", "", -1)
  30. }
  31. solgan.SaleTax = entity.SaleTax
  32. solgan.InvType = entity.InvType
  33. solgan.BillType = entity.BillType
  34. solgan.Kpy = entity.Kpr
  35. solgan.SpecialRedFlag = entity.SpecialRedFlag
  36. solgan.OperationCode = entity.OperationCode
  37. solgan.Verified = entity.Verified
  38. solgan.Fhr = entity.Fhr
  39. solgan.Sky = entity.Sky
  40. now := time.Now()
  41. solgan.BillDate = now.Format("2006-01-02 15:04:05")
  42. /*url := entity.Url + "?build_invoice"
  43. util.Loger.Println("流水号:", solgan.Swno, "开具发票:数据", solgan)
  44. bytesData, _ := json.Marshal(solgan)
  45. reader := bytes.NewReader(bytesData)
  46. request, _ := http.NewRequest("POST", url, reader)
  47. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  48. client := http.Client{}
  49. resp, err := client.Do(request)*/
  50. //不成功时
  51. var err error
  52. err = nil
  53. //正常
  54. //if (err != nil) {
  55. if (err == nil) {
  56. util.Loger.Println("开票服有问题", err)
  57. if isLoop == 0 {
  58. arr := strings.Split(entity.WarningEmail, ",")
  59. for _, value := range arr {
  60. util.SendPdf(value, true, solgan.Swno, "发票开具时服务出现问题")
  61. }
  62. solgan.ResType = resType
  63. solgan.IsRed = isRed
  64. u.OpeningTimer(solgan)
  65. }
  66. data1 := make(map[string]interface{})
  67. data1["fpdm"] = ""
  68. data1["fphm"] = ""
  69. data1["swno"] = solgan.Swno
  70. data1["path"] = ""
  71. return "剑鱼标讯订开票服务预警", 3, data1
  72. }
  73. /*respBytes, err := ioutil.ReadAll(resp.Body)
  74. fmt.Sprint(err)
  75. data := make(map[string]interface{})
  76. if err := json.Unmarshal([]byte(respBytes), &data); err == nil {
  77. fmt.Println(solgan.Swno, "开票返回值:", data)
  78. }*/
  79. //开具成功
  80. data := make(map[string]interface{})
  81. data["returnCode"] = "0000"
  82. //开具失败
  83. //data["returnCode"]="100"
  84. util.Loger.Println("流水号:", solgan.Swno, "开具发票:结果", data)
  85. //开票正常时
  86. //data["returnCode"] = entity.LineUpCode
  87. if (data["returnCode"] == entity.LineUpCode || data["returnCode"] == entity.SealCode || data["returnCode"] == entity.SuccessCode) {
  88. pdfData, code, msg := u.InvoiceDownload(solgan.Swno, solgan.SaleTax, isRed, 0, 0, solgan.Changed, resType, solgan.OrderCode)
  89. if (fmt.Sprint(code) == entity.SuccessCode) {
  90. data1 := make(map[string]interface{})
  91. data1["fpdm"] = pdfData["fpdm"]
  92. data1["fphm"] = pdfData["fphm"]
  93. data1["swno"] = solgan.Swno
  94. data1["path"] = pdfData["path"]
  95. return msg, 0, data1
  96. } else {
  97. data1 := make(map[string]interface{})
  98. data1["fpdm"] = pdfData["fpdm"]
  99. data1["fphm"] = pdfData["fphm"]
  100. data1["swno"] = solgan.Swno
  101. data1["path"] = pdfData["path"]
  102. return msg, code, data1
  103. }
  104. } else {
  105. arr := strings.Split(entity.WarningEmail, ",")
  106. for _, value := range arr {
  107. util.SendPdf(value, true, solgan.Swno, "发票开具时出现问题")
  108. }
  109. return fmt.Sprintln(data["returnMsg"]), 1, data
  110. }
  111. }
  112. // 发票下载
  113. func (u *InvoiceService) InvoiceDownload(swno string, saleTax string, isRed string, isLoop int, isfeedback int, changed string, resType string, orderCode string) (map[string]interface{}, int, string) {
  114. song := make(map[string]interface{})
  115. song["swno"] = swno
  116. song["saleTax"] = saleTax
  117. bytesData, _ := json.Marshal(song)
  118. fmt.Println("json", string(bytesData))
  119. /*
  120. url := entity.Url + "?get_invoice"
  121. reader := bytes.NewReader(bytesData)
  122. request, err := http.NewRequest("POST", url, reader)
  123. fmt.Println(err)
  124. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  125. client := http.Client{}
  126. resp, err := client.Do(request)*/
  127. //不成功时
  128. var err error
  129. err = nil
  130. //正常
  131. if (err != nil) {
  132. //if (err == nil) {
  133. data1 := make(map[string]interface{})
  134. data1["fpdm"] = ""
  135. data1["fphm"] = ""
  136. data1["swno"] = ""
  137. data1["path"] = ""
  138. if isLoop == 0 {
  139. arr := strings.Split(entity.WarningEmail, ",")
  140. for _, value := range arr {
  141. util.SendPdf(value, true, swno, "发票下载时服务出现问题")
  142. }
  143. solgan := entity.Invoice{
  144. Swno: swno,
  145. SaleTax: saleTax,
  146. IsRed: isRed,
  147. Changed: changed,
  148. ResType: resType,
  149. }
  150. u.OpeningTimer(&solgan)
  151. }
  152. return data1, 1, "剑鱼标讯订开票服务预警"
  153. }
  154. //正常
  155. /*respBytes, err := ioutil.ReadAll(resp.Body)
  156. var dat *entity.GetInvoice
  157. util.Loger.Println("发票下载:", "流水号:", swno, "结果:", respBytes)
  158. if err := json.Unmarshal([]byte(respBytes), &dat); err == nil {
  159. fmt.Println(swno, "发票下载返回值:", dat)
  160. }*/
  161. //异常
  162. dat := entity.GetInvoice{}
  163. dat.ReturnMsg.MsgCode = "0000"
  164. //排队中
  165. //dat.ReturnMsg.MsgCode="1089"
  166. //失败
  167. //dat.ReturnMsg.MsgCode = "1000"
  168. util.Loger.Println("发票下载:", "流水号:", swno, "结果:", dat)
  169. //dat.ReturnMsg.MsgCode = entity.LineUpCode
  170. if (dat.ReturnMsg.MsgCode == entity.SuccessCode) {
  171. var swno1 string
  172. if (isRed == "true") {
  173. swno1 = swno[4:len(swno)]
  174. } else {
  175. swno1 = swno
  176. }
  177. fmt.Println(swno1)
  178. pdfData := make(map[string]interface{})
  179. //path := util.ImgHandle(dat.FpMsgs[0].PdfContent, swno, saleTax, swno1)
  180. path := "/c/v/c/v"
  181. pdfData["path"] = path
  182. /* pdfData["fpdm"] = dat.FpMsgs[0].Fpdm
  183. pdfData["fphm"] = dat.FpMsgs[0].Fphm*/
  184. pdfData["fpdm"] = "Fpdm"
  185. pdfData["fphm"] = "Fphm"
  186. pdfData["swno"] = swno
  187. return pdfData, 0, dat.ReturnMsg.Msg
  188. } else if (dat.ReturnMsg.MsgCode == entity.LineUpCode || dat.ReturnMsg.MsgCode == entity.SealCode) {
  189. if isLoop == 0 {
  190. u.Timer(swno, saleTax, isRed, isfeedback, changed, resType, orderCode)
  191. }
  192. return nil, 2, dat.ReturnMsg.Msg
  193. } else {
  194. arr := strings.Split(entity.WarningEmail, ",")
  195. for _, value := range arr {
  196. util.SendPdf(value, true, swno, "发票下载时出现问题,"+dat.ReturnMsg.Msg)
  197. }
  198. return nil, 1, dat.ReturnMsg.Msg
  199. }
  200. }
  201. // 发票是否存在
  202. //noinspection ALL
  203. func (u *InvoiceService) InvoiceSee(swno string, saleTax string, model string) (int, interface{}, string) {
  204. var swno1 string
  205. if (model == "true") {
  206. swno1 = "RED_" + swno
  207. } else {
  208. swno1 = swno
  209. }
  210. fool := util.Exists("./static/res/" + saleTax + "/" + swno + "/" + swno1 + ".pdf")
  211. msg := "发票地址"
  212. if fool {
  213. pdfData := make(map[string]interface{})
  214. pdfData["path"] = entity.PdfUrl + "/static/res/" + saleTax + "/" + swno + "/" + swno1 + ".pdf"
  215. pdfData["fpdm"] = ""
  216. pdfData["fphm"] = ""
  217. } else {
  218. return 1, "path", msg
  219. }
  220. return 0, "", msg
  221. }
  222. // 退票
  223. //noinspection ALL
  224. func (u *InvoiceService) InvoiceRedSubmit(fpdm string, fphm string, orderCode string, resType string, changed string, isLoop int, solgan *entity.Invoice) (string, int, interface{}) {
  225. url := entity.Url + "?redSubmitEInvoiceInfo"
  226. model := "1"
  227. if (changed == "1") {
  228. model = "2"
  229. }
  230. song := make(map[string]interface{})
  231. song["fpdm"] = fpdm
  232. song["fphm"] = fphm
  233. solgan.Yfphm = fphm
  234. solgan.Yfpdm = fpdm
  235. solgan.IsRed = "true"
  236. solgan.Changed = changed
  237. solgan.ResType = resType
  238. solgan.Model = model
  239. solgan.OrderCode = orderCode
  240. bytesData, _ := json.Marshal(song)
  241. fmt.Println("json", string(bytesData))
  242. reader := bytes.NewReader(bytesData)
  243. request, err := http.NewRequest("POST", url, reader)
  244. fmt.Println(err)
  245. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  246. client := http.Client{}
  247. resp, err := client.Do(request)
  248. if (err != nil) {
  249. data1 := make(map[string]interface{})
  250. data1["fpdm"] = ""
  251. data1["fphm"] = ""
  252. data1["swno"] = ""
  253. data1["path"] = ""
  254. if isLoop == 0 {
  255. arr := strings.Split(entity.WarningEmail, ",")
  256. for _, value := range arr {
  257. util.SendPdf(value, true, solgan.Swno, "发票退票时服务出现问题")
  258. }
  259. u.OpeningTimer(solgan)
  260. }
  261. if (model == "2") {
  262. return "剑鱼标讯订开票服务预警", 3, data1
  263. } else {
  264. return "剑鱼标讯订开票服务预警", 2, data1
  265. }
  266. }
  267. respBytes, err := ioutil.ReadAll(resp.Body)
  268. data := make(map[string]interface{})
  269. if err := json.Unmarshal([]byte(respBytes), &data); err == nil {
  270. fmt.Println(fphm, "冲红返回值:", data)
  271. }
  272. util.Loger.Println("冲红:", "发票单号:", fpdm, "发票号码:", fphm, "结果:", data)
  273. //data["returnCode"] = entity.LineUpCode
  274. if (data["returnCode"] == entity.LineUpCode || data["returnCode"] == entity.SealCode || data["returnCode"] == entity.SuccessCode) {
  275. pdfData, code, msg := u.InvoiceDownload(data["redSwno"].(string), data["saleTax"].(string), "true", int(0), int(0), changed, resType, orderCode)
  276. if (fmt.Sprint(code) == "0") {
  277. data1 := map[string]interface{}{
  278. "fpdm": pdfData["fpdm"],
  279. "fphm": pdfData["fphm"],
  280. "swno": data["redSwno"],
  281. "path": pdfData["path"],
  282. }
  283. return msg, 0, data1
  284. } else {
  285. data1 := map[string]interface{}{
  286. "fpdm": pdfData["fpdm"],
  287. "fphm": pdfData["fphm"],
  288. "swno": data["redSwno"],
  289. "path": pdfData["path"],
  290. }
  291. return msg, code, data1
  292. }
  293. } else if (data["returnCode"] == "3002") {
  294. return "已经冲红", 4, data
  295. } else {
  296. return fmt.Sprintln(data["returnMsg"]), 1, data
  297. }
  298. }
  299. // 换票
  300. //noinspection ALL
  301. func (u *InvoiceService) InvoiceReplace(solgan *entity.Invoice, resType string) (string, int, interface{}) {
  302. solgan.Model = "2"
  303. solgan.OrderCode = solgan.Swno
  304. msg, code1, dataMap := invoiceService.InvoiceRedSubmit(solgan.Yfpdm, solgan.Yfphm, solgan.Swno, resType, solgan.Changed, 0, solgan)
  305. util.Loger.Println("换票:", "发票单号:", solgan.Yfpdm, "发票号码:", solgan.Yfphm)
  306. if (code1 == 1) {
  307. return msg, code1, dataMap
  308. }
  309. if (code1 == 3) {
  310. return msg, 2, dataMap
  311. }
  312. solgan.Yfphm = ""
  313. solgan.Yfpdm = ""
  314. solgan.Model = "0"
  315. msg, code, datamap := u.InvoiceAdd(solgan, resType, 0, "false")
  316. _rdsVal := datamap.(map[string]interface{})
  317. _dataMap := dataMap.(map[string]interface{})
  318. if (code1 == 4) {
  319. _rdsVal["chcode"] = 0
  320. _rdsVal["isch"] = true
  321. } else {
  322. _rdsVal["chcode"] = code1
  323. _rdsVal["isch"] = false
  324. _rdsVal["chfpdm"] = _dataMap["fpdm"]
  325. _rdsVal["chfphm"] = _dataMap["fphm"]
  326. _rdsVal["chswno"] = _dataMap["swno"]
  327. _rdsVal["chpath"] = _dataMap["path"]
  328. }
  329. if (code1 == 3) {
  330. code = 2
  331. }
  332. return msg, code, _rdsVal
  333. }
  334. //排队中签章失败定时任务
  335. func (u *InvoiceService) Timer(swno string, saleTax string, isRed string, isfeedback int, changed string, resType string, orderCode string) {
  336. util.Loger.Print("定时任务重启", swno, saleTax, isRed, isfeedback, changed, resType)
  337. valueInface := redis.Get(core.GetConfiguration().Redis.Modules, "fp_"+swno)
  338. if (valueInface == nil) {
  339. swnoMap := make(map[string]interface{}, 0)
  340. swnoMap["swno"] = swno
  341. swnoMap["saleTax"] = saleTax
  342. swnoMap["isfeedback"] = isfeedback
  343. swnoMap["isLoop"] = 1
  344. swnoMap["changed"] = changed
  345. swnoMap["isRed"] = isRed
  346. swnoMap["resType"] = resType
  347. swnoMap["Frequency"] = 0
  348. swnoMap["creatTime"] = fmt.Sprint(time.Now().Unix())
  349. swnoMap["orderCode"] = orderCode
  350. redis.PutKV("fp_"+swno, swnoMap)
  351. }
  352. c := cron.New()
  353. spec := entity.TimingCron
  354. c.AddFunc(spec, func() { // AddFunc 是添加任务的地方,此函数接收两个参数,第一个为表示定时任务的字符串,第二个为真正的真正的任务。
  355. util.Loger.Println("定时任务开始:", "流水号:", swno)
  356. valueInface := redis.Get(core.GetConfiguration().Redis.Modules, "fp_"+swno)
  357. swnoMap := make(map[string]interface{}, 0)
  358. if (valueInface == nil) {
  359. swnoMap["swno"] = swno
  360. swnoMap["saleTax"] = saleTax
  361. swnoMap["isfeedback"] = isfeedback
  362. swnoMap["Frequency"] = 0
  363. swnoMap["changed"] = changed
  364. swnoMap["isRed"] = isRed
  365. swnoMap["resType"] = resType
  366. swnoMap["creatTime"] = fmt.Sprint(time.Now().Unix())
  367. swnoMap["orderCode"] = orderCode
  368. redis.PutKV("fp_"+swno, swnoMap)
  369. } else {
  370. _rdsVal := valueInface.(map[string]interface{})
  371. swnoMap["swno"] = _rdsVal["swno"]
  372. swnoMap["saleTax"] = _rdsVal["saleTax"]
  373. swnoMap["isfeedback"] = _rdsVal["isfeedback"]
  374. swnoMap["isLoop"] = _rdsVal["isLoop"]
  375. swnoMap["changed"] = changed
  376. swnoMap["isRed"] = isRed
  377. swnoMap["resType"] = resType
  378. swnoMap["creatTime"] = _rdsVal["creatTime"]
  379. swnoMap["orderCode"] = orderCode
  380. numb, _ := strconv.Atoi(fmt.Sprint(_rdsVal["Frequency"]))
  381. fmt.Println("循环:", numb, "----", entity.Frequency)
  382. fmt.Sprint("numb", "执行次数")
  383. if numb == entity.Frequency {
  384. arr := strings.Split(entity.WarningEmail, ",")
  385. for _, value := range arr {
  386. util.SendPdf(value, false, swno, "排队中签章失败定时任务出现问题")
  387. }
  388. numb++
  389. util.Callback(swno, saleTax, "", "", "", changed, isRed, resType, "true", "", orderCode)
  390. }
  391. util.Loger.Println("第:", numb, "次执行", "流水号:", swno)
  392. numb++
  393. swnoMap["Frequency"] = numb
  394. redis.PutKV("fp_"+swno, swnoMap)
  395. creatTime, _ := strconv.ParseInt(fmt.Sprint(_rdsVal["creatTime"]), 10, 64)
  396. fmt.Println(creatTime - time.Now().Unix())
  397. }
  398. pdfData, code, _ := u.InvoiceDownload(swno, saleTax, isRed, 1, 0, changed, resType, orderCode)
  399. fmt.Println(pdfData)
  400. if (code == 0) {
  401. util.Loger.Println("定时开票成功:", "流水号:", swno)
  402. if (isfeedback == 0) {
  403. //修改发票中状态
  404. dat := util.Callback(swno, saleTax, pdfData["fpdm"].(string), pdfData["fphm"].(string), pdfData["path"].(string), changed, isRed, resType, "", "3", orderCode)
  405. util.Loger.Println("下载成功更改发票结果:", "流水号:", swno, dat)
  406. util.Loger.Println("下载成功定时任务结束:", "流水号:", swno, )
  407. if (dat) {
  408. redis.Del(core.GetConfiguration().Redis.Modules, "fp_"+swno)
  409. util.Loger.Println("删除:", "流水号:", "fp_"+swno)
  410. c.Stop()
  411. }
  412. } else {
  413. redis.Del(core.GetConfiguration().Redis.Modules, "fp_"+swno)
  414. c.Stop()
  415. }
  416. } else {
  417. //util.Callback(swno, saleTax, "", "", "", changed, isRed, resType, "true", "", orderCode)
  418. //c.Stop()
  419. }
  420. })
  421. c.Start()
  422. }
  423. //服务断开重新开票定时任务
  424. //开具、重开
  425. //model 0开票 1 冲红 2冲红开票
  426. func (u *InvoiceService) OpeningTimer(solgan *entity.Invoice) {
  427. util.Loger.Println("发票开具服务有问题")
  428. valueInface := redis.Get(core.GetConfiguration().Redis.Modules, "xx_"+solgan.Swno)
  429. if (valueInface == nil) {
  430. solgan.Numb = 0
  431. if solgan.Model == "1" || solgan.Model == "2" {
  432. redis.PutKV("xx_"+solgan.Yfphm, solgan)
  433. } else {
  434. redis.PutKV("xx_"+solgan.Swno, solgan)
  435. }
  436. }
  437. c := cron.New()
  438. spec := entity.OpenTimingCron
  439. c.AddFunc(spec, func() { // AddFunc 是添加任务的地方,此函数接收两个参数,第一个为表示定时任务的字符串,第二个为真正的真正的任务。
  440. //util.Loger.Println("定时任务重新开票开始:", "流水号:", solgan.Swno)
  441. swno := ""
  442. if solgan.Model == "1" || solgan.Model == "2" {
  443. util.Loger.Println("定时任务重新开票开始:", "发票号码:", solgan.Yfphm)
  444. swno = solgan.Yfphm
  445. } else {
  446. util.Loger.Println("定时任务重新开票开始:", "流水号:", solgan.Swno)
  447. swno = solgan.Swno
  448. }
  449. valueInface := redis.Get(core.GetConfiguration().Redis.Modules, "xx_"+swno)
  450. if (valueInface == nil) {
  451. solgan.Numb = 0
  452. if solgan.Model == "1" || solgan.Model == "2" {
  453. redis.PutKV("xx_"+solgan.Yfphm, solgan)
  454. } else {
  455. redis.PutKV("xx_"+solgan.Swno, solgan)
  456. }
  457. } else {
  458. swnoMap := valueInface.(map[string]interface{})
  459. numb, _ := strconv.Atoi(fmt.Sprint(swnoMap["numb"]))
  460. if numb < entity.OpenFrequency {
  461. if solgan.Model == "1" || solgan.Model == "2" {
  462. util.Loger.Println("第:", numb, "次执行重新开票", "发票号码:", solgan.Yfphm)
  463. } else {
  464. util.Loger.Println("第:", numb, "次执行重新开票", "流水号:", solgan.Swno)
  465. }
  466. numb++
  467. solgan.Numb = numb
  468. redis.PutKV("xx_"+swno, solgan)
  469. } else if (numb == entity.OpenFrequency) {
  470. fmt.Println(numb)
  471. util.Callback(solgan.Swno, solgan.SaleTax, solgan.Yfpdm, solgan.Yfphm, "", solgan.Changed, solgan.IsRed, solgan.ResType, "true", solgan.Model, solgan.OrderCode)
  472. if solgan.Model == "1" || solgan.Model == "2" {
  473. redis.Del(core.GetConfiguration().Redis.Modules, "xx_"+solgan.Yfphm)
  474. util.Loger.Println("删除:", "发票号码:", solgan.Yfphm)
  475. } else {
  476. redis.Del(core.GetConfiguration().Redis.Modules, "xx_"+solgan.Swno)
  477. util.Loger.Println("删除:", "流水号:", solgan.Swno)
  478. }
  479. c.Stop()
  480. } else {
  481. fmt.Println(numb)
  482. util.Callback(solgan.Swno, solgan.SaleTax, solgan.Yfpdm, solgan.Yfphm, "", solgan.Changed, solgan.IsRed, solgan.ResType, "true", solgan.Model, solgan.OrderCode)
  483. if solgan.Model == "1" || solgan.Model == "2" {
  484. redis.Del(core.GetConfiguration().Redis.Modules, "xx_"+solgan.Yfphm)
  485. util.Loger.Println("删除1:", "发票号码:", solgan.Yfphm)
  486. } else {
  487. redis.Del(core.GetConfiguration().Redis.Modules, "xx_"+solgan.Swno)
  488. util.Loger.Println("删除1:", "流水号:", solgan.Swno)
  489. }
  490. c.Stop()
  491. }
  492. }
  493. //是否重开
  494. switch solgan.Model {
  495. //重新开具
  496. case "0":
  497. _, code, _ := u.InvoiceAdd(solgan, solgan.ResType, 1, "false")
  498. if (code == 0) {
  499. //_rdsVal := datamap.(map[string]interface{})
  500. //util.Callback(solgan.Swno, solgan.SaleTax, "", "", _rdsVal["path"].(string), solgan.Changed, "false", solgan.ResType, "true")
  501. util.Loger.Println("删除:", "流水号:", "xx_"+solgan.Swno)
  502. redis.Del(core.GetConfiguration().Redis.Modules, "xx_"+solgan.Swno)
  503. util.Callback(solgan.Swno, solgan.SaleTax, solgan.Yfpdm, solgan.Yfphm, "", solgan.Changed, solgan.IsRed, solgan.ResType, "true", solgan.Model, solgan.OrderCode)
  504. c.Stop()
  505. }
  506. //单独冲红失败
  507. case "1":
  508. _, code, _ := u.InvoiceRedSubmit(solgan.Yfpdm, solgan.Yfphm, solgan.OrderCode, solgan.ResType, solgan.Changed, 1, solgan)
  509. if (code == 0) {
  510. //_rdsVal := datamap.(map[string]interface{})
  511. //util.Callback(solgan.Swno, solgan.SaleTax, datamap, "", _rdsVal["path"].(string), solgan.Changed, "false", solgan.ResType, "true")
  512. util.Loger.Println("删除:", "发票号码:", "xx_"+solgan.Yfphm)
  513. redis.Del(core.GetConfiguration().Redis.Modules, "xx_"+solgan.Yfphm)
  514. util.Callback(solgan.Swno, solgan.SaleTax, solgan.Yfpdm, solgan.Yfphm, "", solgan.Changed, solgan.IsRed, solgan.ResType, "true", solgan.Model, solgan.OrderCode)
  515. c.Stop()
  516. }
  517. //冲红开具
  518. case "2":
  519. _, code, _ := u.InvoiceRedSubmit(solgan.Yfpdm, solgan.Yfphm, solgan.OrderCode, solgan.ResType, solgan.Changed, 1, solgan)
  520. fmt.Println("code", code)
  521. if (code == 2 || code == 0) {
  522. solgan.Model = "0"
  523. if (code == 0) {
  524. u.OpeningTimer(solgan)
  525. }
  526. //_rdsVal := datamap.(map[string]interface{})
  527. //util.Callback(solgan.Swno, solgan.SaleTax, datamap, "", _rdsVal["path"].(string), solgan.Changed, "false", solgan.ResType, "true")
  528. util.Loger.Println("删除:", "发票号码:", "xx_"+solgan.Yfphm)
  529. redis.Del(core.GetConfiguration().Redis.Modules, "xx_"+solgan.Yfphm)
  530. util.Callback(solgan.Swno, solgan.SaleTax, solgan.Yfpdm, solgan.Yfphm, "", solgan.Changed, solgan.IsRed, solgan.ResType, "true", solgan.Model, solgan.OrderCode)
  531. c.Stop()
  532. }
  533. case "3":
  534. _, code, _ := u.InvoiceDownload(solgan.Swno, solgan.SaleTax, solgan.IsRed, 1, 0, solgan.Changed, solgan.ResType, solgan.OrderCode)
  535. if (code == 0) {
  536. //_rdsVal := datamap.(map[string]interface{})
  537. //util.Callback(solgan.Swno, solgan.SaleTax, datamap, "", _rdsVal["path"].(string), solgan.Changed, "false", solgan.ResType, "true")
  538. util.Loger.Println("删除:", "流水号:", "xx_"+solgan.Swno)
  539. redis.Del(core.GetConfiguration().Redis.Modules, "xx_"+solgan.Swno)
  540. util.Callback(solgan.Swno, solgan.SaleTax, solgan.Yfpdm, solgan.Yfphm, "", solgan.Changed, solgan.IsRed, solgan.ResType, "true", solgan.Model, solgan.OrderCode)
  541. c.Stop()
  542. }
  543. }
  544. /*if (numb == 0) {
  545. redis.Del(core.GetConfiguration().Redis.Modules, "xx_"+solgan.Swno)
  546. util.Loger.Println("删除:", "流水号:", solgan.Swno)
  547. c.Stop()
  548. } else if (numb == 1) {
  549. c.Stop()
  550. }*/
  551. })
  552. c.Start()
  553. }
  554. //回调