d3d86c8dc40e3e7dead22fea4d47d1b2a120fc4e.svn-base 18 KB

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