| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822 | package apiimport (	"encoding/json"	"errors"	"fmt"	"io/ioutil"	"log"	"net/http"	"sort"	"strconv"	"strings"	"sync"	"time"	"tmr-watch/conf/setting"	"tmr-watch/http/handle/restful"	"tmr-watch/pkg/app"	"tmr-watch/pkg/e"	"tmr-watch/pkg/logging"	"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-ifnull(fpd.ptsrate,0))*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-ifnull(fpd.ptsrate,0))*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(ifnull(fpd.ptsrate,0)*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(ifnull(fpd.ptsrate,0)*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.timesgroup 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-ifnull(fpd.ptsrate,0))*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-ifnull(fpd.ptsrate,0))*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(ifnull(fpd.ptsrate,0)*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(ifnull(fpd.ptsrate,0)*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 isnull(ft.volume) volume,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 isnull(ft.volume) volume,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`		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(ifnull(ptsrate,0)*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(ifnull(ptsrate,0)*weight,2)  	and (select id from bar where id = fpdetail.barid and pastureid =  fpdetail.pastureid) is not null	UNION	SELECT TRIM(id) id,times,tratio,ROUND((1-ifnull(ptsrate,0))*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-ifnull(ptsrate,0))*weight,2)	and (select id from bar where id = fpdetail.barid and pastureid =  fpdetail.pastureid) is not null	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,times timesInt,		CASE times		WHEN 1 THEN		'第一班'	WHEN 2 THEN	'第二班'	WHEN 3 THEN	'第三班'	WHEN 4 THEN	'第四班'	WHEN 5 THEN	'第五班'	WHEN 6 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,ifnull((select volume from tmr where id  = lpplan.tmrid ),0) tmrvolume,	 (ifnull((select inforvalue from sysopt  where pastureid = lpplan.pastureid  and inforname = 'tmrUpper'),0)/100 *ifnull((select volume from tmr where id  = lpplan.tmrid ),0)) maxVolume,	 (ifnull((select inforvalue from sysopt  where pastureid = lpplan.pastureid  and inforname = 'tmrUnder'),0)/100 *ifnull((select volume from tmr where id  = lpplan.tmrid ),0)) minVolume, 	ifnull((select volume from feedtemplet where id = lpplan.ftid ),0) ftvolume,	(select inforvalue from sysopt  where pastureid = lpplan.pastureid  and inforname = 'tmrUpper') tmrUpper,(select inforvalue from sysopt  where pastureid = lpplan.pastureid  and inforname = 'tmrUnder') tmrUnder	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,ifnull((select volume from tmr where id = lpplandtl1.tmrid ),0) tmrvolume		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)		}		// 		maxVolume,		// minVolume,		sqlstr = fmt.Sprintf("select  qq.*,if(qq.sumweight/qq.ftvolume >= qq.minVolume and qq.sumweight/qq.ftvolume <= qq.maxVolume,'正常',if(qq.sumweight/qq.ftvolume < qq.minVolume,concat('低于',qq.tmrUnder,'%%','(',qq.minVolume,'L',')'),concat('高于',qq.tmrUpper,'%%','(',qq.maxVolume,'L',')'))  ) volumeStatusStr,if(qq.sumweight/qq.ftvolume >= qq.minVolume and qq.sumweight/qq.ftvolume <= qq.maxVolume,0,if(qq.sumweight/qq.ftvolume < qq.minVolume,1,2)  ) volumeStatus  from ( %s ) qq", sqlstr)		sqlstr += " ORDER BY  qq.timesInt,qq.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	}	err = tx.Commit()	if err != nil {		log.Println("UpdateLpplan-error-3: ", err)		appG.Response(http.StatusInternalServerError, e.ERROR, err)		tx.Rollback()		return	}	dataList, err := tx.SQL(`select * from lpplandtl1 where lppid = ? and  pastureid = ? `, lpplanid, pastureid).Query().List()	if err != nil {		log.Println("UpdateLpplan-error-4: ", err)		appG.Response(http.StatusInternalServerError, e.ERROR, err)		return	}	// var oldbar, bar []int64	oldList := fsion.Get("old").Array()	if len(dataList) >= len(oldList) {		for _, data := range dataList {			updateStatus := true			for _, old := range oldList {				if (old.Get("lweight").ValueStr() == data["lweight"].(string)) && old.Get("barid").ValueInt64() == data["barid"].(int64) {					updateStatus = false					break				}			}			if updateStatus {				now := time.Now()				for _, data := range dataList {					_, err = tx.SQL(` insert into lpplandtl1history(pastureid,lppid,barid,barname,fpdid,fttype,lweight,sort,tmrid,tmrname,											background,cowcount,ccountradio,lweighthis,createdate)										values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`,						data["pastureid"], data["lppid"], data["barid"],						data["barname"], data["fpdid"], data["fttype"],						data["lweight"], data["sort"], data["tmrid"],						data["tmrname"], data["background"], data["cowcount"],						data["ccountradio"], data["lweighthis"], now).Execute()					if err != nil {						log.Println("UpdateLpplan-error-5: ", err)						appG.Response(http.StatusInternalServerError, e.ERROR, err)						return					}				}				break			}		}	} else {		for _, old := range oldList {			updateStatus := true			for _, data := range dataList {				if (old.Get("lweight").ValueStr() == data["lweight"].(string)) && old.Get("barid").ValueInt64() == data["barid"].(int64) {					updateStatus = false					break				}			}			if updateStatus {				now := time.Now()				for _, old := range oldList {					exist := false					var lweight, tmrid, tmrname interface{}					for _, data := range dataList {						if old.Get("barid").ValueInt64() == data["barid"].(int64) {							lweight = data["lweight"]							tmrid = data["tmrid"]							tmrname = data["tmrname"]							exist = true							break						}					}					if !exist {						tmrid = old.Get("tmrid").ValueInt64()						tmrname = old.Get("tmrname").ValueStr()						lweight = 0					}					_, err = tx.SQL(` insert into lpplandtl1history(pastureid,lppid,barid,barname,fpdid,fttype,lweight,sort,tmrid,tmrname,											background,cowcount,ccountradio,lweighthis,createdate) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`,						old.Get("pastureid").ValueStr(), old.Get("lppid").ValueStr(), old.Get("barid").ValueStr(),						old.Get("barname").ValueStr(), old.Get("fpdid").ValueStr(), old.Get("fttype").ValueStr(),						lweight, old.Get("sort").ValueStr(), tmrid,						tmrname, old.Get("background").ValueStr(), old.Get("cowcount").ValueStr(),						old.Get("ccountradio").ValueStr(), old.Get("lweighthis").ValueInt64(), now).Execute()					if err != nil {						log.Println("UpdateLpplan-error-6: ", err)						appG.Response(http.StatusInternalServerError, e.ERROR, err)						return					}				}				break			}		}	}	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,feedp.barname,TRIM(feedp.barid) barid,TRIM(ft.id) arrid,1 AS type,? AS times,ft.tname ftname,ft.tcolor  background,feedp.date,0 isfillFROM feedpdate feedpINNER JOIN fpdetaildate fpd ON fpd.date = feedp.date AND fpd.barid = feedp.barid  AND fpd.pastureid = feedp.pastureidINNER JOIN  feedtemplet ftON ft.id = fpd.ptid AND  ft.pastureid= feedp.pastureidWHERE feedp.pastureid = ? AND feedp.date=? %sGROUP BY fpd.ptidUNIONSELECT 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 isfillFROM feedpdate feedpINNER JOIN fpdetaildate fpd ON fpd.date = feedp.date AND fpd.barid = feedp.barid AND fpd.pastureid = feedp.pastureidINNER JOIN  feedtemplet ftON ft.id = fpd.ptsid AND  ft.pastureid=feedp.pastureidWHERE 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("GetSpillageDay-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(ifnull(ptsrate,0)*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(ifnull(ptsrate,0)*weight,2) and fpdetail.date = ?		and (select id from bar where id = fpdetail.barid and pastureid =  fpdetail.pastureid ) is not null		UNION		SELECT TRIM(id) id,times,tratio,ROUND((1-ifnull(ptsrate,0))*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-ifnull(ptsrate,0))*weight,2) and fpdetail.date = ?		and (select id from bar where id = fpdetail.barid and pastureid =  fpdetail.pastureid) is not null		ORDER BY  barid`, pastureid, times, date, pastureid, times, date).Query().List()		if err != nil {			log.Println("GetSpillageDay-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,lpplan.times timesInt,		CASE lpplan.times		WHEN 1 THEN		'第一班'		WHEN 2 THEN		'第二班'		WHEN 3 THEN		'第三班'		WHEN 4 THEN		'第四班'		WHEN 5 THEN		'第五班'		WHEN 6 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,		ifnull((select volume from tmr where id  = lpplan.tmrid ),0) tmrvolume,		(ifnull((select inforvalue from sysopt  where pastureid = lpplan.pastureid  and inforname = 'tmrUpper'),0)/100 *ifnull((select volume from tmr where id  = lpplan.tmrid ),0)) maxVolume,		(ifnull((select inforvalue from sysopt  where pastureid = lpplan.pastureid  and inforname = 'tmrUnder'),0)/100 *ifnull((select volume from tmr where id  = lpplan.tmrid ),0)) minVolume, 	   ifnull((select volume from feedtemplet where id = lpplan.ftid ),0) ftvolume,	   (select inforvalue from sysopt  where pastureid = lpplan.pastureid  and inforname = 'tmrUpper') tmrUpper,   (select inforvalue from sysopt  where pastureid = lpplan.pastureid  and inforname = 'tmrUnder') tmrUnder		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 "		sqlstr = fmt.Sprintf("select  qq.*,if(qq.sumweight/qq.ftvolume >= qq.minVolume and qq.sumweight/qq.ftvolume <= qq.maxVolume,'正常',if(qq.sumweight/qq.ftvolume < qq.minVolume,concat('低于',qq.tmrUnder,'%%','(',qq.minVolume,'L',')'),concat('高于',qq.tmrUpper,'%%','(',qq.maxVolume,'L',')'))  ) volumeStatusStr,if(qq.sumweight/qq.ftvolume >= qq.minVolume and qq.sumweight/qq.ftvolume <= qq.maxVolume,0,if(qq.sumweight/qq.ftvolume < qq.minVolume,1,2)  ) volumeStatus  from ( %s ) qq", sqlstr)		sqlstr += " ORDER BY  qq.timesInt,qq.sort "		session := tx.SQL(sqlstr, args...)		lppList, err := session.Query().List()		if err != nil {			log.Println("GetSpillageDay-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) + 1// 				lppand.Sort = int64(n)// 				updateLpplandList = append(updateLpplandList, lppand)// 			} else if sort > 0 {// 				lppand.Sort = int64(n) + 2// 				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) + 2)// 		} 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 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,tmrname").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()	if !exist {		var sort int64 = -1		var maxsort int64		for _, lppand := range lpplandList {			if maxsort <= lppand.Sort {				maxsort = lppand.Sort			}			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) + 1				lppand.Sort = int64(n)				updateLpplandList = append(updateLpplandList, lppand)			} else if sort > 0 {				lppand.Sort = int64(n) + 2				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 = maxsort + 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		}		noup := false		for i, lppand := range lpplandList {			if lppand.Id == lpplandid {				oldsort = lppand.Sort				b := false				for _, lppand := range lpplandList {					if lppand.Tmrid == tmrid {						noup = false						b = true						break					}				}				if !b {					if i == 0 || i == len(lpplandList)-1 {						noup = true					}					if i != 0 && i < len(lpplandList)-1 {						if lpplandList[i-1].Tmrid != lppand.Tmrid || lpplandList[i+1].Tmrid != lppand.Tmrid {							noup = true						}					}					// if lpplandList[i+1].Tmrid == tmrid {					// 	_, err := tx.SQL(" update lpplandtl1 set tmrid = ? , tmrname = ?   where id = ?  and pastureid = ? ", parammaps.Get("tmrid").ValueStr(), parammaps.Get("tmrname").ValueStr(), 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)					// 	return					// }					// }					// break					// 	}					// }				}				break			}		}		if noup {			_, err := tx.SQL(" update lpplandtl1 set tmrid = ? , tmrname = ?   where id = ?  and pastureid = ? ", parammaps.Get("tmrid").ValueStr(), parammaps.Get("tmrname").ValueStr(), 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			}		} else {			for i, lppand := range lpplandList {				if lppand.Id == lpplandid {					if i != 0 {						if lpplandList[i-1].Tmrid == tmrid {							_, err := tx.SQL(" update lpplandtl1 set tmrid = ? , tmrname = ?   where id = ?  and pastureid = ? ", parammaps.Get("tmrid").ValueStr(), parammaps.Get("tmrname").ValueStr(), 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)							return						}					}					if i < len(lpplandList)-1 {						if lpplandList[i+1].Tmrid == tmrid {							_, err := tx.SQL(" update lpplandtl1 set tmrid = ? , tmrname = ?   where id = ?  and pastureid = ? ", parammaps.Get("tmrid").ValueStr(), parammaps.Get("tmrname").ValueStr(), 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)							return						}					}					break				}			}			exist := false			sort1 := 0			a := false			for _, lppand := range lpplandList {				if lppand.Tmrid == tmrid && lppand.Id != lpplandid {					sort1 = int(lppand.Sort)					if !a {						for _, lppand1 := range lpplandList {							if lppand1.Id == lpplandid {								lppand1.Tmrid = tmrid								lppand1.Tmrname = lppand.Tmrname								a = true								// lppand1.Sort = lppand.Sort								break							}						}					}					exist = true				}			}			if exist {				if oldsort > int64(sort1) {					for _, lppand := range lpplandList {						if lppand.Id == lpplandid {							lppand.Sort = int64(sort1) + 1							continue						}						if lppand.Sort >= int64(sort1)+1 {							lppand.Sort++						}					}				} else {					for _, lppand := range lpplandList {						if lppand.Id == lpplandid {							lppand.Sort = int64(sort1) + 1							continue						}						if lppand.Sort > oldsort && lppand.Sort < int64(sort1)+1 {							lppand.Sort--						} else if lppand.Sort <= int64(sort1)+1 {							lppand.Sort++						}					}				}			} else {				for _, lppand := range lpplandList {					if lppand.Id == lpplandid {						lppand.Sort = int64(len(lpplandList)) + 1						lppand.Tmrid = tmrid						lppand.Tmrname = parammaps.Get("tmrname").ValueStr()						break					}				}			}			sort.Slice(lpplandList, func(i, j int) bool {				return lpplandList[i].Sort < lpplandList[j].Sort // 升序			})			for i, lppand := range lpplandList {				lppand.Sort = int64(i) + 1			}			for _, lppand := range lpplandList {				_, err := tx.SQL(" update lpplandtl1 set tmrid = ? , tmrname = ?,sort = ?   where id = ?  and pastureid = ? ", lppand.Tmrid, lppand.Tmrname, 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				}			}		}		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, lpplandtlsort int64	tmrid := parammaps.Get("tmrid").ValueInt64()	sort := parammaps.Get("sort").ValueInt64()	lpplandtlid := parammaps.Get("id").ValueInt64()	sort1 := 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)			if lppland.Id == lpplandtlid {				lpplandtlsort = lppland.Sort			}		}	}	exist := false	for _, tmrLppland := range tmrLpplandList {		if sort1 == tmrLppland.Sort {			exist = true			break		}	}	if exist {		for _, tmrLppland := range tmrLpplandList {			if sort1 <= tmrLppland.Sort && lpplandtlsort > tmrLppland.Sort {				tmrLppland.Sort++			} else if sort1 >= tmrLppland.Sort && lpplandtlsort <= tmrLppland.Sort {				tmrLppland.Sort--			}		}		for _, tmrLppland := range tmrLpplandList {			if tmrLppland.Id == lpplandtlid {				tmrLppland.Sort = sort1				break			}		}	} else {		if oldsort < sort && len(tmrLpplandList) > 1 {			for i, tmrLppland := range tmrLpplandList {				tmrLppland.Sort = sort + int64(i) - 1			}		} else {			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 && lppland.Tmrid != tmrid {				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...)	// tmrLpplandMap := make(map[int64]bool)	// for _, item := range tmrLpplandList {	// 	tmrLpplandMap[item.Sort] = false	// }	for _, item := range tmrLpplandList {		exist := false		for _, item1 := range tmrLpplandList {			if item.Sort == item1.Sort && item.Id != item1.Id {				exist = true			}		}		if exist {			appG.Response(http.StatusOK, e.ERROR, "顺序调整有误,请重新调整!!!")			return		}	}	tx.Begin()	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,tmrname").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()	if !exist {		var sort int64 = -1		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) + 1				lppand.Sort = int64(n)				updateLpplandList = append(updateLpplandList, lppand)			} else if sort > 0 {				lppand.Sort = int64(n) + 2				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		}		noup := false		for i, lppand := range lpplandList {			if lppand.Id == lpplandid {				oldsort = lppand.Sort				b := false				for _, lppand := range lpplandList {					if lppand.Tmrid == tmrid {						noup = false						b = true						break					}				}				if !b {					if i == 0 || i == len(lpplandList)-1 {						noup = true					}					if i != 0 && i < len(lpplandList)-1 {						if lpplandList[i-1].Tmrid != lppand.Tmrid || lpplandList[i+1].Tmrid != lppand.Tmrid {							noup = true						}					}				}				break			}		}		if noup {			_, err := tx.SQL(" update lpplandtl1date set tmrid = ? , tmrname = ?   where id = ?  and pastureid = ? and date = ? ",				parammaps.Get("tmrid").ValueStr(), parammaps.Get("tmrname").ValueStr(), lpplandid, parammaps.Get("pastureid").ValueStr(), parammaps.Get("date").ValueStr()).Execute()			if err != nil {				tx.Rollback()				log.Println("AddLpplandtl-error-2: ", err)				appG.Response(http.StatusOK, e.ERROR, err)				return			}		} else {			for i, lppand := range lpplandList {				if lppand.Id == lpplandid {					if i != 0 {						if lpplandList[i-1].Tmrid == tmrid {							_, err := tx.SQL(" update lpplandtl1date set tmrid = ? , tmrname = ?   where id = ?  and pastureid = ?  and date = ?  ",								parammaps.Get("tmrid").ValueStr(), parammaps.Get("tmrname").ValueStr(), lpplandid, parammaps.Get("pastureid").ValueStr(), parammaps.Get("date").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)							return						}					}					if i < len(lpplandList)-1 {						if lpplandList[i+1].Tmrid == tmrid {							_, err := tx.SQL(" update lpplandtl1date set tmrid = ? , tmrname = ?   where id = ?  and pastureid = ?  and date = ? ", parammaps.Get("tmrid").ValueStr(),								parammaps.Get("tmrname").ValueStr(), lpplandid, parammaps.Get("pastureid").ValueStr(), parammaps.Get("date").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)							return						}					}					break				}			}			exist := false			sort1 := 0			a := false			for _, lppand := range lpplandList {				if lppand.Tmrid == tmrid && lppand.Id != lpplandid {					sort1 = int(lppand.Sort)					if !a {						for _, lppand1 := range lpplandList {							if lppand1.Id == lpplandid {								lppand1.Tmrid = tmrid								lppand1.Tmrname = lppand.Tmrname								a = true								// lppand1.Sort = lppand.Sort								break							}						}					}					exist = true				}			}			if exist {				if oldsort > int64(sort1) {					for _, lppand := range lpplandList {						if lppand.Id == lpplandid {							lppand.Sort = int64(sort1) + 1							continue						}						if lppand.Sort >= int64(sort1)+1 {							lppand.Sort++						}					}				} else {					for _, lppand := range lpplandList {						if lppand.Id == lpplandid {							lppand.Sort = int64(sort1) + 1							continue						}						// if lppand.Sort > oldsort {						// 	lppand.Sort--						// }						if lppand.Sort > oldsort && lppand.Sort < int64(sort1)+1 {							lppand.Sort--						} else if lppand.Sort <= int64(sort1)+1 {							lppand.Sort++						}					}				}			} else {				for _, lppand := range lpplandList {					if lppand.Id == lpplandid {						lppand.Sort = int64(len(lpplandList)) + 1						lppand.Tmrid = tmrid						lppand.Tmrname = parammaps.Get("tmrname").ValueStr()						break					}				}			}			sort.Slice(lpplandList, func(i, j int) bool {				return lpplandList[i].Sort < lpplandList[j].Sort // 升序			})			for i, lppand := range lpplandList {				lppand.Sort = int64(i) + 1			}			for _, lppand := range lpplandList {				_, err := tx.SQL(" update lpplandtl1date set tmrid = ? , tmrname = ?,sort = ?   where id = ?  and pastureid = ?  and date = ? ",					lppand.Tmrid, lppand.Tmrname, 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				}			}		}		tx.Commit()		// 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")	date := parammaps.Get("date").ValueStr()	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 = ? ", date).OrderBy("sort").Find(&lpplandList)	if err != nil {		log.Println("UpdateLpplandtlSort-error-1: ", err)		appG.Response(http.StatusOK, e.ERROR, err)		return	}	var oldsort, lpplandtlsort int64	tmrid := parammaps.Get("tmrid").ValueInt64()	sort := parammaps.Get("sort").ValueInt64()	lpplandtlid := parammaps.Get("id").ValueInt64()	sort1 := 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)			if lppland.Id == lpplandtlid {				lpplandtlsort = lppland.Sort			}		}	}	exist := false	for _, tmrLppland := range tmrLpplandList {		if sort1 == tmrLppland.Sort {			exist = true			break		}	}	if exist {		for _, tmrLppland := range tmrLpplandList {			if sort1 <= tmrLppland.Sort && lpplandtlsort > tmrLppland.Sort {				tmrLppland.Sort++			} else if sort1 >= tmrLppland.Sort && lpplandtlsort <= tmrLppland.Sort {				tmrLppland.Sort--			}		}		for _, tmrLppland := range tmrLpplandList {			if tmrLppland.Id == lpplandtlid {				tmrLppland.Sort = sort1				break			}		}	} else {		if oldsort < sort && len(tmrLpplandList) > 1 {			for i, tmrLppland := range tmrLpplandList {				tmrLppland.Sort = sort + int64(i) - 1			}		} else {			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 && lppland.Tmrid != tmrid {				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 = ? and date = ? `, lppland.Sort, lppland.Id, lppland.Pastureid, date).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 fton ft.id = feedp.ftid and  ft.pastureid=?WHERE feedp.pastureid = ? GROUP BY feedp.ftidUNIONSELECT trim(feedp.pastureid) pastureid,barname,barid,trim(ptsfid) arrid,0 as type,? as times,ft.tname ptsfname ,ft.tcolor  background,1 isfill  FROM feedpinner join  feedtemplet fton ft.id = feedp.ptsfid and  ft.pastureid=?WHERE feedp.pastureid = ?   and  (SELECT inforvalue FROM sysopt WHERE sysopt.pastureid=feedp.pastureid AND sysopt.inforname= 'isEnableSupplyFeed') = 1GROUP 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 fpdetailWHERE fpdetail.pastureid = ?  AND times=? AND  ptsuse< ROUND(ptsrate*weight,2) UNIONSELECT 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 fpdetailWHERE 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)}
 |