package util
import (
"bytes"
"encoding/xml"
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
"time"
"github.com/pkg/errors"
"github.com/robfig/cron"
"kpt.xdmy/apiserver/routers/restful"
"kpt.xdmy/pkg/logging"
)
//eas webservice 目前使用字符串拼接的方式模拟xml发送
var (
LoginStr = `
userName?
password?
slnName?
dcName?
language?
dbType?
`
LogoutStr = `
userName?
slnName?
dcName?
language?
`
InsertPartsStr = `
SessionId?
strJson?
`
QureyPartsStr = `
SessionId?
{"number":"strJson?"}
`
InsertPartsuselaidStr = `
SessionId?
billType?
strJson?
2
`
QureyBill = `
SessionId?
billType?
{"number":"strJson?"}
`
)
var (
singelChan chan struct{}
lasttime time.Time
sessionId string
sessionidChan chan string
)
var user EASLoginInfo
type EASLoginInfo struct {
UserName string `json:"userName"`
Password string `json:"password"`
SlnName string `json:"slnName"`
DcName string `json:"dcName"`
Language string `json:"language"`
DbType string `json:"dbType"`
Url string `json:"dbType"`
}
type Response struct {
Body rspBody `xml:"Body" json:"body"`
}
type rspBody struct {
Record []rqRecord `xml:"multiRef" json:"multiRef"`
SynMaterialResponse SMReturn `xml:"synMaterialResponse" json:"SynMaterialResponse"`
ImportBillResponse ImportBillResponse `xml:"importBillResponse" json:"importBillResponse"`
QueryMaterialDataResponse QureyParts `xml:"queryMaterialDataResponse" json:"queryMaterialDataResponse"`
QueryScmBillDataResponse QureyBills `xml:"queryScmBillDataResponse" json:"queryScmBillDataResponse"`
}
type ImportBillResponse struct {
ImportBillReturn string `xml:"importBillReturn" json:"importBillReturn"`
}
type QureyParts struct {
QueryMaterialDataReturn string `xml:"queryMaterialDataReturn" json:"queryMaterialDataReturn"`
}
type QureyBills struct {
QueryScmBillDataReturn string `xml:"queryScmBillDataReturn" json:"queryScmBillDataReturn"`
}
type SMReturn struct {
SynMaterialReturn string `xml:"synMaterialReturn" json:"synMaterialReturn"`
}
type rqRecord struct {
SessionId string `xml:"sessionId" json:"sessionId"`
}
func InitWebS(use, pass, url string) {
user.Password = pass
user.UserName = use
user.DbType = "1"
//user.DcName = "MASM" //正式环境是 XDMY ,备件先手动改为XDMY,后面全部切换正式环境后统一修改
user.DcName = "XDMY" //正式环境是 XDMY ,备件先手动改为XDMY,后面全部切换正式环境后统一修改
user.Language = "L2"
user.SlnName = "eas"
user.Url = url
singelChan = make(chan struct{}, 100)
sessionidChan = make(chan string, 100)
lasttime = time.Now().Add(-6 * time.Minute)
go Runsessionid()
}
// sessionId 获取,本次请求与上次间隔5分钟以上 就重新登录
func Runsessionid() {
for {
func() {
defer func() {
if err := recover(); err != nil {
logging.Error("Runsessionid recover err", err)
}
}()
select {
case <-singelChan:
if time.Now().Sub(lasttime) > 5*time.Minute { // 大于五分钟重新退出再登录
println("重新登录")
//EASWebServiceLogout()
sd, err := EASWebServiceLogin("")
if err != nil {
sessionidChan <- "error: " + err.Error()
} else {
lasttime = time.Now()
sessionId = sd
sessionidChan <- sessionId
}
} else {
sessionidChan <- sessionId
}
}
}()
}
}
//登录
func EASWebServiceLogin(url string) (string, error) {
client := &http.Client{}
resstr := ReplaceStrWebSevice("login", user.UserName, user.Password, user.SlnName, user.DcName, user.Language, user.DbType, "", "", "")
if url == "" {
url = user.Url
} else {
resstr = strings.ReplaceAll(resstr, "MASM", "XDMY") // dcname正式和测试环境不一致
}
log.Default().Println("resstr:", resstr)
body := bytes.NewBuffer([]byte(resstr))
req, err := http.NewRequest("POST",
url+"/ormrpc/services/EASLogin?wsdl",
body,
)
req.Header.Set("Content-Type", "text/xml")
req.Header.Set("SOAPAction", "application/soap+xml")
if err != nil {
return "", err
}
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return "", err
}
defer resp.Body.Close()
result_body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return "", err
}
v := Response{}
err = xml.Unmarshal([]byte(string(result_body)), &v)
if err != nil {
fmt.Println(err.Error())
}
if len(v.Body.Record) > 0 {
return v.Body.Record[0].SessionId, nil
}
return "", err
}
//注销
func EASWebServiceLogout() error {
client := &http.Client{}
resstr := ReplaceStrWebSevice("logout", user.UserName, "", user.SlnName, user.DcName, user.Language, "", "", "", "")
body := bytes.NewBuffer([]byte(resstr))
req, err := http.NewRequest("POST",
user.Url+"/ormrpc/services/EASLogin?wsdl",
body,
)
req.Header.Set("Content-Type", "text/xml")
req.Header.Set("SOAPAction", "application/soap+xml")
if err != nil {
// handle error
}
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
_, err = ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
return nil
//fmt.Println(string(result_body))
}
func EASWebServiceQureyParts(SessionId, PartCode string) error {
client := &http.Client{}
resstr := ReplaceStrWebSevice("QureyPartsStr", "", "", "", "", "", "", SessionId, PartCode, "")
body := bytes.NewBuffer([]byte(resstr))
req, err := http.NewRequest("POST",
user.Url+"/ormrpc/services/WSReadEASDataFacade?wsdl",
body,
)
req.Header.Set("Content-Type", "text/xml")
req.Header.Set("SOAPAction", "application/soap+xml")
if err != nil {
// handle error
}
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
result_body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
v := Response{}
err = xml.Unmarshal(result_body, &v)
if err != nil {
fmt.Println(err.Error())
}
resmap := make(map[string]interface{}, 0)
err = json.Unmarshal([]byte(v.Body.QueryMaterialDataResponse.QueryMaterialDataReturn), &resmap)
//fmt.Println("resmap===============", resmap,len(resmap["data"].([]interface{})))
switch resmap["data"].(type) {
case []interface{}:
if resmap["success"] != "1" || len(resmap["data"].([]interface{})) == 0 {
return errors.New("单据未查询到")
}
default:
return errors.New("单据未查询到")
}
return nil
}
func EASWebServiceQureyBill(SessionId, BillCode, billType string) error {
client := &http.Client{}
resstr := ReplaceStrWebSevice("QureyBill", "", "", "", "", "", "", SessionId, BillCode, billType)
body := bytes.NewBuffer([]byte(resstr))
req, err := http.NewRequest("POST",
user.Url+"/ormrpc/services/WSReadEASDataFacade?wsdl",
body,
)
req.Header.Set("Content-Type", "text/xml")
req.Header.Set("SOAPAction", "application/soap+xml")
if err != nil {
return err
}
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
result_body, err := ioutil.ReadAll(resp.Body)
fmt.Println(string(result_body))
if err != nil {
fmt.Println(err)
return err
}
v := Response{}
err = xml.Unmarshal(result_body, &v)
if err != nil {
fmt.Println(err.Error())
}
resmap := make(map[string]interface{}, 0)
err = json.Unmarshal([]byte(v.Body.QueryScmBillDataResponse.QueryScmBillDataReturn), &resmap)
//fmt.Println("resmap===============", resmap,len(resmap["data"].([]interface{})))
switch resmap["data"].(type) {
case []interface{}:
if resmap["success"] != "1" || len(resmap["data"].([]interface{})) == 0 {
return errors.New("单据未查询到")
}
default:
return errors.New("单据未查询到")
}
return nil
}
func EASWebServicInsertParts(SessionId string, parts Parts, url string) error {
client := &http.Client{}
soapencJson, err := json.Marshal(parts)
if err != nil {
return err
}
if url == "" {
url = user.Url
}
println(string(soapencJson))
resstr := ReplaceStrWebSevice("InsertParts", "", "", "", "", "", "", SessionId, string(soapencJson), "")
body := bytes.NewBuffer([]byte(resstr))
req, err := http.NewRequest("POST",
url+"/ormrpc/services/WSSynMasterDataFacade?wsdl",
body,
)
req.Header.Set("Content-Type", "text/xml")
req.Header.Set("SOAPAction", "application/soap+xml")
if err != nil {
// handle error
}
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return err
}
defer resp.Body.Close()
result_body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return err
}
v := Response{}
err = xml.Unmarshal(result_body, &v)
if err != nil {
fmt.Println(err.Error())
}
resmap := make(map[string]string, 0)
err = json.Unmarshal([]byte(v.Body.SynMaterialResponse.SynMaterialReturn), &resmap)
_, ok := resmap["success"]
if !ok {
return errors.New(string(result_body))
}
if resmap["success"] == "0" {
return errors.New(resmap["message"])
}
return nil
}
// 登录系统写入数据
func EASWebServicInsertPartsuselaid(SessionId, strJson, billType string) error { //billType采购入库单:006 销售出库单:007 其他入库单:008 其他出库单:009 领料出库单:100 生产入库单:101
client := &http.Client{}
resstr := ReplaceStrWebSevice("InsertPartsuselaidStr", "", "", "", "", "", "", SessionId, strJson, billType)
body := bytes.NewBuffer([]byte(resstr))
req, err := http.NewRequest("POST",
user.Url+"/ormrpc/services/WSSCMWebServiceFacade?wsdl",
body,
)
req.Header.Set("Content-Type", "text/xml")
req.Header.Set("SOAPAction", "application/soap+xml")
if err != nil {
// handle error
}
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return err
}
defer resp.Body.Close()
result_body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return err
}
v := Response{}
err = xml.Unmarshal(result_body, &v)
if err != nil {
fmt.Println(err.Error())
}
resmap := make(map[string]interface{}, 0)
if v.Body.ImportBillResponse.ImportBillReturn != "" {
err = json.Unmarshal([]byte(v.Body.ImportBillResponse.ImportBillReturn), &resmap)
fmt.Println(v.Body.ImportBillResponse.ImportBillReturn)
//_,ok := resmap["billErrors"]
//if !ok {
// println(string(result_body))
// return errors.New(string(result_body))
//}
_, ok := resmap["status"]
if !ok {
println(string(result_body))
return errors.New(string(result_body))
}
//if len(resmap["billErrors"].([]interface{})) > 0 || resmap["status"] != "1" {
if resmap["status"] != "0" {
resmap := make(map[string]interface{}, 0)
err = json.Unmarshal([]byte(v.Body.ImportBillResponse.ImportBillReturn), &resmap)
switch resmap["billErrors"].(type) {
case []interface{}:
if len(resmap["billErrors"].([]interface{})) > 0 {
switch resmap["billErrors"].([]interface{})[0].(type) {
case map[string]interface{}:
str := resmap["billErrors"].([]interface{})[0].(map[string]interface{})["errorMsgs"]
switch str.(type) {
case []interface{}:
if len(str.([]interface{})) > 0 {
s := str.([]interface{})[0]
switch s.(type) {
case string:
return errors.New(s.(string))
}
}
}
}
}
}
return errors.New(v.Body.ImportBillResponse.ImportBillReturn)
}
}
return nil
}
//
func ReplaceStrWebSevice(typeIn, userName, password, slnName, dcName, language, dbType, SessionId, strJson, billType string) string {
res := ""
switch typeIn {
case "login":
res = LoginStr
res = strings.ReplaceAll(res, "userName?", userName)
res = strings.ReplaceAll(res, "password?", password)
res = strings.ReplaceAll(res, "slnName?", slnName)
res = strings.ReplaceAll(res, "dcName?", dcName)
res = strings.ReplaceAll(res, "language?", language)
res = strings.ReplaceAll(res, "dbType?", dbType)
case "logout":
res = LogoutStr
res = strings.ReplaceAll(res, "userName?", userName)
res = strings.ReplaceAll(res, "slnName?", slnName)
res = strings.ReplaceAll(res, "dcName?", dcName)
res = strings.ReplaceAll(res, "language?", language)
case "InsertParts":
res = InsertPartsStr
res = strings.ReplaceAll(res, "SessionId?", SessionId)
res = strings.ReplaceAll(res, "strJson?", strJson)
case "QureyPartsStr":
res = QureyPartsStr
res = strings.ReplaceAll(res, "SessionId?", SessionId)
res = strings.ReplaceAll(res, "strJson?", strJson)
case "InsertPartsuselaidStr":
res = InsertPartsuselaidStr
res = strings.ReplaceAll(res, "SessionId?", SessionId)
res = strings.ReplaceAll(res, "strJson?", strJson)
res = strings.ReplaceAll(res, "billType?", billType)
case "QureyBill":
res = QureyBill
res = strings.ReplaceAll(res, "SessionId?", SessionId)
res = strings.ReplaceAll(res, "strJson?", strJson)
res = strings.ReplaceAll(res, "billType?", billType)
}
return res
}
func CronServer() {
c := cron.New()
log.Println("Starting CronWXworkkpt.xdmy/pkg.")
err := c.AddFunc("0 1 1 * *", Pastures) // 每月1号1点
err = c.AddFunc("1 1 1 * *", PartClass) // 每月1号1点1分
if err != nil {
log.Print("定时任务出错___", err.Error())
}
c.Start()
}
func Pastures() {
//fmt.Println("Dingshi")
tx, err1 := restful.Dbs.Beginx()
defer func() {
switch {
case err1 != nil:
println("tx.Begin 事务启动失败__error:", err1.Error())
if tx != nil {
tx.Rollback()
}
default:
if tx != nil {
err1 = tx.Commit()
}
}
}()
queryPasture, err := restful.MapStrListTx(tx, "select sum(p_r.reportery) reportery, w2.pastureId,DATE_FORMAT(DATE_SUB(now(),INTERVAL 1 MONTH),'%Y-%m') dateTime "+
" from part_repertory p_r "+
" left join warehouse w2 on w2.id = p_r.locationId "+
" GROUP BY w2.pastureId ")
fmt.Println(queryPasture)
if len(queryPasture) > 0 {
for i := 0; i < len(queryPasture); i++ {
reportery := queryPasture[i]["reportery"]
pastureId := queryPasture[i]["pastureId"]
dateTime := queryPasture[i]["dateTime"]
_, err = tx.Exec("insert into inventory_temporary(currentInventory,pastureId,inventoryDate) VALUES(?,?,?)", reportery, pastureId, dateTime)
}
}
go YuechuRuku()
go Yuechuchuku()
go Yuemochuku()
go Yuemoruku()
if err != nil {
logging.Error("查询当前的不同牧场的库存__error:", err.Error())
}
}
func PartClass() {
tx, err1 := restful.Dbs.Beginx()
defer func() {
switch {
case err1 != nil:
println("tx.Begin 事务启动失败__error:", err1.Error())
if tx != nil {
tx.Rollback()
}
default:
if tx != nil {
err1 = tx.Commit()
}
}
}()
queryPasture, err := restful.MapStrListTx(tx, "select sum(pr.reportery) reportery,ps.categoryId2,w2.pastureId,DATE_FORMAT(DATE_SUB(now(),INTERVAL 1 MONTH),'%Y-%m') dateTime "+
" from part_repertory pr "+
" left join warehouse w2 on w2.id = pr.locationId "+
" INNER JOIN parts ps ON ps.id = pr.partId "+
" GROUP BY ps.categoryId2,w2.pastureId")
if len(queryPasture) > 0 {
for i := 0; i < len(queryPasture); i++ {
reportery := queryPasture[i]["reportery"]
pastureId := queryPasture[i]["pastureId"]
categoryId2 := queryPasture[i]["categoryId2"]
dateTime := queryPasture[i]["dateTime"]
_, err = tx.Exec("insert into inventory_temporary(currentInventory,pastureId,inventoryDate,partClassId) VALUES(?,?,?,?)", reportery,
pastureId, dateTime, categoryId2)
}
}
go YuechuPasture()
go YuechuchukuPasture()
go YuemochukuPasture()
go YuemorukuPasture()
if err != nil {
fmt.Println(err.Error())
}
}
func YuechuRuku() {
tx, err1 := restful.Dbs.Beginx()
defer func() {
switch {
case err1 != nil:
println("tx.Begin 事务启动失败__error:", err1.Error())
if tx != nil {
tx.Rollback()
}
default:
if tx != nil {
err1 = tx.Commit()
}
}
}()
// 用于月初入库的备件数量根据牧场
queryPartYcRK, err := restful.MapStrListTx(tx, "select sum(storageAmount) yuechusum,w1.pastureId,DATE_FORMAT(DATE_SUB(now()"+
" ,INTERVAL 1 MONTH),'%Y-%m') dateTime from partlaid pl "+
" inner JOIN bigpartlaid bpl ON bpl.`id` = pl.`bigId` left join warehouse w1 on w1.id = pl.locationId "+
" where DATE_FORMAT(bpl.storageTime,'%Y-%m') > DATE_FORMAT(DATE_SUB(now(),INTERVAL 1 MONTH),'%Y-%m') "+
" GROUP BY w1.pastureId ")
fmt.Println(queryPartYcRK)
if len(queryPartYcRK) > 0 {
for i := 0; i < len(queryPartYcRK); i++ {
yuechusum := queryPartYcRK[i]["yuechusum"]
pastureId := queryPartYcRK[i]["pastureId"]
dateTime := queryPartYcRK[i]["dateTime"]
_, err = tx.Exec("update inventory_temporary set beginningInventoryRK = ? where pastureId =? and inventoryDate =? and partClassId is null", yuechusum, pastureId, dateTime)
}
}
if err != nil {
fmt.Println(err.Error())
}
}
func Yuechuchuku() {
tx, err1 := restful.Dbs.Beginx()
defer func() {
switch {
case err1 != nil:
println("tx.Begin 事务启动失败__error:", err1.Error())
if tx != nil {
tx.Rollback()
}
default:
if tx != nil {
err1 = tx.Commit()
}
}
}()
//// 用于月初出库的备件数量根据牧场
queryPartYcCK, err := restful.MapStrListTx(tx, "select sum(pu.`checkoutNumber` - pu.`quitNumber`) yuechuchuku, bpu.pastureId,"+
" DATE_FORMAT(DATE_SUB(now(),INTERVAL 1 MONTH),'%Y-%m') dateTime from partuse pu "+
" inner JOIN bigpartuse bpu ON pu.`bigId` =bpu.`id` "+
" where (DATE_FORMAT(bpu.receiveTime,'%Y-%m') > DATE_FORMAT(DATE_SUB(now(),INTERVAL 1 MONTH),'%Y-%m') ) "+
" GROUP BY bpu.pastureId ")
fmt.Println(queryPartYcCK)
if len(queryPartYcCK) > 0 {
//fmt.Println("jinglaile")
fmt.Printf("%T\n", queryPartYcCK[0]["yuechuchuku"])
for i := 0; i < len(queryPartYcCK); i++ {
yuechuchuku := queryPartYcCK[i]["yuechuchuku"]
pastureId := queryPartYcCK[i]["pastureId"]
dateTime := queryPartYcCK[i]["dateTime"]
fmt.Println(pastureId)
_, err = tx.Exec("update inventory_temporary set beginningInventoryCK = ? where pastureId =? and inventoryDate =? and partClassId is null", yuechuchuku, pastureId, dateTime)
}
}
if err != nil {
fmt.Println(err.Error())
}
}
func Yuemochuku() {
tx, err1 := restful.Dbs.Beginx()
defer func() {
switch {
case err1 != nil:
println("tx.Begin 事务启动失败__error:", err1.Error())
if tx != nil {
tx.Rollback()
}
default:
if tx != nil {
err1 = tx.Commit()
}
}
}()
//// 用于月末出库的备件数量根据牧场
queryPartYmCK, err := restful.MapStrListTx(tx, "select sum(pu.`checkoutNumber` - pu.`quitNumber`) yumochuku, bpu.pastureId ,"+
" DATE_FORMAT(DATE_SUB(now(),INTERVAL 1 MONTH),'%Y-%m') dateTime "+
"from partuse pu "+
" inner JOIN bigpartuse bpu ON pu.`bigId` =bpu.`id` where (DATE_FORMAT(bpu.receiveTime,'%Y-%m') > DATE_FORMAT(now(),'%Y-%m') ) "+
" GROUP BY bpu.pastureId")
//
if len(queryPartYmCK) > 0 {
for i := 0; i < len(queryPartYmCK); i++ {
yumochuku := queryPartYmCK[i]["yumochuku"]
pastureId := queryPartYmCK[i]["pastureId"]
dateTime := queryPartYmCK[i]["dateTime"]
_, err = tx.Exec("update inventory_temporary set endInventoryCK = ? where pastureId =? and inventoryDate =? and partClassId is null", yumochuku, pastureId, dateTime)
}
}
if err != nil {
fmt.Println(err.Error())
}
}
func Yuemoruku() {
tx, err1 := restful.Dbs.Beginx()
defer func() {
switch {
case err1 != nil:
println("tx.Begin 事务启动失败__error:", err1.Error())
if tx != nil {
tx.Rollback()
}
default:
if tx != nil {
err1 = tx.Commit()
}
}
}()
//// 用于月末入库的备件数量根据牧场
queryPartYmRK, err := restful.MapStrListTx(tx, "select sum(storageAmount)yumoruku,w1.pastureId, DATE_FORMAT(DATE_SUB(now(),INTERVAL 1 MONTH),'%Y-%m') "+
" from partlaid pl inner JOIN bigpartlaid bpl ON bpl.`id` = pl.`bigId` left join warehouse w1 on w1.id = pl.locationId "+
" where DATE_FORMAT(bpl.storageTime,'%Y-%m') > DATE_FORMAT(now(),'%Y-%m') "+
" GROUP BY w1.pastureId ")
//
if len(queryPartYmRK) > 0 {
for i := 0; i < len(queryPartYmRK); i++ {
yumoruku := queryPartYmRK[i]["yumoruku"]
pastureId := queryPartYmRK[i]["pastureId"]
dateTime := queryPartYmRK[i]["dateTime"]
_, err = tx.Exec("update inventory_temporary set endInventoryRK = ? where pastureId =? and inventoryDate =? and partClassId is null ", yumoruku, pastureId, dateTime)
}
}
if err != nil {
fmt.Println(err.Error())
}
}
func YuechuPasture() {
tx, err1 := restful.Dbs.Beginx()
defer func() {
switch {
case err1 != nil:
println("tx.Begin 事务启动失败__error:", err1.Error())
if tx != nil {
tx.Rollback()
}
default:
if tx != nil {
err1 = tx.Commit()
}
}
}()
// 用于月初入库的备件数量根据牧场
queryPartYcRK, err := restful.MapStrListTx(tx, " select sum(storageAmount) storageAmount,p1.categoryId2,w1.pastureId,DATE_FORMAT(DATE_SUB(now(),INTERVAL 1 MONTH),'%Y-%m') dateTime "+
"from partlaid pl inner JOIN bigpartlaid bpl ON bpl.`id` = pl.`bigId` left join parts p1 on p1.id = pl.partId left join warehouse w1 "+
" on w1.id = pl.locationId "+
" where DATE_FORMAT(bpl.storageTime,'%Y-%m') > DATE_FORMAT(DATE_SUB(now(),INTERVAL 1 MONTH),'%Y-%m') "+
" GROUP BY p1.categoryId2 , w1.pastureId ")
if len(queryPartYcRK) > 0 {
for i := 0; i < len(queryPartYcRK); i++ {
storageAmount := queryPartYcRK[i]["storageAmount"]
pastureId := queryPartYcRK[i]["pastureId"]
dateTime := queryPartYcRK[i]["dateTime"]
categoryId2 := queryPartYcRK[i]["categoryId2"]
_, err = tx.Exec("update inventory_temporary set beginningInventoryRK = ? where pastureId =? and inventoryDate =? and partClassId =?", storageAmount, pastureId, dateTime, categoryId2)
}
}
if err != nil {
fmt.Println(err.Error())
}
}
func YuechuchukuPasture() {
tx, err1 := restful.Dbs.Beginx()
defer func() {
switch {
case err1 != nil:
println("tx.Begin 事务启动失败__error:", err1.Error())
if tx != nil {
tx.Rollback()
}
default:
if tx != nil {
err1 = tx.Commit()
}
}
}()
//// 用于月初出库的备件数量根据牧场
queryPartYcCK, err := restful.MapStrListTx(tx, "select sum(pu.`checkoutNumber` - pu.`quitNumber`) yuechuchuku,bpu.pastureId, "+
"p1.categoryId2,DATE_FORMAT(DATE_SUB(now(),INTERVAL 1 MONTH),'%Y-%m') dateTime from partuse pu "+
" inner JOIN bigpartuse bpu ON pu.`bigId` =bpu.`id` left join parts p1 on p1.id = pu.partId "+
" where (DATE_FORMAT(bpu.receiveTime,'%Y-%m') > DATE_FORMAT(DATE_SUB(now(),INTERVAL 1 MONTH),'%Y-%m') ) "+
" GROUP BY bpu.pastureId,p1.categoryId2 ")
if len(queryPartYcCK) > 0 {
//fmt.Println("jinglaile")
//fmt.Printf("%T\n",queryPartYcCK[0]["yuechuchuku"])
for i := 0; i < len(queryPartYcCK); i++ {
yuechuchuku := queryPartYcCK[i]["yuechuchuku"]
pastureId := queryPartYcCK[i]["pastureId"]
dateTime := queryPartYcCK[i]["dateTime"]
categoryId2 := queryPartYcCK[i]["categoryId2"]
fmt.Println(pastureId)
_, err = tx.Exec("update inventory_temporary set beginningInventoryCK = ? where pastureId =? and inventoryDate =? and partClassId =?", yuechuchuku, pastureId, dateTime, categoryId2)
}
}
if err != nil {
fmt.Println(err.Error())
}
}
func YuemochukuPasture() {
tx, err1 := restful.Dbs.Beginx()
defer func() {
switch {
case err1 != nil:
println("tx.Begin 事务启动失败__error:", err1.Error())
if tx != nil {
tx.Rollback()
}
default:
if tx != nil {
err1 = tx.Commit()
}
}
}()
//// 用于月末出库的备件数量根据牧场
queryPartYmCK, err := restful.MapStrListTx(tx, "select sum(pu.`checkoutNumber` - pu.`quitNumber`) yumochuku,bpu.pastureId, "+
" p1.categoryId2,DATE_FORMAT(now(),'%Y-%m') dateTime "+
" from partuse pu inner JOIN bigpartuse bpu ON pu.`bigId` =bpu.`id` left join parts p1 on p1.id = pu.partId "+
" where (DATE_FORMAT(bpu.receiveTime,'%Y-%m') > DATE_FORMAT(now(),'%Y-%m') ) "+
"GROUP BY bpu.pastureId,p1.categoryId2 ")
if len(queryPartYmCK) > 0 {
for i := 0; i < len(queryPartYmCK); i++ {
yumochuku := queryPartYmCK[i]["yumochuku"]
pastureId := queryPartYmCK[i]["pastureId"]
dateTime := queryPartYmCK[i]["dateTime"]
categoryId2 := queryPartYmCK[i]["categoryId2"]
_, err = tx.Exec("update inventory_temporary set endInventoryCK = ? where pastureId =? and inventoryDate =? and partClassId =?", yumochuku, pastureId, dateTime, categoryId2)
}
}
if err != nil {
fmt.Println(err.Error())
}
}
func YuemorukuPasture() {
tx, err1 := restful.Dbs.Beginx()
defer func() {
switch {
case err1 != nil:
println("tx.Begin 事务启动失败__error:", err1.Error())
if tx != nil {
tx.Rollback()
}
default:
if tx != nil {
err1 = tx.Commit()
}
}
}()
//// 用于月末入库的备件数量根据牧场
queryPartYmRK, err := restful.MapStrListTx(tx, "select sum(storageAmount) yumoruku, p1.categoryId2,w1.pastureId , DATE_FORMAT(now(),'%Y-%m') dateTime"+
" from partlaid pl inner JOIN bigpartlaid bpl "+
" ON bpl.`id` = pl.`bigId` left join warehouse w1 on w1.id = pl.locationId left join parts p1 on p1.id = pl.partId "+
" where DATE_FORMAT(bpl.storageTime,'%Y-%m') > DATE_FORMAT(now(),'%Y-%m') GROUP BY p1.categoryId2,w1.pastureId ")
//
if len(queryPartYmRK) > 0 {
for i := 0; i < len(queryPartYmRK); i++ {
yumoruku := queryPartYmRK[i]["yumoruku"]
pastureId := queryPartYmRK[i]["pastureId"]
dateTime := queryPartYmRK[i]["dateTime"]
categoryId2 := queryPartYmRK[i]["categoryId2"]
_, err = tx.Exec("update inventory_temporary set endInventoryRK = ? where pastureId =? and inventoryDate =? and partClassId=? ", yumoruku, pastureId, dateTime, categoryId2)
}
}
if err != nil {
fmt.Println(err.Error())
}
}