invoiceinfo.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. package oilsupplier
  2. import (
  3. "dashoo.cn/backend/api/business/invoiceinfo"
  4. "dashoo.cn/backend/api/business/oilsupplier/supplier"
  5. "dashoo.cn/backend/api/business/paymentinfo"
  6. "dashoo.cn/backend/api/business/workflow"
  7. . "dashoo.cn/backend/api/controllers"
  8. baseparameter "dashoo.cn/business2/parameter"
  9. "dashoo.cn/utils"
  10. "encoding/json"
  11. "fmt"
  12. "strconv"
  13. "time"
  14. )
  15. type OilInvoiceController struct {
  16. BaseController
  17. }
  18. type InvoiceJson struct {
  19. Identity string `json:"identity"`
  20. Order InvoiceOrderJson `json:"order"`
  21. }
  22. type SelectInvoiceJson struct {
  23. Identity string `json:"identity"`
  24. Fpqqlsh string `json:"fpqqlsh"`
  25. }
  26. type InvoiceOrderJson struct {
  27. Buyername string `json:"buyername"`
  28. Phone string `json:"phone"`
  29. Taxnum string `json:"taxnum"`
  30. Address string `json:"address"`
  31. Account string `json:"account"`
  32. Telephone string `json:"telephone"`
  33. Orderno string `json:"orderno"`
  34. Invoicedate string `json:"invoicedate"`
  35. Clerk string `json:"clerk"`
  36. Saleaccount string `json:"saleaccount"`
  37. Salephone string `json:"salephone"`
  38. Saleaddress string `json:"saleaddress"`
  39. Saletaxnum string `json:"saletaxnum"`
  40. Kptype string `json:"kptype"`
  41. Message string `json:"message"`
  42. Payee string `json:"payee"`
  43. Checker string `json:"checker"`
  44. Tsfs string `json:"tsfs"`
  45. Email string `json:"email"`
  46. Qdbz string `json:"qdbz"`
  47. Qdxmmc string `json:"qdxmmc"`
  48. Dkbz string `json:"dkbz"`
  49. Deptid string `json:"deptid"`
  50. Clerkid string `json:"clerkid"`
  51. InvoiceLine string `json:"invoiceLine"`
  52. Cpybz string `json:"cpybz"`
  53. Detail []InvoiceDetailJson `json:"detail"`
  54. }
  55. type InvoiceDetailJson struct {
  56. Goodsname string `json:"goodsname"`
  57. Num string `json:"num"`
  58. Price string `json:"price"`
  59. Hsbz string `json:"hsbz"`
  60. Taxrate string `json:"taxrate"`
  61. Spec string `json:"spec"`
  62. Unit string `json:"unit"`
  63. Spbm string `json:"spbm"`
  64. Zsbm string `json:"zsbm"`
  65. Fphxz string `json:"fphxz"`
  66. Yhzcbs string `json:"yhzcbs"`
  67. Zzstsgl string `json:"zzstsgl"`
  68. Lslbs string `json:"lslbs"`
  69. Kce string `json:"kce"`
  70. Taxfreeamt string `json:"taxfreeamt"`
  71. Tax string `json:"tax"`
  72. Taxamt string `json:"taxamt"`
  73. }
  74. // @Title 获取信息
  75. // @Description get user by token
  76. // @Success 200 {object} map[string]interface{}
  77. // @router /getinvoicedata [get]
  78. func (this *OilInvoiceController) GetInvoiceData() {
  79. id := this.GetString("Id")
  80. dictList := make(map[string]interface{})
  81. svc := invoiceinfo.GetInvoiceService(utils.DBE)
  82. var entity invoiceinfo.OilInvoiceInfo
  83. where := "Id=" + id
  84. svc.GetEntity(&entity, where)
  85. var paylist []paymentinfo.PaymentinfoList
  86. svcp := paymentinfo.GetPaymentService(utils.DBE)
  87. where = "p.Id in (" + entity.SrcIds + ")"
  88. svcp.GetPaymentinfoList1(where, &paylist)
  89. dictList["invoiceinfo"] = entity
  90. dictList["paymentinfos"] = paylist
  91. var datainfo DataInfo
  92. datainfo.Items = dictList
  93. this.Data["json"] = &datainfo
  94. this.ServeJSON()
  95. }
  96. // @Title 更新发票状态
  97. // @Description 更新发票状态
  98. // @Success 200 {object} controllers.Request
  99. // @router /updateisinvoice [get]
  100. func (this *OilInvoiceController) UpdateIsInvoice() string {
  101. id := this.GetString("Id")
  102. srcIds := this.GetString("SrcIds")
  103. session := utils.DBE.NewSession()
  104. defer session.Close()
  105. err := session.Begin()
  106. paramSvc := baseparameter.GetBaseparameterService(utils.DBE)
  107. key := paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoiceKey64")
  108. // 诺诺网发票接口
  109. invoice := invoiceinfo.GetInvoiceService(utils.DBE)
  110. url := paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoiceUrl")
  111. var entity invoiceinfo.OilInvoiceInfo
  112. where := "Id=" + id
  113. invoice.GetEntity(&entity, where)
  114. sup := supplier.GetOilSupplierService(utils.DBE)
  115. var supplierEntity supplier.OilSupplier
  116. whereS := "Id=" + strconv.Itoa(entity.SupplierId)
  117. sup.GetEntity(&supplierEntity, whereS)
  118. var paylist []paymentinfo.PaymentinfoList
  119. svcp := paymentinfo.GetPaymentService(utils.DBE)
  120. where = "p.Id in (" + entity.SrcIds + ")"
  121. svcp.GetPaymentinfoList1(where, &paylist)
  122. //paramsString := ""
  123. var paramsDetail []InvoiceDetailJson
  124. for _, pay := range paylist {
  125. var detail InvoiceDetailJson
  126. var amount float64
  127. var rate1 float64
  128. var a float64
  129. var tax string
  130. yhzcbs := "0"
  131. environment := paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "isDev")
  132. zzstsgl := paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoiceZzstsgl")
  133. if environment == "1" {
  134. // 测试环境
  135. pay.OilPaymentInfo.Amount = "500.00"
  136. }
  137. amount,_ = strconv.ParseFloat(pay.OilPaymentInfo.Amount, 64)
  138. rate := paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoiceRate")
  139. //含税
  140. israte := paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "IsInvoiceRate")
  141. //"yhzcbs":"1","zzstsgl":"免税","lslbs":"1" ----免税
  142. //"yhzcbs":1,"zzstsgl":"不征税", "lslbs":2 ----不征税
  143. //"yhzcbs":"0","zzstsgl":"","lslbs":3 -------零税率
  144. if israte == "" {
  145. zzstsgl = ""
  146. rate1,_ = strconv.ParseFloat(rate, 64)
  147. aq := rate1 + 1
  148. tax = fmt.Sprintf("%.2f", amount * rate1 / aq)
  149. //tax := math.Trunc(amount * 0.06 / 1.06)
  150. a,_ = strconv.ParseFloat(tax, 64)
  151. } else if israte == "1" {
  152. //免税
  153. yhzcbs = "1"
  154. tax = "0.00"
  155. a,_ = strconv.ParseFloat(tax, 64)
  156. zzstsgl = "免税"
  157. rate = "0.00"
  158. } else if israte == "2" {
  159. //不征税
  160. yhzcbs = "1"
  161. zzstsgl = "不征税"
  162. tax = "0.00"
  163. a,_ = strconv.ParseFloat(tax, 64)
  164. rate = "0.00"
  165. } else if israte == "3" {
  166. //普通0税率
  167. zzstsgl = ""
  168. tax = "0.00"
  169. a,_ = strconv.ParseFloat(tax, 64)
  170. rate = "0.00"
  171. }
  172. //typeString := ""
  173. //if pay.OilPaymentInfo.PayType == "1" {
  174. // typeString = "准入交费"
  175. //} else if pay.OilPaymentInfo.PayType == "2" {
  176. // typeString = "年审交费"
  177. //} else if pay.OilPaymentInfo.PayType == "3" {
  178. // typeString = "增项交费"
  179. //} else if pay.OilPaymentInfo.PayType == "7" {
  180. // typeString = "信息变更交费"
  181. //}
  182. //paramsString += "{'goodsname':'" + pay.SupplierTypeName + " " + typeString + "','num':'','price':'','hsbz':'1','taxrate':'" + rate + "','spec':'','unit':'','spbm':'10101150101','zsbm':'','fphxz':'0','yhzcbs':'" + yhzcbs + "','zzstsgl':'" + zzstsgl + "','lslbs':'" + israte + "','kce':'','taxfreeamt':" + fmt.Sprintf("%.2f", amount-a) + ",'tax':" + tax + ",'taxamt':" + strconv.Itoa(int(amount)) + "}"
  183. //detail.Goodsname = pay.SupplierTypeName + " " + typeString
  184. detail.Goodsname = "资质认证服务费"
  185. detail.Hsbz = "1"
  186. detail.Taxrate = rate
  187. detail.Fphxz = "0"
  188. detail.Yhzcbs = yhzcbs
  189. detail.Zzstsgl = zzstsgl
  190. detail.Lslbs = israte
  191. detail.Tax = tax
  192. detail.Spbm = "3040101"
  193. detail.Taxamt = strconv.Itoa(int(amount))
  194. detail.Taxfreeamt = fmt.Sprintf("%.2f", amount-a)
  195. paramsDetail = append(paramsDetail, detail)
  196. }
  197. // 身份认证,在诺诺网备案后,由诺诺网提供,每个企业一个
  198. identity := paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoiceIdentity")
  199. var params InvoiceJson
  200. var paramsOrder InvoiceOrderJson
  201. params.Identity = identity
  202. paramsOrder.Detail = paramsDetail
  203. paramsOrder.Buyername = entity.SupplierName
  204. paramsOrder.Taxnum = entity.CommercialNo
  205. paramsOrder.Phone = supplierEntity.Mobile
  206. paramsOrder.Address = entity.Address
  207. paramsOrder.Account = entity.DepositBank + " " + entity.BankAccount
  208. paramsOrder.Telephone = supplierEntity.Telphone
  209. paramsOrder.Orderno = "dg" + entity.BankSerialNum
  210. paramsOrder.Invoicedate = time.Now().Format("2006-01-02 15:04:05")
  211. paramsOrder.Clerk = paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoicePeople3")
  212. paramsOrder.Saleaccount = paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoiceSaleaccount")
  213. paramsOrder.Salephone = paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoicePhone")
  214. paramsOrder.Saleaddress = paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoiceAddress")
  215. paramsOrder.Saletaxnum = paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoiceSaletaxnum")
  216. paramsOrder.Kptype = "1"
  217. paramsOrder.Payee = paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoicePeople1")
  218. paramsOrder.Checker = paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoicePeople2")
  219. paramsOrder.Tsfs = "2" //-1,不推送;0,邮箱;1,手机(默认);2,邮箱、手机
  220. paramsOrder.Email = entity.Email
  221. paramsOrder.Qdbz = "0"
  222. paramsOrder.Dkbz = "0"
  223. paramsOrder.InvoiceLine = "p"
  224. params.Order = paramsOrder
  225. var errinfo ErrorInfo
  226. paramsStr, err := json.Marshal(params)
  227. if err != nil {
  228. errinfo.Code = -1
  229. errinfo.Message = "转json失败!"
  230. this.Data["json"] = &errinfo
  231. this.ServeJSON()
  232. }
  233. //param1 := "{'identity':'" + identity + "','order':{'buyername':'" + entity.SupplierName + "','taxnum':'" + entity.CommercialNo + "','phone':'" + supplierEntity.Mobile +
  234. // "','address':'" + entity.Address + "','account':'" + entity.DepositBank + " " + entity.BankAccount + "','telephone':'" + supplierEntity.Telphone + "','orderno':'dg123" +
  235. // entity.BankSerialNum + "','invoicedate':'" + time.Now().Format("2006-01-02 15:04:05") + "','clerk':'" + paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoicePeople3") +
  236. // "','saleaccount':'" + paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoiceSaleaccount") + "','salephone':'" + paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoicePhone") +
  237. // "','saleaddress':'" + paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoiceAddress") + "','saletaxnum':'" + paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoiceSaletaxnum") +
  238. // "','kptype':'1','message':'','payee':'" + paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoicePeople1") + "','checker':'" + paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoicePeople2") +
  239. // "','tsfs':'1','email':'" + entity.Email + "','qdbz':'0','qdxmmc':'','dkbz':'0','deptid':'','clerkid':'','invoiceLine':'p','cpybz':'','detail':["+paramsString+"]}}"
  240. fmt.Println(string(paramsStr), "参数")
  241. invoiceJson := invoice.Post(url, string(paramsStr), key)
  242. fmt.Println(invoiceJson, "诺诺接口返回")
  243. if invoiceJson.Status != "0000"{
  244. //session.Rollback()
  245. errinfo.Code = -1
  246. errinfo.Message = "操作失败!" + invoiceJson.Message
  247. this.Data["json"] = &errinfo
  248. this.ServeJSON()
  249. } else if invoiceJson.Status == "0000" && invoiceJson.Fpqqlsh != "" {
  250. time.Sleep(time.Second * 5)
  251. var sel SelectInvoiceJson
  252. key := paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoiceKey64")
  253. sel.Identity = paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoiceIdentity")
  254. sel.Fpqqlsh = invoiceJson.Fpqqlsh
  255. selS, err := json.Marshal(sel)
  256. invoice := invoiceinfo.GetInvoiceService(utils.DBE)
  257. url1 := paramSvc.GetBaseparameterMessage("INVOICE", "paramset", "InvoiceLiuShuiUrl")
  258. //params := "{'identity':'" + identity + "','fpqqlsh':['" + invoiceJson.Fpqqlsh + "']}"
  259. invoiceJson1 := invoice.SerialNumberPost(url1, string(selS), key)
  260. fmt.Print(invoiceJson1)
  261. // 根据流水号查询结果
  262. //params := "{'identity':'" + identity + "','fpqqlsh':['" + invoiceJson.Fpqqlsh + "']}"
  263. //invoiceJson1 := invoice.SerialNumberPost(url, params, key)
  264. if invoiceJson1.Result != "success"{
  265. //session.Rollback()
  266. errinfo.Code = -1
  267. errinfo.Message = "开票查询失败!" + invoiceJson1.ErrorMsg
  268. this.Data["json"] = &errinfo
  269. this.ServeJSON()
  270. } else if invoiceJson1.Result == "success" && len(invoiceJson1.InvoiceList) > 0{
  271. results := invoiceJson1.InvoiceList[0]
  272. if results.Status != "2"{
  273. errinfo.Code = -1
  274. errinfo.Message = "操作失败!" + results.Resultmsg
  275. this.Data["json"] = &errinfo
  276. this.ServeJSON()
  277. return ""
  278. }
  279. cols := []string{"IsInvoice", "InvoiceOn", "Url", "NuNuSerialNum"}
  280. svc := invoiceinfo.GetOilInvoiceInfoSession(session)
  281. var info invoiceinfo.OilInvoiceInfo
  282. info.IsInvoice = "1"
  283. info.InvoiceOn = time.Now()
  284. info.Url = results.Url
  285. info.NuNuSerialNum = invoiceJson.Fpqqlsh
  286. _, err = svc.UpdateEntityByIdCols(id, &info, cols)
  287. if err != nil {
  288. session.Rollback()
  289. errinfo.Code = -1
  290. errinfo.Message = "操作失败!"
  291. this.Data["json"] = &errinfo
  292. this.ServeJSON()
  293. return ""
  294. }
  295. var payinfo paymentinfo.OilPaymentInfo
  296. payinfo.IsInvoice = "1"
  297. paycols := []string{"IsInvoice"}
  298. where := "Id in (" + srcIds + ")"
  299. err = svc.UpdateEntityBywheretbl(OilPaymentInfoName, &payinfo, paycols, where)
  300. if err != nil {
  301. session.Rollback()
  302. errinfo.Code = -1
  303. errinfo.Message = "操作失败!"
  304. this.Data["json"] = &errinfo
  305. this.ServeJSON()
  306. return ""
  307. }
  308. svcActiviti := workflow.GetActivitiService(utils.DBE)
  309. var ActiComplete workflow.ActiCompleteVM
  310. ActiComplete.ProcessKey = workflow.OIL_SUPPLIER_VERIFY
  311. ActiComplete.BusinessKey = id
  312. ActiComplete.UserId = this.User.Id
  313. ActiComplete.Remarks = ""
  314. ActiComplete.Result = "1"
  315. receiveVal := svcActiviti.TaskComplete(ActiComplete)
  316. fmt.Println("receiveVal:" + receiveVal)
  317. if receiveVal == "true" {
  318. session.Commit()
  319. errinfo.Code = 0
  320. errinfo.Message = "操作成功!"
  321. this.Data["json"] = &errinfo
  322. this.ServeJSON()
  323. } else {
  324. session.Rollback()
  325. errinfo.Code = -1
  326. errinfo.Message = "操作失败!"
  327. this.Data["json"] = &errinfo
  328. this.ServeJSON()
  329. }
  330. }
  331. }
  332. return ""
  333. }