| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553 | DELIMITER $$USE `tmrwatch2`$$DROP PROCEDURE IF EXISTS `createdownloadedplanDone`$$CREATE DEFINER=`root`@`%` PROCEDURE `createdownloadedplanDone`(dateIN  VARCHAR(50),  dateStopIN  VARCHAR(50),  pastureidIN BIGINT (20))label:BEGIN  DECLARE positionIdS,  checkResults,  amount,amount1,  providerIdA,  countId2,fttypes INT (20); DECLARE positionNameS,examineS,standardS,   noteS,lpplanids,dateTem,timesOs,issmallmaterial,isEnableRemainFeed VARCHAR (100);  DECLARE i INT(11) DEFAULT 0;  DECLARE a INT(11) DEFAULT 0;  DECLARE b INT(11) DEFAULT 0;  DECLARE msg1 TEXT;  DECLARE code1 CHAR(5) DEFAULT '00000';  DECLARE t_error INTEGER DEFAULT 0;  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION  BEGIN      -- 获取异常code,异常信息      GET DIAGNOSTICS CONDITION 1      code1 = RETURNED_SQLSTATE, msg1 = MESSAGE_TEXT;   END;  #开启事务   START TRANSACTION;       -- 刷新数据(主要是各个模块的名称保持和基础数据中一致)  CALL refreshdata(pastureidIN);    -- 删除未执行的计划,已执行的保留SELECT 1;DELETE d,d1,d2,d1e  FROM downloadedplan d LEFT JOIN `downloadplandtl1` d1 ON d1.pastureid = d.pastureid AND d1.pid = d.id LEFT JOIN `downloadplandtl2` d2 ON d2.pastureid = d.pastureid AND d2.pid = d.id LEFT JOIN `downloadplandtl1_exec` d1e ON d1e.pastureid = d.pastureid AND d1e.pid = d.id WHERE d.pastureid = pastureidIN AND d.id IN (SELECT * FROM (SELECT id FROM downloadedplan dv WHERE  dv.`pastureid` =pastureidIN AND dv.`havebutton`=0 AND dv.`mydate` = dateIN)tem);  -- 将配方、栏舍配方、撒料计划、预混计划、剩料计划复制到date历史表中	CALL createLPPdate(dateIN,pastureidIN,'');	CALL creatFTdate(dateIN,pastureidIN,'');	CALL creatFPdate(dateIN,pastureidIN,'');	CALL createPreReHis(dateIN,pastureidIN,'');	SELECT 2;	-- 读取基础数据中默认参数配置 SELECT sysopt.inforvalue INTO timesOs FROM sysopt  WHERE sysopt.`pastureid`= pastureidIN AND sysopt.`inforname`='times';  SELECT sysopt.inforvalue INTO issmallmaterial FROM sysopt  WHERE sysopt.`pastureid`= pastureidIN AND sysopt.`inforname`='isSmallMaterial';   SELECT sysopt.inforvalue INTO isEnableRemainFeed FROM sysopt  WHERE sysopt.`pastureid`= pastureidIN AND sysopt.`inforname`='isEnableRemainFeed';  ################################## 撒料计划 ### 混料与撒料是相同的tmr车	 INSERT INTO downloadedplan(pastureid,mydate,projname,datacaptureno,	tmrid,tmrtname,times,sort,remark,itemnum,outitems,pid,tempid,	templetname,lweight,lpplantype,plantime,feedpname,feedpcount,tversion)  SELECT 	lpplan.pastureid,	dateIN,	CONCAT(times,'.',	LPAD(lpplan.sort ,3,'0'),'2'	),	tmr.`datacaptureno`,	tmrid,tmrname,	lpplan.times,	lpplan.sort,	lpplan.display,	0,	0,	lpplan.id,	lpplan.`ftid`,	lpplan.`ftname`,	0,	0,#  类型	lpplan.`begintime`,	(SELECT GROUP_CONCAT(barname) FROM lpplandtl1 WHERE lpplandtl1.pastureid = pastureidIN  AND lppid= lpplan.`id` AND lpplandtl1.`tmrid`=lpplan.`tmrid`),	(SELECT SUM(cowcount) FROM lpplandtl1 WHERE lpplandtl1.pastureid = pastureidIN  AND lppid= lpplan.`id` ),	(SELECT feedtemplet.`version` FROM `feedtemplet` WHERE feedtemplet.pastureid = lpplan.`pastureid` AND  feedtemplet.`id` =lpplan.`ftid` )	FROM `lpplan` 	LEFT JOIN tmr ON	tmr.id = lpplan.`tmrid` AND tmr.`pastureid` = lpplan.`pastureid`	WHERE  lpplan.pastureid =pastureidIN  AND lpplan.times <= timesOs AND lpplan.sel=1	AND lpplan.id NOT IN (SELECT * FROM 	(SELECT  pid FROM downloadedplan d	  WHERE d.pastureid = pastureidIN AND d.mydate = dateIN	  AND 	  (SELECT COUNT(*)FROM downloadedplan dv WHERE  dv.`pastureid` = d.pastureid AND dv.`pid` = d.pid AND dv.`havebutton`=1 AND dv.`mydate` = d.`mydate`) > 0 	)tem 	GROUP BY pid)	AND (SELECT SUM(lweight) FROM `lpplandtl1`INNER JOIN `fpdetail` fd			ON fd.`id` = lpplandtl1.fpdid AND fd.pastureid = lpplandtl1.pastureidWHERE lpplandtl1.`pastureid` = lpplan.`pastureid` AND lpplandtl1.`lppid` = lpplan.`id`) >0	ORDER BY lpplan.`sort`;	     ### 混料与撒料是不同车(不同的车要生成两个主计划)  	  INSERT INTO downloadedplan(pastureid,mydate,projname,datacaptureno,	tmrid,tmrtname,times,sort,remark,itemnum,outitems,pid,tempid,	templetname,lweight,lpplantype,plantime,feedpname,feedpcount,tversion,oldtmrid)  SELECT 	lpplan.pastureid,	dateIN,	CONCAT(times,'.',	LPAD(lpplan.sort ,3,'0'),'3'	),	tmr.`datacaptureno`,	lpplandtl1.tmrid,	lpplandtl1.tmrname,	lpplan.times,	lpplan.sort,	lpplan.display, ###	0,	0, ###	lpplan.id,	lpplan.`ftid`,	lpplan.`ftname`,	0,	2,#  类型	lpplan.`begintime`,	(SELECT GROUP_CONCAT(barname) FROM lpplandtl1 WHERE lpplandtl1.pastureid = pastureidIN  AND lppid= lpplan.`id` AND lpplandtl1.`tmrid`<>lpplan.`tmrid` ),	(SELECT SUM(cowcount) FROM lpplandtl1 WHERE lpplandtl1.pastureid = pastureidIN  AND lppid= lpplan.`id` ),	(SELECT feedtemplet.`version` FROM `feedtemplet` WHERE feedtemplet.pastureid = lpplan.`pastureid` AND  feedtemplet.`id` =lpplan.`ftid` ),lpplandtl1.tmrid	FROM `lpplan` 	JOIN `lpplandtl1` ON lpplandtl1.`pastureid` = lpplan.`pastureid` AND lpplandtl1.`lppid` = lpplan.`id` AND lpplandtl1.`tmrid` <> lpplan.`tmrid` 	LEFT JOIN tmr ON	tmr.id = lpplandtl1.`tmrid` AND tmr.`pastureid` = lpplandtl1.`pastureid`	WHERE  lpplan.pastureid =pastureidIN  AND lpplan.times <= timesOs AND lpplan.sel=1	AND lpplandtl1.`lweight`> 0		AND  (SELECT COUNT(*)FROM downloadedplan dv WHERE  dv.`pastureid` = lpplan.pastureid AND dv.`pid` = lpplan.id AND dv.`havebutton`=1 AND dv.`mydate` = dateIN   AND dv.oldtmrid = lpplandtl1.tmrid) <1 	GROUP BY lpplan.id,tmr.`id`,lpplandtl1.tmrid  ORDER BY lpplan.`sort`,lpplandtl1.`sort`;	   # 生成日执行子表1 INSERT INTO downloadplandtl1(pastureid,pid,flpid,fid,lweight,sort,feedcode,fname,	feedallowratio,stirdelay,fweight,tmrloadname,`date`,dryfeed,pricefeed,optdevice) SELECT 	lpplandtl1.pastureid,	(SELECT id FROM downloadedplan d WHERE d.pastureid = lpplandtl1.`pastureid` AND d.pid = lpplan.`id` AND d.mydate =dateIN AND lpplantype = 0  LIMIT 1),	lpplandtl1.`lppid`,	ftd.fid,	ROUND(IF((SELECT sysopt.inforvalue FROM sysopt WHERE sysopt.`pastureid`= pastureidIN AND sysopt.`inforname`='isLockCount')=0,	ftd.fweight/(SELECT SUM(fweight) FROM ftdetail WHERE ftid =ft.id AND pastureid=ft.pastureid )*lpplandtl1.`lweight`,  ##未启用锁定牛头数	IF(ftd.islockcount=0,	((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =ft.id AND ftdetail.pastureid=ft.pastureid AND ftdetail.`islockcount`=0 )	/	(SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =ft.id AND ftdetail.pastureid=ft.pastureid )	*lpplandtl1.`lweight` *	ftd.fweight/	(SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =ft.id AND ftdetail.pastureid=ft.pastureid AND ftdetail.`islockcount`=0 )),	((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =ft.id AND ftdetail.pastureid=ft.pastureid AND ftdetail.`islockcount`=1 )	/	(SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =ft.id AND ftdetail.pastureid=ft.pastureid )	*lpplandtl1.`lweight` *	ftd.fweight/	(SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =ft.id AND ftdetail.pastureid=ft.pastureid AND ftdetail.`islockcount`=1 ))	)	),2), -- 重量通过撒料计划中的重量,然后找到对应的配方,将配方的各个饲料按比例拆分(并且要先考虑是否锁定牛头数)	(SELECT COUNT(*)+1 FROM ftdetail WHERE ftdetail.`pastureid` = lpplandtl1.`pastureid` AND ftdetail.`ftid` = ft.`id` AND ftdetail.sort <ftd.sort),	IF(ftd.preftid=0,CONCAT(f.feedcode," "),'-1'),	IFNULL(f.fname,ftd.fname),	f.allowratio,	ftd.autosecond,	ftd.fweight,	ftd.feedgroup,	dateIN,	fu.dry,	f.uprice,	lpplan.`tmrid`	FROM `lpplandtl1` 	INNER JOIN lpplan	ON lpplan.`id` = lpplandtl1.`lppid` AND lpplan.`pastureid` = lpplandtl1.`pastureid`	LEFT JOIN `fpdetail` fd	  ON fd.`id` = lpplandtl1.fpdid AND fd.pastureid = pastureidIN	  INNER JOIN feedtemplet ft	  ON IF (lpplandtl1.`fttype`=1,fd.`ptid` = ft.id,fd.`ptsid` = ft.id )  AND ft.pastureid = pastureidIN	  LEFT JOIN ftdetail ftd	  ON ftd.`ftid` = ft.`id`  AND ftd.pastureid = pastureidIN	   LEFT JOIN feed f	  ON ftd.`fid` = f.`id` AND f.pastureid = pastureidIN	  LEFT JOIN feednur fu	  ON fu.fid=f.id	  WHERE lpplandtl1.pastureid = pastureidIN  AND lpplan.times <= timesOs AND lpplan.sel=1 AND lpplandtl1.`lweight` > 0 	  AND		(SELECT id FROM downloadedplan d WHERE d.pastureid = lpplandtl1.`pastureid` AND d.pid = lpplan.`id` AND d.mydate =dateIN AND lpplantype = 0 LIMIT 1) IS NOT NULL-- 			AND  (SELECT COUNT(*)FROM downloadedplan dv WHERE  dv.`pastureid` = lpplan.pastureid AND dv.`pid` = lpplan.id AND dv.`havebutton`=1 AND dv.`mydate` = dateIN) <2 			AND 	(SELECT COUNT(1) FROM downloadedplan d WHERE d.pastureid = lpplandtl1.`pastureid` AND d.pid = lpplan.`id` AND d.mydate =dateIN AND lpplantype = 0 AND d.havebutton = 1 LIMIT 1)  =0		  	  ON DUPLICATE KEY UPDATE downloadplandtl1.lweight = IFNULL(ROUND(downloadplandtl1.lweight+ftd.fweight/(SELECT SUM(fweight) FROM ftdetail WHERE ftid =ft.id AND pastureid=ft.pastureid )*lpplandtl1.`lweight`,2),0)	  ;	  				 INSERT INTO downloadplandtl1(pastureid,pid,flpid,fid,lweight,sort,feedcode,fname,	feedallowratio,stirdelay,fweight,tmrloadname,`date`,dryfeed,pricefeed,optdevice,TYPE) SELECT 	lpplandtl1.pastureid,	(SELECT id FROM downloadedplan d WHERE d.pastureid = lpplandtl1.`pastureid` AND d.pid = lpplan.`id` AND d.mydate =dateIN AND lpplantype = 2  AND d.oldtmrid = lpplandtl1.tmrid LIMIT 1),	lpplandtl1.`lppid`,	lpplan.`tmrid`,	SUM(lpplandtl1.`lweight`),	1,	'',	lpplan.`tmrname`,	0,	0,	0,	lpplandtl1.`tmrname`,	dateIN,	0,	0,	lpplandtl1.`tmrid`,	1	FROM `lpplandtl1` 	INNER JOIN lpplan	ON lpplan.`id` = lpplandtl1.`lppid` AND lpplan.`pastureid` = lpplandtl1.`pastureid`	  WHERE lpplandtl1.pastureid = pastureidIN  AND lpplan.times <= timesOs  AND lpplandtl1.`lweight` > 0 	  	AND lpplan.sel=1 AND lpplandtl1.`tmrid` <> lpplan.`tmrid` AND (SELECT id FROM downloadedplan d WHERE d.pastureid = lpplandtl1.`pastureid` AND d.pid = lpplan.`id` AND d.mydate =dateIN AND lpplantype = 2 AND d.`tmrid` =lpplandtl1.`tmrid` LIMIT 1) IS NOT NULL	-- 		AND  (SELECT COUNT(*)FROM downloadedplan dv WHERE  dv.`pastureid` = lpplan.pastureid AND dv.`pid` = lpplan.id AND dv.`havebutton`=1 AND dv.`mydate` = dateIN) <2 				AND 	(SELECT COUNT(1) FROM downloadedplan d WHERE d.pastureid = lpplandtl1.`pastureid` AND d.pid = lpplan.`id` AND d.mydate =dateIN AND lpplantype = 2  AND d.havebutton = 1 AND d.oldtmrid = lpplandtl1.tmrid LIMIT 1)  =0			 GROUP BY lpplan.id,lpplandtl1.`tmrid`;   	      # 日执行子表2   SELECT COUNT(lpplan.id)INTO amount1 FROM `lpplan` WHERE pastureid=pastureidIN AND lpplan.times <= timesOs AND lpplan.sel=1-- 	AND  (SELECT COUNT(*)FROM downloadedplan dv WHERE  dv.`pastureid` = lpplan.pastureid AND dv.`pid` = lpplan.id AND dv.`havebutton`=1 AND dv.`mydate` = dateIN) <2 ;     WHILE amount1>0 DO     SELECT amount1-1 INTO amount1;          SELECT lpplan.id INTO lpplanids FROM `lpplan` WHERE pastureid=pastureidIN AND lpplan.times <= timesOs AND lpplan.sel=1-- 		 	AND  (SELECT COUNT(*)FROM downloadedplan dv WHERE  dv.`pastureid` = lpplan.pastureid AND dv.`pid` = lpplan.id AND dv.`havebutton`=1 AND dv.`mydate` = dateIN) <2 				ORDER BY id DESC LIMIT 1 OFFSET amount1;		  SELECT COUNT(lpplandtl1.id)INTO amount FROM `lpplandtl1`   INNER JOIN `fpdetail` fd  ON fd.`id` = lpplandtl1.fpdid AND fd.pastureid = pastureidIN  INNER JOIN feedtemplet ft  ON IF(lpplandtl1.`fttype`=1,fd.`ptid` = ft.id,fd.`ptsid` = ft.id )  AND ft.pastureid = pastureidIN  WHERE lpplandtl1.pastureid  = pastureidIN   AND lpplandtl1.lppid=lpplanids ;  SELECT 0,0 INTO a,b;  WHILE amount>0 DO	SELECT amount-1 INTO amount;		SELECT lpplandtl1.`fttype` INTO  fttypes FROM `lpplandtl1` 		WHERE lpplandtl1.pastureid  = pastureidIN AND lpplandtl1.lppid=lpplanids	ORDER BY lpplandtl1.sort DESC LIMIT 1 OFFSET amount;	IF (fttypes = 0)	THEN 	SELECT b+1 INTO b;	END IF;	IF (fttypes= 1)	THEN 	SELECT a+1 INTO a;	END IF;		INSERT INTO downloadplandtl2		(pastureid,pid,fbarid,fname,lweight,sort,flpid,		feedtempletid,feedtempletname,fpid,`date`,allowratio,optdevice)	SELECT lpplandtl1.`pastureid`,(SELECT id FROM downloadedplan d WHERE d.pastureid = lpplandtl1.`pastureid` AND d.pid = lpplandtl1.`lppid` AND d.mydate =dateIN AND lpplantype = IF(lpplandtl1.`tmrid`=lpplan.`tmrid`,0,2)AND lpplandtl1.`tmrid`=d.`oldtmrid`),		lpplandtl1.barid,lpplandtl1.`barname`,lpplandtl1.lweight,		IF(lpplandtl1.`fttype`=1,a+100,b+150),		lpplandtl1.`lppid`,ft.id ftid,ft.`tname`,		lpplandtl1.`fpdid`,dateIN,		(SELECT allowratio FROM bar WHERE bar.`pastureid` =lpplandtl1.`pastureid` AND bar.id = lpplandtl1.`barid` LIMIT 1),		lpplandtl1.`tmrid`		FROM `lpplandtl1` 		INNER JOIN lpplan ON		lpplandtl1.`pastureid` = lpplan.`pastureid` AND lpplandtl1.`lppid` = lpplan.id		INNER JOIN `fpdetail` fd			ON fd.`id` = lpplandtl1.fpdid AND fd.pastureid = pastureidIN		INNER JOIN feedtemplet ft			ON IF(lpplandtl1.`fttype`=1,fd.`ptid` = ft.id,fd.`ptsid` = ft.id )  AND ft.pastureid = pastureidIN	WHERE lpplandtl1.pastureid  = pastureidIN AND lpplandtl1.lppid=lpplanids AND lpplandtl1.`lweight`>0			AND (SELECT havebutton FROM downloadedplan d WHERE d.pastureid = lpplandtl1.`pastureid` AND d.pid = lpplandtl1.`lppid` AND d.mydate =dateIN AND lpplantype = IF(lpplandtl1.`tmrid`=lpplan.`tmrid`,0,2)  AND d.oldtmrid = lpplandtl1.tmrid)  != 1 	AND (SELECT id FROM downloadedplan d WHERE d.pastureid = lpplandtl1.`pastureid` AND d.pid = lpplandtl1.`lppid` AND d.mydate =dateIN AND lpplantype = IF(lpplandtl1.`tmrid`=lpplan.`tmrid`,0,2)AND lpplandtl1.`tmrid`=d.`oldtmrid`) IS NOT NULL	ORDER BY lpplandtl1.sort DESC LIMIT 1 OFFSET amount;		INSERT INTO downloadplandtl2		(pastureid,pid,fbarid,fname,lweight,sort,flpid,		 feedtempletid,feedtempletname,fpid,`date`,allowratio,optdevice,`type`)	SELECT  lpplandtl1.`pastureid`,(SELECT id FROM downloadedplan d WHERE d.pastureid = lpplandtl1.`pastureid` AND d.pid = lpplandtl1.`lppid` AND d.mydate =dateIN AND lpplantype = 0),		lpplandtl1.`tmrid`,lpplandtl1.`tmrname`,SUM(lpplandtl1.lweight),		IF(lpplandtl1.`fttype`=1,a+100,b+150),		lpplandtl1.`lppid`,ft.id ftid,ft.`tname`,		lpplandtl1.`fpdid`,dateIN,		(SELECT allowratio FROM bar WHERE bar.`pastureid` =lpplandtl1.`pastureid` AND bar.id = lpplandtl1.`barid` LIMIT 1),		lpplan.`tmrid`,		1		FROM `lpplandtl1` 		INNER JOIN lpplan ON		lpplandtl1.`pastureid` = lpplan.`pastureid` AND lpplandtl1.`lppid` = lpplan.id		INNER JOIN `fpdetail` fd			ON fd.`id` = lpplandtl1.fpdid AND fd.pastureid = pastureidIN		INNER JOIN feedtemplet ft			ON IF(lpplandtl1.`fttype`=1,fd.`ptid` = ft.id,fd.`ptsid` = ft.id )  AND ft.pastureid = pastureidIN	WHERE lpplandtl1.pastureid  = pastureidIN AND lpplandtl1.lppid=lpplanids AND lpplandtl1.`tmrid` <> lpplan.`tmrid` AND lpplandtl1.`lweight`>0			AND (SELECT havebutton FROM downloadedplan d WHERE d.pastureid = lpplandtl1.`pastureid` AND d.pid = lpplandtl1.`lppid` AND d.mydate =dateIN AND lpplantype = IF(lpplandtl1.`tmrid`=lpplan.`tmrid`,0,2)AND lpplandtl1.`tmrid`=d.`tmrid`)  != 1 			AND (SELECT id FROM downloadedplan d WHERE d.pastureid = lpplandtl1.`pastureid` AND d.pid = lpplandtl1.`lppid` AND d.mydate =dateIN AND lpplantype = 0) IS NOT NULL 	GROUP BY lpplan.`id`,lpplandtl1.`tmrid`	ORDER BY lpplandtl1.sort DESC LIMIT 1 OFFSET amount;         	END WHILE;                     END WHILE;    IF issmallmaterial = '1'  # 是否开启小料 THEN ## 开启小料后,会在原来的基础上再生成一个主计划	CALL createsmallmaterialplan(dateIN,timesOs,pastureidIN); END IF ; -- 设置为撒料-混料 UPDATE `downloadedplan` d SET d.`lpplantype` = 1  WHERE d.pastureid = pastureidIN AND  (SELECT COUNT(*) FROM `downloadplandtl2` d2 WHERE d2.pastureid = d.pastureid AND d2.pid = d.id AND d2.`type` = 1 ) > 0   AND d.lpplantype = 0 AND d.mydate = dateIN ;  SELECT dateIN INTO dateTem;  INSERT INTO downloadedplan(pastureid,mydate,projname,datacaptureno,	tmrid,tmrtname,times,sort,remark,itemnum,outitems,pid,tempid,	templetname,lweight,lpplantype,plantime,feedpname,feedpcount,tversion)  SELECT 	 premixplan.pastureid,dateIN,		IF(premixplan.lppcode IS NULL, CONCAT(times,'.0000'),		CONCAT(times,'.',		LPAD(SUBSTRING_INDEX( premixplan.lppcode, ' ',1 ),3,'0'),'01',LPAD(premixplan.sort,3,'0')		)	  ),	 tmr.`datacaptureno`,	 tmrid,tmrcode,	 premixplan.times,	 premixplan.sort,	 '预混计划',	 ###	 ( SELECT COUNT(*) FROM	  ftdetail ftd	   WHERE ftd.`ftid` = premixplan.`ftid` AND ftd.`pastureid`=premixplan.pastureid),	 0 ,	 ###	 premixplan.id,	 premixplan.`ftid`,	 premixplan.`ftname`,	 premixplan.`operateweight`,	 4,	 premixplan.`ptime`,	 '',	 0,	 (SELECT feedtemplet.`version` FROM `feedtemplet` WHERE feedtemplet.pastureid = premixplan.`pastureid` AND  feedtemplet.`id` =premixplan.`ftid` ) FROM `premixplan`  INNER JOIN tmr ON tmr.pastureid = premixplan.`pastureid` AND tmr.id = premixplan.`tmrid`  WHERE  premixplan.pastureid =pastureidIN  AND premixplan.times <= timesOs AND premixplan.enable=1 AND premixplan.id NOT IN (SELECT * FROM 	(SELECT  pid FROM downloadedplan d	  WHERE d.pastureid = pastureidIN AND d.mydate = dateIN	  AND 	  (SELECT COUNT(*)FROM downloadedplan dv WHERE  dv.`pastureid` = d.pastureid AND dv.`pid` = d.pid AND dv.`havebutton`=1 AND dv.`mydate` = d.`mydate`) > 0 					)tem 	GROUP BY pid) ;  INSERT INTO downloadplandtl1(pastureid,pid,flpid,fid,lweight,sort,feedcode,fname,  feedallowratio,stirdelay,fweight,tmrloadname,`date`,dryfeed,pricefeed,optdevice)SELECT 	premixplan.pastureid,	(SELECT id FROM downloadedplan d WHERE d.pastureid = premixplan.`pastureid` AND d.pid = premixplan.`id` AND d.mydate =dateIN AND lpplantype = 4 ),	premixplan.`id`,	ftd.fid,	ftd.fweight/(SELECT SUM(fweight) FROM ftdetail WHERE ftid =ft.id AND pastureid=ft.pastureid )*premixplan.`operateweight`,	ftd.sort,	f.feedcode,	IFNULL(f.fname,ftd.fname),	f.allowratio,	ftd.autosecond,	ftd.fweight,	ftd.feedgroup,	dateIN,	fu.dry,	f.uprice,	premixplan.`tmrid`FROM `premixplan`   INNER JOIN feedtemplet ft  ON premixplan.`ftid` =ft.id AND ft.pastureid = premixplan.pastureid  LEFT JOIN ftdetail ftd  ON ftd.`ftid` = ft.`id`  AND ftd.pastureid = premixplan.pastureid   LEFT JOIN feed f  ON ftd.`fid` = f.`id` AND f.pastureid = premixplan.pastureid  LEFT JOIN feednur fu  ON fu.fid=f.id AND fu.pastureid= premixplan.pastureid  WHERE premixplan.pastureid = pastureidIN  AND premixplan.times <= timesOs AND premixplan.enable=1 AND   (SELECT COUNT(1) FROM downloadedplan d WHERE d.pastureid = premixplan.`pastureid` AND d.pid = premixplan.`id` AND d.mydate =dateIN AND lpplantype = 4 AND d.havebutton = 1 ) =0;   -- 预混计划一次生成之后会都禁用掉  UPDATE premixplan SET `enable` = 0 WHERE  premixplan.pastureid =pastureidIN  AND premixplan.enable=1 AND premixplan.id NOT IN (SELECT * FROM 	(SELECT  pid FROM downloadedplan d	  WHERE d.pastureid = pastureidIN AND d.mydate = dateIN	  AND 	  (SELECT COUNT(*)FROM downloadedplan dv WHERE  dv.`pastureid` = d.pastureid AND dv.`pid` = d.pid AND dv.`havebutton`=1 AND dv.`mydate` = d.`mydate`) > 0 	)tem 	GROUP BY pid);  	       #################剩料计划 IF isEnableRemainFeed = '1'  # 是否开启剩料 THEN    -- 日执行主表	  INSERT INTO downloadedplan(pastureid,mydate,projname,datacaptureno,	 tmrid,tmrtname,times,sort,remark,itemnum,outitems,pid,tempid,	 templetname,lweight,lpplantype,plantime,feedpname,feedpcount)	 	 SELECT 		remainplan.pastureid,		dateIN,		IF(remainplan.lppcode IS NULL, CONCAT(times,'.0001'),			CONCAT(times,'.',			LPAD(SUBSTRING_INDEX( remainplan.lppcode, ' ',1 ),3,'0'),'31',LPAD(remainplan.sort,3,'0')			)		  ),				 tmr.`datacaptureno`,		 tmrid,tmrcode,		 remainplan.times,		 remainplan.sort,		 '剩料计划',		 0,		 1,		 remainplan.id,		 NULL,		 '',		 0,		 3,		 remainplan.`rtime`,		 bar,		 IFNULL((SELECT cowsum FROM barmilk WHERE barmilk.pastureid = remainplan.`pastureid`  AND barmilk.`barid`= remainplan.`barid`		  ORDER BY barmilk.productdate DESC LIMIT 1		  ),0)		  		FROM `remainplan` 		INNER JOIN tmr ON		tmr.pastureid = remainplan.`pastureid` AND tmr.id = remainplan.`tmrid` 		WHERE  remainplan.pastureid =pastureidIN  AND remainplan.times <= timesOs AND remainplan.enable=1		AND remainplan.id NOT IN (SELECT * FROM 		(SELECT  pid FROM downloadedplan d		  WHERE d.pastureid = pastureidIN AND d.mydate = dateIN		  AND 		  (SELECT COUNT(*)FROM downloadedplan dv WHERE  dv.`pastureid` = d.pastureid AND dv.`pid` = d.pid AND dv.`havebutton`=1 AND dv.`mydate` = d.`mydate`) > 0 					)tem 		GROUP BY pid);   -- 日执行子表2(剩料只有子表2)	       INSERT INTO downloadplandtl2(pastureid,pid,fbarid,fname,lweight,sort,flpid,useinbartype,fpid,`date`,allowratio,optdevice)		SELECT remainplan.`pastureid`,		(SELECT id FROM downloadedplan d WHERE d.pastureid = remainplan.`pastureid` AND d.pid = remainplan.`id` AND d.mydate =dateIN AND lpplantype = 3),		 rpd.barid,		 rpd.`bar`,0,		 rpd.sort,remainplan.`id`,		 IF(treatmethod='继续饲喂',2, rpd.type),		 remainplan.`id`,dateIN,		 (SELECT allowratio FROM bar WHERE bar.`pastureid` =remainplan.`pastureid` AND bar.id = rpd.`barid` LIMIT 1),		 remainplan.`tmrid`		FROM `remainplan`		INNER JOIN rpdetail  rpd		ON rpd.pastureid =remainplan.pastureid  AND rpd.bigid = remainplan.id		WHERE remainplan.pastureid  = pastureidIN  		AND remainplan.times <= timesOs AND remainplan.enable=1		AND remainplan.id NOT IN (SELECT * FROM 		(SELECT  pid FROM downloadedplan d		  WHERE d.pastureid = pastureidIN AND d.mydate = dateIN		  AND 		  (SELECT COUNT(*)FROM downloadedplan dv WHERE  dv.`pastureid` = d.pastureid AND dv.`pid` = d.pid AND dv.`havebutton`=1 AND dv.`mydate` = d.`mydate`) > 0 		)tem 		GROUP BY pid);  END IF ;    ############################################################################################################################################          UPDATE downloadplandtl2   SET lweighthis = lweight,  cowclassname = (SELECT `cowclass` FROM `barmilk` WHERE pastureid = downloadplandtl2.`pastureid` AND `barid` = downloadplandtl2.`fbarid` ORDER BY `productdate` DESC LIMIT 1 ),  cowclassid = (SELECT `cowclassid` FROM `barmilk` WHERE pastureid = downloadplandtl2.`pastureid` AND `barid` = downloadplandtl2.`fbarid`  ORDER BY `productdate` DESC LIMIT 1)  WHERE pastureid = pastureidIN AND DATE = dateIN;	 SELECT 5;    -- 将子表1更新到 1eINSERT INTO downloadplandtl1_exec (id,pastureid,pid,flpid,lweight,optdevice,sort,fname,fcount,tmrloadname,feedallowratio,stirdelay,DATE,TYPE)SELECT   d1.id, d1.pastureid, d1.pid, d1.flpid,SUM( d1.lweight), d1.optdevice, d1.sort,GROUP_CONCAT( d1.fname),COUNT( d1.fname), d1.tmrloadname, d1.feedallowratio, d1.stirdelay, d1.DATE, d1.TYPE  FROM downloadplandtl1 d1	 	JOIN downloadedplan  d ON d.id =  d1.pid   WHERE d1.`pastureid`= pastureidIN AND d1.date =dateIN  AND d.havebutton = 0	GROUP BY d1.pid,d1.sort	 ORDER BY d1.sort; 	      -- 重新将计划编号生成CALL updatedownloadprojname(pastureidIN,dateIN); #  	UPDATE downloadedplan SET itemnum = (SELECT COUNT(*) FROM `downloadplandtl1` WHERE pastureid = downloadedplan.`pastureid` AND pid =downloadedplan.`id`),outitems = (SELECT COUNT(*) FROM `downloadplandtl2` WHERE pastureid = downloadedplan.`pastureid` AND pid =downloadedplan.`id`),lweight =IFNULL(IFNULL((SELECT SUM(lweight) FROM `downloadplandtl2` WHERE pastureid = downloadedplan.`pastureid` AND pid =downloadedplan.`id`),(SELECT SUM(lweight) FROM `downloadplandtl1` WHERE pastureid = downloadedplan.`pastureid` AND pid =downloadedplan.`id`)),0)WHERE pastureid = pastureidIN AND mydate = dateIN;      IF code1 = '00000' THEN    COMMIT;   SELECT    'success' msg;  ELSE     ROLLBACK;   SELECT    msg1 msg;  END IF;  END$$DELIMITER ;
 |