da5a469a48bb04c1087a6034705fee78c6cf9145.svn-base 19 KB

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