1dbbe9dff74520333e797d51e11eefa9c535d05b.svn-base 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655
  1. package util
  2. import (
  3. "../../pkg/logging"
  4. "../../pkg/setting"
  5. "../../routers/restful"
  6. "errors"
  7. "fmt"
  8. "strconv"
  9. )
  10. // @Summary 现代牧业EAS对接 备件,出入库
  11. type BillLaid struct { // 销售出库&其它出库 &采购入库 & 其他入库
  12. BizType BillNumber `json:"bizType"` //业务类型
  13. BizDate string `json:"bizDate"` //业务日期
  14. Description string `json:"description"` //摘要
  15. PaymentType BillNumber `json:"paymentType"` // 付款方式
  16. TransactionType BillNumber `json:"transactionType"` // 事务类型
  17. Number string `json:"number"` // 单据编号
  18. Entry []BillEntry `json:"entry"` //
  19. StorageOrgUnit BillNumber `json:"storageOrgUnit"` //库存组织
  20. Supplier BillNumber `json:"supplier"` //供应商
  21. Currency BillNumber `json:"currency"` // 币别
  22. Creator BillNumber `json:"creator"` //创建者
  23. }
  24. type BillNumber struct {
  25. Number string `json:"number"`
  26. }
  27. type BillEntry struct {
  28. ActualPrice string `json:"actualPrice"` //实际单价
  29. ActualTaxPrice string `json:"actualTaxPrice"` //实际含税单价
  30. UnitActualCost string `json:"unitActualCost"` //单位实际成本
  31. UnitPurchaseCost string `json:"unitPurchaseCost"` //单位采购成本
  32. TaxPrice string `json:"taxPrice"` //含税单价
  33. BalanceSupplier BillNumber `json:"balanceSupplier"` //结算供应商
  34. Price string `json:"price"` //单价
  35. ActualCost string `json:"actualCost"` //实际成本
  36. PurchaseCost string `json:"purchaseCost"` //采购成本
  37. Amount string `json:"amount"` // 金额
  38. TaxAmount string `json:"taxAmount"` // 价税合计
  39. ContractNumber string `json:"contractNumber"` // 合同号
  40. Warehouse BillNumber `json:"warehouse"` // 仓库
  41. Unit BillNumber `json:"unit"` // 单位
  42. Material BillNumber `json:"material"` //物料
  43. Qty string `json:"qty"` //数量
  44. StoreType BillNumber`json:"storeType"`//库存类型
  45. StoreStatus BillNumber`json:"storeStatus"`//库存状态
  46. }
  47. type BillUse struct { //领料出库&生产入库
  48. Head BillUseHead `json:"head"`
  49. Entrys []BillUseEntrys `json:"entrys"`
  50. }
  51. type BillUseHead struct {
  52. BillNumber string `json:"billNumber"` //单据编号
  53. BizDate string `json:"bizDate"` //业务日期
  54. BizTypeNumber string `json:"bizTypeNumber"` //业务类型
  55. TransactionType string `json:"transactionType"` //事务类型
  56. Department string `json:"department"` //部门
  57. SupplyStorageOrg string `json:"supplyStorageOrg"` //供方库存组织
  58. StorageOrg string `json:"storageOrg"` //需方库存组织
  59. CostCenter string `json:"costCenter"` //成本中心
  60. Remark string `json:"remark"` //摘要
  61. Creator string `json:"creator"` //创建者
  62. }
  63. type BillUseEntrys struct {
  64. MaterielNumber string `json:"materielNumber"` // 物料
  65. Lot string `json:"lot"` //批次
  66. Amount string `json:"amount"` //数量
  67. MeteredUnit string `json:"meteredUnit"` //单位
  68. WareHouse string `json:"wareHouse"` //需方仓库
  69. Location string `json:"location"` //需方库位
  70. Picker string `json:"picker"` // 领料员
  71. EntryRemark string `json:"entryRemark"` //备注
  72. MasterDepartment string `json:"masterDepartment"` //主制部门
  73. EntryCostCenter string `json:"entryCostCenter"` //成本中心
  74. }
  75. type Parts struct { // 备件
  76. MaterialNumber string `json:"materialNumber"`
  77. MaterialName string `json:"materialName"`
  78. MaterialGroup string `json:"materialGroup"`
  79. Model string `json:"model"`
  80. BaseUnit string `json:"baseUnit"`
  81. Status int `json:"status"`
  82. KaClass string `json:"kaClass"`
  83. //kaClass int32 `json:"kaClass"`
  84. //planningMode int32 `json:"planningMode"`
  85. }
  86. func EASBillSync(typeIN int, billCode interface{}, statue string) error {
  87. defer func() {
  88. if err := recover(); err != nil {
  89. logging.Error("EASBillSync recover err :", err)
  90. }
  91. }()
  92. fmt.Println("++++++++++++++++", typeIN, billCode)
  93. var err error
  94. schema := ""
  95. id := ""
  96. switch typeIN {
  97. case 1: // 入库
  98. schema = "bigpartlaid"
  99. id,err = BigpartLaid(billCode, "syncEASPpartlaid", "006")
  100. case 2: // 出库
  101. schema = "bigpartUse"
  102. id,err = BigpartUse(billCode, "syncEASPpartuse", "100")
  103. case 3,10: //退库
  104. schema = "bigpartquit"
  105. if typeIN == 3{
  106. s,err := restful.Engine.SQL("select id from bigpartquit where useForm=? and issync = 0 order by id limit 1",billCode).QueryString()
  107. if len(s) > 0 && err == nil{
  108. billCode = s[0]["id"]
  109. }
  110. }
  111. id,err = BigpartUse(billCode, "syncEASPpartquit", "100")
  112. case 4: //退货
  113. schema = "bigpartrefund"
  114. id,err = BigpartLaid(billCode, "syncEASPpartrefund", "006")
  115. case 5: //备件
  116. schema = "parts"
  117. id = billCode.(string)
  118. err = CheckEASWebServiceParts(statue, "syncEASParts",billCode.(string))
  119. case 6: //调拨入库&出库
  120. schema = "bigparttransfer"
  121. id,err = BigpartLaid(billCode, "syncEASPpartlaid", "008")
  122. case 7: //仅调拨出库
  123. schema = "bigpartUse"
  124. id,err = BigpartUseTransfer(billCode, "syncEASPpartuse", "009")
  125. default:
  126. return errors.New("未知处理类型")
  127. }
  128. tx := restful.Engine.NewSession()
  129. err1 := tx.Begin()
  130. if err1 != nil {
  131. logging.Error("tx.Begin 事务启动失败__error:", err1)
  132. }
  133. defer func() {
  134. switch {
  135. case err1 != nil:
  136. if tx != nil {
  137. tx.Rollback()
  138. }
  139. default:
  140. if tx != nil {
  141. err = tx.Commit()
  142. }
  143. }
  144. if tx != nil {
  145. tx.Close()
  146. }
  147. }()
  148. if err != nil {
  149. logging.Info("EASBillSync err", err)
  150. fmt.Println("EASBillSync err", err)
  151. sql := "update "+schema+" set msg = ? where id =?"
  152. _,err1 =tx.Exec(sql, err.Error(),id)
  153. return err
  154. }
  155. if id == ""{
  156. return nil
  157. }
  158. sql := "update "+schema+" set issync = 1 where id =?"
  159. _,err1 =tx.Exec(sql, id)
  160. return err
  161. }
  162. func CheckEASWebServiceParts(statue, sqlname,id string) error {
  163. if statue == "1" {
  164. valuesMap, err := restful.Engine.SQL("SELECT sqlstr,params FROM apisql WHERE sqlname = ? limit 1", sqlname).QueryString()
  165. sqls := ""
  166. if err == nil && len(valuesMap) > 0 {
  167. sqls = valuesMap[0]["sqlstr"]
  168. }
  169. ress, err := restful.Engine.SQL(sqls, id).QueryString()
  170. if len(ress) == 0 {
  171. logging.Error("CheckEASWebServiceParts select len is 0", len(ress))
  172. return errors.New("查询结果为空")
  173. }
  174. if err != nil {
  175. logging.Error("CheckEASWebServiceParts select err", err)
  176. return err
  177. }
  178. //
  179. //ress, err := restful.Engine.SQL(`SELECT partCode materialNumber,NAME materialName,
  180. // (SELECT VALUE FROM dictlist WHERE pid = 44 AND label = parts.unit) baseUnit,
  181. // LEFT(partCode,11) materialGroup,specification model
  182. // FROM parts WHERE id = ?`, id).QueryString()
  183. //if len(ress) == 0 {
  184. // logging.Error("CheckEASWebServiceParts select len is 0", len(ress))
  185. // return errors.New("查询结果为空")
  186. //}
  187. //if err != nil {
  188. // logging.Error("CheckEASWebServiceParts select err", err)
  189. // return err
  190. //}
  191. var parts = Parts{}
  192. parts.BaseUnit = ress[0]["baseUnit"]
  193. parts.MaterialGroup = ress[0]["materialGroup"]
  194. parts.MaterialName = ress[0]["materialName"]
  195. parts.MaterialNumber = ress[0]["materialNumber"]
  196. parts.KaClass = ress[0]["kaClass"]
  197. parts.Model = ress[0]["model"]
  198. parts.Status = 0
  199. //sessionid, err := EASWebServiceLogin()
  200. //if err != nil {
  201. // logging.Error("EASWebServiceLogin", err)
  202. // return err
  203. //}
  204. sessionid := ""
  205. // 先判断备件与单据是否要分两个地址同步(一个正式线一个测试线)
  206. if setting.ServerSetting.EasUrlTem != ""{
  207. sessionid,err = EASWebServiceLogin(setting.ServerSetting.EasUrlTem)
  208. if err != nil || len(sessionid)<7 {
  209. logging.Info("EASWebServiceLogin",err,sessionid,setting.ServerSetting.EasUrlTem)
  210. return errors.New("eas登录失败")
  211. }
  212. }else{
  213. singelChan <- struct{}{}
  214. sessionid = <- sessionidChan
  215. if len(sessionid)<7 || sessionid[:6] == "error:"{
  216. return errors.New("eas登录失败")
  217. }
  218. }
  219. err = EASWebServicInsertParts(sessionid, parts,setting.ServerSetting.EasUrlTem)
  220. if err != nil {
  221. logging.Error("EASWebServicInsertParts", err)
  222. return err
  223. }
  224. //err = EASWebServiceLogout()
  225. //if err != nil {
  226. // logging.Error("EASWebServiceLogout", err)
  227. //}
  228. }
  229. return nil
  230. //}
  231. }
  232. func BigpartUse(billCode interface{}, sqlname, billType string) (string,error) {
  233. valuesMap, err := restful.Engine.SQL("SELECT sqlstr,params FROM apisql WHERE sqlname = ? limit 1", sqlname).QueryString()
  234. sqls := ""
  235. if err == nil && len(valuesMap) > 0 {
  236. sqls = valuesMap[0]["sqlstr"]
  237. }
  238. ress, err := restful.Engine.SQL(sqls, billCode).QueryString()
  239. if len(ress) == 0 {
  240. logging.Error("BigpartUse select len is 0", len(ress))
  241. return "",errors.New("查询结果为空")
  242. }
  243. if err != nil {
  244. logging.Error("BigpartUse select err", err)
  245. return "",err
  246. }
  247. id := ress[0]["id"]
  248. pu := BillUse{}
  249. pu.Head.BillNumber = ress[0]["BillNumber"]
  250. pu.Head.BizDate = ress[0]["BizDate"]
  251. pu.Head.BizTypeNumber = ress[0]["BizTypeNumber"]
  252. pu.Head.TransactionType = ress[0]["TransactionType"]
  253. pu.Head.Department = ress[0]["Department"]
  254. pu.Head.SupplyStorageOrg = ress[0]["SupplyStorageOrg"]
  255. pu.Head.StorageOrg = ress[0]["StorageOrg"]
  256. pu.Head.Creator = ress[0]["Creator"]
  257. pu.Head.Remark = ress[0]["Remark"]
  258. pu.Head.CostCenter = ress[0]["Department"]
  259. //pu.Head.entryCostCenter
  260. isZeroStock := false //是否零库存
  261. en := make([]BillUseEntrys, len(ress))
  262. count := 0
  263. for key, res := range ress {
  264. if res["isZeroStock"] == "1" {
  265. isZeroStock = true
  266. count ++
  267. }
  268. en[key].Amount = res["Amount"]
  269. en[key].EntryRemark = res["EntryRemark"]
  270. en[key].Lot = res["Lot"]
  271. en[key].MaterielNumber = res["MaterielNumber"]
  272. en[key].MeteredUnit = res["MeteredUnit"]
  273. en[key].Picker = res["Picker"]
  274. en[key].WareHouse = res["WareHouse"]
  275. en[key].Location = res["Location"]
  276. en[key].MasterDepartment = ress[0]["Department"]
  277. en[key].EntryCostCenter = ress[0]["Department"]
  278. //en[key].Location="0202001"
  279. //en[key].WareHouse ="0202001"
  280. }
  281. pu.Entrys = en
  282. pujson, _ := json.Marshal(pu)
  283. //sessionid, err := EASWebServiceLogin()
  284. //if err != nil {
  285. // logging.Error("EASWebServiceLogin", err)
  286. // return id,err
  287. //}
  288. singelChan <- struct{}{}
  289. sessionid := <- sessionidChan
  290. if len(sessionid)<7 || sessionid[:6] == "error:"{
  291. return id,errors.New("eas登录失败")
  292. }
  293. //零库存出库,先进行入库,每个供应商一个入库单
  294. if isZeroStock {
  295. pls := make([]BillLaid, 0)
  296. pl := BillLaid{}
  297. pl.Number = ress[0]["BillNumber"] + "-RK"
  298. pl.TransactionType = BillNumber{
  299. Number: "001",
  300. }
  301. pl.BizDate = ress[0]["BizDate1"]
  302. pl.BizType = BillNumber{
  303. Number: "110",
  304. }
  305. pl.Currency = BillNumber{
  306. Number: "BB01",
  307. }
  308. pl.PaymentType = BillNumber{
  309. Number: "004",
  310. }
  311. pl.StorageOrgUnit = BillNumber{
  312. Number: ress[0]["SupplyStorageOrg"],
  313. }
  314. pl.Supplier = BillNumber{
  315. Number: ress[0]["BalanceSupplier"],
  316. }
  317. pl.Creator = BillNumber{
  318. Number: ress[0]["Creator"],
  319. }
  320. en := make([]BillEntry, 0)
  321. count = 0
  322. temp := ""
  323. cou := 1
  324. code := pl.Number
  325. for _, res := range ress {
  326. if res["isZeroStock"] == "0" {
  327. continue
  328. }
  329. if temp == "" {
  330. temp = res["BalanceSupplier"]
  331. }
  332. if temp != res["BalanceSupplier"]{
  333. pl.Entry = en
  334. pls = append(pls, pl)
  335. pl.Number = code +"-"+ strconv.Itoa(cou)
  336. pl.Supplier = BillNumber{
  337. Number: res["BalanceSupplier"],
  338. }
  339. cou ++
  340. temp = res["BalanceSupplier"]
  341. en = make([]BillEntry, 0)
  342. }
  343. pl.Supplier = BillNumber{
  344. Number: res["BalanceSupplier"],
  345. }
  346. ent := BillEntry{}
  347. ent.Amount = res["SumPrice"]
  348. ent.Qty = res["Amount"]
  349. ent.ActualCost = res["SumPrice"]
  350. ent.ActualPrice = res["Price"]
  351. ent.ActualTaxPrice = res["Price"]
  352. ent.BalanceSupplier = BillNumber{
  353. Number: res["BalanceSupplier"],
  354. }
  355. ent.ContractNumber = res["ContractNumber"]
  356. ent.Material = BillNumber{
  357. Number: res["MaterielNumber"],
  358. }
  359. ent.Price = res["Price"]
  360. ent.PurchaseCost = res["SumPrice"]
  361. ent.TaxAmount = res["SumPrice"]
  362. ent.TaxPrice = res["Price"]
  363. ent.Unit = BillNumber{
  364. Number: res["MeteredUnit"],
  365. }
  366. ent.UnitActualCost = res["SumPrice"]
  367. ent.UnitPurchaseCost = res["Price"]
  368. ent.Warehouse = BillNumber{
  369. Number: res["WareHouse"],
  370. }
  371. en = append(en,ent)
  372. }
  373. pl.Entry = en
  374. pls = append(pls, pl)
  375. pljson, _ := json.Marshal(pls)
  376. //println(string(pljson))
  377. err = EASWebServicInsertPartsuselaid(sessionid, string(pljson), "006")
  378. if err != nil {
  379. logging.Error("EASWebServicInsertPartsuselaid", err)
  380. return id,err
  381. }
  382. }
  383. err = EASWebServicInsertPartsuselaid(sessionid, string(pujson), billType)
  384. if err != nil {
  385. logging.Error("EASWebServicInsertPartsuselaid", err)
  386. return id,err
  387. }
  388. //EASWebServiceLogout()
  389. return id,nil
  390. }
  391. func BigpartUseTransfer(billCode interface{}, sqlname, billType string)(string,error) {
  392. valuesMap, err := restful.Engine.SQL("SELECT sqlstr,params FROM apisql WHERE sqlname = ? limit 1", sqlname).QueryString()
  393. sqls := ""
  394. if err == nil && len(valuesMap) > 0 {
  395. sqls = valuesMap[0]["sqlstr"]
  396. }
  397. ress, err := restful.Engine.SQL(sqls, billCode).QueryString()
  398. if len(ress) == 0 {
  399. logging.Error("BigpartUse select len is 0", len(ress))
  400. return "",errors.New("查询结果为空")
  401. }
  402. if err != nil {
  403. logging.Error("BigpartUse select err", err)
  404. return "",err
  405. }
  406. id := ress[0]["id"]
  407. pus := make([]BillLaid, 0)
  408. pu := BillLaid{}
  409. pu.Number = ress[0]["BillNumber"]
  410. pu.TransactionType = BillNumber{
  411. Number: ress[0]["TransactionType"],
  412. }
  413. pu.BizDate = ress[0]["BizDate1"]
  414. pu.BizType = BillNumber{
  415. Number: ress[0]["BizTypeNumber"],
  416. }
  417. pu.Currency = BillNumber{
  418. Number: "BB01",
  419. }
  420. pu.PaymentType = BillNumber{
  421. Number: ress[0]["PaymentType"],
  422. }
  423. pu.StorageOrgUnit = BillNumber{
  424. Number: ress[0]["SupplyStorageOrg"],
  425. }
  426. pu.Supplier = BillNumber{
  427. Number: ress[0]["BalanceSupplier"],
  428. }
  429. pu.Description = ress[0]["Description"]
  430. pu.Creator = BillNumber{
  431. Number: ress[0]["Creator"],
  432. }
  433. en := make([]BillEntry, len(ress))
  434. isZeroStock := false
  435. for key, res := range ress {
  436. //if res["isZeroStock"] == "1" {
  437. // continue
  438. //} else {
  439. isZeroStock = true
  440. //}
  441. en[key].Amount = res["SumPrice"]
  442. en[key].Qty = res["Amount"]
  443. en[key].ActualCost = res["SumPrice"]
  444. en[key].ActualPrice = res["Price"]
  445. en[key].ActualTaxPrice = res["Price"]
  446. en[key].BalanceSupplier = BillNumber{
  447. Number: res["BalanceSupplier"],
  448. }
  449. en[key].ContractNumber = res["ContractNumber"]
  450. en[key].Material = BillNumber{
  451. Number: res["MaterielNumber"],
  452. }
  453. en[key].Price = res["Price"]
  454. en[key].PurchaseCost = res["SumPrice"]
  455. en[key].TaxAmount = res["SumPrice"]
  456. en[key].TaxPrice = res["Price"]
  457. en[key].Unit = BillNumber{
  458. Number: res["MeteredUnit"],
  459. }
  460. en[key].UnitActualCost = res["SumPrice"]
  461. en[key].UnitPurchaseCost = res["Price"]
  462. en[key].Warehouse = BillNumber{
  463. Number: res["WareHouse"],
  464. }
  465. en[key].StoreType= BillNumber{
  466. Number: "G",
  467. }
  468. en[key].StoreStatus= BillNumber{
  469. Number: "1",
  470. }
  471. }
  472. if isZeroStock {
  473. pu.Entry = en
  474. pus = append(pus, pu)
  475. pujson, _ := json.Marshal(pus)
  476. //sessionid, err := EASWebServiceLogin()
  477. //if err != nil {
  478. // logging.Error("EASWebServiceLogin", err)
  479. // return err
  480. //}
  481. singelChan <- struct{}{}
  482. sessionid := <- sessionidChan
  483. if len(sessionid)<7 || sessionid[:6] == "error:"{
  484. return id,errors.New("eas登录失败")
  485. }
  486. err = EASWebServicInsertPartsuselaid(sessionid, string(pujson), billType)
  487. if err != nil {
  488. logging.Error("EASWebServicInsertPartsuselaid", err)
  489. return id,err
  490. }
  491. //EASWebServiceLogout()
  492. }
  493. tx := restful.Engine.NewSession()
  494. err = tx.Begin()
  495. if err != nil {
  496. logging.Error("tx.Begin 事务启动失败__error:", err)
  497. }
  498. defer func() {
  499. switch {
  500. case err != nil:
  501. fmt.Println("__error:", err)
  502. if tx != nil {
  503. tx.Rollback()
  504. }
  505. default:
  506. if tx != nil {
  507. err = tx.Commit()
  508. }
  509. }
  510. if tx != nil {
  511. tx.Close()
  512. }
  513. }()
  514. sql := "update bigpartUse set issync = 1 where id =?"
  515. _,err =tx.Exec(sql, id)
  516. return id,err
  517. }
  518. func BigpartLaid(billCode interface{}, sqlname, billtype string) (string,error ) {
  519. valuesMap, err := restful.Engine.SQL("SELECT sqlstr,params FROM apisql WHERE sqlname = ? limit 1", sqlname).QueryString() //"syncEASPpartlaid"
  520. sqls := ""
  521. if err == nil && len(valuesMap) > 0 {
  522. sqls = valuesMap[0]["sqlstr"]
  523. }
  524. ress, err := restful.Engine.SQL(sqls, billCode).QueryString()
  525. if len(ress) == 0 {
  526. logging.Error("BigpartLaid select len is 0", len(ress))
  527. return "",errors.New("查询结果为空")
  528. }
  529. if err != nil {
  530. logging.Error("BigpartLaid select err", err)
  531. return "",err
  532. }
  533. id := ress[0]["id"]
  534. pls := make([]BillLaid, 0)
  535. pl := BillLaid{}
  536. pl.Number = ress[0]["BillNumber"]
  537. pl.TransactionType = BillNumber{
  538. Number: ress[0]["TransactionType"],
  539. }
  540. pl.BizDate = ress[0]["BizDate"]
  541. pl.BizType = BillNumber{
  542. Number: ress[0]["BizType"],
  543. }
  544. pl.Currency = BillNumber{
  545. Number: ress[0]["Currency"],
  546. }
  547. pl.PaymentType = BillNumber{
  548. Number: ress[0]["PaymentType"],
  549. }
  550. pl.StorageOrgUnit = BillNumber{
  551. Number: ress[0]["StorageOrgUnit"],
  552. }
  553. pl.Supplier = BillNumber{
  554. Number: ress[0]["BalanceSupplier"],
  555. }
  556. pl.Description = ress[0]["Description"]
  557. pl.Creator = BillNumber{
  558. Number: ress[0]["Creator"],
  559. }
  560. en := make([]BillEntry, len(ress))
  561. isZeroStock := false
  562. for key, res := range ress { // 零库存入库跳过
  563. if res["isZeroStock"] == "1" {
  564. continue
  565. } else {
  566. isZeroStock = true
  567. }
  568. pl.Supplier = BillNumber{
  569. Number: res["BalanceSupplier"],
  570. }
  571. en[key].Amount = res["Amount"]
  572. en[key].Qty = res["Qty"]
  573. en[key].ActualCost = res["ActualCost"]
  574. en[key].ActualPrice = res["ActualPrice"]
  575. en[key].ActualTaxPrice = res["ActualTaxPrice"]
  576. en[key].BalanceSupplier = BillNumber{
  577. Number: res["BalanceSupplier"],
  578. }
  579. en[key].ContractNumber = res["ContractNumber"]
  580. en[key].Material = BillNumber{
  581. Number: res["Material"],
  582. }
  583. en[key].Price = res["Price"]
  584. en[key].PurchaseCost = res["PurchaseCost"]
  585. en[key].TaxAmount = res["TaxAmount"]
  586. en[key].TaxPrice = res["TaxPrice"]
  587. en[key].Unit = BillNumber{
  588. Number: res["Unit"],
  589. }
  590. en[key].UnitActualCost = res["UnitActualCost"]
  591. en[key].UnitPurchaseCost = res["UnitPurchaseCost"]
  592. en[key].Warehouse = BillNumber{
  593. Number: res["Warehouse"],
  594. }
  595. }
  596. if isZeroStock {
  597. pl.Entry = en
  598. pls = append(pls, pl)
  599. pujson, _ := json.Marshal(pls)
  600. //sessionid, err := EASWebServiceLogin()
  601. //if err != nil {
  602. // logging.Error("EASWebServiceLogin", err)
  603. // return id,err
  604. //}
  605. singelChan <- struct{}{}
  606. sessionid := <- sessionidChan
  607. if len(sessionid)<7 || sessionid[:6] == "error:"{
  608. return id,errors.New("eas登录失败")
  609. }
  610. err = EASWebServicInsertPartsuselaid(sessionid, string(pujson), billtype)
  611. if err != nil {
  612. logging.Error("EASWebServicInsertPartsuselaid", err)
  613. return id,err
  614. }
  615. if billtype == "008" { // 为调拨入库时
  616. _,err = BigpartUseTransfer(ress[0]["useCode"], "syncEASPpartuse", "009")
  617. }
  618. //err = EASWebServiceLogout()
  619. //if err != nil {
  620. // fmt.Println("EASWebServiceLogout",err)
  621. //}
  622. }
  623. return id,nil
  624. }