1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206 |
- package api
- import (
- "encoding/json"
- "errors"
- "fmt"
- "io/ioutil"
- "log"
- "net/http"
- "strconv"
- "strings"
- "sync"
- "time"
- "../../pkg/app"
- "../../pkg/e"
- "../../pkg/logging"
- "../../pkg/setting"
- "../../routers/restful"
- "github.com/Anderson-Lu/gofasion/gofasion"
- "github.com/gin-gonic/gin"
- "github.com/xormplus/xorm"
- )
- type feedtemplet struct {
- Id int64 `xorm:"id"`
- Ccname string `xorm:"ccname"`
- Cname string `xorm:"tname"`
- }
- type tmrStruct struct {
- Id int64 `xorm:"id"`
- Tname string `xorm:"tname"`
- Maxstirfeed float64 `xorm:"maxstirfeed"`
- }
- type lpplanStruct struct {
- Id int64 `xorm:"id"`
- Tmrname string `xorm:"tmrname"`
- Tmrid int64 `xorm:"tmrid"`
- Sort int64 `xorm:"sort"`
- Sel int64 `xorm:"sel"`
- Times int64 `xorm:"times"`
- Ftname string `xorm:"ftname"`
- Ftid int64 `xorm:"ftid"`
- Maxweight float64 `xorm:"maxweight"`
- Sumweight float64 `xorm:"sumweight"`
- Sumcowcount int64 `xorm:"sumcowcount"`
- Pastureid string `xorm:"pastureid"`
- Display string `xorm:"display"`
- Issplit int64 `xorm:"issplit"`
- BeginTime string `xorm:"begintime"`
- }
- type sysopt struct {
- Inforvalue int `xorm:"inforvalue"`
- }
- type lpplanQueryInfo struct {
- Pastureid int64 `xorm:"pastureid"`
- Lppid int64 `xorm:"id"`
- Maxweight float64 `xorm:"maxweight"`
- Lweight float64 `xorm:"lweight"`
- Lweighthis float64 `xorm:"lweighthis"`
- Barid int64 `xorm:"barid"`
- Barname string `xorm:"barname"`
- Sort int64 `xorm:"sort"`
- Tmrid int64 `xorm:"tmrid"`
- Tmrname string `xorm:"tmrname"`
- Cowcount int64 `xorm:"cowcount"`
- Ccountradio float64 `xorm:"ccountradio"`
- Background string `xorm:"background"`
- Times int64 `xorm:"times"`
- Ftid int64 `xorm:"ftid"`
- }
- type fpdetailQueryInfo struct {
- Fpdid int64 `xorm:"fpdid"`
- Ptsrate float64 `xorm:"ptsrate"`
- Ptsuse float64 `xorm:"ptsuse"`
- Ptuse float64 `xorm:"ptuse"`
- Weight float64 `xorm:"weight"`
- Barid int64 `xorm:"barid"`
- Barname string `xorm:"barname"`
- Cowcount int64 `xorm:"cowcount"`
- Ccountradio float64 `xorm:"ccountradio"`
- Fttypeid int64 `xorm:"fttypeid"`
- Times int64 `xorm:"times"`
- Ptid int64 `xorm:"ptid"`
- Background string `xorm:"background"`
- }
- type lpplandtl1 struct {
- Id int64 `xorm:"id"`
- Pastureid int64 `xorm:"pastureid"`
- Lppid int64 `xorm:"lppid"`
- Barid int64 `xorm:"barid"`
- Barname string `xorm:"barname"`
- Fpdid int64 `xorm:"fpdid"`
- Fttype int64 `xorm:"fttype"`
- Lweight float64 `xorm:"lweight"`
- Sort int64 `xorm:"sort"`
- Tmrid int64 `xorm:"tmrid"`
- Tmrname string `xorm:"tmrname"`
- Cowcount int64 `xorm:"cowcount"`
- Ccountradio float64 `xorm:"ccountradio"`
- Background string `xorm:"background"`
- Lweighthis float64 `xorm:"lweighthis"`
- }
- //撒料计划 自动生成
- func Autogeneration(c *gin.Context) {
- appG := app.Gin{C: c}
- dataByte, _ := ioutil.ReadAll(c.Request.Body)
- fsion := gofasion.NewFasion(string(dataByte))
- pastureid := fsion.Get("pastureid").ValueStr()
- typeIN := fsion.Get("type").ValueInt64()
- log.Println(time.Now())
- tx := restful.Engine.NewSession()
- defer tx.Close()
- var times int
- var wg sync.WaitGroup
- var tmrlist *[]*tmrStruct
- var feedtempletlist *[]*feedtemplet
- var err error
- var lpplanlist *[]*lpplanList
- var fpdetailWeightList *[]*fpdetailWeight
- wg.Add(1)
- go func() {
- defer wg.Done()
- feedtempletlist, err = getfeedtemplet(pastureid, tx)
- if err != nil {
- appG.Response(http.StatusOK, e.ERROR, false)
- return
- }
- }()
- wg.Wait()
- wg.Add(1)
- go func() {
- defer wg.Done()
- tmrlist, err = gettmr(pastureid, tx)
- if err != nil {
- appG.Response(http.StatusOK, e.ERROR, false)
- return
- }
- }()
- wg.Wait()
- wg.Add(1)
- go func() {
- defer wg.Done()
- times, err = gettimes(pastureid, tx)
- if err != nil {
- appG.Response(http.StatusOK, e.ERROR, false)
- return
- }
- }()
- wg.Wait()
- wg.Add(1)
- go func() {
- defer wg.Done()
- lpplanlist, err = getLpplanlist(pastureid, tx)
- if err != nil {
- appG.Response(http.StatusOK, e.ERROR, false)
- return
- }
- }()
- wg.Wait()
- wg.Add(1)
- go func() {
- defer wg.Done()
- fpdetailWeightList, err = getFpdetail(pastureid, tx)
- if err != nil {
- appG.Response(http.StatusOK, e.ERROR, false)
- return
- }
- for _, fpd := range *fpdetailWeightList {
- for _, lpp := range *lpplanlist {
- if (lpp.Ftid == fpd.Ptid || lpp.Ftid == fpd.Ptsid) && lpp.Times == fpd.Times {
- fpd.Weight = fpd.Weight - (lpp.Maxweight - lpp.Lweight)
- }
- }
- }
- }()
- wg.Wait()
- // 避免车次数量为0造成死循环
- max := false
- for _, tmr := range *tmrlist {
- if tmr.Maxstirfeed > 0 {
- max = true
- break
- }
- }
- for i := 1; i <= times; i++ {
- count, err := getLpplanCount(tx, i, pastureid)
- if err != nil {
- appG.Response(http.StatusOK, e.ERROR, false)
- return
- }
- for _, tem := range *feedtempletlist {
- for _, fpd := range *fpdetailWeightList {
- if tem.Id == fpd.Temid && i == int(fpd.Times) {
- var ftid int64
- if fpd.Ptid != 0 {
- ftid = fpd.Ptid
- } else {
- ftid = fpd.Ptsid
- }
- for fpd.Weight > 0 && max {
- for _, tmr := range *tmrlist {
- if tmr.Maxstirfeed > 0 {
- count++
- ids, err := setting.SnowIds.NextId()
- if err != nil {
- ids = time.Now().UnixNano()
- logging.Info("create SnowIds err", err)
- }
- display := tem.Cname
- if i == 1 {
- display += "第一班"
- } else if i == 2 {
- display += "第二班"
- } else if i == 3 {
- display += "第三班"
- } else if i == 4 {
- display += "第四班"
- }
- lpplan := &lpplanStruct{
- Id: ids,
- Tmrname: tmr.Tname,
- Tmrid: tmr.Id,
- Sort: count,
- Sel: 1,
- Times: int64(i),
- Ftname: tem.Cname,
- Ftid: ftid,
- Maxweight: tmr.Maxstirfeed,
- Sumweight: 0,
- Sumcowcount: 0,
- Pastureid: pastureid,
- Display: display,
- }
- err = addLpplan(lpplan, tx)
- if err != nil {
- appG.Response(http.StatusOK, e.ERROR, false)
- return
- }
- fpd.Weight = fpd.Weight - tmr.Maxstirfeed
- }
- if fpd.Weight < 0 {
- break
- }
- }
- }
- }
- }
- }
- }
- // wg.Wait()
- err = autogeneration(typeIN, pastureid, tx)
- if err != nil {
- appG.Response(http.StatusOK, e.ERROR, false)
- return
- }
- appG.Response(http.StatusOK, e.SUCCESS, true)
- }
- //查看配方模板
- func getfeedtemplet(pastureid string, tx *xorm.Session) (*[]*feedtemplet, error) {
- data := make([]*feedtemplet, 0)
- err := tx.Table("feedtemplet").Select("id,ccname,tname").Where("pastureid = ? ", pastureid).Find(&data)
- if err != nil {
- log.Println("getfeedtemplet-error", err)
- return nil, err
- }
- return &data, nil
- }
- //查看tmr设备
- func gettmr(pastureid string, tx *xorm.Session) (*[]*tmrStruct, error) {
- data := make([]*tmrStruct, 0)
- session := tx.Table("tmr")
- session.Select("TRIM(id) id,tname,maxstirfeed")
- session.Where("pastureid = ? ", pastureid)
- session.Where("enable = 1")
- session.In("tclassid", "1,2,3")
- err := session.Find(&data)
- if err != nil {
- log.Println("gettmr-error", err)
- return nil, err
- }
- return &data, nil
- }
- //判断计划种是否有该车次
- func getLpplanExist(tmrid, ftid int64, times int, pastureid string, tx *xorm.Session) (bool, error) {
- session := tx.Table("lpplan")
- session.Where("pastureid = ? ", pastureid)
- session.Where("times = ? ", times)
- session.Where("tmrid = ? ", tmrid)
- session.Where("ftid = ? ", ftid)
- exist, err := session.Exist()
- if err != nil {
- log.Println("getLpplanExist-error", err)
- return false, err
- }
- return exist, nil
- }
- type fpdetailWeight struct {
- Times int64 `xorm:"times"`
- Weight float64 `xorm:"weight"`
- Pastureid int64 `xorm:"pastureid"`
- Ptid int64 `xorm:"ptid"`
- Ptsid int64 `xorm:"ptsid"`
- Cowcount int64 `xorm:"cowcount"`
- Temid int64 `xorm:"Temid"`
- }
- //获取料数量
- func getFpdetail(pastureid string, tx *xorm.Session) (*[]*fpdetailWeight, error) {
- fpdetaillist := make([]*fpdetailWeight, 0)
- err := tx.SQL(` select t1.temid,t1.times,ifnull(t2.weight,0)+sum(t1.weight) as weight ,TRIM(t1.pastureid) pastureid,TRIM(t1.ptid) ptid,TRIM(t1.ptsid ) ptsid ,t1.cowcount from (SELECT fpd.id,ft.id as temid,fpd.times, ROUND((1-fpd.ptsrate)*fpd.weight,2)-fpd.ptuse weight,TRIM(fpd.pastureid) pastureid,TRIM(fpd.ptid) ptid,TRIM(fpd.ptsid ) ptsid ,fpd.cowcount FROM fpdetail fpd
- join feedp fp on fp.ftid = fpd.ptid and fp.pastureid = fpd.pastureid
- inner join feedtemplet ft on ft.id = fp.ftid and ft.pastureid = fpd.pastureid
- WHERE fpd.pastureid = ? AND fpd.ptuse<ROUND((1-fpd.ptsrate)*fpd.weight,2) and fpd.ptid > 0
- group by fpd.id,fpd.times) t1
- left join ( select t1.id,t1.temid as temid, t1.times,sum(t1.weight) weight,TRIM(t1.pastureid) pastureid,TRIM(t1.ptid) ptid,TRIM(t1.ptsid ) ptsid ,
- t1.cowcount from (SELECT fpd.id,ft.id as temid, fpd.times,ROUND(fpd.ptsrate*fpd.weight,2)-fpd.ptsuse weight,TRIM(fpd.pastureid) pastureid,TRIM(fpd.ptid) ptid,TRIM(fpd.ptsid ) ptsid ,
- cowcount FROM fpdetail fpd
- join feedp fp on fp.ptsfid = fpd.ptsid and fp.pastureid = fpd.pastureid
- inner join feedtemplet ft on ft.id = fp.ftid and ft.pastureid = fpd.pastureid
- WHERE fpd.pastureid = ? AND fpd.ptsuse< ROUND(fpd.ptsrate*fpd.weight,2) and fpd.ptsid > 0
- group by fpd.id,fpd.times) t1
- group by t1.temid,t1.times) t2 on t2.temid = t1.temid and t2.times = t1.times
- group by t1.temid,t1.times
- `, pastureid, pastureid).Find(&fpdetaillist)
- if err != nil {
- log.Println("getFpdetail-error", err)
- tx.Rollback()
- return nil, err
- }
- return &fpdetaillist, nil
- }
- type lpplanList struct {
- Tmrid int64 `xorm:"tmrid"`
- Times int64 `xorm:"times"`
- Ftid int64 `xorm:"ftid"`
- Maxweight float64 `xorm:"maxweight"`
- Lweight float64 `xorm:"lweight"`
- }
- func getLpplanlist(patsureid string, tx *xorm.Session) (*[]*lpplanList, error) {
- session := tx.SQL(` select t1.times,t1.tmrid,t1.ftid,t1.maxweight ,ifnull(t2.lweight,0)as lweight from lpplan t1
- left join ( select ifnull(sum(lweight),0) as lweight,lppid from lpplandtl1 where pastureid =? GROUP BY lppid) t2 on t1.id = t2.lppid
- where t1.pastureid = ? `, patsureid, patsureid)
- data := make([]*lpplanList, 0)
- err := session.Find(&data)
- if err != nil {
- log.Println("getLpplanlist-error", err)
- return nil, err
- }
- return &data, nil
- }
- // 添加车次计划
- func addLpplan(lpplan *lpplanStruct, tx *xorm.Session) error {
- _, err := tx.Table("lpplan").Insert(lpplan)
- if err != nil {
- log.Println("addLpplan-error", err)
- return err
- }
- return nil
- }
- //获取车次数量
- func getLpplanCount(tx *xorm.Session, times int, pastureid string) (int64, error) {
- count, err := tx.Table("lpplan").Where("times = ?", times).And("pastureid = ?", pastureid).Count()
- if err != nil {
- log.Println("getLpplanCount-error", err)
- return 0, err
- }
- return count, err
- }
- //获取班次信息
- func gettimes(pastureid string, tx *xorm.Session) (int, error) {
- session := tx.Table("sysopt")
- session.Where("pastureid = ? ", pastureid)
- session.Where("inforname = 'times' ")
- data := new(sysopt)
- _, err := session.Get(data)
- if err != nil {
- log.Println("gettimes-error", err)
- return 0, err
- }
- return data.Inforvalue, nil
- }
- type upfpdetail struct {
- insertlweight float64
- fttypeid int64
- fpdid int64
- }
- func autogeneration(typeIN int64, pastureid string, tx *xorm.Session) error {
- tx.Begin()
- if typeIN == 1 {
- _, err := tx.SQL(`DELETE FROM lpplandtl1 WHERE pastureid = ?`, pastureid).Execute()
- if err != nil {
- log.Println("autogeneration-error-1", err)
- tx.Rollback()
- return err
- }
- _, err = tx.SQL(`update fpdetail
- set ptuse = 0,ptsuse=0
- WHERE pastureid = ?`, pastureid).Execute()
- if err != nil {
- log.Println("autogeneration-error-2", err)
- tx.Rollback()
- return err
- }
- }
- lpplansession := tx.SQL(`select
- t1.sort,t1.tmrid,t1.tmrname,t1.ftid,
- t1.pastureid,t1.id ,t1.maxweight,ifnull(t2.lweight,0) as lweight,t1.times from lpplan t1
- left join ( select ifnull(sum(lweight),0) as lweight,lppid from lpplandtl1 where pastureid =? GROUP BY lppid) t2 on t1.id = t2.lppid
- where t1.pastureid = ? and t1.maxweight > ifnull(t2.lweight,0) `, pastureid, pastureid)
- lpplanlist := make([]*lpplanQueryInfo, 0)
- err := lpplansession.Find(&lpplanlist)
- if err != nil {
- log.Println("autogeneration-error-3", err)
- tx.Rollback()
- return err
- }
- fpdetaillist := make([]*fpdetailQueryInfo, 0)
- err = tx.SQL(`SELECT ft.tcolor background,fpd.ptid,ft.fttypeid,fpd.cowcount,fpd.ccountradio,fpd.id as fpdid,times,tratio,ROUND((1-fpd.ptsrate)*fpd.weight,2)-fpd.ptuse weight,TRIM(fpd.barid) barid,TRIM(fpd.pastureid) pastureid,TRIM(fpd.ptid) ptid,TRIM(fpd.ptsid ) ptsid ,
- (select bname from bar where pastureid =fpd.pastureid and id = fpd.barid ) barname,cowcount,ccountradio,0 isfill FROM fpdetail fpd
- join feedp fp on fp.ftid = fpd.ptid and fp.pastureid = fpd.pastureid
- inner join feedtemplet ft on ft.id = fp.ftid and ft.pastureid = fpd.pastureid
- WHERE fpd.pastureid = ? AND ptuse<ROUND((1-fpd.ptsrate)*fpd.weight,2)
- group by fpd.id , fpd.times `, pastureid).Find(&fpdetaillist)
- if err != nil {
- log.Println("autogeneration-error-4", err)
- tx.Rollback()
- return err
- }
- log.Println(time.Now(), "333333333333")
- var wg sync.WaitGroup
- for _, lpplan := range lpplanlist {
- lpplandtl1List := make([]*lpplandtl1, 0)
- upfpdetailList := make([]*upfpdetail, 0)
- for _, fpdetail := range fpdetaillist {
- if fpdetail.Ptid == lpplan.Ftid && fpdetail.Times == lpplan.Times {
- var weight float64
- weight = fpdetail.Weight
- if lpplan.Maxweight <= lpplan.Lweight || weight <= 0 {
- continue
- }
- var insertlweight float64
- if lpplan.Maxweight-lpplan.Lweight > weight {
- insertlweight = weight
- } else {
- insertlweight = lpplan.Maxweight - lpplan.Lweight
- }
- lpplan.Lweight += insertlweight
- lpplan.Lweighthis = insertlweight
- exist := false
- for _, up := range upfpdetailList {
- if up.fpdid == fpdetail.Fpdid {
- up.insertlweight += insertlweight
- exist = true
- break
- }
- }
- if !exist {
- upfpdetailList = append(upfpdetailList, &upfpdetail{
- fpdid: fpdetail.Fpdid,
- insertlweight: insertlweight,
- fttypeid: fpdetail.Fttypeid,
- })
- }
- fpdetail.Weight = fpdetail.Weight - insertlweight
- exist = false
- for _, lpplandtl1 := range lpplandtl1List {
- if lpplandtl1.Lppid == lpplan.Lppid && lpplan.Pastureid == lpplandtl1.Pastureid && lpplandtl1.Fttype == fpdetail.Fttypeid && lpplandtl1.Fpdid == fpdetail.Fpdid {
- lpplandtl1.Lweight += insertlweight
- lpplandtl1.Lweighthis = insertlweight
- exist = true
- break
- }
- }
- if !exist {
- lpplandtl1List = append(lpplandtl1List, &lpplandtl1{
- Pastureid: lpplan.Pastureid,
- Lppid: lpplan.Lppid,
- Barid: fpdetail.Barid,
- Barname: fpdetail.Barname,
- Fpdid: fpdetail.Fpdid,
- Fttype: fpdetail.Fttypeid,
- Lweight: insertlweight,
- Sort: lpplan.Sort,
- Tmrid: lpplan.Tmrid,
- Tmrname: lpplan.Tmrname,
- Cowcount: lpplan.Cowcount,
- Ccountradio: lpplan.Ccountradio,
- Background: fpdetail.Background,
- Lweighthis: insertlweight,
- })
- }
- }
- }
- for _, lpplpplandtl1 := range lpplandtl1List {
- wg.Add(1)
- go func(lpplpplandtl1 *lpplandtl1) {
- defer wg.Done()
- _, err = tx.SQL(`insert into lpplandtl1(pastureid,lppid,barid,barname,fpdid,fttype,lweight,sort,tmrid,tmrname,
- cowcount,ccountradio,background,lweighthis)
- value(?,?,?,?,?,?,?,?,?,?,?,?,?,?)
- ON DUPLICATE KEY UPDATE lweight = lweight + lweight, lweighthis=lweighthis`, lpplpplandtl1.Pastureid,
- lpplpplandtl1.Lppid,
- lpplpplandtl1.Barid,
- lpplpplandtl1.Barname,
- lpplpplandtl1.Fpdid,
- lpplpplandtl1.Fttype,
- lpplpplandtl1.Lweight,
- lpplpplandtl1.Sort,
- lpplpplandtl1.Tmrid,
- lpplpplandtl1.Tmrname,
- lpplpplandtl1.Cowcount,
- lpplpplandtl1.Ccountradio,
- lpplpplandtl1.Background,
- lpplpplandtl1.Lweighthis).Execute()
- if err != nil {
- log.Println("autogeneration-error-6", err)
- tx.Rollback()
- return
- }
- }(lpplpplandtl1)
- }
- wg.Wait()
- for _, up := range upfpdetailList {
- wg.Add(1)
- go func(up *upfpdetail) {
- defer wg.Done()
- _, err = tx.SQL(` UPDATE fpdetail SET ptuse=IF(?=1,IF(ptuse+? <0,0,ptuse+?),ptuse),ptsuse=IF(?=0,IF(ptsuse+?<0,0,ptsuse+?),ptsuse)
- WHERE pastureid=? AND id=? `, up.fttypeid, up.insertlweight, up.insertlweight, up.fttypeid, up.insertlweight, up.insertlweight, pastureid, up.fpdid).Execute()
- if err != nil {
- log.Println("autogeneration-error-5", err)
- tx.Rollback()
- return
- }
- }(up)
- }
- wg.Wait()
- }
- if typeIN == 1 {
- _, err = tx.SQL("update lpplan set sel = 1 where pastureid = ?", pastureid).Execute()
- if err != nil {
- log.Println("autogeneration-error-10", err)
- return err
- }
- }
- supplement := tx.Table("fpdetail").Alias("fpd")
- supplement.Select("ft.tcolor background,fpd.id as fpdid,fpd.barid,ft.id as temid, fpd.times,ROUND(fpd.ptsrate*fpd.weight,2)-fpd.ptsuse weight,TRIM(fpd.pastureid) pastureid,TRIM(fpd.ptid) ptid,TRIM(fpd.ptsid ) ptsid ,cowcount")
- supplement.Join("inner", []string{"feedp", "fp"}, "fp.ptsfid = fpd.ptsid").And("fp.pastureid = fpd.pastureid")
- supplement.Join("inner", []string{"feedtemplet", "ft"}, "ft.id = fp.ftid").And("ft.pastureid = fpd.pastureid")
- supplement.Where("fpd.pastureid = ?", pastureid).And("fpd.ptsuse< ROUND(fpd.ptsrate*fpd.weight,2)").And("fpd.ptsid > 0")
- supplement.GroupBy("fpd.id,fpd.times")
- supplementList := make([]*fpdetailQueryInfo, 0)
- err = supplement.Find(&supplementList)
- if err != nil {
- log.Println("autogeneration-error-11", err)
- return err
- }
- if len(supplementList) > 0 {
- for _, lpplan := range lpplanlist {
- if lpplan.Maxweight <= lpplan.Lweight {
- continue
- }
- lppids := []string{strconv.FormatInt(lpplan.Lppid, 10)}
- for _, lpp := range lpplanlist {
- if lpp.Ftid == lpplan.Ftid && lpp.Times == lpplan.Times {
- lppids = append(lppids, strconv.FormatInt(lpp.Lppid, 10))
- }
- }
- lpplandtl1List := make([]*lpplandtl1, 0)
- upfpdetailList := make([]*upfpdetail, 0)
- lpplandtllist := make([]*lpplandtl1, 0)
- err = tx.Table("lpplandtl1").Select("barid").Where(fmt.Sprintf("lppid in (%s)", strings.Join(lppids, ","))).And("").Find(&lpplandtllist)
- if err != nil {
- log.Println("autogeneration-error-11", err)
- return err
- }
- for _, fpdetail := range supplementList {
- if lpplan.Times != fpdetail.Times {
- continue
- }
- exist := false
- for _, bar := range lpplandtllist {
- if bar.Barid == fpdetail.Barid {
- exist = true
- break
- }
- }
- if !exist {
- continue
- }
- var weight float64
- weight = fpdetail.Weight
- if weight <= 0 {
- continue
- }
- var insertlweight float64
- if lpplan.Maxweight-lpplan.Lweight > weight {
- insertlweight = weight
- } else {
- insertlweight = lpplan.Maxweight - lpplan.Lweight
- }
- lpplan.Lweight += insertlweight
- lpplan.Lweighthis = insertlweight
- exist = false
- for _, up := range upfpdetailList {
- if up.fpdid == fpdetail.Fpdid {
- up.insertlweight += insertlweight
- exist = true
- break
- }
- }
- if !exist {
- upfpdetailList = append(upfpdetailList, &upfpdetail{
- fpdid: fpdetail.Fpdid,
- insertlweight: insertlweight,
- fttypeid: 0,
- })
- }
- fpdetail.Weight = fpdetail.Weight - insertlweight
- exist = false
- for _, lpplandtl1 := range lpplandtl1List {
- if lpplandtl1.Lppid == lpplan.Lppid && lpplan.Pastureid == lpplandtl1.Pastureid && lpplandtl1.Fttype == fpdetail.Fttypeid && lpplandtl1.Fpdid == fpdetail.Fpdid {
- lpplandtl1.Lweight += insertlweight
- lpplandtl1.Lweighthis = insertlweight
- exist = true
- break
- }
- }
- if !exist {
- lpplandtl1List = append(lpplandtl1List, &lpplandtl1{
- Pastureid: lpplan.Pastureid,
- Lppid: lpplan.Lppid,
- Barid: fpdetail.Barid,
- Barname: fpdetail.Barname,
- Fpdid: fpdetail.Fpdid,
- Fttype: 0,
- Lweight: insertlweight,
- Sort: lpplan.Sort,
- Tmrid: lpplan.Tmrid,
- Tmrname: lpplan.Tmrname,
- Cowcount: lpplan.Cowcount,
- Ccountradio: lpplan.Ccountradio,
- Background: fpdetail.Background,
- Lweighthis: insertlweight,
- })
- }
- }
- for _, lpplpplandtl1 := range lpplandtl1List {
- wg.Add(1)
- go func(lpplpplandtl1 *lpplandtl1) {
- defer wg.Done()
- _, err = tx.SQL(`insert into lpplandtl1(pastureid,lppid,barid,barname,fpdid,fttype,lweight,sort,tmrid,tmrname,
- cowcount,ccountradio,background,lweighthis)
- value(?,?,?,?,?,?,?,?,?,?,?,?,?,?)
- ON DUPLICATE KEY UPDATE lweight = lweight + lweight, lweighthis=lweighthis`, lpplpplandtl1.Pastureid,
- lpplpplandtl1.Lppid,
- lpplpplandtl1.Barid,
- lpplpplandtl1.Barname,
- lpplpplandtl1.Fpdid,
- lpplpplandtl1.Fttype,
- lpplpplandtl1.Lweight,
- lpplpplandtl1.Sort,
- lpplpplandtl1.Tmrid,
- lpplpplandtl1.Tmrname,
- lpplpplandtl1.Cowcount,
- lpplpplandtl1.Ccountradio,
- lpplpplandtl1.Background,
- lpplpplandtl1.Lweighthis).Execute()
- if err != nil {
- log.Println("autogeneration-error-6", err)
- tx.Rollback()
- return
- }
- }(lpplpplandtl1)
- }
- wg.Wait()
- for _, up := range upfpdetailList {
- wg.Add(1)
- go func(up *upfpdetail) {
- defer wg.Done()
- _, err = tx.SQL(` UPDATE fpdetail SET ptuse=IF(?=1,IF(ptuse+? <0,0,ptuse+?),ptuse),ptsuse=IF(?=0,IF(ptsuse+?<0,0,ptsuse+?),ptsuse)
- WHERE pastureid=? AND id=? `, up.fttypeid, up.insertlweight, up.insertlweight, up.fttypeid, up.insertlweight, up.insertlweight, pastureid, up.fpdid).Execute()
- if err != nil {
- log.Println("autogeneration-error-5", err)
- tx.Rollback()
- // return err
- return
- }
- }(up)
- }
- wg.Wait()
- }
- }
- err = tx.Commit()
- if err != nil {
- log.Println("autogeneration-error-11", err)
- return err
- }
- return nil
- }
- func GetSpillage(c *gin.Context) {
- appG := app.Gin{C: c}
- dataByte, _ := ioutil.ReadAll(c.Request.Body)
- fsion := gofasion.NewFasion(string(dataByte))
- parammaps := fsion.Get("parammaps")
- pastureid := parammaps.Get("pastureid").ValueInt64()
- times := parammaps.Get("times").ValueInt64()
- ftid := parammaps.Get("ftid").ValueDefaultInt64(0)
- // refresh 0 全部 , 1 车次信息, 2 班次
- refresh := parammaps.Get("refresh").ValueInt64()
- tx := restful.Engine.NewSession()
- defer tx.Close()
- data := make(map[string]interface{})
- if refresh == 0 || refresh == 2 {
- sqlStr := `SELECT trim(feedp.pastureid) pastureid,barname,trim(barid) barid,trim(ftid) arrid,1 as type,? as times,ft.tname ftname,ft.tcolor background,0 isfill FROM feedp
- inner join feedtemplet ft
- on ft.id = feedp.ftid and ft.pastureid=?
- WHERE feedp.pastureid = ? %s
- GROUP BY feedp.ftid
- UNION
- SELECT trim(feedp.pastureid) pastureid,barname,barid,trim(ptsfid) arrid,0 as type,? as times,ft.tname ptsfname ,ft.tcolor background,1 isfill FROM feedp
- inner join feedtemplet ft
- on ft.id = feedp.ptsfid and ft.pastureid=?
- WHERE feedp.pastureid = ? %s and (SELECT inforvalue FROM sysopt WHERE sysopt.pastureid=feedp.pastureid AND sysopt.inforname= 'isEnableSupplyFeed') = 1
- GROUP BY feedp.ptsfid`
- // SELECT TRIM(id) id,times,tratio,ROUND(ptsrate*weight,2)-ptsuse weight,TRIM(barid) barid,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid ,
- // (select bname from bar where pastureid =fpdetail.pastureid and id = fpdetail.barid ) barname,
- // ? AS background,? AS fttype,cowcount,ccountradio, 1 isfill FROM fpdetaildate fpdetail
- // WHERE fpdetail.pastureid = ? AND ( fpdetail.`ptsid`=?) AND times=? AND ptsuse< ROUND(ptsrate*weight,2) and fpdetail.date = ?
- // UNION
- // SELECT TRIM(id) id,times,tratio,ROUND((1-ptsrate)*weight,2)-ptuse weight,TRIM(barid) barid,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid ,
- // (select bname from bar where pastureid =fpdetail.pastureid and id = fpdetail.barid ) barname,
- // ? AS background,? AS fttype,cowcount,ccountradio, 0 isfill FROM fpdetaildate fpdetail
- // WHERE fpdetail.pastureid = ? AND (fpdetail.`ptid`=? ) AND times=? AND ptuse<ROUND((1-ptsrate)*weight,2) and fpdetail.date = ?
- // ORDER BY barid
- if ftid != 0 {
- sqlStr = fmt.Sprintf(sqlStr, fmt.Sprintf(" and ft.id = %d ", ftid), fmt.Sprintf(" and ft.id = %d ", ftid))
- } else {
- sqlStr = fmt.Sprintf(sqlStr, "", "")
- }
- ftList, err := tx.SQL(sqlStr, times, pastureid, pastureid, times, pastureid, pastureid).Query().List()
- if err != nil {
- log.Println("GetSpillage-error-1: ", err)
- appG.Response(http.StatusOK, e.ERROR, nil)
- return
- }
- ftDetailList, err := tx.SQL(`SELECT TRIM(id) id,times,tratio,ROUND(ptsrate*weight,2)-ptsuse weight,TRIM(barid) barid,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid ,
- (select bname from bar where pastureid =fpdetail.pastureid and id = fpdetail.barid ) barname,0 AS fttype,cowcount,ccountradio,1 isfill FROM fpdetail
- WHERE fpdetail.pastureid = ? AND times=? AND ptsuse< ROUND(ptsrate*weight,2)
- UNION
- SELECT TRIM(id) id,times,tratio,ROUND((1-ptsrate)*weight,2)-ptuse weight,TRIM(barid) barid,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid ,
- (select bname from bar where pastureid =fpdetail.pastureid and id = fpdetail.barid ) barname,1 AS fttype,cowcount,ccountradio,0 isfill FROM fpdetail
- WHERE fpdetail.pastureid = ? AND times=? AND ptuse<ROUND((1-ptsrate)*weight,2)
- ORDER BY barid`, pastureid, times, pastureid, times).Query().List()
- if err != nil {
- log.Println("GetSpillage-error-2: ", err)
- appG.Response(http.StatusOK, e.ERROR, nil)
- return
- }
- for _, ft := range ftList {
- arrList := make([]map[string]interface{}, 0)
- arrid := ft["arrid"].(string)
- for _, detail := range ftDetailList {
- if _, ok := detail["ptid"]; ok {
- if arrid == detail["ptid"].(string) && ft["isfill"].(int64) == detail["isfill"].(int64) {
- detail["background"] = ft["background"]
- arrList = append(arrList, detail)
- }
- } else if _, ok := detail["ptsid"]; ok {
- if arrid == detail["ptsid"].(string) && ft["isfill"].(int64) == detail["isfill"].(int64) {
- detail["background"] = ft["background"]
- arrList = append(arrList, detail)
- }
- }
- }
- if len(arrList) > 0 {
- ft["arrList"] = arrList
- }
- }
- data["ftlist"] = ftList
- }
- if refresh == 0 || refresh == 1 {
- sqlstr := `SELECT
- ifnull((select eqcode from tmr where pastureid =lpplan.pastureid and id = lpplan.tmrid ),lpplan.tmrname) tmrname,trim(tmrid) tmrid,sort,sel,
- CASE times
- WHEN 1 THEN
- '第一班'
- WHEN 2 THEN
- '第二班'
- WHEN 3 THEN
- '第三班'
- WHEN 4 THEN
- '第四班'
- END timesstr,issplit,
- times,display,begintime,
- (select tname from feedtemplet where pastureid =lpplan.pastureid and id = lpplan.ftid ) ftname,sumcowcount,
- IFNULL(round((SELECT SUM(lpplandtl1.lweight) FROM lpplandtl1
- inner join fpdetail
- on lpplandtl1.fpdid= fpdetail.id and lpplandtl1.pastureid = fpdetail.pastureid
- WHERE lpplandtl1.lppid=lpplan.id and lpplandtl1.pastureid =lpplan.pastureid ),2),0) sumweight ,
- ifnull((select maxstirfeed from tmr where pastureid =lpplan.pastureid and id = lpplan.tmrid ),100000) maxweight,
- TRIM(ftid) ftid,
- TRIM(id) id,
- TRIM(id) lppid,
- TRIM(pastureid) pastureid
-
- FROM
- lpplan
- WHERE pastureid = ? and times <= (SELECT sysopt.inforvalue FROM sysopt
- WHERE sysopt.pastureid= lpplan.pastureid AND sysopt.inforname='times')
- `
- arrsql := `SELECT
- trim(lpplandtl1.lppid) lppid,lweight,
- lpplandtl1.lweight weight,lpplandtl1.sort,
- (select bname from bar where pastureid =lpplandtl1.pastureid and id = lpplandtl1.barid ) barname,
- TRIM(lpplandtl1.fpdid) fpdid,
- TRIM(lpplandtl1.barid) barid,
- TRIM(lpplandtl1.id) id,
- TRIM(lpplandtl1.pastureid) pastureid,
- (SELECT tcolor FROM feedtemplet WHERE pastureid =lpplandtl1.pastureid AND id = IF(lpplandtl1.fttype=1,fpdetail.ptid,fpdetail.ptsid) ) background,
- lpplandtl1.fttype,
- trim(lpplandtl1.tmrid) tmrid,
- ifnull((select eqcode from tmr where pastureid =lpplandtl1.pastureid and id = lpplandtl1.tmrid ),lpplandtl1.tmrname) tmrname,
- ifnull((select tcolor from tmr where pastureid =lpplandtl1.pastureid and id = lpplandtl1.tmrid ),'#ccc') tbackground,
- fpdetail.ptid,
- fpdetail.ptsid,
- fpdetail.times,
- fpdetail.cowcount,
- fpdetail.ccountradio
- FROM
- lpplandtl1
- inner join fpdetail
- on lpplandtl1.fpdid= fpdetail.id and lpplandtl1.pastureid = fpdetail.pastureid
- WHERE lpplandtl1.pastureid = ? and lpplandtl1.lweight>0
- `
- var args []interface{}
- args = append(args, pastureid)
- if times != 0 {
- sqlstr += " and times = ? "
- arrsql += " and times = ? "
- args = append(args, times)
- }
- sqlstr += "ORDER BY times,lpplan.sort"
- session := tx.SQL(sqlstr, args...)
- lppList, err := session.Query().List()
- if err != nil {
- log.Println("GetSpillage-error-3: ", err)
- appG.Response(http.StatusOK, e.ERROR, nil)
- return
- }
- arrsql += " ORDER BY lpplandtl1.sort"
- arrList, err := tx.SQL(arrsql, args...).QueryString() //获取
- if err != nil {
- log.Println("GetSpillage-error-4: ", err)
- appG.Response(http.StatusOK, e.ERROR, nil)
- return
- }
- for _, query := range lppList {
- list := make([]map[string]string, 0)
- for _, arr := range arrList {
- if query["lppid"].(string) == arr["lppid"] {
- list = append(list, arr)
- }
- }
- query["arrList"] = list
- }
- data["list"] = lppList
- data["total"] = len(lppList)
- }
- appG.Response(http.StatusOK, e.SUCCESS, data)
- }
- type lpplanTrains struct {
- Id string `xorm:"id"`
- Sort int64 `xorm:"sort"`
- Pastureid string `xorm:"pastureid"`
- }
- //修改车次顺序
- func UpdateTrains(c *gin.Context) {
- appG := app.Gin{C: c}
- dataByte, _ := ioutil.ReadAll(c.Request.Body)
- lppList := make([]*lpplanTrains, 0)
- err := json.Unmarshal(dataByte, &lppList)
- if err != nil {
- log.Println("UpdateTrains-error-1: ", err)
- appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, err)
- return
- }
- tx := restful.Engine.NewSession()
- defer tx.Close()
- tx.Begin()
- for _, item := range lppList {
- _, err = tx.Table("lpplan").Where("id = ?", item.Id).And("pastureid = ? ", item.Pastureid).Update(item)
- if err != nil {
- log.Println("UpdateTrains-error-2: ", err)
- appG.Response(http.StatusInternalServerError, e.ERROR, err)
- tx.Rollback()
- return
- }
- }
- err = tx.Commit()
- if err != nil {
- log.Println("UpdateTrains-error-2: ", err)
- appG.Response(http.StatusInternalServerError, e.ERROR, err)
- tx.Rollback()
- return
- }
- appG.Response(http.StatusOK, e.SUCCESS, true)
- }
- func UpdateTrainsDay(c *gin.Context) {
- appG := app.Gin{C: c}
- dataByte, _ := ioutil.ReadAll(c.Request.Body)
- lppList := make([]*lpplanTrains, 0)
- err := json.Unmarshal(dataByte, &lppList)
- if err != nil {
- log.Println("UpdateTrainsDay-error-1: ", err)
- appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, err)
- return
- }
- tx := restful.Engine.NewSession()
- defer tx.Close()
- tx.Begin()
- for _, item := range lppList {
- _, err = tx.Table("lpplandate").Where("id = ?", item.Id).And("pastureid = ? ", item.Pastureid).Update(item)
- if err != nil {
- log.Println("UpdateTrainsDay-error-2: ", err)
- appG.Response(http.StatusInternalServerError, e.ERROR, err)
- tx.Rollback()
- return
- }
- }
- err = tx.Commit()
- if err != nil {
- log.Println("UpdateTrainsDay-error-3: ", err)
- appG.Response(http.StatusInternalServerError, e.ERROR, err)
- tx.Rollback()
- return
- }
- appG.Response(http.StatusOK, e.SUCCESS, true)
- }
- type ReqAddLpplan struct {
- Id string `xorm:"id"`
- Tmrid string `xorm:"tmrid"`
- TmrName string `xorm:"tmrname"`
- Sort int64 `xorm:"sort"`
- Sel int64 `xorm:"sel"`
- Times int64 `xorm:"times"`
- Ftname string `xorm:"ftname"`
- Ftid string `xorm:"ftid"`
- Maxweight float64 `xorm:"maxweight"`
- // Sumweight int64 `xorm:"sumweight"`
- Sumcowcount int64 `xorm:"sumcowcount"`
- Pastureid string `xorm:"pastureid"`
- Display string `xorm:"display"`
- Issplit int64 `xorm:"issplit"`
- BeginTime string `xorm:"begintime"`
- }
- //添加车次并返回添加的车次信息
- func AddLpplan(c *gin.Context) {
- appG := app.Gin{C: c}
- dataByte, _ := ioutil.ReadAll(c.Request.Body)
- fsion := gofasion.NewFasion(string(dataByte))
- parammaps := fsion.Get("parammaps")
- req := new(ReqAddLpplan)
- err := json.Unmarshal([]byte(parammaps.Json()), req)
- if err != nil {
- log.Println("AddLpplan-error-1: ", err)
- appG.Response(http.StatusInternalServerError, e.ERROR, err)
- return
- }
- if req.Times == 0 {
- log.Println("AddLpplan-error-1: ", err)
- appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, errors.New(" 班次错误 times = 0 !!!"))
- return
- }
- tx := restful.Engine.NewSession()
- defer tx.Close()
- ids, err := setting.SnowIds.NextId()
- if err != nil {
- ids = time.Now().UnixNano()
- logging.Info("AddLpplan-error-1: ", err)
- }
- req.Id = strconv.FormatInt(ids, 10)
- datacount, err := tx.Table("lpplan").Select("max(sort) as sort").Where("pastureid = ?", req.Pastureid).And(" times = ?", req.Times).QueryString()
- if err != nil {
- log.Println("AddLpplan-error-2: ", err)
- appG.Response(http.StatusInternalServerError, e.ERROR, err)
- return
- }
- var count int64 = 0
- for _, d := range datacount {
- if _, ok := d["sort"]; ok {
- count, _ = strconv.ParseInt(d["sort"], 10, 64)
- }
- }
- req.Sort = count + 1
- _, err = tx.Table("lpplan").Insert(req)
- if err != nil {
- log.Println("AddLpplan-error-3: ", err)
- appG.Response(http.StatusInternalServerError, e.ERROR, err)
- return
- }
- appG.Response(http.StatusOK, e.SUCCESS, req)
- }
- type ReqAddLpplanDay struct {
- Id string `xorm:"id"`
- Tmrid string `xorm:"tmrid"`
- TmrName string `xorm:"tmrname"`
- Sort int64 `xorm:"sort"`
- Sel int64 `xorm:"sel"`
- Times int64 `xorm:"times"`
- Ftname string `xorm:"ftname"`
- Ftid string `xorm:"ftid"`
- Maxweight float64 `xorm:"maxweight"`
- // Sumweight int64 `xorm:"sumweight"`
- Sumcowcount int64 `xorm:"sumcowcount"`
- Pastureid string `xorm:"pastureid"`
- Display string `xorm:"display"`
- Issplit int64 `xorm:"issplit"`
- BeginTime string `xorm:"begintime"`
- Date string `xorm:"date"`
- }
- func AddLpplanDay(c *gin.Context) {
- appG := app.Gin{C: c}
- dataByte, _ := ioutil.ReadAll(c.Request.Body)
- fsion := gofasion.NewFasion(string(dataByte))
- parammaps := fsion.Get("parammaps")
- req := new(ReqAddLpplanDay)
- err := json.Unmarshal([]byte(parammaps.Json()), req)
- if err != nil {
- log.Println("AddLpplanDay-error-1: ", err)
- appG.Response(http.StatusInternalServerError, e.ERROR, err)
- return
- }
- if req.Times == 0 {
- log.Println("AddLpplanDay-error-1: ", err)
- appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, errors.New(" 班次错误 times = 0 !!!"))
- return
- }
- tx := restful.Engine.NewSession()
- defer tx.Close()
- ids, err := setting.SnowIds.NextId()
- if err != nil {
- ids = time.Now().UnixNano()
- logging.Info("AddLpplanDay-error-1: ", err)
- }
- req.Id = strconv.FormatInt(ids, 10)
- count, err := tx.Table("lpplandate").Where("pastureid = ?", req.Pastureid).And(" date = ?", req.Date).And(" times = ?", req.Times).Count()
- if err != nil {
- log.Println("AddLpplanDay-error-2: ", err)
- appG.Response(http.StatusInternalServerError, e.ERROR, err)
- return
- }
- req.Sort = count + 1
- _, err = tx.Table("lpplandate").Insert(req)
- if err != nil {
- log.Println("AddLpplanDay-error-3: ", err)
- appG.Response(http.StatusInternalServerError, e.ERROR, err)
- return
- }
- appG.Response(http.StatusOK, e.SUCCESS, req)
- }
- //修改车次信息,如果修改tmrid信息则删除栏舍信息
- func UpdateLpplan(c *gin.Context) {
- appG := app.Gin{C: c}
- dataByte, _ := ioutil.ReadAll(c.Request.Body)
- fsion := gofasion.NewFasion(string(dataByte))
- parammaps := fsion.Get("parammaps")
- lpplanid := parammaps.Get("id").ValueStr()
- pastureid := parammaps.Get("pastureid").ValueStr()
- tmrid := parammaps.Get("tmrid").ValueStr()
- tmrname := parammaps.Get("tmrname").ValueStr()
- begintime := parammaps.Get("begintime").ValueStr()
- display := parammaps.Get("display").ValueStr()
- times := parammaps.Get("times").ValueInt64()
- ftid := parammaps.Get("ftid").ValueStr()
- ftname := parammaps.Get("ftname").ValueStr()
- sel := parammaps.Get("sel").ValueInt64()
- issplit := parammaps.Get("issplit").ValueInt64()
- lpplan := new(ReqAddLpplan)
- lpplan.Tmrid = tmrid
- lpplan.TmrName = tmrname
- lpplan.BeginTime = begintime
- lpplan.Sel = sel
- lpplan.Issplit = issplit
- lpplan.Times = times
- lpplan.Ftid = ftid
- lpplan.Ftname = ftname
- lpplan.Display = display
- tx := restful.Engine.NewSession()
- defer tx.Close()
- tx.Begin()
- lpplanData := new(lpplanStruct)
- _, err := tx.Table("lpplan").Select("tmrid").Where(" id = ? ", lpplanid).And(" pastureid = ? ", pastureid).Get(lpplanData)
- if err != nil {
- log.Println("UpdateLpplan-error-1: ", err)
- appG.Response(http.StatusInternalServerError, e.ERROR, err)
- tx.Rollback()
- return
- }
- _, err = tx.Table("lpplan").Where(" id = ? ", lpplanid).And(" pastureid = ? ", pastureid).
- MustCols("display,tmrid,tmrname,begintime,sel,issplit,times,ftid,ftname").Update(lpplan)
- if err != nil {
- log.Println("UpdateLpplan-error-1: ", err)
- appG.Response(http.StatusInternalServerError, e.ERROR, err)
- tx.Rollback()
- return
- }
- // if tmrid != lpplan.Tmrid {
- // _, err = tx.SQL(`delete from lpplandtl1 where lppid = ? and pastureid = ? `, lpplanid, pastureid).Execute()
- // if err != nil {
- // log.Println("UpdateLpplan-error-2: ", err)
- // appG.Response(http.StatusInternalServerError, e.ERROR, err)
- // tx.Rollback()
- // return
- // }
- // }
- err = tx.Commit()
- if err != nil {
- log.Println("UpdateLpplan-error-3: ", err)
- appG.Response(http.StatusInternalServerError, e.ERROR, err)
- tx.Rollback()
- return
- }
- appG.Response(http.StatusOK, e.SUCCESS, true)
- }
- func GetSpillageDay(c *gin.Context) {
- appG := app.Gin{C: c}
- dataByte, _ := ioutil.ReadAll(c.Request.Body)
- fsion := gofasion.NewFasion(string(dataByte))
- parammaps := fsion.Get("parammaps")
- pastureid := parammaps.Get("pastureid").ValueInt64()
- times := parammaps.Get("times").ValueInt64()
- ftid := parammaps.Get("ftid").ValueDefaultInt64(0)
- // refresh 0 全部 , 1 车次信息, 2 班次
- refresh := parammaps.Get("refresh").ValueInt64()
- date := parammaps.Get("date").ValueStr()
- tx := restful.Engine.NewSession()
- defer tx.Close()
- data := make(map[string]interface{})
- if refresh == 0 || refresh == 2 {
- // sqlStr := `SELECT trim(feedp.pastureid) pastureid,barname,trim(barid) barid,trim(ftid) arrid,1 as type,? as times,ft.tname ftname,ft.tcolor background,0 isfill FROM feedp
- // inner join feedtemplet ft
- // on ft.id = feedp.ftid and ft.pastureid=?
- // WHERE feedp.pastureid = ? %s
- // GROUP BY feedp.ftid
- // UNION
- // SELECT trim(feedp.pastureid) pastureid,barname,barid,trim(ptsfid) arrid,0 as type,? as times,ft.tname ptsfname ,ft.tcolor background,1 isfill FROM feedp
- // inner join feedtemplet ft
- // on ft.id = feedp.ptsfid and ft.pastureid=?
- // WHERE feedp.pastureid = ? %s and (SELECT inforvalue FROM sysopt WHERE sysopt.pastureid=feedp.pastureid AND sysopt.inforname= 'isEnableSupplyFeed') = 1
- // GROUP BY feedp.ptsfid`
- sqlStr := ` SELECT TRIM(feedp.pastureid) pastureid,feedp.barname,TRIM(feedp.barid) barid,TRIM(ft.id) arrid,1 AS type,? AS times,ft.tname ftname,ft.tcolor background,feedp.date,0 isfill
- FROM feedpdate feedp
- INNER JOIN fpdetaildate fpd ON fpd.date = feedp.date AND fpd.barid = feedp.barid AND fpd.pastureid = feedp.pastureid
- INNER JOIN feedtemplet ft
- ON ft.id = fpd.ptid AND ft.pastureid= feedp.pastureid
- WHERE feedp.pastureid = ? AND feedp.date=? %s
- GROUP BY fpd.ptid
- UNION
- SELECT TRIM(feedp.pastureid) pastureid,feedp.barname,feedp.barid,TRIM(ft.id) arrid,0 AS type,? AS times,ft.tname ptsfname ,ft.tcolor background ,feedp.date ,1 isfill
- FROM feedpdate feedp
- INNER JOIN fpdetaildate fpd ON fpd.date = feedp.date AND fpd.barid = feedp.barid AND fpd.pastureid = feedp.pastureid
- INNER JOIN feedtemplet ft
- ON ft.id = fpd.ptsid AND ft.pastureid=feedp.pastureid
- WHERE feedp.pastureid = ? AND feedp.date=? %s
- AND (SELECT inforvalue FROM sysopt WHERE sysopt.pastureid=feedp.pastureid AND sysopt.inforname= 'isEnableSupplyFeed') = 1
- GROUP BY fpd.ptsid`
- if ftid != 0 {
- sqlStr = fmt.Sprintf(sqlStr, fmt.Sprintf(" and ft.id = %d ", ftid), fmt.Sprintf(" and ft.id = %d ", ftid))
- } else {
- sqlStr = fmt.Sprintf(sqlStr, "", "")
- }
- ftList, err := tx.SQL(sqlStr, times, pastureid, date, times, pastureid, date).Query().List()
- if err != nil {
- log.Println("GetSpillage-error-1: ", err)
- appG.Response(http.StatusOK, e.ERROR, nil)
- return
- }
- // AND ( fpdetail.ptsid=?)
- // AND (fpdetail.ptid=? )
- ftDetailList, err := tx.SQL(`SELECT TRIM(id) id,times,tratio,ROUND(ptsrate*weight,2)-ptsuse weight,TRIM(barid) barid,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid ,
- (select bname from bar where pastureid =fpdetail.pastureid and id = fpdetail.barid ) barname,cowcount,ccountradio, 1 isfill FROM fpdetaildate fpdetail
- WHERE fpdetail.pastureid = ? AND times=? AND ptsuse< ROUND(ptsrate*weight,2) and fpdetail.date = ?
- UNION
- SELECT TRIM(id) id,times,tratio,ROUND((1-ptsrate)*weight,2)-ptuse weight,TRIM(barid) barid,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid ,
- (select bname from bar where pastureid =fpdetail.pastureid and id = fpdetail.barid ) barname,cowcount,ccountradio, 0 isfill FROM fpdetaildate fpdetail
- WHERE fpdetail.pastureid = ? AND times=? AND ptuse<ROUND((1-ptsrate)*weight,2) and fpdetail.date = ?
- ORDER BY barid`, pastureid, times, date, pastureid, times, date).Query().List()
- if err != nil {
- log.Println("GetSpillage-error-2: ", err)
- appG.Response(http.StatusOK, e.ERROR, nil)
- return
- }
- for _, ft := range ftList {
- arrList := make([]map[string]interface{}, 0)
- arrid := ft["arrid"].(string)
- for _, detail := range ftDetailList {
- if _, ok := detail["ptid"]; ok {
- if arrid == detail["ptid"].(string) && ft["isfill"].(int64) == detail["isfill"].(int64) {
- detail["background"] = ft["background"]
- detail["fttype"] = ft["type"].(int64)
- arrList = append(arrList, detail)
- }
- } else if _, ok := detail["ptsid"]; ok {
- if arrid == detail["ptsid"].(string) && ft["isfill"].(int64) == detail["isfill"].(int64) {
- detail["background"] = ft["background"]
- detail["fttype"] = ft["type"].(int64)
- arrList = append(arrList, detail)
- }
- }
- }
- if len(arrList) > 0 {
- ft["arrList"] = arrList
- }
- }
- data["ftlist"] = ftList
- }
- if refresh == 0 || refresh == 1 {
- sqlstr := `SELECT
- lpplan.date,
- -- ifnull((select eqcode from tmr where pastureid =lpplan.pastureid and id = lpplan.tmrid ),lpplan.tmrname)
- lpplan.tmrname tmrname,trim(lpplan.tmrid) tmrid,lpplan.sort,lpplan.sel,
- CASE lpplan.times
- WHEN 1 THEN
- '第一班'
- WHEN 2 THEN
- '第二班'
- WHEN 3 THEN
- '第三班'
- WHEN 4 THEN
- '第四班'
- END timesstr,issplit,
- lpplan.times,display,begintime,
- (select tname from feedtemplet where pastureid =lpplan.pastureid and id = lpplan.ftid ) ftname,sumcowcount,
- IFNULL(round((SELECT SUM(lpplandtl1.lweight) FROM lpplandtl1date lpplandtl1 WHERE lpplandtl1.lppid=lpplan.id and lpplandtl1.date= ?),2),0) sumweight ,
- maxweight,
- TRIM(ftid) ftid,
- TRIM(lpplan.id) id,
- TRIM(lpplan.id) lppid,
- TRIM(lpplan.pastureid) pastureid,
- ifnull(dpl.havebutton,0) as havebutton
- FROM
- lpplandate lpplan
- left join downloadedplan dpl on dpl.pid = lpplan.id and DATE_FORMAT(dpl.mydate,'%Y-%m-%e') = lpplan.date
- WHERE lpplan.pastureid = ? and lpplan.date = ? and lpplan.times <= (SELECT sysopt.inforvalue FROM sysopt
- WHERE sysopt.pastureid= lpplan.pastureid AND sysopt.inforname='times')
- `
- arrsql := `SELECT
- trim(lpplandtl1.lppid) lppid,lweight,
- lpplandtl1.lweight weight,lpplandtl1.sort,
- (select bname from bar where pastureid =lpplandtl1.pastureid and id = lpplandtl1.barid ) barname,
- TRIM(lpplandtl1.fpdid) fpdid,
- TRIM(lpplandtl1.barid) barid,
- TRIM(lpplandtl1.id) id,
- TRIM(lpplandtl1.pastureid) pastureid,
- lpplandtl1.background,
- lpplandtl1.fttype,
- trim(lpplandtl1.tmrid) tmrid,
- ifnull((select eqcode from tmr where pastureid =lpplandtl1.pastureid and id = lpplandtl1.tmrid ),lpplandtl1.tmrname) tmrname,
- ifnull((select tcolor from tmr where pastureid =lpplandtl1.pastureid and id = lpplandtl1.tmrid ),'#ccc') tbackground,
- fpdetail.ptid,
- fpdetail.ptsid,
- fpdetail.times,
- fpdetail.cowcount,
- fpdetail.ccountradio
- FROM
- lpplandtl1date lpplandtl1
- inner join fpdetaildate fpdetail
- on lpplandtl1.fpdid= fpdetail.id and lpplandtl1.pastureid = fpdetail.pastureid and lpplandtl1.date = fpdetail.date
- WHERE lpplandtl1.pastureid = ? and lpplandtl1.date = ? and lpplandtl1.lweight>0 `
- var args []interface{}
- args = append(args, date, pastureid, date)
- if times != 0 {
- sqlstr += " and lpplan.times = ? "
- // arrsql += " and times = ? "
- args = append(args, times)
- }
- sqlstr += " group by lpplan.id ORDER BY times,lpplan.sort"
- session := tx.SQL(sqlstr, args...)
- lppList, err := session.Query().List()
- if err != nil {
- log.Println("GetSpillage-error-3: ", err)
- appG.Response(http.StatusOK, e.ERROR, nil)
- return
- }
- arrsql += " ORDER BY lpplandtl1.sort"
- arrList, err := tx.SQL(arrsql, pastureid, date).QueryString() //获取
- if err != nil {
- log.Println("GetSpillage-error-4: ", err)
- appG.Response(http.StatusOK, e.ERROR, nil)
- return
- }
- for _, query := range lppList {
- list := make([]map[string]string, 0)
- for _, arr := range arrList {
- if query["lppid"].(string) == arr["lppid"] {
- list = append(list, arr)
- }
- }
- query["arrList"] = list
- }
- data["list"] = lppList
- data["total"] = len(lppList)
- }
- appG.Response(http.StatusOK, e.SUCCESS, data)
- }
- func AddLpplandtl(c *gin.Context) {
- appG := app.Gin{C: c}
- dataByte, _ := ioutil.ReadAll(c.Request.Body)
- fsion := gofasion.NewFasion(string(dataByte))
- parammaps := fsion.Get("parammaps")
- tx := restful.Engine.NewSession()
- defer tx.Close()
- exist := false
- var err error
- lpplandList := make([]*lpplandtl1, 0)
- err = tx.Table("lpplandtl1").Select("id,pastureid,sort,barid,tmrid").Where("lppid = ? ", parammaps.Get("lppid").ValueStr()).And("pastureid = ?", parammaps.Get("pastureid").ValueStr()).
- OrderBy("sort").Find(&lpplandList)
- if err != nil {
- log.Println("AddLpplandtl-error-1: ", err)
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- if parammaps.Get("id").ValueStr() != "" || parammaps.Get("id").ValueStr() != "0" {
- for _, lppand := range lpplandList {
- if lppand.Id == parammaps.Get("id").ValueInt64() {
- if lppand.Tmrid == parammaps.Get("tmrid").ValueInt64() {
- appG.Response(http.StatusOK, e.SUCCESS, true)
- return
- }
- exist = true
- break
- }
- }
- }
- tmrid := parammaps.Get("tmrid").ValueInt64()
- var sort int64 = -1
- if !exist {
- for _, lppand := range lpplandList {
- if lppand.Barid == parammaps.Get("barid").ValueInt64() {
- _, err := tx.SQL(" update lpplandtl1 set lweight =lweight + ? where id = ? and pastureid = ? ", parammaps.Get("lweight").ValueStr(), lppand.Id, parammaps.Get("pastureid").ValueStr()).Execute()
- if err != nil {
- log.Println("AddLpplandtl-error-2: ", err)
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- appG.Response(http.StatusOK, e.SUCCESS, true)
- return
- }
- }
- for i, lppand := range lpplandList {
- lppand.Sort = int64(i) + 1
- }
- updateLpplandList := make([]*lpplandtl1, 0)
- for i, lppand := range lpplandList {
- n := i + 1
- if lppand.Tmrid == tmrid {
- sort = int64(n)
- lppand.Sort = int64(n) + 1
- updateLpplandList = append(updateLpplandList, lppand)
- } else if sort > 0 {
- lppand.Sort = int64(n) + 1
- updateLpplandList = append(updateLpplandList, lppand)
- }
- }
- tx.Begin()
- for _, lppand := range updateLpplandList {
- _, err := tx.SQL(" update lpplandtl1 set sort = ? where id = ? and pastureid = ? ", lppand.Sort, lppand.Id, lppand.Pastureid).Execute()
- if err != nil {
- tx.Rollback()
- log.Println("AddLpplandtl-error-2: ", err)
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- }
- if sort < 0 && len(lpplandList) > 0 {
- sort = int64(len(lpplandList) + 1)
- } else if len(lpplandList) == 0 {
- sort = 1
- }
- _, err = tx.SQL(`INSERT INTO lpplandtl1(pastureid,lppid,barid,barname,fpdid,lweight,sort,tmrid,tmrname,fttype,background,cowcount,ccountradio)
- VALUES (?,?,?,?,?,?,?,?,?,
- ?,?,IF(?='',0,?),IF(?='',0,?))`,
- parammaps.Get("pastureid").ValueStr(),
- parammaps.Get("lppid").ValueStr(),
- parammaps.Get("barid").ValueStr(),
- parammaps.Get("barname").ValueStr(),
- parammaps.Get("fpdid").ValueStr(),
- parammaps.Get("lweight").ValueStr(),
- sort,
- parammaps.Get("tmrid").ValueStr(),
- parammaps.Get("tmrname").ValueStr(),
- parammaps.Get("fttype").ValueStr(),
- parammaps.Get("background").ValueStr(),
- parammaps.Get("cowcount").ValueStr(),
- parammaps.Get("cowcount").ValueStr(),
- parammaps.Get("ccountradio").ValueStr(),
- parammaps.Get("ccountradio").ValueStr()).Execute()
- if err != nil {
- tx.Rollback()
- log.Println("AddLpplandtl-error-3: ", err)
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- err = tx.Commit()
- if err != nil {
- tx.Rollback()
- log.Println("AddLpplandtl-error-6: ", err)
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- } else {
- lpplandid := parammaps.Get("id").ValueInt64()
- updateLpplandList := make([]*lpplandtl1, 0)
- var oldsort int64
- for i, lppand := range lpplandList {
- lppand.Sort = int64(i) + 1
- }
- for _, lppand := range lpplandList {
- if lppand.Id == lpplandid {
- oldsort = lppand.Sort
- break
- }
- }
- for _, lppand := range lpplandList {
- if lppand.Tmrid == tmrid && lppand.Id != lpplandid && sort < 0 {
- sort = lppand.Sort
- break
- }
- }
- if sort == -1 {
- sort = 1
- }
- if oldsort < sort {
- for _, lppand := range lpplandList {
- if lppand.Id != lpplandid && lppand.Sort > oldsort && lppand.Sort < sort {
- lppand.Sort--
- updateLpplandList = append(updateLpplandList, lppand)
- } else if lppand.Sort > sort && lppand.Id != lpplandid {
- lppand.Sort++
- updateLpplandList = append(updateLpplandList, lppand)
- }
- }
- sort--
- } else {
- for _, lppand := range lpplandList {
- if lppand.Sort < oldsort && lppand.Sort >= sort && lppand.Id != lpplandid {
- lppand.Sort++
- updateLpplandList = append(updateLpplandList, lppand)
- }
- }
- }
- var tmrlpplandList []*lpplandtl1
- for _, lppand := range lpplandList {
- exist := false
- for _, lppand1 := range updateLpplandList {
- if lppand.Id == lppand1.Id {
- exist = true
- break
- }
- }
- if !exist {
- tmrlpplandList = append(tmrlpplandList, lppand)
- }
- }
- updateLpplandList = append(updateLpplandList, tmrlpplandList...)
- if len(updateLpplandList) > 0 {
- tx.Begin()
- for _, lppand := range updateLpplandList {
- _, err := tx.SQL(" update lpplandtl1 set sort = ? where id = ? and pastureid = ? ", lppand.Sort, lppand.Id, lppand.Pastureid).Execute()
- if err != nil {
- tx.Rollback()
- log.Println("AddLpplandtl-error-2: ", err)
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- }
- _, err := tx.SQL(" update lpplandtl1 set tmrid = ? , tmrname = ?,sort = ? where id = ? and pastureid = ? ", parammaps.Get("tmrid").ValueStr(), parammaps.Get("tmrname").ValueStr(), sort, lpplandid, parammaps.Get("pastureid").ValueStr()).Execute()
- if err != nil {
- tx.Rollback()
- log.Println("AddLpplandtl-error-2: ", err)
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- tx.Commit()
- }
- }
- appG.Response(http.StatusOK, e.SUCCESS, true)
- }
- func UpdateLpplandtlSort(c *gin.Context) {
- appG := app.Gin{C: c}
- dataByte, _ := ioutil.ReadAll(c.Request.Body)
- fsion := gofasion.NewFasion(string(dataByte))
- parammaps := fsion.Get("parammaps")
- tx := restful.Engine.NewSession()
- defer tx.Close()
- var err error
- lpplandList := make([]*lpplandtl1, 0)
- err = tx.Table("lpplandtl1").Select("id,pastureid,sort,tmrid").Where("lppid = ? ", parammaps.Get("lppid").ValueStr()).And("pastureid = ?", parammaps.Get("pastureid").ValueStr()).
- OrderBy("sort").Find(&lpplandList)
- if err != nil {
- log.Println("UpdateLpplandtlSort-error-1: ", err)
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- var oldsort int64
- tmrid := parammaps.Get("tmrid").ValueInt64()
- sort := parammaps.Get("sort").ValueInt64()
- for i, lppland := range lpplandList {
- lppland.Sort = int64(i) + 1
- }
- for _, lppland := range lpplandList {
- if tmrid == lppland.Tmrid {
- oldsort = lppland.Sort
- break
- }
- }
- for _, lppland := range lpplandList {
- if lppland.Sort == sort {
- for _, lppland1 := range lpplandList {
- if lppland.Tmrid == lppland1.Tmrid {
- sort = lppland1.Sort
- if oldsort > sort {
- break
- }
- }
- }
- break
- }
- }
- if oldsort == sort {
- appG.Response(http.StatusOK, e.SUCCESS, true)
- return
- }
- tmrLpplandList := make([]*lpplandtl1, 0)
- for _, lppland := range lpplandList {
- if lppland.Tmrid == tmrid {
- tmrLpplandList = append(tmrLpplandList, lppland)
- }
- }
- for i, tmrLppland := range tmrLpplandList {
- tmrLppland.Sort = sort + int64(i)
- }
- if oldsort > sort {
- for _, lppland := range lpplandList {
- if lppland.Sort == sort {
- // uptmrid = lppland.Tmrid
- sort = lppland.Sort
- break
- }
- }
- } else {
- var uptmrid int64
- for _, lppland := range lpplandList {
- if lppland.Sort == sort {
- uptmrid = lppland.Tmrid
- sort = lppland.Sort
- } else if uptmrid != 0 && uptmrid == lppland.Tmrid {
- sort = lppland.Sort
- }
- }
- }
- upcount := int64(len(tmrLpplandList))
- if oldsort > sort {
- for _, lppland := range lpplandList {
- if lppland.Sort >= sort && lppland.Tmrid != tmrid {
- lppland.Sort += upcount
- tmrLpplandList = append(tmrLpplandList, lppland)
- }
- }
- } else {
- for _, lppland := range lpplandList {
- if lppland.Sort <= sort && lppland.Sort >= oldsort && lppland.Tmrid != tmrid {
- lppland.Sort -= upcount
- tmrLpplandList = append(tmrLpplandList, lppland)
- }
- }
- }
- updateLpplandList := make([]*lpplandtl1, 0)
- for _, lppland := range lpplandList {
- exist := false
- for _, tmrLppland := range tmrLpplandList {
- if lppland.Id == tmrLppland.Id {
- exist = true
- break
- }
- }
- if !exist {
- updateLpplandList = append(updateLpplandList, lppland)
- }
- }
- tmrLpplandList = append(tmrLpplandList, updateLpplandList...)
- tx.Begin()
- // _, err = tx.Table("lpplandtl1").Update(&tmrLpplandList)
- var wg sync.WaitGroup
- for _, lppland := range tmrLpplandList {
- wg.Add(1)
- go func(lppland *lpplandtl1) {
- defer wg.Done()
- _, err = tx.SQL(`update lpplandtl1 set sort = ? where id = ? and pastureid = ? `, lppland.Sort, lppland.Id, lppland.Pastureid).Execute()
- if err != nil {
- log.Println("UpdateLpplandtlSort-error-2: ", err)
- tx.Rollback()
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- }(lppland)
- }
- wg.Wait()
- err = tx.Commit()
- if err != nil {
- log.Println("UpdateLpplandtlSort-error-3: ", err)
- tx.Rollback()
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- appG.Response(http.StatusOK, e.SUCCESS, true)
- }
- func AddLpplandtlDate(c *gin.Context) {
- appG := app.Gin{C: c}
- dataByte, _ := ioutil.ReadAll(c.Request.Body)
- fsion := gofasion.NewFasion(string(dataByte))
- parammaps := fsion.Get("parammaps")
- tx := restful.Engine.NewSession()
- defer tx.Close()
- exist := false
- var err error
- lpplandList := make([]*lpplandtl1, 0)
- err = tx.Table("lpplandtl1date").Select("id,pastureid,sort,barid,tmrid").Where("lppid = ? ", parammaps.Get("lppid").ValueStr()).And("pastureid = ?", parammaps.Get("pastureid").ValueStr()).
- And("date = ? ", parammaps.Get("date").ValueStr()).OrderBy("sort").Find(&lpplandList)
- if err != nil {
- log.Println("AddLpplandtl-error-1: ", err)
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- if parammaps.Get("id").ValueStr() != "" || parammaps.Get("id").ValueStr() != "0" {
- for _, lppand := range lpplandList {
- fmt.Println(parammaps.Get("id").ValueInt64())
- if lppand.Id == parammaps.Get("id").ValueInt64() {
- if lppand.Tmrid == parammaps.Get("tmrid").ValueInt64() {
- appG.Response(http.StatusOK, e.SUCCESS, true)
- return
- }
- exist = true
- break
- }
- }
- }
- tmrid := parammaps.Get("tmrid").ValueInt64()
- var sort int64 = -1
- if !exist {
- for _, lppand := range lpplandList {
- if lppand.Barid == parammaps.Get("barid").ValueInt64() {
- _, err := tx.SQL(" update lpplandtl1date set lweight =lweight + ? where id = ? and pastureid = ? ", parammaps.Get("lweight").ValueStr(), lppand.Id, parammaps.Get("pastureid").ValueStr()).Execute()
- if err != nil {
- log.Println("AddLpplandtl-error-2: ", err)
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- appG.Response(http.StatusOK, e.SUCCESS, true)
- return
- }
- }
- for i, lppand := range lpplandList {
- lppand.Sort = int64(i) + 1
- }
- updateLpplandList := make([]*lpplandtl1, 0)
- for i, lppand := range lpplandList {
- n := i + 1
- if lppand.Tmrid == tmrid {
- sort = int64(n)
- lppand.Sort = int64(n) + 1
- updateLpplandList = append(updateLpplandList, lppand)
- } else if sort > 0 {
- lppand.Sort = int64(n) + 1
- updateLpplandList = append(updateLpplandList, lppand)
- }
- }
- tx.Begin()
- for _, lppand := range updateLpplandList {
- _, err := tx.SQL(" update lpplandtl1date set sort = ? where id = ? and pastureid = ? and date = ? ", lppand.Sort, lppand.Id, lppand.Pastureid, parammaps.Get("date").ValueStr()).Execute()
- if err != nil {
- tx.Rollback()
- log.Println("AddLpplandtl-error-2: ", err)
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- }
- if sort < 0 && len(lpplandList) > 0 {
- sort = int64(len(lpplandList) + 1)
- } else if len(lpplandList) == 0 {
- sort = 1
- }
- _, err = tx.SQL(`INSERT INTO lpplandtl1date(pastureid,lppid,barid,barname,fpdid,lweight,sort,tmrid,tmrname,fttype,background,cowcount,ccountradio,date)
- VALUES (?,?,?,?,?,?,?,?,?,
- ?,?,IF(?='',0,?),IF(?='',0,?),?)`,
- parammaps.Get("pastureid").ValueStr(),
- parammaps.Get("lppid").ValueStr(),
- parammaps.Get("barid").ValueStr(),
- parammaps.Get("barname").ValueStr(),
- parammaps.Get("fpdid").ValueStr(),
- parammaps.Get("lweight").ValueStr(),
- sort,
- parammaps.Get("tmrid").ValueStr(),
- parammaps.Get("tmrname").ValueStr(),
- parammaps.Get("fttype").ValueStr(),
- parammaps.Get("background").ValueStr(),
- parammaps.Get("cowcount").ValueStr(),
- parammaps.Get("cowcount").ValueStr(),
- parammaps.Get("ccountradio").ValueStr(),
- parammaps.Get("ccountradio").ValueStr(),
- parammaps.Get("date").ValueStr()).Execute()
- if err != nil {
- tx.Rollback()
- log.Println("AddLpplandtl-error-3: ", err)
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- err = tx.Commit()
- if err != nil {
- tx.Rollback()
- log.Println("AddLpplandtl-error-6: ", err)
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- } else {
- lpplandid := parammaps.Get("id").ValueInt64()
- updateLpplandList := make([]*lpplandtl1, 0)
- var oldsort int64
- for i, lppand := range lpplandList {
- lppand.Sort = int64(i) + 1
- }
- for _, lppand := range lpplandList {
- if lppand.Id == lpplandid {
- oldsort = lppand.Sort
- break
- }
- }
- for _, lppand := range lpplandList {
- if lppand.Tmrid == tmrid && lppand.Id != lpplandid && sort < 0 {
- sort = lppand.Sort
- break
- }
- }
- if sort == -1 {
- sort = 1
- }
- if oldsort < sort {
- for _, lppand := range lpplandList {
- if lppand.Id != lpplandid && lppand.Sort > oldsort && lppand.Sort < sort {
- lppand.Sort--
- updateLpplandList = append(updateLpplandList, lppand)
- } else if lppand.Sort > sort && lppand.Id != lpplandid {
- lppand.Sort++
- updateLpplandList = append(updateLpplandList, lppand)
- }
- }
- sort--
- } else {
- for _, lppand := range lpplandList {
- if lppand.Sort < oldsort && lppand.Sort >= sort && lppand.Id != lpplandid {
- lppand.Sort++
- updateLpplandList = append(updateLpplandList, lppand)
- }
- }
- }
- var tmrlpplandList []*lpplandtl1
- for _, lppand := range lpplandList {
- exist := false
- for _, lppand1 := range updateLpplandList {
- if lppand.Id == lppand1.Id {
- exist = true
- break
- }
- }
- if !exist {
- tmrlpplandList = append(tmrlpplandList, lppand)
- }
- }
- updateLpplandList = append(updateLpplandList, tmrlpplandList...)
- if len(updateLpplandList) > 0 {
- tx.Begin()
- for _, lppand := range updateLpplandList {
- _, err := tx.SQL(" update lpplandtl1date set sort = ? where id = ? and pastureid = ? ", lppand.Sort, lppand.Id, lppand.Pastureid).Execute()
- if err != nil {
- tx.Rollback()
- log.Println("AddLpplandtl-error-2: ", err)
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- }
- _, err := tx.SQL(" update lpplandtl1date set tmrid = ? , tmrname = ?,sort = ? where id = ? and pastureid = ? ", parammaps.Get("tmrid").ValueStr(), parammaps.Get("tmrname").ValueStr(), sort, lpplandid, parammaps.Get("pastureid").ValueStr()).Execute()
- if err != nil {
- tx.Rollback()
- log.Println("AddLpplandtl-error-2: ", err)
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- tx.Commit()
- }
- }
- appG.Response(http.StatusOK, e.SUCCESS, true)
- }
- func UpdateLpplandtlDateSort(c *gin.Context) {
- appG := app.Gin{C: c}
- dataByte, _ := ioutil.ReadAll(c.Request.Body)
- fsion := gofasion.NewFasion(string(dataByte))
- parammaps := fsion.Get("parammaps")
- tx := restful.Engine.NewSession()
- defer tx.Close()
- var err error
- lpplandList := make([]*lpplandtl1, 0)
- err = tx.Table("lpplandtl1date").Select("id,pastureid,sort,tmrid").Where("lppid = ? ", parammaps.Get("lppid").ValueStr()).And("pastureid = ?", parammaps.Get("pastureid").ValueStr()).
- And("date = ? ", parammaps.Get("date").ValueStr()).OrderBy("sort").Find(&lpplandList)
- if err != nil {
- log.Println("UpdateLpplandtlSort-error-1: ", err)
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- var oldsort int64
- tmrid := parammaps.Get("tmrid").ValueInt64()
- sort := parammaps.Get("sort").ValueInt64()
- for i, lppland := range lpplandList {
- lppland.Sort = int64(i) + 1
- }
- for _, lppland := range lpplandList {
- if tmrid == lppland.Tmrid {
- oldsort = lppland.Sort
- break
- }
- }
- for _, lppland := range lpplandList {
- if lppland.Sort == sort {
- for _, lppland1 := range lpplandList {
- if lppland.Tmrid == lppland1.Tmrid {
- sort = lppland1.Sort
- if oldsort > sort {
- break
- }
- }
- }
- break
- }
- }
- if oldsort == sort {
- appG.Response(http.StatusOK, e.SUCCESS, true)
- return
- }
- tmrLpplandList := make([]*lpplandtl1, 0)
- for _, lppland := range lpplandList {
- if lppland.Tmrid == tmrid {
- tmrLpplandList = append(tmrLpplandList, lppland)
- }
- }
- for i, tmrLppland := range tmrLpplandList {
- tmrLppland.Sort = sort + int64(i)
- }
- if oldsort > sort {
- for _, lppland := range lpplandList {
- if lppland.Sort == sort {
- // uptmrid = lppland.Tmrid
- sort = lppland.Sort
- break
- }
- }
- } else {
- var uptmrid int64
- for _, lppland := range lpplandList {
- if lppland.Sort == sort {
- uptmrid = lppland.Tmrid
- sort = lppland.Sort
- } else if uptmrid != 0 && uptmrid == lppland.Tmrid {
- sort = lppland.Sort
- }
- }
- }
- upcount := int64(len(tmrLpplandList))
- if oldsort > sort {
- for _, lppland := range lpplandList {
- if lppland.Sort >= sort && lppland.Tmrid != tmrid {
- lppland.Sort += upcount
- tmrLpplandList = append(tmrLpplandList, lppland)
- }
- }
- } else {
- for _, lppland := range lpplandList {
- if lppland.Sort <= sort && lppland.Sort >= oldsort && lppland.Tmrid != tmrid {
- lppland.Sort -= upcount
- tmrLpplandList = append(tmrLpplandList, lppland)
- }
- }
- }
- updateLpplandList := make([]*lpplandtl1, 0)
- for _, lppland := range lpplandList {
- exist := false
- for _, tmrLppland := range tmrLpplandList {
- if lppland.Id == tmrLppland.Id {
- exist = true
- break
- }
- }
- if !exist {
- updateLpplandList = append(updateLpplandList, lppland)
- }
- }
- tmrLpplandList = append(tmrLpplandList, updateLpplandList...)
- tx.Begin()
- // _, err = tx.Table("lpplandtl1").Update(&tmrLpplandList)
- var wg sync.WaitGroup
- for _, lppland := range tmrLpplandList {
- wg.Add(1)
- go func(lppland *lpplandtl1) {
- defer wg.Done()
- _, err = tx.SQL(`update lpplandtl1date set sort = ? where id = ? and pastureid = ? `, lppland.Sort, lppland.Id, lppland.Pastureid).Execute()
- if err != nil {
- log.Println("UpdateLpplandtlSort-error-2: ", err)
- tx.Rollback()
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- }(lppland)
- }
- wg.Wait()
- err = tx.Commit()
- if err != nil {
- log.Println("UpdateLpplandtlSort-error-3: ", err)
- tx.Rollback()
- appG.Response(http.StatusOK, e.ERROR, err)
- return
- }
- appG.Response(http.StatusOK, e.SUCCESS, true)
- }
- func GetFeedpUndistributed(c *gin.Context) {
- appG := app.Gin{C: c}
- tx := restful.Engine.NewSession()
- defer tx.Close()
- dataByte, _ := ioutil.ReadAll(c.Request.Body)
- fsion := gofasion.NewFasion(string(dataByte))
- timesMax := fsion.Get("times").ValueInt()
- pastureid := fsion.Get("pastureid").ValueStr()
- data := make(map[string]interface{})
- for times := 1; times <= timesMax; times++ {
- sqlStr := `SELECT trim(feedp.pastureid) pastureid,barname,trim(barid) barid,trim(ftid) arrid,1 as type,? as times,ft.tname ftname,ft.tcolor background,0 isfill FROM feedp
- inner join feedtemplet ft
- on ft.id = feedp.ftid and ft.pastureid=?
- WHERE feedp.pastureid = ?
- GROUP BY feedp.ftid
- UNION
- SELECT trim(feedp.pastureid) pastureid,barname,barid,trim(ptsfid) arrid,0 as type,? as times,ft.tname ptsfname ,ft.tcolor background,1 isfill FROM feedp
- inner join feedtemplet ft
- on ft.id = feedp.ptsfid and ft.pastureid=?
- WHERE feedp.pastureid = ? and (SELECT inforvalue FROM sysopt WHERE sysopt.pastureid=feedp.pastureid AND sysopt.inforname= 'isEnableSupplyFeed') = 1
- GROUP BY feedp.ptsfid`
- ftList, err := tx.SQL(sqlStr, times, pastureid, pastureid, times, pastureid, pastureid).Query().List()
- if err != nil {
- log.Println("GetFeedpUndistributed-error-1: ", err)
- appG.Response(http.StatusOK, e.ERROR, nil)
- return
- }
- ftDetailList, err := tx.SQL(`SELECT TRIM(id) id,times,tratio,ROUND(ptsrate*weight,2)-ptsuse weight,TRIM(barid) barid,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid ,
- (select bname from bar where pastureid =fpdetail.pastureid and id = fpdetail.barid ) barname,0 AS fttype,cowcount,ccountradio,1 isfill FROM fpdetail
- WHERE fpdetail.pastureid = ? AND times=? AND ptsuse< ROUND(ptsrate*weight,2)
- UNION
- SELECT TRIM(id) id,times,tratio,ROUND((1-ptsrate)*weight,2)-ptuse weight,TRIM(barid) barid,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid ,
- (select bname from bar where pastureid =fpdetail.pastureid and id = fpdetail.barid ) barname,1 AS fttype,cowcount,ccountradio,0 isfill FROM fpdetail
- WHERE fpdetail.pastureid = ? AND times=? AND ptuse<ROUND((1-ptsrate)*weight,2)
- ORDER BY barid`, pastureid, times, pastureid, times).Query().List()
- if err != nil {
- log.Println("GetFeedpUndistributed-error-2: ", err)
- appG.Response(http.StatusOK, e.ERROR, nil)
- return
- }
- for _, ft := range ftList {
- arrList := make([]map[string]interface{}, 0)
- arrid := ft["arrid"].(string)
- for _, detail := range ftDetailList {
- if _, ok := detail["ptid"]; ok {
- if arrid == detail["ptid"].(string) && ft["isfill"].(int64) == detail["isfill"].(int64) {
- detail["background"] = ft["background"]
- arrList = append(arrList, detail)
- }
- } else if _, ok := detail["ptsid"]; ok {
- if arrid == detail["ptsid"].(string) && ft["isfill"].(int64) == detail["isfill"].(int64) {
- detail["background"] = ft["background"]
- arrList = append(arrList, detail)
- }
- }
- }
- if len(arrList) > 0 {
- ft["arrList"] = arrList
- }
- }
- var key string
- if times == 1 {
- key = "one"
- } else if times == 2 {
- key = "two"
- } else if times == 3 {
- key = "three"
- } else if times == 4 {
- key = "four"
- } else if times == 5 {
- key = "five"
- } else {
- key = "six"
- }
- data[key] = ftList
- }
- appG.Response(http.StatusOK, e.SUCCESS, data)
- }
|