|  | @@ -68,6 +68,7 @@ type lpplanQueryInfo struct {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type fpdetailQueryInfo struct {
 | 
	
		
			
				|  |  |  	Fpdid       int64   `xorm:"fpdid"`
 | 
	
		
			
				|  |  | +	Ptsrate     float64 `xorm:"ptsrate"`
 | 
	
		
			
				|  |  |  	Ptsuse      float64 `xorm:"ptsuse"`
 | 
	
		
			
				|  |  |  	Ptuse       float64 `xorm:"ptuse"`
 | 
	
		
			
				|  |  |  	Weight      float64 `xorm:"weight"`
 | 
	
	
		
			
				|  | @@ -75,6 +76,7 @@ type fpdetailQueryInfo struct {
 | 
	
		
			
				|  |  |  	Barname     string  `xorm:"barname"`
 | 
	
		
			
				|  |  |  	Cowcount    int64   `xorm:"cowcount"`
 | 
	
		
			
				|  |  |  	Ccountradio float64 `xorm:"ccountradio"`
 | 
	
		
			
				|  |  | +	Fttypeid    int64   `xorm:"fttypeid"`
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type lpplandtl1 struct {
 | 
	
	
		
			
				|  | @@ -126,12 +128,15 @@ func Autogeneration(c *gin.Context) {
 | 
	
		
			
				|  |  |  		appG.Response(http.StatusOK, e.ERROR, false)
 | 
	
		
			
				|  |  |  		return
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	// var wg sync.WaitGroup
 | 
	
		
			
				|  |  | -	// wg.Add(len(feedtempletlist))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	fpdetailWeightList, err := getFpdetail(pastureid, tx)
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		appG.Response(http.StatusOK, e.ERROR, false)
 | 
	
		
			
				|  |  | +		return
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	for _, tem := range feedtempletlist {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		// go func(tem *feedtemplet) {
 | 
	
		
			
				|  |  | -		// defer wg.Done()
 | 
	
		
			
				|  |  |  		count, err := getLpplanCount(tx)
 | 
	
		
			
				|  |  |  		if err != nil {
 | 
	
		
			
				|  |  |  			appG.Response(http.StatusOK, e.ERROR, false)
 | 
	
	
		
			
				|  | @@ -140,61 +145,102 @@ func Autogeneration(c *gin.Context) {
 | 
	
		
			
				|  |  |  		for _, tmr := range tmrlist {
 | 
	
		
			
				|  |  |  			for i := 1; i <= times; i++ {
 | 
	
		
			
				|  |  |  				exist := false
 | 
	
		
			
				|  |  | +				var lppLweight, maxweight float64
 | 
	
		
			
				|  |  |  				for _, lpp := range lpplanlist {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -					// session.Where("pastureid = ? ", pastureid)
 | 
	
		
			
				|  |  | -					// session.Where("times = ? ", times)
 | 
	
		
			
				|  |  | -					// session.Where("tmrid = ? ", tmrid)
 | 
	
		
			
				|  |  | -					// session.Where("ftid = ? ", ftid)
 | 
	
		
			
				|  |  |  					if lpp.Tmrid == tmr.Id && lpp.Times == int64(i) && lpp.Ftid == tem.Id {
 | 
	
		
			
				|  |  |  						exist = true
 | 
	
		
			
				|  |  | -						break
 | 
	
		
			
				|  |  | +						lppLweight += lpp.Lweight
 | 
	
		
			
				|  |  | +						maxweight += lpp.Maxweight
 | 
	
		
			
				|  |  |  					}
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  | -				// exist, err := getLpplanExist(tmr.Id, tem.Id, i, pastureid, tx)
 | 
	
		
			
				|  |  | -				// if err != nil {
 | 
	
		
			
				|  |  | -				// 	appG.Response(http.StatusOK, e.ERROR, false)
 | 
	
		
			
				|  |  | -				// 	return
 | 
	
		
			
				|  |  | -				// }
 | 
	
		
			
				|  |  | -				if !exist {
 | 
	
		
			
				|  |  | -					ids, err := setting.SnowIds.NextId()
 | 
	
		
			
				|  |  | -					if err != nil {
 | 
	
		
			
				|  |  | -						ids = time.Now().UnixNano()
 | 
	
		
			
				|  |  | -						logging.Info("create SnowIds err", err)
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -					count++
 | 
	
		
			
				|  |  | -					lpplan := &lpplanStruct{
 | 
	
		
			
				|  |  | -						Id:          ids,
 | 
	
		
			
				|  |  | -						Tmrname:     tmr.Tname,
 | 
	
		
			
				|  |  | -						Tmrid:       tmr.Id,
 | 
	
		
			
				|  |  | -						Sort:        count,
 | 
	
		
			
				|  |  | -						Sel:         1,
 | 
	
		
			
				|  |  | -						Times:       int64(i),
 | 
	
		
			
				|  |  | -						Ftname:      tem.Cname,
 | 
	
		
			
				|  |  | -						Ftid:        tem.Id,
 | 
	
		
			
				|  |  | -						Maxweight:   tmr.Maxstirfeed,
 | 
	
		
			
				|  |  | -						Sumweight:   0,
 | 
	
		
			
				|  |  | -						Sumcowcount: 0,
 | 
	
		
			
				|  |  | -						Pastureid:   pastureid,
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -					err = addLpplan(lpplan, tx)
 | 
	
		
			
				|  |  | -					if err != nil {
 | 
	
		
			
				|  |  | -						appG.Response(http.StatusOK, e.ERROR, false)
 | 
	
		
			
				|  |  | -						return
 | 
	
		
			
				|  |  | +				lppLweight = maxweight - lppLweight
 | 
	
		
			
				|  |  | +				for _, fpd := range fpdetailWeightList {
 | 
	
		
			
				|  |  | +					if (tem.Id == fpd.Ptid || tem.Id == fpd.Ptsid) && i == int(fpd.Times) {
 | 
	
		
			
				|  |  | +						var ftid int64
 | 
	
		
			
				|  |  | +						if fpd.Ptid != 0 {
 | 
	
		
			
				|  |  | +							ftid = fpd.Ptid
 | 
	
		
			
				|  |  | +						} else {
 | 
	
		
			
				|  |  | +							ftid = fpd.Ptsid
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +						if tmr.Maxstirfeed <= 0 {
 | 
	
		
			
				|  |  | +							if !exist {
 | 
	
		
			
				|  |  | +								count++
 | 
	
		
			
				|  |  | +								ids, err := setting.SnowIds.NextId()
 | 
	
		
			
				|  |  | +								if err != nil {
 | 
	
		
			
				|  |  | +									ids = time.Now().UnixNano()
 | 
	
		
			
				|  |  | +									logging.Info("create SnowIds err", err)
 | 
	
		
			
				|  |  | +								}
 | 
	
		
			
				|  |  | +								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,
 | 
	
		
			
				|  |  | +								}
 | 
	
		
			
				|  |  | +								err = addLpplan(lpplan, tx)
 | 
	
		
			
				|  |  | +								if err != nil {
 | 
	
		
			
				|  |  | +									appG.Response(http.StatusOK, e.ERROR, false)
 | 
	
		
			
				|  |  | +									return
 | 
	
		
			
				|  |  | +								}
 | 
	
		
			
				|  |  | +							}
 | 
	
		
			
				|  |  | +						} else {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +							var weight float64
 | 
	
		
			
				|  |  | +							weight = fpd.Weight - lppLweight
 | 
	
		
			
				|  |  | +							for weight > 0 {
 | 
	
		
			
				|  |  | +								count++
 | 
	
		
			
				|  |  | +								ids, err := setting.SnowIds.NextId()
 | 
	
		
			
				|  |  | +								if err != nil {
 | 
	
		
			
				|  |  | +									ids = time.Now().UnixNano()
 | 
	
		
			
				|  |  | +									logging.Info("create SnowIds err", err)
 | 
	
		
			
				|  |  | +								}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +								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,
 | 
	
		
			
				|  |  | +								}
 | 
	
		
			
				|  |  | +								err = addLpplan(lpplan, tx)
 | 
	
		
			
				|  |  | +								if err != nil {
 | 
	
		
			
				|  |  | +									appG.Response(http.StatusOK, e.ERROR, false)
 | 
	
		
			
				|  |  | +									return
 | 
	
		
			
				|  |  | +								}
 | 
	
		
			
				|  |  | +								weight = weight - tmr.Maxstirfeed
 | 
	
		
			
				|  |  | +							}
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +						break
 | 
	
		
			
				|  |  |  					}
 | 
	
		
			
				|  |  | +					// }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		// }(tem)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	go func(typeIN int64, pastureid string, tx *xorm.Session) {
 | 
	
		
			
				|  |  | -		err = autogeneration(typeIN, pastureid, tx)
 | 
	
		
			
				|  |  | -		if err != nil {
 | 
	
		
			
				|  |  | -			appG.Response(http.StatusOK, e.ERROR, false)
 | 
	
		
			
				|  |  | -			return
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}(typeIN, pastureid, tx)
 | 
	
		
			
				|  |  | +	// go func(typeIN int64, pastureid string, tx *xorm.Session) {
 | 
	
		
			
				|  |  | +	err = autogeneration(typeIN, pastureid, tx)
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		appG.Response(http.StatusOK, e.ERROR, false)
 | 
	
		
			
				|  |  | +		return
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	// }(typeIN, pastureid, tx)
 | 
	
		
			
				|  |  |  	appG.Response(http.StatusOK, e.SUCCESS, true)
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -246,16 +292,50 @@ func getLpplanExist(tmrid, ftid int64, times int, pastureid string, tx *xorm.Ses
 | 
	
		
			
				|  |  |  	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"`
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//获取料数量
 | 
	
		
			
				|  |  | +func getFpdetail(pastureid string, tx *xorm.Session) ([]*fpdetailWeight, error) {
 | 
	
		
			
				|  |  | +	fpdetaillist := make([]*fpdetailWeight, 0)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	err := tx.SQL(`SELECT times,sum(ROUND(ptsrate*weight,2)-ptsuse)  weight,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid ,
 | 
	
		
			
				|  |  | +	cowcount FROM fpdetail
 | 
	
		
			
				|  |  | +	WHERE fpdetail.pastureid = ? AND  ptsuse< ROUND(ptsrate*weight,2)    and ptsid !=0
 | 
	
		
			
				|  |  | +	group by ptid,times,ptsid
 | 
	
		
			
				|  |  | +	UNION
 | 
	
		
			
				|  |  | +	SELECT times,sum(ROUND((1-ptsrate)*weight,2)-ptuse)weight,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid ,cowcount  FROM fpdetail
 | 
	
		
			
				|  |  | +	WHERE fpdetail.pastureid = ? AND ptuse<ROUND((1-ptsrate)*weight,2) and ptid !=0
 | 
	
		
			
				|  |  | +	group by ptid,times,ptsid
 | 
	
		
			
				|  |  | +	`, 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"`
 | 
	
		
			
				|  |  | +	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.Table("lpplan")
 | 
	
		
			
				|  |  | -	session.Select("times,tmrid,ftid")
 | 
	
		
			
				|  |  | -	session.Where("pastureid = ? ", patsureid)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	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 {
 | 
	
	
		
			
				|  | @@ -322,8 +402,8 @@ func autogeneration(typeIN int64, pastureid string, tx *xorm.Session) error {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	lpplansession := tx.SQL(`select  
 | 
	
		
			
				|  |  | -	t1.sort,t1.tmrid,t1.tmrname,
 | 
	
		
			
				|  |  | -	 t1.pastureid,t1.id ,t1.maxweight,ifnull(t2.lweight,0) as lweight from lpplan t1 
 | 
	
		
			
				|  |  | +	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)
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -337,16 +417,30 @@ func autogeneration(typeIN int64, pastureid string, tx *xorm.Session) error {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	for _, lpplan := range lpplanlist {
 | 
	
		
			
				|  |  | -		fpdetailsession := tx.Table("fpdetail").Alias("fpd")
 | 
	
		
			
				|  |  | -		fpdetailsession.Select("fpd.barid,fpd.barname,fpd.id as fpdid ,fpd.weight as weight,ifnull(fpd.ptuse,0) as ptuse,ifnull(fpd.ptsuse,0) as ptsuse,fpd.barid,fpd.barname,fpd.cowcount,fpd.ccountradio")
 | 
	
		
			
				|  |  | -		fpdetailsession.Join("inner", []string{"lpplan", "lpp"},
 | 
	
		
			
				|  |  | -			"lpp.pastureid = fpd.pastureid ").And("lpp.ftid = fpd.ptid").And(
 | 
	
		
			
				|  |  | -			"lpp.times = fpd.times").And("lpp.id = ?", lpplan.Lppid)
 | 
	
		
			
				|  |  | -		fpdetailsession.Where("fpd.pastureid = ? ", pastureid)
 | 
	
		
			
				|  |  | -		fpdetailsession.GroupBy("fpd.id")
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +		// fpdetailsession := tx.Table("fpdetail").Alias("fpd")
 | 
	
		
			
				|  |  | +		// fpdetailsession.Select("fpd.barid,fpd.barname,fpd.id as fpdid ,fpd.weight as weight,ifnull(fpd.ptuse,0) as ptuse,ifnull(fpd.ptsuse,0) as ptsuse,fpd.barid,fpd.barname,fpd.cowcount,fpd.ccountradio,fpd.ptsrate as ptsrate")
 | 
	
		
			
				|  |  | +		// fpdetailsession.Where(" fpd.ptid = ? ", lpplan.Ftid)
 | 
	
		
			
				|  |  | +		// fpdetailsession.Where(" fpd.times = ? ", lpplan.Times)
 | 
	
		
			
				|  |  | +		// fpdetailsession.Where("fpd.pastureid = ? ", pastureid)
 | 
	
		
			
				|  |  | +		// fpdetailsession.GroupBy("fpd.id")
 | 
	
		
			
				|  |  |  		fpdetaillist := make([]*fpdetailQueryInfo, 0)
 | 
	
		
			
				|  |  | -		err = fpdetailsession.Find(&fpdetaillist)
 | 
	
		
			
				|  |  | +		err = tx.SQL(`SELECT  0 as fttypeid,fpd.cowcount,fpd.ccountradio,fpd.id as fpdid,fpd.times,fpd.tratio,ROUND(fpd.ptsrate*fpd.weight,2)-fpd.ptsuse 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,1 isfill  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 ptuse<ROUND((1-fpd.ptsrate)*fpd.weight,2) and fpd.ptsid = ?
 | 
	
		
			
				|  |  | +		and fpd.times = ?
 | 
	
		
			
				|  |  | +		UNION
 | 
	
		
			
				|  |  | +		SELECT ft.fttypeid,fpd.cowcount,fpd.ccountradio,fpd.id as fpdid,times,tratio,ROUND((1-fpd.ptsrate)*fpd.weight,2)-fpd.ptuse weight,TRIM(fpd.barid) barid,TRIM(fpd.pastureid) pastureid,TRIM(fpd.ptid) ptid,TRIM(fpd.ptsid ) ptsid ,
 | 
	
		
			
				|  |  | +		(select bname  from bar where pastureid =fpd.pastureid and id = fpd.barid ) barname,cowcount,ccountradio,0 isfill  FROM fpdetail fpd
 | 
	
		
			
				|  |  | +			join feedp  fp on   fp.ftid = fpd.ptid and fp.pastureid = fpd.pastureid
 | 
	
		
			
				|  |  | +	inner join  feedtemplet ft on ft.id = fp.ftid  and ft.pastureid = fpd.pastureid
 | 
	
		
			
				|  |  | +		WHERE fpd.pastureid = ? AND ptuse<ROUND((1-fpd.ptsrate)*fpd.weight,2) and fpd.ptid = ?
 | 
	
		
			
				|  |  | +		and fpd.times = ?`, pastureid, lpplan.Ftid, lpplan.Times, pastureid, lpplan.Ftid, lpplan.Times).Find(&fpdetaillist)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// err = fpdetailsession
 | 
	
		
			
				|  |  |  		if err != nil {
 | 
	
		
			
				|  |  |  			log.Println("autogeneration-error-4", err)
 | 
	
		
			
				|  |  |  			tx.Rollback()
 | 
	
	
		
			
				|  | @@ -355,8 +449,9 @@ func autogeneration(typeIN int64, pastureid string, tx *xorm.Session) error {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		for _, fpdetail := range fpdetaillist {
 | 
	
		
			
				|  |  |  			// 	//剩余料
 | 
	
		
			
				|  |  | -			weight := fpdetail.Weight*(1-fpdetail.Ptsuse) - fpdetail.Ptuse
 | 
	
		
			
				|  |  | -			if lpplan.Maxweight <= lpplan.Lweight || weight == 0 {
 | 
	
		
			
				|  |  | +			var weight float64
 | 
	
		
			
				|  |  | +			weight = fpdetail.Weight
 | 
	
		
			
				|  |  | +			if lpplan.Maxweight <= lpplan.Lweight || weight < 0 {
 | 
	
		
			
				|  |  |  				continue
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -366,24 +461,21 @@ func autogeneration(typeIN int64, pastureid string, tx *xorm.Session) error {
 | 
	
		
			
				|  |  |  			} else {
 | 
	
		
			
				|  |  |  				insertlweight = lpplan.Maxweight - lpplan.Lweight
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  			lpplan.Lweight += insertlweight
 | 
	
		
			
				|  |  |  			lpplan.Lweighthis = insertlweight
 | 
	
		
			
				|  |  | -			fpdetail.Ptuse += insertlweight
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			// updatefpd := tx.Table("fpdetail").Alias("fpd")
 | 
	
		
			
				|  |  | -			// updatefpd.Join("INNER", []string{"lpplan", "lpp"}, "lpp.pastureid = fpd.pastureid")
 | 
	
		
			
				|  |  | -			// updatefpd.Where("lpp.ftid = fpd.ptid").And("lpp.times = fpd.times")
 | 
	
		
			
				|  |  | -			// _, err = updatefpd.Update(fpdetail)
 | 
	
		
			
				|  |  | -			_, err = tx.SQL(` update fpdetail fpd  join lpplan lpp  on lpp.pastureid = fpd.pastureid  and  lpp.ftid = fpd.ptid and lpp.times = fpd.times
 | 
	
		
			
				|  |  | -			 set   fpd.ptuse = ?  where fpd.id = ? `, fpdetail.Ptuse, fpdetail.Fpdid).Execute()
 | 
	
		
			
				|  |  | +			// fpdetail.Ptsuse += insertlweight
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			_, 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=? `, fpdetail.Fttypeid, fpdetail.Weight, fpdetail.Weight, fpdetail.Fttypeid, fpdetail.Weight, fpdetail.Weight, pastureid, fpdetail.Fpdid).Execute()
 | 
	
		
			
				|  |  |  			if err != nil {
 | 
	
		
			
				|  |  |  				log.Println("autogeneration-error-5", err)
 | 
	
		
			
				|  |  |  				tx.Rollback()
 | 
	
		
			
				|  |  |  				return err
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +			fpdetail.Weight = fpdetail.Weight - insertlweight
 | 
	
		
			
				|  |  |  			lpplandtlExecute, err := tx.SQL(`select id from lpplandtl1 where pastureid= ?
 | 
	
		
			
				|  |  | -				and  lppid = ?  and fpdid =? and  fttype = ? `, pastureid, lpplan.Lppid, fpdetail.Fpdid, 1).Exist()
 | 
	
		
			
				|  |  | +				and  lppid = ?  and fpdid =? and  fttype = ? `, pastureid, lpplan.Lppid, fpdetail.Fpdid, fpdetail.Fttypeid).Exist()
 | 
	
		
			
				|  |  |  			if err != nil {
 | 
	
		
			
				|  |  |  				log.Println("autogeneration-error-6", err)
 | 
	
		
			
				|  |  |  				tx.Rollback()
 | 
	
	
		
			
				|  | @@ -410,7 +502,7 @@ func autogeneration(typeIN int64, pastureid string, tx *xorm.Session) error {
 | 
	
		
			
				|  |  |  					Barid:       fpdetail.Barid,
 | 
	
		
			
				|  |  |  					Barname:     fpdetail.Barname,
 | 
	
		
			
				|  |  |  					Fpdid:       fpdetail.Fpdid,
 | 
	
		
			
				|  |  | -					Fttype:      1,
 | 
	
		
			
				|  |  | +					Fttype:      fpdetail.Fttypeid,
 | 
	
		
			
				|  |  |  					Lweight:     lpplandtl1query.Lweight + insertlweight,
 | 
	
		
			
				|  |  |  					Sort:        lpplan.Sort,
 | 
	
		
			
				|  |  |  					Tmrid:       lpplan.Tmrid,
 | 
	
	
		
			
				|  | @@ -437,7 +529,7 @@ func autogeneration(typeIN int64, pastureid string, tx *xorm.Session) error {
 | 
	
		
			
				|  |  |  					Barid:       lpplan.Barid,
 | 
	
		
			
				|  |  |  					Barname:     lpplan.Barname,
 | 
	
		
			
				|  |  |  					Fpdid:       fpdetail.Fpdid,
 | 
	
		
			
				|  |  | -					Fttype:      1,
 | 
	
		
			
				|  |  | +					Fttype:      fpdetail.Fttypeid,
 | 
	
		
			
				|  |  |  					Lweight:     insertlweight,
 | 
	
		
			
				|  |  |  					Sort:        lpplan.Sort,
 | 
	
		
			
				|  |  |  					Tmrid:       lpplan.Tmrid,
 | 
	
	
		
			
				|  | @@ -457,11 +549,18 @@ func autogeneration(typeIN int64, pastureid string, tx *xorm.Session) error {
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | +		if typeIN == 1 {
 | 
	
		
			
				|  |  | +			_, err = tx.SQL("update lpplan set sel = 1 where id = ?", lpplan.Lppid).Execute()
 | 
	
		
			
				|  |  | +			if err != nil {
 | 
	
		
			
				|  |  | +				log.Println("autogeneration-error-10", err)
 | 
	
		
			
				|  |  | +				return err
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	err = tx.Commit()
 | 
	
		
			
				|  |  |  	if err != nil {
 | 
	
		
			
				|  |  | -		log.Println("autogeneration-error-10", err)
 | 
	
		
			
				|  |  | +		log.Println("autogeneration-error-11", err)
 | 
	
		
			
				|  |  |  		return err
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	return nil
 |