zthwr 1 год назад
Родитель
Сommit
a54b401d8e

+ 7 - 4
mm/mm/src/client/u8c/ui/mm/action/MRPDialogdura.java

@@ -192,15 +192,18 @@ public class MRPDialogdura extends UIDialog implements ActionListener {
 		try {
 			String butype = getBillSclPan().getHeadItem("butype").getValue();//业务类型
 			String xcname = getBillSclPan().getHeadItem("xmname").getValue();//项目名称
-			if (butype != null && !"".equals(butype) && xcname != null
-							&& !"".equals(xcname)) {
-				
-				
+			if (butype != null && !"".equals(butype)) {
+				if(butype.equals("工装") && (xcname == null
+						||  "".equals(xcname))) {
+					MessageDialog.showHintDlg(this, "提示", "请输入项目!");	
+					return;
+				}
 				ret_pub = butype;
 				ret_pubn_b =xcname;
 				setResult(UIDialog.ID_OK);
 				dg_iscancel=Boolean.TRUE;
 				destroy();
+				
 			} else {
 				MessageDialog.showHintDlg(this, "提示", "请输入完整!");
 			}

+ 252 - 0
mm/mm/src/client/u8c/ui/mm/action/PushParybillAction.java

@@ -0,0 +1,252 @@
+package u8c.ui.mm.action;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import nc.bs.framework.common.NCLocator;
+import nc.hr.utils.PubEnv;
+import nc.itf.uap.IUAPQueryBS;
+import nc.itf.uap.IVOPersistence;
+import nc.itf.uap.pf.IplatFormEntry;
+import nc.jdbc.framework.processor.ColumnProcessor;
+import nc.ui.hr.frame.FrameUI;
+import nc.ui.hr.frame.action.AbstractAction;
+import nc.ui.hr.frame.impl.MainBillMgrPanel;
+import nc.ui.pub.ClientEnvironment;
+import nc.ui.pub.beans.MessageDialog;
+import nc.vo.OperationMainVO;
+import nc.vo.OperationPurchaseVO;
+import nc.vo.hr.tools.pub.HRAggVO;
+import nc.vo.pr.pray.PraybillHeaderVO;
+import nc.vo.pr.pray.PraybillItemVO;
+import nc.vo.pr.pray.PraybillVO;
+import nc.vo.pub.BusinessException;
+import nc.vo.pub.CircularlyAccessibleValueObject;
+import nc.vo.pub.ValidationException;
+import nc.vo.pub.lang.UFDate;
+import nc.vo.pub.lang.UFDouble;
+import u8c.ui.mm.panel.OperationMainPanel;
+import u8c.ui.mm.panel.OperationTestUI;
+
+public class PushParybillAction extends AbstractAction {
+
+	private IUAPQueryBS iuap=(IUAPQueryBS) NCLocator.getInstance().lookup(IUAPQueryBS.class.getName());
+	OperationTestUI frameUI = null;
+	public PushParybillAction(FrameUI frameUI) {
+		super(frameUI);
+		this.frameUI = (OperationTestUI) frameUI;
+	}
+
+	@Override
+	public void execute() throws Exception {
+		MainBillMgrPanel mainMgrPanel = (MainBillMgrPanel) getMainPanel();
+		int selectedRow = ((OperationMainPanel) getMainPanel()).getSelectedRow();
+		HRAggVO s = (HRAggVO) mainMgrPanel.getMainBillCardPanel().getData();
+
+		if (null != s ) {
+			OperationMainVO headvo = (OperationMainVO) s.getParentVO();
+			int billstatus = headvo.getBillstatus();
+			if (billstatus != 1) {
+				throw new ValidationException("非审批态单据不允许生成请购单!");
+			}
+//			ToParyBillDialog toParyBillDialog = new ToParyBillDialog(s);
+//			toParyBillDialog.show();
+			//生成请购单
+			OperationPurchaseVO[]  operationpurs=getPurArrays(s);
+			if(null==operationpurs || operationpurs.length==0) {
+				throw new ValidationException("没有需要生成的请购单!");
+			}else {
+				
+				IplatFormEntry iIplatFormEntry = (IplatFormEntry)NCLocator.getInstance().lookup(IplatFormEntry.class.getName());
+				
+				List<PraybillVO> getaggvos =getaggvos(operationpurs,headvo);
+				if(null!=getaggvos && getaggvos.size()>0) {
+					for(PraybillVO vo:getaggvos) {
+						   iIplatFormEntry.processAction("SAVEBASE", "20", vo.getHeadVO().getDpraydate().toString(), null, vo, null, null);	
+						 //  iIplatFormEntry.processAction("APPROVE", "20", vo.getHeadVO().getDpraydate().toString(), null, vo, null, null);
+						}
+						
+					
+					MessageDialog.showHintDlg(frameUI, "成功", "请购单新增成功!");
+				}else {
+					
+					MessageDialog.showHintDlg(frameUI, "提示", "请购单没有数据!");
+					
+				}
+				
+				
+			}
+		}
+	}
+	
+	
+	// 根据传入的aggvo获取purvo数组
+	private OperationPurchaseVO[] getPurArrays(HRAggVO aggvo) {
+		CircularlyAccessibleValueObject[] vos = aggvo.getAllChildrenVO();
+		List<OperationPurchaseVO> purvos = new ArrayList<OperationPurchaseVO>();
+		for (CircularlyAccessibleValueObject vo : vos) {
+			if (vo instanceof OperationPurchaseVO) {
+				OperationPurchaseVO purvo = (OperationPurchaseVO) vo;
+				purvos.add(purvo);
+			}
+		}
+		OperationPurchaseVO[] purArrays = purvos.toArray(new OperationPurchaseVO[0]);
+		return purArrays;
+	}
+	
+	
+	
+	private  List<PraybillVO> getaggvos(OperationPurchaseVO[] opervos,OperationMainVO headvo) throws Exception{
+		Map<String,List<OperationPurchaseVO>> map=new HashMap<String,List<OperationPurchaseVO>>();//key 材料采购单主表主键
+		for(int i=0;i<opervos.length;i++) {
+			OperationPurchaseVO cagvo=opervos[i];
+			List<OperationPurchaseVO> vos=map.get(cagvo.getVdef29());
+			if(null!=vos && vos.size() >0 ) {
+				vos.add(cagvo);
+				map.put(cagvo.getVdef29(), vos);
+			}else {
+				List<OperationPurchaseVO> vosnew=new ArrayList<OperationPurchaseVO>();
+				vosnew.add(cagvo);
+				map.put(cagvo.getVdef29(), vosnew);
+			}
+		}
+		
+		 List<PraybillVO> aggvos=new ArrayList<PraybillVO>();
+		 for (Map.Entry<String,List<OperationPurchaseVO>> entry : map.entrySet()) {
+			    PraybillVO aggvo = new PraybillVO();
+				PraybillHeaderVO header = new PraybillHeaderVO();
+				header.setPk_corp(PubEnv.getCorpCode());// 公司
+				header.setCoperator(ClientEnvironment.getInstance().getUser().getPrimaryKey());// 制单人
+				header.setDpraydate(new UFDate(ClientEnvironment.getInstance().getBusinessDate().toString()));// 请购日期-->制单日期
+				header.setIbillstatus(0);// 单据状态
+//				header.setCpraypsn("1001V510000000000292");//请购人id-->业务员
+//				header.setCdeptid("1001V510000000000276");//请购部门id-->计划部门
+				header.setVmemo("MRP运算清单");// 备注
+				header.setDr(0);
+				header.setCaccountyear(String.valueOf(new UFDate().getYear()));// 年份
+				header.setIpraysource(5);// 请购来源
+				header.setIpraytype(2);// 请购类型 
+				//项目编码 pk_defdoc9
+				header.setAttributeValue("pk_defdoc9", headvo.getProjectid());
+				//项目名称pk_defdoc10
+				header.setAttributeValue("pk_defdoc10", headvo.getProjectid());
+				//加工单号pk_defdoc2
+				header.setAttributeValue("pk_defdoc2", entry.getKey());
+				
+				List<OperationPurchaseVO> lispurvos=entry.getValue();
+				PraybillItemVO[] items = new PraybillItemVO[lispurvos.size()];
+				for(int j=0;j<lispurvos.size();j++) {
+					OperationPurchaseVO zbvo=lispurvos.get(j);
+					PraybillItemVO praybillItemVO = new PraybillItemVO();
+					praybillItemVO.setPk_corp(PubEnv.getCorpCode()); // 公司
+					praybillItemVO.setPk_purcorp (PubEnv.getCorpCode());//采购公司
+
+					// 表体赋值
+					praybillItemVO.setCmangid(getCmangchid(getCmangid(zbvo.getCmaterialcode()))); //存货编码
+					praybillItemVO.setCbaseid(getCmangid(zbvo.getCmaterialcode())); //存货基础ID 
+					praybillItemVO.setNpraynum(new UFDouble(zbvo.getNum())); //数量
+					String cprojectid = headvo.getProjectid();//项目id
+					praybillItemVO.setCprojectid(cprojectid);
+//					praybillItemVO.setCassistunit(demandBVO.getCastunitid());//辅助计量单位
+//					praybillItemVO.setNassistnum(new UFDouble(demandBVO.getNastnum()));//辅计量数量
+//					praybillItemVO.setVproducenum(cgdd.getVbatchcode());//批次号
+					praybillItemVO.setDdemanddate(new UFDate(ClientEnvironment.getInstance().getBusinessDate().toString()));
+					praybillItemVO.setDsuggestdate(new UFDate(ClientEnvironment.getInstance().getBusinessDate().toString()));
+//					praybillItemVO.setPk_purcorp(PubEnv.getCorpCode());
+					praybillItemVO.setPk_reqcorp(PubEnv.getCorpCode());
+					praybillItemVO.setAttributeValue("pk_defdoc1",zbvo.getVdef1() );//楼号楼层
+					praybillItemVO.setAttributeValue("pk_defdoc2", zbvo.getVdef2());//樘数(数量)
+					praybillItemVO.setAttributeValue("pk_defdoc3", zbvo.getVdef3());//框统计
+					praybillItemVO.setAttributeValue("pk_defdoc4", zbvo.getVdef4());//扇统计
+					praybillItemVO.setAttributeValue("pk_defdoc5", zbvo.getVdef5());//半成品分类
+					praybillItemVO.setAttributeValue("pk_defdoc6", zbvo.getVdef6());//面积
+					praybillItemVO.setAttributeValue("pk_defdoc7", zbvo.getVdef7());//切割长度
+					praybillItemVO.setAttributeValue("pk_defdoc8", zbvo.getVdef8());//切割角度左下
+					praybillItemVO.setAttributeValue("pk_defdoc9", zbvo.getVdef9());//切割角度右上
+					praybillItemVO.setAttributeValue("pk_defdoc10",zbvo.getVdef10());//备注
+					praybillItemVO.setAttributeValue("pk_defdoc11",zbvo.getWidth());//宽度
+					praybillItemVO.setAttributeValue("pk_defdoc12",zbvo.getHeight());//高度
+					praybillItemVO.setAttributeValue("pk_defdoc13",zbvo.getVdef11());//系列
+					praybillItemVO.setAttributeValue("pk_defdoc14",zbvo.getVdef12());//玻璃编号
+					
+					praybillItemVO.setCassistunit(getMeasidByNames(zbvo.getCastunitid()));//辅计量单位ID 
+					praybillItemVO.setNassistnum (zbvo.getNastnum());//辅计量单位ID 
+					
+					praybillItemVO.setVproducenum (zbvo.getVbatchcode());
+					praybillItemVO.setVfree1(zbvo.getColor());
+					praybillItemVO.setVfree2(zbvo.getAlloy());
+					praybillItemVO.setVfree3(zbvo.getSizing());
+					praybillItemVO.setVfree4(zbvo.getStandard());
+					
+					items[j]=praybillItemVO;
+				}
+				aggvo.setParentVO(header);
+				aggvo.setChildrenVO(items);
+				aggvos.add(aggvo);
+			 
+		    }
+		
+		  return aggvos;
+	}
+	
+	
+	 /**
+		 * 存货管理档案
+		 * @param code
+		 * @return
+		 * @throws BusinessException
+		 */
+	public String getCmangchid(String pk_invbasdoc) throws BusinessException {
+		String cmangid = null;
+		String sql = " select pk_invmandoc from bd_invmandoc" + " where pk_invbasdoc  ='" + pk_invbasdoc + "' and dr =0 ";
+		cmangid = (String) iuap.executeQuery(sql, new ColumnProcessor());
+		if (cmangid == null) {
+			throw new BusinessException("U8C物料code不存在:" + pk_invbasdoc);
+		}
+		return cmangid;
+	}
+	
+    /**
+	 * 根据物料code查询主键
+	 * @param code
+	 * @return
+	 * @throws BusinessException
+	 */
+	public String getCmangid(String code) throws BusinessException {
+		String cmangid = null;
+		String sql = " select pk_invbasdoc from bd_invbasdoc" + " where invcode  ='" + code + "' and dr =0 ";
+		cmangid = (String) iuap.executeQuery(sql, new ColumnProcessor());
+		if (cmangid == null) {
+			throw new BusinessException("U8C物料code不存在:" + code);
+		}
+		return cmangid;
+	}
+	
+	
+	
+	//根据计量单位名称获取主键
+    public  String getMeasidByNames(String measname) throws Exception {
+        String sql = "select pk_measdoc from bd_measdoc where isnull(dr,0) = 0 and measname = '"+measname+"'";
+        return (String) iuap.executeQuery(sql, new ColumnProcessor());
+    }
+	
+	
+	
+	
+	
+	
+}
+
+
+
+
+
+
+
+
+
+
+
+

+ 52 - 0
mm/mm/src/client/u8c/ui/mm/action/PushTranstorAction.java

@@ -0,0 +1,52 @@
+package u8c.ui.mm.action;
+
+import nc.ui.hr.frame.FrameUI;
+import nc.ui.hr.frame.action.AbstractAction;
+import nc.ui.hr.frame.impl.MainBillMgrPanel;
+import nc.vo.OperationMainVO;
+import nc.vo.hr.tools.pub.HRAggVO;
+import nc.vo.pub.ValidationException;
+import u8c.ui.mm.panel.OperationMainPanel;
+import u8c.ui.mm.panel.OperationTestUI;
+
+public class PushTranstorAction extends AbstractAction{
+
+	OperationTestUI frameUI = null;
+	
+	public PushTranstorAction(FrameUI frameUI) {
+		super(frameUI);
+		this.frameUI = (OperationTestUI) frameUI;
+	}
+
+	@Override
+	public void execute() throws Exception {
+
+		MainBillMgrPanel mainMgrPanel = (MainBillMgrPanel) getMainPanel();
+		int selectedRow = ((OperationMainPanel) getMainPanel()).getSelectedRow();
+		HRAggVO s = (HRAggVO) mainMgrPanel.getMainBillCardPanel().getData();
+
+		if (null != s && s != null) {
+			OperationMainVO headvo = (OperationMainVO) s.getParentVO();
+			int billstatus = headvo.getBillstatus();
+			if (billstatus != 1) {
+				throw new ValidationException("非审批态单据不允许生成转库单");
+			}
+//			ToTranStorDialog toTranStorDialog = new ToTranStorDialog(s);
+//			toTranStorDialog.show();
+		}	
+		
+		
+		//生成转库单
+		
+		
+		
+		
+		
+		
+		
+		
+		
+		
+	}
+
+}

+ 465 - 0
mm/mm/src/client/u8c/ui/mm/action/ToParyBillDialog.java

@@ -0,0 +1,465 @@
+package u8c.ui.mm.action;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.swing.BorderFactory;
+import javax.swing.JSplitPane;
+import javax.swing.border.BevelBorder;
+
+import nc.bs.framework.common.NCLocator;
+import nc.bs.pub.billcodemanage.BillcodeGenerater;
+import nc.hr.utils.PubEnv;
+import nc.itf.uap.IUAPQueryBS;
+import nc.itf.uap.pf.IplatFormEntry;
+import nc.jdbc.framework.processor.ColumnListProcessor;
+import nc.jdbc.framework.processor.ColumnProcessor;
+import nc.ui.pub.ClientEnvironment;
+import nc.ui.pub.beans.MessageDialog;
+import nc.ui.pub.beans.UIButton;
+import nc.ui.pub.beans.UIDialog;
+import nc.ui.pub.beans.UIPanel;
+import nc.ui.pub.beans.UISplitPane;
+import nc.ui.pub.bill.BillCardPanel;
+import nc.ui.pub.bill.BillEditEvent;
+import nc.ui.pub.bill.BillEditListener;
+import nc.vo.OperationMainVO;
+import nc.vo.OperationPurchaseVO;
+import nc.vo.hr.tools.pub.HRAggVO;
+import nc.vo.pr.pray.PraybillHeaderVO;
+import nc.vo.pr.pray.PraybillItemVO;
+import nc.vo.pr.pray.PraybillVO;
+import nc.vo.pub.BusinessException;
+import nc.vo.pub.CircularlyAccessibleValueObject;
+import nc.vo.pub.lang.UFDate;
+import nc.vo.pub.lang.UFDouble;
+import nc.vo.pubapp.pattern.pub.SqlBuilder;
+import u8c.itf.mm.IOperationInfo;
+import u8c.pubitf.ic.out.IMaterialOutMaintainAPI;
+
+@SuppressWarnings("deprecation")
+public class ToParyBillDialog extends UIDialog implements ActionListener, BillEditListener {
+	private IUAPQueryBS iuap = (IUAPQueryBS) NCLocator.getInstance().lookup(IUAPQueryBS.class.getName());
+	private IplatFormEntry iIplatFormEntry = (IplatFormEntry) NCLocator.getInstance()
+			.lookup(IplatFormEntry.class.getName());
+	/**
+	 * 弹框勾选推单生成下游单据-请购单
+	 */
+	private static final long serialVersionUID = -2605551888165671265L;
+	/** 按钮组 **/
+	private UISplitPane mainpanel = null;
+	private int focus = 1;
+	private UIPanel ivjUIPanel0 = null;
+	private UIPanel ivjUIPanel2 = null;
+	private BillCardPanel jlcardPanel = null;// 卡面面板
+	private UIPanel jlbtnpanel = null;// 存放按钮的panel
+	private UIButton saveCardBtn = null; // 保存按钮
+	private UIButton cancelBtn = null; // 取消按钮
+	private UIButton selectallBtn = null; // 全选按钮
+	private UIButton cancelallBtn = null; // 全消按钮
+	private ClientEnvironment ce = ClientEnvironment.getInstance();
+	private OperationPurchaseVO[] purArrays = null;
+	private HRAggVO aggvo;
+	IMaterialOutMaintainAPI imaterapi = (IMaterialOutMaintainAPI) NCLocator.getInstance()
+			.lookup(IMaterialOutMaintainAPI.class.getName());
+	//IOperationInfo ioper = NCLocator.getInstance().lookup(IOperationInfo.class);
+
+	public ToParyBillDialog(HRAggVO aggvo) {
+		super();
+		initialize(aggvo);
+	}
+
+	public void initialize(HRAggVO aggvo) {
+		Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
+		setName("clc");
+		setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
+		setTitle("MRP运算清单-生成请购单");
+		setSize(dimension.width - 100, dimension.height - 200);
+		this.setResizable(true);
+		add(getUIPanel0(), BorderLayout.NORTH);
+		add(getUIPanel2(), BorderLayout.CENTER);
+		setLocation(100 / 2, 200 / 2);
+		addListenerEvent();
+		this.aggvo = aggvo;
+		// 展示数据
+		this.purArrays = getPurArrays(aggvo);
+		getJlcardPanel().getBillModel().setBodyDataVO(purArrays);
+	}
+
+	// 根据传入的aggvo获取purvo数组
+	private OperationPurchaseVO[] getPurArrays(HRAggVO aggvo) {
+		CircularlyAccessibleValueObject[] vos = aggvo.getAllChildrenVO();
+		List<OperationPurchaseVO> purvos = new ArrayList<OperationPurchaseVO>();
+		for (CircularlyAccessibleValueObject vo : vos) {
+			if (vo instanceof OperationPurchaseVO) {
+				// 本次执行数量不填就默认
+				// 执行完的表体在生单界面不展示
+				OperationPurchaseVO purvo = (OperationPurchaseVO) vo;
+				UFDouble num = purvo.getNum() == null ? UFDouble.ZERO_DBL : purvo.getNum();
+				UFDouble execnum = purvo.getExecnum() == null ? UFDouble.ZERO_DBL : new UFDouble(purvo.getExecnum());
+				if (num.sub(execnum).compareTo(UFDouble.ZERO_DBL) == 0) {
+					continue;
+				}
+				purvo.setVdef2(num.sub(execnum).setScale(2, UFDouble.ROUND_HALF_UP).toString());
+				purvos.add(purvo);
+			}
+		}
+		OperationPurchaseVO[] purArrays = purvos.toArray(new OperationPurchaseVO[0]);
+		return purArrays;
+	}
+
+	private void addListenerEvent() {
+		getSaveCardBtn().addActionListener(this);
+		getCancelBtn().addActionListener(this);
+		getSelectallBtn().addActionListener(this);
+		getCancelallBtn().addActionListener(this);
+		getJlcardPanel().addEditListener(this);
+	}
+
+	private UIPanel getUIPanel2() {
+		if (ivjUIPanel2 == null) {
+			ivjUIPanel2 = new UIPanel();
+			ivjUIPanel2.setLayout(new BorderLayout());
+			ivjUIPanel2.setPreferredSize(new Dimension(0, 500));
+			ivjUIPanel2.add(getMainPanel(), BorderLayout.CENTER);
+		}
+		return this.ivjUIPanel2;
+	}
+
+	public UISplitPane getMainPanel() {
+		if (mainpanel == null) {
+			mainpanel = new UISplitPane();
+			mainpanel.setOrientation(JSplitPane.VERTICAL_SPLIT);
+			mainpanel.setTopComponent(getJlcardPanel());
+			mainpanel.setBottomComponent(getJlbtnpanel());
+			mainpanel.setDividerLocation(750);//分割位置
+			mainpanel.setOneTouchExpandable(true);
+			mainpanel.setDividerSize(8);
+		}
+		return mainpanel;
+	}
+
+	private UIPanel getUIPanel0() {
+		if (ivjUIPanel0 == null) {
+			try {
+				ivjUIPanel0 = new UIPanel();
+				ivjUIPanel0.setLayout(new FlowLayout(FlowLayout.LEFT));
+				ivjUIPanel0.add(getSelectallBtn());
+				ivjUIPanel0.add(getCancelallBtn());
+			} catch (Throwable ivjExc) {
+				handleException(ivjExc);
+			}
+		}
+		return this.ivjUIPanel0;
+	}
+
+	private void handleException(Throwable e) {
+
+	}
+
+	public UIPanel getJlbtnpanel() {
+		if (jlbtnpanel == null) {
+			jlbtnpanel = new UIPanel();
+			jlbtnpanel.setName("jlbtnpanel");
+			jlbtnpanel.add(getSaveCardBtn());
+			jlbtnpanel.add(getCancelBtn());
+		}
+		return jlbtnpanel;
+	}
+
+	/**
+	 * 全选与反选,flag为true时,全选操作,flag为false时,进行反选操作
+	 */
+	private void onselectall(boolean flag) {
+		switch (focus) {
+		case 1:
+			int jfRowCount = getJlcardPanel().getRowCount();
+			if (jfRowCount > 0) {
+				for (int row = 0; row < jfRowCount; row++) {
+					getJlcardPanel().getBillModel().setValueAt(flag, row, "vdef1");
+				}
+			}
+			break;
+		}
+	}
+
+	private UIButton getSelectallBtn() {
+		if (selectallBtn == null) {
+			selectallBtn = new UIButton();
+			selectallBtn.setName("selectallBtn");
+			selectallBtn.setText("  全选  ");
+			Color clrBack = new Color(0XC4C4C4);
+			selectallBtn.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED, Color.white, clrBack,
+					new Color(0X5F5F5F), clrBack));
+		}
+		return this.selectallBtn;
+	}
+
+	private UIButton getCancelallBtn() {
+		if (cancelallBtn == null) {
+			cancelallBtn = new UIButton();
+			cancelallBtn.setName("cancelallBtn");
+			cancelallBtn.setText("  全消  ");
+			Color clrBack = new Color(0XC4C4C4);
+			cancelallBtn.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED, Color.white, clrBack,
+					new Color(0X5F5F5F), clrBack));
+		}
+		return this.cancelallBtn;
+	}
+
+	public UIButton getSaveCardBtn() {
+		if (saveCardBtn == null) {
+			saveCardBtn = new UIButton();
+			saveCardBtn.setBounds(530, 210, 20, 20);
+			saveCardBtn.setName("saveCardBtn");
+			saveCardBtn.setText("确定");
+		}
+		return saveCardBtn;
+	}
+
+	public UIButton getCancelBtn() {
+		if (cancelBtn == null) {
+			cancelBtn = new UIButton();
+			cancelBtn.setBounds(530, 210, 75, 20);
+			cancelBtn.setName("cancelBtn");
+			cancelBtn.setText("取消");
+		}
+		return cancelBtn;
+	}
+
+	private BillCardPanel getJlcardPanel() {
+		if (jlcardPanel == null) {
+			jlcardPanel = new BillCardPanel();
+			jlcardPanel.setName("jlcardPanel");
+			// 根据单据模板编码加载模板
+			jlcardPanel.loadTemplet("MM001", null, ce.getUser().getPrimaryKey(), ce.getCorporation().getPrimaryKey());
+		}
+		return jlcardPanel;
+	}
+
+	@Override
+	public void afterEdit(BillEditEvent arg0) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	public void bodyRowChange(BillEditEvent arg0) {
+		// TODO Auto-generated method stub
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	/**
+	 * 按钮确定和取消执行方法
+	 */
+	public void actionPerformed(ActionEvent e) {
+		// 保存按钮
+		if (e.getSource() == getSaveCardBtn()) {
+//			MessageDialog.showHintDlg(null, "测试", "开始");
+			Vector<Vector<Object>> vectors = getJlcardPanel().getBillModel().getDataVector();
+			StringBuffer errmsg = new StringBuffer();
+			// 数量校验
+			try {
+				int execsize = 0;// 勾选的条数
+				for (int i = 0; i < vectors.size(); i++) {
+					Vector<Object> vector = (Vector<Object>) vectors.get(i);
+					if (null != vector.get(0) && "Y".equals(vector.get(0).toString())) {
+						if (vector.get(1) == null) {
+							errmsg.append("第" + (i + 1) + "行本次执行数量为空!");
+							continue;
+						}
+						execsize = execsize + 1;
+						UFDouble execnum = new UFDouble(vector.get(1).toString());// 本次执行数量
+						UFDouble nnum = new UFDouble(vector.get(24).toString());// 主数量
+						UFDouble usednum = vector.get(33) == null ? new UFDouble(0)
+								: new UFDouble(vector.get(33).toString());// 已执行主数量
+						if (execnum.compareTo(nnum.sub(usednum)) > 0) {
+							errmsg.append("第" + (i + 1) + "行本次执行数量超过订单剩余数量!");
+						}
+					}
+				}
+
+				if (!errmsg.toString().equals("")) {
+					MessageDialog.showErrorDlg(mainpanel, "错误", errmsg.toString());
+					return;
+				}
+				if (execsize == 0) {
+					MessageDialog.showHintDlg(mainpanel, "提示", "请勾选要生成请购单的数据");
+					return;
+				}
+				OperationMainVO headvo = (OperationMainVO) this.aggvo.getParentVO();
+				PraybillHeaderVO header = new PraybillHeaderVO();
+				PraybillVO vo = new PraybillVO();
+				//String vbillcode = new BillcodeGenerater().getBillCode("MM01", PubEnv.getPk_corp(), null, null);
+				// 表头赋值
+				header.setPk_corp(PubEnv.getCorpCode());// 公司
+				header.setCoperator(ClientEnvironment.getInstance().getUser().getPrimaryKey());// 制单人
+				header.setDpraydate(new UFDate(ClientEnvironment.getInstance().getBusinessDate().toString()));// 请购日期-->制单日期
+				header.setIbillstatus(0);// 单据状态
+//				header.setCpraypsn("1001V510000000000292");//请购人id-->业务员
+//				header.setCdeptid("1001V510000000000276");//请购部门id-->计划部门
+				header.setVmemo("MRP运算清单");// 备注
+				header.setDr(0);
+				header.setCaccountyear(String.valueOf(new UFDate().getYear()));// 年份
+				header.setIpraysource(5);// 请购来源
+				header.setIpraytype(2);// 请购类型
+				vo.setParentVO(header);
+				PraybillItemVO[] items = new PraybillItemVO[execsize];
+				Map<String, UFDouble> updatemap = new HashMap<>();
+				int k = 0;
+				for (int j = 0; j < vectors.size(); j++) {
+					Vector<Object> vector = (Vector<Object>) vectors.get(j);
+					// 自定义项20 为勾选按钮 :勾选为Y 没有勾选是null
+					if (null != vector.get(0) && "Y".equals(vector.get(0).toString())) {
+						PraybillItemVO praybillItemVO = new PraybillItemVO();
+						praybillItemVO.setPk_corp(PubEnv.getCorpCode()); // 公司
+						String cmaterialcode = vector.get(10).toString();// 
+						// 表体赋值
+						praybillItemVO.setCmangid(getCmangchid(getCmangid(cmaterialcode))); // 存货编码
+						praybillItemVO.setCbaseid(getCmangid(cmaterialcode)); // 存货基础ID
+						UFDouble num = new UFDouble(vector.get(1).toString());// 
+						praybillItemVO.setNpraynum(num); // 数量
+						String prjcode = vector.get(4).toString();// 
+						String cprojectid = "";// 项目id
+						if (prjcode.startsWith("1001")) {
+							cprojectid = prjcode;
+						} else {
+							cprojectid = getprojectid(prjcode);
+						}
+						praybillItemVO.setCprojectid(cprojectid);
+//						praybillItemVO.setCassistunit(demandBVO.getCastunitid());//辅助计量单位
+//						praybillItemVO.setNassistnum(new UFDouble(demandBVO.getNastnum()));//辅计量数量
+//						praybillItemVO.setVproducenum(cgdd.getVbatchcode());//批次号
+						praybillItemVO.setDdemanddate(
+								new UFDate(ClientEnvironment.getInstance().getBusinessDate().toString()));
+						praybillItemVO.setDsuggestdate(
+								new UFDate(ClientEnvironment.getInstance().getBusinessDate().toString()));
+//						praybillItemVO.setPk_purcorp(PubEnv.getCorpCode());
+						praybillItemVO.setPk_reqcorp(PubEnv.getCorpCode());
+						items[k] = praybillItemVO;
+						// 回写数量
+						UFDouble updatenum = new UFDouble(vector.get(33) == null ? "0" : vector.get(33).toString())
+								.add(new UFDouble(vector.get(1) == null ? "0" : vector.get(1).toString()));
+						updatemap.put(vector.get(35).toString(), updatenum);
+						k = k + 1;
+					}
+				}
+				vo.setChildrenVO(items);
+				iIplatFormEntry.processAction("SAVEBASE", "20", vo.getHeadVO().getDpraydate().toString(), null, vo, null, null);
+//				Boolean updateres = ioper.updateParyExecNum(updatemap);
+				MessageDialog.showHintDlg(mainpanel, "成功", "采购订单新增成功!");
+				this.closeCancel();
+			} catch (Exception e1) {
+				MessageDialog.showErrorDlg(mainpanel, "错误", e1.getMessage());
+				return;
+			}
+		}
+
+		// 取消按钮
+		if (e.getSource() == getCancelBtn()) {
+			this.closeCancel();
+		}
+
+		// 全选
+		if (e.getSource() == getSelectallBtn()) {
+			onselectall(true);
+		}
+
+		// 全消
+		if (e.getSource() == getCancelallBtn()) {
+			onselectall(false);
+		}
+	}
+
+	// 项目id
+	public String getprojectid(String prjcode) throws Exception {
+		String sql = "select pk_jobbasfil from bd_jobbasfil where jobcode ='" + prjcode + "' and isnull(dr,0) = 0";
+		String pk_jobbasfil = (String) iuap.executeQuery(sql, new ColumnProcessor());
+		if (pk_jobbasfil == null) {
+			return "";
+		}
+		return pk_jobbasfil;
+	}
+
+	/**
+	 * 根据物料code查询主键
+	 * 
+	 * @param code
+	 * @return
+	 * @throws BusinessException
+	 */
+	public String getCmangid(String code) throws BusinessException {
+		String cmangid = null;
+		String sql = " select pk_invbasdoc from bd_invbasdoc" + " where invcode  ='" + code + "' and dr =0 ";
+		cmangid = (String) iuap.executeQuery(sql, new ColumnProcessor());
+		if (cmangid == null) {
+			throw new BusinessException("U8C物料code不存在:" + code);
+		}
+		return cmangid;
+	}
+
+	/**
+	 * 存货管理档案
+	 * 
+	 * @param code
+	 * @return
+	 * @throws BusinessException
+	 */
+	public String getCmangchid(String pk_invbasdoc) throws BusinessException {
+		String cmangid = null;
+		String sql = " select pk_invmandoc from bd_invmandoc" + " where pk_invbasdoc  ='" + pk_invbasdoc
+				+ "' and dr =0 ";
+		cmangid = (String) iuap.executeQuery(sql, new ColumnProcessor());
+		if (cmangid == null) {
+			throw new BusinessException("U8C物料code不存在:" + pk_invbasdoc);
+		}
+		return cmangid;
+	}
+
+	// 物料
+	public String getInvbasdocValue(String pk_invbasdoc, String param) throws Exception {
+		String sql = "select invcode,invname,invspec,invtype from bd_invbasdoc where pk_invbasdoc='" + pk_invbasdoc
+				+ "' and isnull(dr,0) = 0";
+		String jobname = (String) iuap.executeQuery(sql, new ColumnProcessor(param));
+		if (jobname == null) {
+			return "";
+		}
+		return jobname;
+	}
+
+	// 物料2-编码查询主键
+	public List<String> getInvbasdocValue2(List<String> liswlcodes) throws Exception {
+		SqlBuilder build = new SqlBuilder();
+		String sql = "select pk_invbasdoc from bd_invbasdoc where isnull(dr,0) = 0 and ";
+		build.append(sql);
+		build.append("invcode", liswlcodes.toArray(new String[liswlcodes.size()]));
+
+		List<String> jobname = (List<String>) iuap.executeQuery(build.toString(), new ColumnListProcessor());
+		if (jobname == null) {
+			return null;
+		}
+		return jobname;
+	}
+
+	// 仓库
+	public String getStordocValue(String pk_stordoc, String param) throws Exception {
+		String sql = "select storcode,storname from bd_stordoc where pk_stordoc='" + pk_stordoc
+				+ "' and isnull(dr,0) = 0";
+		String jobname = (String) iuap.executeQuery(sql, new ColumnProcessor(param));
+		if (jobname == null) {
+			return "";
+		}
+		return jobname;
+	}
+
+}

+ 409 - 0
mm/mm/src/client/u8c/ui/mm/action/ToTranStorDialog.java

@@ -0,0 +1,409 @@
+package u8c.ui.mm.action;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.swing.BorderFactory;
+import javax.swing.JSplitPane;
+import javax.swing.border.BevelBorder;
+
+import nc.bs.framework.common.NCLocator;
+import nc.hr.utils.PubEnv;
+import nc.itf.uap.IUAPQueryBS;
+import nc.itf.uap.pf.IplatFormEntry;
+import nc.jdbc.framework.processor.ColumnProcessor;
+import nc.ui.pub.ClientEnvironment;
+import nc.ui.pub.beans.MessageDialog;
+import nc.ui.pub.beans.UIButton;
+import nc.ui.pub.beans.UIDialog;
+import nc.ui.pub.beans.UIPanel;
+import nc.ui.pub.beans.UISplitPane;
+import nc.ui.pub.bill.BillCardPanel;
+import nc.ui.pub.bill.BillEditEvent;
+import nc.ui.pub.bill.BillEditListener;
+import nc.vo.OperationTransferVO;
+import nc.vo.hr.tools.pub.HRAggVO;
+import nc.vo.ic.pub.bill.SpecialBillHeaderVO;
+import nc.vo.ic.pub.bill.SpecialBillItemVO;
+import nc.vo.ic.pub.bill.SpecialBillVO;
+import nc.vo.pub.BusinessException;
+import nc.vo.pub.CircularlyAccessibleValueObject;
+import nc.vo.pub.lang.UFDate;
+import nc.vo.pub.lang.UFDouble;
+import u8c.itf.mm.IOperationInfo;
+import u8c.pubitf.ic.out.IMaterialOutMaintainAPI;
+
+@SuppressWarnings("deprecation")
+public class ToTranStorDialog extends UIDialog implements ActionListener, BillEditListener {
+
+	private IUAPQueryBS iuap = (IUAPQueryBS) NCLocator.getInstance().lookup(IUAPQueryBS.class.getName());
+	private IplatFormEntry iIplatFormEntry = (IplatFormEntry) NCLocator.getInstance()
+			.lookup(IplatFormEntry.class.getName());
+
+	/**
+	 * 弹框勾选推单生成下游单据-转库单
+	 */
+	private static final long serialVersionUID = -2605551888165671265L;
+	/** 按钮组 **/
+	private UISplitPane mainpanel = null;
+	private int focus = 1;
+	private UIPanel ivjUIPanel0 = null;
+	private UIPanel ivjUIPanel2 = null;
+	private BillCardPanel jlcardPanel = null;// 卡面面板
+	private UIPanel jlbtnpanel = null;// 存放按钮的panel
+	private UIButton saveCardBtn = null; // 保存按钮
+	private UIButton cancelBtn = null; // 取消按钮
+	private UIButton selectallBtn = null; // 全选按钮
+	private UIButton cancelallBtn = null; // 全消按钮
+	private ClientEnvironment ce = ClientEnvironment.getInstance();
+	private OperationTransferVO[] tranArrays = null;
+	private HRAggVO aggvo;
+	IMaterialOutMaintainAPI imaterapi = (IMaterialOutMaintainAPI) NCLocator.getInstance()
+			.lookup(IMaterialOutMaintainAPI.class.getName());
+//	IOperationInfo ioper = NCLocator.getInstance().lookup(IOperationInfo.class);
+
+	public ToTranStorDialog(HRAggVO aggvo) {
+		super();
+		initialize(aggvo);
+	}
+
+	public void initialize(HRAggVO aggvo) {
+		Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
+		setName("clc");
+		setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
+		setTitle("MRP运算清单-生成转库单");
+		setSize(dimension.width - 100, dimension.height - 200);
+		this.setResizable(true);
+		add(getUIPanel0(), BorderLayout.NORTH);
+		add(getUIPanel2(), BorderLayout.CENTER);
+		setLocation(100 / 2, 200 / 2);
+		addListenerEvent();
+		this.aggvo = aggvo;
+		// 展示数据
+		this.tranArrays = getTranArrays(aggvo);
+		getJlcardPanel().getBillModel().setBodyDataVO(tranArrays);
+	}
+
+	// 根据传入的aggvo获取tranvo数组
+	private OperationTransferVO[] getTranArrays(HRAggVO aggvo) {
+		CircularlyAccessibleValueObject[] vos = aggvo.getAllChildrenVO();
+		List<OperationTransferVO> tranvos = new ArrayList<OperationTransferVO>();
+		for (CircularlyAccessibleValueObject vo : vos) {
+			if (vo instanceof OperationTransferVO) {
+				// 本次执行数量不填就默认
+				// 执行完的表体在生单界面不展示
+				OperationTransferVO tranvo = (OperationTransferVO) vo;
+				UFDouble num = tranvo.getNum() == null ? UFDouble.ZERO_DBL : tranvo.getNum();
+				UFDouble execnum = tranvo.getExecnum() == null ? UFDouble.ZERO_DBL : new UFDouble(tranvo.getExecnum());
+				if (num.sub(execnum).compareTo(UFDouble.ZERO_DBL) == 0) {
+					continue;
+				}
+				tranvo.setVdef2(num.sub(execnum).setScale(2, UFDouble.ROUND_HALF_UP).toString());
+				tranvos.add(tranvo);
+			}
+		}
+		OperationTransferVO[] tranArrays = tranvos.toArray(new OperationTransferVO[0]);
+		return tranArrays;
+	}
+
+	private void addListenerEvent() {
+		getSaveCardBtn().addActionListener(this);
+		getCancelBtn().addActionListener(this);
+		getSelectallBtn().addActionListener(this);
+		getCancelallBtn().addActionListener(this);
+		getJlcardPanel().addEditListener(this);
+	}
+
+	private UIPanel getUIPanel2() {
+		if (ivjUIPanel2 == null) {
+			ivjUIPanel2 = new UIPanel();
+			ivjUIPanel2.setLayout(new BorderLayout());
+			ivjUIPanel2.setPreferredSize(new Dimension(0, 500));
+			ivjUIPanel2.add(getMainPanel(), BorderLayout.CENTER);
+		}
+		return this.ivjUIPanel2;
+	}
+
+	public UISplitPane getMainPanel() {
+		if (mainpanel == null) {
+			mainpanel = new UISplitPane();
+			mainpanel.setOrientation(JSplitPane.VERTICAL_SPLIT);
+			mainpanel.setTopComponent(getJlcardPanel());
+			mainpanel.setBottomComponent(getJlbtnpanel());
+			mainpanel.setDividerLocation(750);// 分割位置
+			mainpanel.setOneTouchExpandable(true);
+			mainpanel.setDividerSize(8);
+		}
+		return mainpanel;
+	}
+
+	private UIPanel getUIPanel0() {
+		if (ivjUIPanel0 == null) {
+			try {
+				ivjUIPanel0 = new UIPanel();
+				ivjUIPanel0.setLayout(new FlowLayout(FlowLayout.LEFT));
+				ivjUIPanel0.add(getSelectallBtn());
+				ivjUIPanel0.add(getCancelallBtn());
+			} catch (Throwable ivjExc) {
+				handleException(ivjExc);
+			}
+		}
+		return this.ivjUIPanel0;
+	}
+
+	private void handleException(Throwable e) {
+
+	}
+
+	public UIPanel getJlbtnpanel() {
+		if (jlbtnpanel == null) {
+			jlbtnpanel = new UIPanel();
+			jlbtnpanel.setName("jlbtnpanel");
+			jlbtnpanel.add(getSaveCardBtn());
+			jlbtnpanel.add(getCancelBtn());
+		}
+		return jlbtnpanel;
+	}
+
+	/**
+	 * 全选与反选,flag为true时,全选操作,flag为false时,进行反选操作
+	 */
+	private void onselectall(boolean flag) {
+		switch (focus) {
+		case 1:
+			int jfRowCount = getJlcardPanel().getRowCount();
+			if (jfRowCount > 0) {
+				for (int row = 0; row < jfRowCount; row++) {
+					getJlcardPanel().getBillModel().setValueAt(flag, row, "vdef1");
+				}
+			}
+			break;
+		}
+	}
+
+	private UIButton getSelectallBtn() {
+		if (selectallBtn == null) {
+			selectallBtn = new UIButton();
+			selectallBtn.setName("selectallBtn");
+			selectallBtn.setText("  全选  ");
+			Color clrBack = new Color(0XC4C4C4);
+			selectallBtn.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED, Color.white, clrBack,
+					new Color(0X5F5F5F), clrBack));
+		}
+		return this.selectallBtn;
+	}
+
+	private UIButton getCancelallBtn() {
+		if (cancelallBtn == null) {
+			cancelallBtn = new UIButton();
+			cancelallBtn.setName("cancelallBtn");
+			cancelallBtn.setText("  全消  ");
+			Color clrBack = new Color(0XC4C4C4);
+			cancelallBtn.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED, Color.white, clrBack,
+					new Color(0X5F5F5F), clrBack));
+		}
+		return this.cancelallBtn;
+	}
+
+	public UIButton getSaveCardBtn() {
+		if (saveCardBtn == null) {
+			saveCardBtn = new UIButton();
+			saveCardBtn.setBounds(530, 210, 20, 20);
+			saveCardBtn.setName("saveCardBtn");
+			saveCardBtn.setText("确定");
+		}
+		return saveCardBtn;
+	}
+
+	public UIButton getCancelBtn() {
+		if (cancelBtn == null) {
+			cancelBtn = new UIButton();
+			cancelBtn.setBounds(530, 210, 75, 20);
+			cancelBtn.setName("cancelBtn");
+			cancelBtn.setText("取消");
+		}
+		return cancelBtn;
+	}
+
+	private BillCardPanel getJlcardPanel() {
+		if (jlcardPanel == null) {
+			jlcardPanel = new BillCardPanel();
+			jlcardPanel.setName("jlcardPanel");
+			// 根据单据模板编码加载模板
+			jlcardPanel.loadTemplet("MM002", null, ce.getUser().getPrimaryKey(), ce.getCorporation().getPrimaryKey());
+		}
+		return jlcardPanel;
+	}
+
+	@Override
+	public void afterEdit(BillEditEvent arg0) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	public void bodyRowChange(BillEditEvent arg0) {
+		// TODO Auto-generated method stub
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	/**
+	 * 按钮确定和取消执行方法
+	 */
+	public void actionPerformed(ActionEvent e) {
+		// 保存按钮
+		if (e.getSource() == getSaveCardBtn()) {
+//			MessageDialog.showHintDlg(null, "测试", "开始");
+			Vector<Vector<Object>> vectors = getJlcardPanel().getBillModel().getDataVector();
+			StringBuffer errmsg = new StringBuffer();
+			// 数量校验
+			try {
+				int execsize = 0;// 勾选的条数
+				for (int i = 0; i < vectors.size(); i++) {
+					Vector<Object> vector = (Vector<Object>) vectors.get(i);
+					if (null != vector.get(0) && "Y".equals(vector.get(0).toString())) {
+						if (vector.get(1) == null) {
+							errmsg.append("第" + (i + 1) + "行本次执行数量为空!");
+							continue;
+						}
+						execsize = execsize + 1;
+						UFDouble execnum = new UFDouble(vector.get(1).toString());// 本次执行数量
+						UFDouble nnum = new UFDouble(vector.get(5).toString());// 主数量
+						UFDouble usednum = vector.get(39) == null ? new UFDouble(0)
+								: new UFDouble(vector.get(39).toString());// 已执行主数量
+						if (execnum.compareTo(nnum.sub(usednum)) > 0) {
+							errmsg.append("第" + (i + 1) + "行本次执行数量超过订单剩余数量!");
+						}
+					}
+				}
+
+				if (!errmsg.toString().equals("")) {
+					MessageDialog.showErrorDlg(mainpanel, "错误", errmsg.toString());
+					return;
+				}
+				if (execsize == 0) {
+					MessageDialog.showHintDlg(mainpanel, "提示", "请勾选要生成转库单的数据");
+					return;
+				}
+				SpecialBillVO aggvo = new SpecialBillVO();
+				SpecialBillHeaderVO headvo = new SpecialBillHeaderVO();
+				// 表头赋值
+				headvo.setCbilltypecode("4K");
+	//			headvo.setCinwarehouseid("1001V51000000000039Z");// 入库仓库ID 工装
+				headvo.setCinwarehouseid(getstordocpk("GZ001"));//仓库必填
+				headvo.setCoperatorid(ClientEnvironment.getInstance().getUser().getPrimaryKey());
+	//			headvo.setCoutwarehouseid("1001V5100000000003A1");// 出库仓库ID 家装
+				headvo.setCoutwarehouseid(getstordocpk("GZ001"));//仓库必填
+				headvo.setCshlddiliverdate(new UFDate(ClientEnvironment.getInstance().getBusinessDate().toString()));
+				headvo.setDbilldate(new UFDate(ClientEnvironment.getInstance().getBusinessDate().toString()));
+				headvo.setFbillflag(2);
+				headvo.setIcheckmode(4);
+				headvo.setIPrintCount(0);
+				headvo.setPk_corp(PubEnv.getCorpCode());
+				headvo.setVshldarrivedate(new UFDate(ClientEnvironment.getInstance().getBusinessDate().toString()));
+				aggvo.setParentVO(headvo);
+				// 表体
+				SpecialBillItemVO[] billitems = new SpecialBillItemVO[execsize];
+				Map<String, UFDouble> updatemap = new HashMap<>();
+				int k = 0;
+				for (int j = 0; j < vectors.size(); j++) {
+					Vector<Object> vector = (Vector<Object>) vectors.get(j);
+					// 自定义项20 为勾选按钮 :勾选为Y 没有勾选是null
+					if (null != vector.get(0) && "Y".equals(vector.get(0).toString())) {
+						SpecialBillItemVO billitem = new SpecialBillItemVO();
+						String cmaterialcode = vector.get(6).toString();//
+						billitem.setCinventoryid(getCmangchid(getCmangid(cmaterialcode)));
+						UFDouble num = new UFDouble(vector.get(1).toString());//
+						billitem.setDshldtransnum(num);
+
+						billitems[k] = billitem;
+						// 回写数量
+						UFDouble updatenum = new UFDouble(vector.get(39) == null ? "0" : vector.get(39).toString())
+								.add(new UFDouble(vector.get(1) == null ? "0" : vector.get(1).toString()));
+						updatemap.put(vector.get(40).toString(), updatenum);
+						k = k + 1;
+					}
+				}
+
+				aggvo.setChildrenVO(billitems);
+				iIplatFormEntry.processAction("WRITE", "4K", null, null, aggvo, null, null);
+		//		Boolean updateres = ioper.updateTranExecNum(updatemap);
+				MessageDialog.showHintDlg(mainpanel, "成功", "转库单新增成功!");
+				this.closeCancel();
+			} catch (Exception e1) {
+				MessageDialog.showErrorDlg(mainpanel, "错误", e1.getMessage());
+				return;
+			}
+		}
+
+		// 取消按钮
+		if (e.getSource() == getCancelBtn()) {
+			this.closeCancel();
+		}
+
+		// 全选
+		if (e.getSource() == getSelectallBtn()) {
+			onselectall(true);
+		}
+
+		// 全消
+		if (e.getSource() == getCancelallBtn()) {
+			onselectall(false);
+		}
+	}
+
+	/**
+	 * 根据物料code查询主键
+	 * 
+	 * @param code
+	 * @return
+	 * @throws BusinessException
+	 */
+	public String getCmangid(String code) throws BusinessException {
+		String cmangid = null;
+		String sql = " select pk_invbasdoc from bd_invbasdoc" + " where invcode  ='" + code + "' and dr =0 ";
+		cmangid = (String) iuap.executeQuery(sql, new ColumnProcessor());
+		if (cmangid == null) {
+			throw new BusinessException("U8C物料code不存在:" + code);
+		}
+		return cmangid;
+	}
+
+	/**
+	 * 存货管理档案
+	 * 
+	 * @param code
+	 * @return
+	 * @throws BusinessException
+	 */
+	public String getCmangchid(String pk_invbasdoc) throws BusinessException {
+		String cmangid = null;
+		String sql = " select pk_invmandoc from bd_invmandoc" + " where pk_invbasdoc  ='" + pk_invbasdoc
+				+ "' and dr =0 ";
+		cmangid = (String) iuap.executeQuery(sql, new ColumnProcessor());
+		if (cmangid == null) {
+			throw new BusinessException("U8C物料code不存在:" + pk_invbasdoc);
+		}
+		return cmangid;
+	}
+	
+	  public  String getstordocpk(String storcode)throws Exception{
+	    	String sql = "select pk_stordoc from bd_stordoc where storcode = '"+storcode+"'";
+	    	String pk_stordoc = (String) iuap.executeQuery(sql, new ColumnProcessor());
+	    	if(pk_stordoc == null) {
+	    		throw new Exception("仓库"+storcode+"未查到,请检查");
+	    	}
+	    	return pk_stordoc;
+	    }
+	
+}

+ 522 - 41
mm/mm/src/client/u8c/ui/mm/action/YsAction.java

@@ -23,7 +23,9 @@ import nc.md.persist.framework.IMDPersistenceQueryService;
 import nc.ui.hr.frame.FrameUI;
 import nc.ui.hr.frame.action.AbstractAction;
 import nc.ui.pub.ClientEnvironment;
+import nc.ui.pub.beans.MessageDialog;
 import nc.ui.pub.beans.UIDialog;
+import nc.vo.AqkcVO;
 import nc.vo.DemandUAPBVO;
 import nc.vo.OnhandunmUAPVO;
 import nc.vo.OperationBalanceVO;
@@ -33,6 +35,7 @@ import nc.vo.OperationPurchaseVO;
 import nc.vo.OperationSupplyVO;
 import nc.vo.OperationTransferVO;
 import nc.vo.OrderIssueUAPVO;
+import nc.vo.SafetystockVO;
 import nc.vo.ic.pub.bill.SpecialBillHeaderVO;
 import nc.vo.ic.pub.bill.SpecialBillItemVO;
 import nc.vo.ic.pub.bill.SpecialBillVO;
@@ -46,6 +49,7 @@ import nc.vo.pub.lang.UFDate;
 import nc.vo.pub.lang.UFDouble;
 import nc.vo.pubapp.pattern.pub.SqlBuilder;
 import u8c.ui.mm.panel.OperationTestUI;
+import u8c.vo.ExAggOrderMainVO;
 
 /**
  * MRP运算清单-运算按钮
@@ -72,11 +76,9 @@ public class YsAction extends YsQuseryAction{
 				 ClientEnvironment.getInstance().getCorporation().getPk_corp(),iscancel);
 		dialog.show();
 		
-	   
 		if(dialog.dg_iscancel) {
 			String butype = dialog.getButype();//业务类型下拉--- 家装\工装
 			String xmname = dialog.getXmname();//项目主键
-			List<OperationSupplyVO> supplyvos=new ArrayList<OperationSupplyVO>();
 			
 			/**
 			 * 
@@ -85,18 +87,20 @@ public class YsAction extends YsQuseryAction{
 			 * 需求页签
 			 * 
 			 */
-			String pk_operation="";//单据主键
+			
 			if("工装".equals(butype)) {
+				List<OperationSupplyVO> supplyvos=new ArrayList<OperationSupplyVO>();
+				String pk_operation="";//单据主键
 				//查询生产总订单材料明细不是委外的数据
 				String sqlmmpac="select a.dbilldate demanddate ,b.* from  mmpac_order_issue b "
 						+ "inner join mmpac_order_main a on  a.pk_order=b.pk_order "
-						+ "and isnull(a.dr,0)=0 and isnull(b.dr,0)=0 and isnull(b.bdef3,'N')='N' "
+						+ "and isnull(a.dr,0)=0 and isnull(b.dr,0)=0 and isnull(b.bdef5,'N')='N' "
 						+ "and a.projectid='" + xmname + "' and a.busitype='" + butype + "' and a.billstatus='1' ";
 				
 				List<OrderIssueUAPVO> lisvos= (List<OrderIssueUAPVO>) iuap.executeQuery(sqlmmpac, new BeanListProcessor(OrderIssueUAPVO.class));
 				
 				//查询材料采购单的数据
-				String sqlxc="select  a.dbilldate demanddate,b.* from  po_demand_b b "
+				String sqlxc="select  a.dbilldate demanddate,a.vdef1 gdcode ,b.* from  po_demand_b b "
 						+ "inner join po_demand a on  a.pk_demand=b.pk_demand "
 						+ "and isnull(a.dr,0)=0 and isnull(b.dr,0)=0  "
 						+ "and a.projectid='" + xmname + "' and a.vdef30='" + butype + "' and a.billstatus='1' and a.billstatus<>'9' ";
@@ -120,8 +124,8 @@ public class YsAction extends YsQuseryAction{
 
 				try{	
 					if(null!=lisvos && lisvos.size()>0) {
-						for(OrderIssueUAPVO vo : lisvos) {
-							OperationDemandVO demandvo=new OperationDemandVO();
+						for(OrderIssueUAPVO vo : lisvos) {//bdef3
+							OperationDemandVO demandvo=new OperationDemandVO();//vdef13
 							for (String name : demandvo.getAttributeNames()) {
 								if("ts".equals(name)||"execnum".equals(name)) {
 									continue;
@@ -129,8 +133,15 @@ public class YsAction extends YsQuseryAction{
 									demandvo.setAttributeValue(name, pk_operation);
 								}else if("demandtyoe".equals(name)) {
 									demandvo.setAttributeValue(name, "生产总订单");
+								}else if("nastnum".equals(name)) {
+									demandvo.setNastnum(vo.getNastnum());
 								}else {
-									demandvo.setAttributeValue(name, vo.getAttributeValue(name));
+									String oldname=name;
+									String newname=name;
+									if(name.contains("vdef")) {
+										newname=newname.replace("vdef", "bdef");
+									}
+									demandvo.setAttributeValue(oldname, vo.getAttributeValue(newname));
 								}
 								
 							}
@@ -148,9 +159,19 @@ public class YsAction extends YsQuseryAction{
 									demandvo.setAttributeValue(name, pk_operation);
 								}else if("demandtyoe".equals(name)) {
 									demandvo.setAttributeValue(name, "材料采购单");
+								}else if("nastnum".equals(name)) {
+									demandvo.setNastnum(new UFDouble(vo.getNastnum()));
+								}else if("vdef30".equals(name)) {//材料采购单主表主键
+									demandvo.setVdef30(vo.getPk_demand());
+								}else if("vdef29".equals(name)) {//材料采购单主表主键
+									demandvo.setVdef29(vo.getGdcode());//工单编码
 								}else {
 									demandvo.setAttributeValue(name, vo.getAttributeValue(name));
 								}
+								
+								
+								
+								
 							}
 							demandvos.add(demandvo);
 						}
@@ -163,7 +184,6 @@ public class YsAction extends YsQuseryAction{
 						throw new  ValidationException(e.getMessage());
 					}
 					/********************************生成【需求】页签数据-end*********************************************/	
-				
 					
 				}else {
 					throw new ValidationException("生产总订单和材料采购单没有符合条件的数据!");
@@ -188,7 +208,8 @@ public class YsAction extends YsQuseryAction{
 				
 				String sqlic_onhandnum="select  vlot,cwarehouseid,cinventoryid,cinvbasid,vfree1,vfree2,vfree3,vfree4,nonhandnum "
 						+ "from  ic_onhandnum where "
-					//	+ "vlot =(select jobcode from  bd_jobbasfil where pk_jobbasfil='" + xmname + "' ) and "
+				//		+ "vlot =(select jobcode from  bd_jobbasfil where pk_jobbasfil='" + xmname + "' ) and "
+						+ "vlot =(select jobcode from  bd_jobbasfil where pk_jobbasfil= (select pk_jobbasfil from  bd_jobmngfil where pk_jobmngfil='" + xmname + "')) and "
 						+ "cwarehouseid= (select pk_stordoc  from  bd_stordoc "
 						+ "where storcode='GZ001') and  nonhandnum>0  and ";
 				
@@ -219,7 +240,8 @@ public class YsAction extends YsQuseryAction{
 					supplyvos.add(opernsupplyvo);
 				//	liswlpls.add(vo.getCinvbasid());
 				}
-					
+				
+				
 				//工装:2.公共库查询:没有项目的,根据物料去查询
 				
 				SqlBuilder sqlbuild=new SqlBuilder();
@@ -230,7 +252,6 @@ public class YsAction extends YsQuseryAction{
 				sqlbuild.append("cinvbasid", pkwls.toArray(new String[pkwls.size()]));
 				
 				List<OnhandunmUAPVO> lisonhandnums_gg= (List<OnhandunmUAPVO>) iuap.executeQuery(sqlbuild.toString(), new BeanListProcessor(OnhandunmUAPVO.class));
-				
 				for(OnhandunmUAPVO vo:lisonhandnums_gg) {
 					OperationSupplyVO opernsupplyvo=new  OperationSupplyVO();
 					opernsupplyvo.setSupplytype("库存量_公共库");//供应类型
@@ -260,7 +281,6 @@ public class YsAction extends YsQuseryAction{
 				throw new  ValidationException(e.getMessage());
 			}
 					
-					
 			/**
 			 * 
 			 * 供需平衡结果
@@ -287,7 +307,6 @@ public class YsAction extends YsQuseryAction{
 					}
 					
 					bancevos.add(bancevo);
-					
 					//供应数据--查询供应页签数据库数据
 					String gysqlw="select * from mm_operation_supply where pk_operation='"+pk_operation+"' and isnull(dr,0)=0 and cmaterialcode='"+bancevo.getCmaterialcode()+"' ";
 					List<OperationSupplyVO> lissupplyvos=(List<OperationSupplyVO>) iuap.executeQuery(gysqlw, new BeanListProcessor(OperationSupplyVO.class));
@@ -308,7 +327,6 @@ public class YsAction extends YsQuseryAction{
 								map.put(opersuplyvo.getSupplytype()/*供应类型*/, maplisvo);
 							}
 						}
-						
 						if(null!=map&&map.size()<2) {
 							//说明只有一个库有此存货
 							if("库存量_工装库".equals(lissupplyvos.get(0).getSupplytype())) {
@@ -320,7 +338,7 @@ public class YsAction extends YsQuseryAction{
 									gysx=gysx.add(gzvo.getNum());//供应数量
 								}
 								bancevo11.setNum(gysx);//主数量
-								if (bancevo.getNum().sub(gysx).compareTo(UFDouble.ZERO_DBL)<0) {
+								if (bancevo.getNum().sub(gysx).compareTo(UFDouble.ZERO_DBL)<=0) {
 									//需求数量-供应数量<0
 									bancevo11.setProexecutenum(bancevo.getNum().setScale(2,UFDouble.ROUND_HALF_UP ).toString());//建议执行数量
 									bancevo11.setMatchnum(bancevo.getNum().setScale(2,UFDouble.ROUND_HALF_UP ).toString());//已匹配主数量
@@ -331,15 +349,19 @@ public class YsAction extends YsQuseryAction{
 									bancevo11.setProexecutenum(gysx.setScale(2,UFDouble.ROUND_HALF_UP ).toString());//建议执行数量
 									bancevo11.setMatchnum(gysx.setScale(2,UFDouble.ROUND_HALF_UP ).toString());//已匹配主数量
 									bancevo11.setSurdenum(bancevo.getNum().sub(gysx).setScale(2,UFDouble.ROUND_HALF_UP ).toString());//剩余需求主数量
-									bancevoscgdd.add(bancevo11);
+									
+									if(!"生产总订单".equals(bancevo.getDemandtype())) {
+										bancevoscgdd.add(bancevo1144);
+									}
+									
 									//需要采购物料
 									bancevo1144.setProexecute("采购");//建议执行
 									bancevo1144.setProexecutenum(bancevo.getNum().sub(gysx).setScale(2,UFDouble.ROUND_HALF_UP ).toString());//建议执行数量
 									bancevo1144.setMatchnum(bancevo.getNum().sub(gysx).setScale(2,UFDouble.ROUND_HALF_UP ).toString());//已匹配主数量
 									bancevo1144.setSurdenum(UFDouble.ZERO_DBL.setScale(2,UFDouble.ROUND_HALF_UP ).toString());//剩余需求主数量
 									bancevo1144.setPk_operation(pk_operation);
-									
 								}
+								
 								bancevo11.setPk_operation(pk_operation);
 								bancevo113=(OperationBalanceVO) bancevo11.clone();
 								bancevo11.setPrjcode(bancevo.getPrjcode());//项目编码
@@ -357,6 +379,57 @@ public class YsAction extends YsQuseryAction{
 								bancevo11.setStandard(bancevo.getStandard());//标准
 								bancevo11.setWeight(bancevo.getWeight());//米重
 								bancevo11.setUnitid(bancevo.getUnitid());//计量单位
+								
+								bancevo1144.setPrjcode(bancevo.getPrjcode());//项目编码
+								bancevo1144.setPrjname(bancevo.getPrjname());//项目名称
+								bancevo1144.setPrjtypecode(bancevo.getPrjtypecode());//项目分类编码
+								bancevo1144.setPrjtypename(bancevo.getPrjtypename());//项目分类名称
+								bancevo1144.setVbatchcode(bancevo.getVbatchcode());//批次
+								bancevo1144.setCmaterialcode(bancevo.getCmaterialcode());//存货编码
+								bancevo1144.setCmaterialname(bancevo.getCmaterialname());//存货名称
+								bancevo1144.setSpec(bancevo.getSpec());//规格
+								bancevo1144.setModel(bancevo.getModel());//型号
+								bancevo1144.setColor(bancevo.getColor());//颜色
+								bancevo1144.setSizing(bancevo.getSizing());//定尺
+								bancevo1144.setAlloy(bancevo.getAlloy());//合金
+								bancevo1144.setStandard(bancevo.getStandard());//标准
+								bancevo1144.setWeight(bancevo.getWeight());//米重
+								bancevo1144.setUnitid(bancevo.getUnitid());//计量单位
+								bancevo1144.setWeight(bancevo.getWeight());
+								bancevo1144.setHeight(bancevo.getHeight());
+								bancevo1144.setCastunitid(bancevo.getCastunitid());	
+								bancevo1144.setNastnum(bancevo.getNastnum());
+								//单据属性
+								bancevo1144.setVdef1(bancevo.getVdef1());
+								bancevo1144.setVdef2(bancevo.getVdef2());
+								bancevo1144.setVdef3(bancevo.getVdef3());
+								bancevo1144.setVdef4(bancevo.getVdef4());
+								bancevo1144.setVdef5(bancevo.getVdef5());
+								bancevo1144.setVdef6(bancevo.getVdef6());
+								bancevo1144.setVdef7(bancevo.getVdef7());
+								bancevo1144.setVdef8(bancevo.getVdef8());
+								bancevo1144.setVdef9(bancevo.getVdef9());
+								bancevo1144.setVdef10(bancevo.getVdef10());
+								bancevo1144.setVdef11(bancevo.getVdef11());
+								bancevo1144.setVdef12(bancevo.getVdef12());
+								bancevo1144.setVdef13(bancevo.getVdef13());
+								bancevo1144.setVdef14(bancevo.getVdef14());
+								bancevo1144.setVdef15(bancevo.getVdef15());
+								bancevo1144.setVdef16(bancevo.getVdef16());
+								bancevo1144.setVdef17(bancevo.getVdef17());
+								bancevo1144.setVdef18(bancevo.getVdef18());
+								bancevo1144.setVdef19(bancevo.getVdef19());
+								bancevo1144.setVdef20(bancevo.getVdef20());
+								bancevo1144.setVdef21(bancevo.getVdef21());
+								bancevo1144.setVdef22(bancevo.getVdef22());
+								bancevo1144.setVdef23(bancevo.getVdef23());
+								bancevo1144.setVdef24(bancevo.getVdef24());
+								bancevo1144.setVdef25(bancevo.getVdef25());
+								bancevo1144.setVdef26(bancevo.getVdef26());
+								bancevo1144.setVdef27(bancevo.getVdef27());
+								bancevo1144.setVdef28(bancevo.getVdef28());
+								bancevo1144.setVdef29(bancevo.getVdef29());
+								bancevo1144.setVdef30(bancevo.getVdef30());
 								bancevo113.setSupplytype("库存量_公共库");//供应类型
 								bancevo113.setWarehouse("公共库");//仓库
 								bancevo113.setNum(UFDouble.ZERO_DBL);//主数量
@@ -366,6 +439,8 @@ public class YsAction extends YsQuseryAction{
 								bancevos.add(bancevo11);	
 								bancevos.add(bancevo1144);
 								bancevos.add(bancevo113);
+								
+								
 							}else {
 								bancevo113.setSupplytype("库存量_公共库");//供应类型	
 								bancevo113.setWarehouse("公共库");//仓库
@@ -378,10 +453,11 @@ public class YsAction extends YsQuseryAction{
 								UFDouble gysx=UFDouble.ZERO_DBL;
 								List<OperationSupplyVO> lisggvos=map.get("库存量_公共库");
 								for(OperationSupplyVO ggvo:lisggvos) {
-									gysx=gysx.add(ggvo.getNmny());//供应数量
+							//		gysx=gysx.add(ggvo.getNmny());//供应数量
+									gysx=gysx.add(ggvo.getNum());//供应数量
 								}
 								bancevo113.setNum(gysx);//主数量
-								if (bancevo.getNum().sub(gysx).compareTo(UFDouble.ZERO_DBL)<0) {
+								if (bancevo.getNum().sub(gysx).compareTo(UFDouble.ZERO_DBL)<=0) {
 									//需求数量-供应数量<0
 									bancevo113.setProexecutenum(bancevo.getNum().setScale(2,UFDouble.ROUND_HALF_UP ).toString());//建议执行数量
 									bancevo113.setMatchnum(bancevo.getNum().setScale(2,UFDouble.ROUND_HALF_UP ).toString());//已匹配主数量
@@ -442,13 +518,51 @@ public class YsAction extends YsQuseryAction{
 									bancevo11.setMatchnum(bancevo.getNum().sub(gysx).setScale(2,UFDouble.ROUND_HALF_UP ).toString());//已匹配主数量
 									bancevo11.setSurdenum(UFDouble.ZERO_DBL.setScale(2,UFDouble.ROUND_HALF_UP ).toString());//剩余需求主数量
 									bancevo11.setProexecute("采购");//建议执行
-									bancevoscgdd.add(bancevo11);
+									bancevo11.setCastunitid(bancevo.getCastunitid());	
+									bancevo11.setNastnum(bancevo.getNastnum());
+									bancevo11.setWeight(bancevo.getWeight());
+									bancevo11.setHeight(bancevo.getHeight());
+									bancevo11.setVdef1(bancevo.getVdef1());
+									bancevo11.setVdef2(bancevo.getVdef2());
+									bancevo11.setVdef3(bancevo.getVdef3());
+									bancevo11.setVdef4(bancevo.getVdef4());
+									bancevo11.setVdef5(bancevo.getVdef5());
+									bancevo11.setVdef6(bancevo.getVdef6());
+									bancevo11.setVdef7(bancevo.getVdef7());
+									bancevo11.setVdef8(bancevo.getVdef8());
+									bancevo11.setVdef9(bancevo.getVdef9());
+									bancevo11.setVdef10(bancevo.getVdef10());
+									bancevo11.setVdef11(bancevo.getVdef11());
+									bancevo11.setVdef12(bancevo.getVdef12());
+									bancevo11.setVdef13(bancevo.getVdef13());
+									bancevo11.setVdef14(bancevo.getVdef14());
+									bancevo11.setVdef15(bancevo.getVdef15());
+									bancevo11.setVdef16(bancevo.getVdef16());
+									bancevo11.setVdef17(bancevo.getVdef17());
+									bancevo11.setVdef18(bancevo.getVdef18());
+									bancevo11.setVdef19(bancevo.getVdef19());
+									bancevo11.setVdef20(bancevo.getVdef20());
+									bancevo11.setVdef21(bancevo.getVdef21());
+									bancevo11.setVdef22(bancevo.getVdef22());
+									bancevo11.setVdef23(bancevo.getVdef23());
+									bancevo11.setVdef24(bancevo.getVdef24());
+									bancevo11.setVdef25(bancevo.getVdef25());
+									bancevo11.setVdef26(bancevo.getVdef26());
+									bancevo11.setVdef27(bancevo.getVdef27());
+									bancevo11.setVdef28(bancevo.getVdef28());
+									bancevo11.setVdef29(bancevo.getVdef29());
+									bancevo11.setVdef30(bancevo.getVdef30());
+									if(!"生产总订单".equals(bancevo.getDemandtype())) {
+										bancevoscgdd.add(bancevo11);
+									}
+									
 								}
 								bancevos.add(bancevo113);	
 								bancevos.add(bancevo11);	
 							}
 							
 						}else {
+							
 							//公共库和工装库都有此存货
 							/*********先查询用工装库*************/
 							List<OperationSupplyVO> supplylisvos=map.get("库存量_工装库");
@@ -458,7 +572,7 @@ public class YsAction extends YsQuseryAction{
 								gysx=gysx.add(supplylisvo.getNum());//供应数量
 							}
 							bancevo11.setNum(gysx);//主数量
-							if (bancevo.getNum().sub(gysx).compareTo(UFDouble.ZERO_DBL)<0) {
+							if (bancevo.getNum().sub(gysx).compareTo(UFDouble.ZERO_DBL)<=0) {
 								//需求数量-供应数量<0
 								bancevo11.setProexecutenum(bancevo.getNum().setScale(2,UFDouble.ROUND_HALF_UP ).toString());//建议执行数量
 								bancevo11.setMatchnum(bancevo.getNum().setScale(2,UFDouble.ROUND_HALF_UP ).toString());//已匹配主数量
@@ -517,7 +631,7 @@ public class YsAction extends YsQuseryAction{
 									 gysxgg=gysxgg.add(supplyvogg.getNum());//供应数量
 								}
 								
-								if(gysxgg.sub(xyznum).compareTo(UFDouble.ZERO_DBL)>0) {
+								if(gysxgg.sub(xyznum).compareTo(UFDouble.ZERO_DBL)>=0) {
 									bancevo113.setNum(gysxgg);//主数量
 									bancevo113.setProexecutenum(xyznum.setScale(2,UFDouble.ROUND_HALF_UP ).toString());//建议执行数量
 									bancevo113.setMatchnum(xyznum.setScale(2,UFDouble.ROUND_HALF_UP ).toString());//已匹配主数量
@@ -564,10 +678,46 @@ public class YsAction extends YsQuseryAction{
 									bancevo114.setPk_operation(pk_operation);
 									bancevo114.setNum(UFDouble.ZERO_DBL.setScale(2,UFDouble.ROUND_HALF_UP ));
 									bancevo114.setProexecute("采购");//建议执行
-									bancevoscgdd.add(bancevo114);
+									if(!"生产总订单".equals(bancevo.getDemandtype())) {
+										bancevoscgdd.add(bancevo114);
+									}
 									bancevo114.setProexecutenum(xyznum.sub(gysxgg).setScale(2,UFDouble.ROUND_HALF_UP ).toString());//建议执行数量
 									bancevo114.setMatchnum(xyznum.sub(gysxgg).setScale(2,UFDouble.ROUND_HALF_UP ).toString());//已匹配主数量
 									bancevo114.setSurdenum(UFDouble.ZERO_DBL.setScale(2,UFDouble.ROUND_HALF_UP ).toString());//剩余需求主数量
+									bancevo114.setWeight(bancevo.getWeight());
+									bancevo114.setHeight(bancevo.getHeight());
+									bancevo114.setCastunitid(bancevo.getCastunitid());	
+									bancevo114.setNastnum(bancevo.getNastnum());
+									bancevo114.setVdef1(bancevo.getVdef1());
+									bancevo114.setVdef2(bancevo.getVdef2());
+									bancevo114.setVdef3(bancevo.getVdef3());
+									bancevo114.setVdef4(bancevo.getVdef4());
+									bancevo114.setVdef5(bancevo.getVdef5());
+									bancevo114.setVdef6(bancevo.getVdef6());
+									bancevo114.setVdef7(bancevo.getVdef7());
+									bancevo114.setVdef8(bancevo.getVdef8());
+									bancevo114.setVdef9(bancevo.getVdef9());
+									bancevo114.setVdef10(bancevo.getVdef10());
+									bancevo114.setVdef11(bancevo.getVdef11());
+									bancevo114.setVdef12(bancevo.getVdef12());
+									bancevo114.setVdef13(bancevo.getVdef13());
+									bancevo114.setVdef14(bancevo.getVdef14());
+									bancevo114.setVdef15(bancevo.getVdef15());
+									bancevo114.setVdef16(bancevo.getVdef16());
+									bancevo114.setVdef17(bancevo.getVdef17());
+									bancevo114.setVdef18(bancevo.getVdef18());
+									bancevo114.setVdef19(bancevo.getVdef19());
+									bancevo114.setVdef20(bancevo.getVdef20());
+									bancevo114.setVdef21(bancevo.getVdef21());
+									bancevo114.setVdef22(bancevo.getVdef22());
+									bancevo114.setVdef23(bancevo.getVdef23());
+									bancevo114.setVdef24(bancevo.getVdef24());
+									bancevo114.setVdef25(bancevo.getVdef25());
+									bancevo114.setVdef26(bancevo.getVdef26());
+									bancevo114.setVdef27(bancevo.getVdef27());
+									bancevo114.setVdef28(bancevo.getVdef28());
+									bancevo114.setVdef29(bancevo.getVdef29());
+									bancevo114.setVdef30(bancevo.getVdef30());
 									bancevos.add(bancevo11);
 									bancevos.add(bancevo113);
 									bancevos.add(bancevo114);
@@ -582,7 +732,9 @@ public class YsAction extends YsQuseryAction{
 						OperationBalanceVO bancevo2=new OperationBalanceVO();
 						bancevo2.setSupplytype("库存量_工装库");//供应类型
 						bancevo2.setProexecute("采购");//建议执行
-						bancevoscgdd.add(bancevo2);
+						if(!"生产总订单".equals(bancevo.getDemandtype())) {
+							bancevoscgdd.add(bancevo2);
+						}
 						bancevo2.setPrjcode(bancevo.getPrjcode());//项目编码
 						bancevo2.setPrjname(bancevo.getPrjname());//项目名称
 						bancevo2.setPrjtypecode(bancevo.getPrjtypecode());//项目分类编码
@@ -598,6 +750,44 @@ public class YsAction extends YsQuseryAction{
 						bancevo2.setStandard(bancevo.getStandard());//标准
 						bancevo2.setWeight(bancevo.getWeight());//米重
 						bancevo2.setUnitid(bancevo.getUnitid());//计量单位
+						bancevo2.setWeight(bancevo.getWeight());
+						bancevo2.setHeight(bancevo.getHeight());
+						bancevo2.setCastunitid(bancevo.getCastunitid());	
+						bancevo2.setNastnum(bancevo.getNastnum());
+						bancevo2.setVdef1(bancevo.getVdef1());
+						bancevo2.setVdef2(bancevo.getVdef2());
+						bancevo2.setVdef3(bancevo.getVdef3());
+						bancevo2.setVdef4(bancevo.getVdef4());
+						bancevo2.setVdef5(bancevo.getVdef5());
+						bancevo2.setVdef6(bancevo.getVdef6());
+						bancevo2.setVdef7(bancevo.getVdef7());
+						bancevo2.setVdef8(bancevo.getVdef8());
+						bancevo2.setVdef9(bancevo.getVdef9());
+						bancevo2.setVdef10(bancevo.getVdef10());
+						bancevo2.setVdef11(bancevo.getVdef11());
+						bancevo2.setVdef12(bancevo.getVdef12());
+						bancevo2.setVdef13(bancevo.getVdef13());
+						bancevo2.setVdef14(bancevo.getVdef14());
+						bancevo2.setVdef15(bancevo.getVdef15());
+						bancevo2.setVdef16(bancevo.getVdef16());
+						bancevo2.setVdef17(bancevo.getVdef17());
+						bancevo2.setVdef18(bancevo.getVdef18());
+						bancevo2.setVdef19(bancevo.getVdef19());
+						bancevo2.setVdef20(bancevo.getVdef20());
+						bancevo2.setVdef21(bancevo.getVdef21());
+						bancevo2.setVdef22(bancevo.getVdef22());
+						bancevo2.setVdef23(bancevo.getVdef23());
+						bancevo2.setVdef24(bancevo.getVdef24());
+						bancevo2.setVdef25(bancevo.getVdef25());
+						bancevo2.setVdef26(bancevo.getVdef26());
+						bancevo2.setVdef27(bancevo.getVdef27());
+						bancevo2.setVdef28(bancevo.getVdef28());
+						bancevo2.setVdef29(bancevo.getVdef29());
+						bancevo2.setVdef30(bancevo.getVdef30());
+						if(null==bancevo.getNum()) {
+							String type=bancevo.getDemandtype();//需求类型
+							throw new  ValidationException("需求类型:【"+type+"】存货编码:【"+bancevo.getCmaterialcode()+"】主数量不能为空!");
+						}
 						bancevo2.setProexecutenum(bancevo.getNum().toString());//建议执行数量
 						bancevo2.setWarehouse("工装库");//仓库
 						bancevo2.setNum(UFDouble.ZERO_DBL);//主数量
@@ -633,7 +823,7 @@ public class YsAction extends YsQuseryAction{
 						bancevos.add(bancevo3);	
 					}
 				}
-				
+			
 				ivo.insertVOList(bancevos);
 			}catch(Exception e) {
 				ivo.deleteByPK(OperationMainVO.class,pk_operation);
@@ -647,7 +837,6 @@ public class YsAction extends YsQuseryAction{
 				 * 生成请购单
 				 * 
 				 */
-			
 			try {
 				if(null!=bancevoscgdd && bancevoscgdd.size()>0) {
 					OperationPurchaseVO[] purchasevos=new OperationPurchaseVO[bancevoscgdd.size()];
@@ -669,10 +858,44 @@ public class YsAction extends YsQuseryAction{
 						vo.setAlloy(cgdd.getAlloy());
 						vo.setStandard(cgdd.getStandard());
 						vo.setWeight(cgdd.getWeight());
+						vo.setHeight(cgdd.getHeight());
 						vo.setNum(new UFDouble(cgdd.getProexecutenum()));
 						vo.setNprice(cgdd.getNprice());
 						vo.setNmny(cgdd.getNmny());
 						vo.setPk_operation(pk_operation);
+						vo.setCastunitid(cgdd.getCastunitid());	
+						vo.setNastnum(cgdd.getNastnum());
+						vo.setVdef1(cgdd.getVdef1());
+						vo.setVdef2(cgdd.getVdef2());
+						vo.setVdef3(cgdd.getVdef3());
+						vo.setVdef4(cgdd.getVdef4());
+						vo.setVdef5(cgdd.getVdef5());
+						vo.setVdef6(cgdd.getVdef6());
+						vo.setVdef7(cgdd.getVdef7());
+						vo.setVdef8(cgdd.getVdef8());
+						vo.setVdef9(cgdd.getVdef9());
+						vo.setVdef10(cgdd.getVdef10());
+						vo.setVdef11(cgdd.getVdef11());
+						vo.setVdef12(cgdd.getVdef12());
+						vo.setVdef13(cgdd.getVdef13());
+						vo.setVdef14(cgdd.getVdef14());
+						vo.setVdef15(cgdd.getVdef15());
+						vo.setVdef16(cgdd.getVdef16());
+						vo.setVdef17(cgdd.getVdef17());
+						vo.setVdef18(cgdd.getVdef18());
+						vo.setVdef19(cgdd.getVdef19());
+						vo.setVdef20(cgdd.getVdef20());
+						vo.setVdef21(cgdd.getVdef21());
+						vo.setVdef22(cgdd.getVdef22());
+						vo.setVdef23(cgdd.getVdef23());
+						vo.setVdef24(cgdd.getVdef24());
+						vo.setVdef25(cgdd.getVdef25());
+						vo.setVdef26(cgdd.getVdef26());
+						vo.setVdef27(cgdd.getVdef27());
+						vo.setVdef28(cgdd.getVdef28());
+						vo.setVdef29(cgdd.getVdef29());
+						vo.setVdef30(cgdd.getVdef30());//来源单据主表主键--材料采购单
+						
 						purchasevos[flg]=vo;
 						flg+=1;
 					}
@@ -719,10 +942,10 @@ public class YsAction extends YsQuseryAction{
 						fg+=1;
 					}
 					
-					PraybillVO vo = new PraybillVO();
-					vo.setParentVO(header);
-					vo.setChildrenVO(items);
-					iIplatFormEntry.processAction("SAVEBASE", "20", vo.getHeadVO().getDpraydate().toString(), null, vo, null, null);
+//					PraybillVO vo = new PraybillVO();
+//					vo.setParentVO(header);
+//					vo.setChildrenVO(items);
+//					iIplatFormEntry.processAction("SAVEBASE", "20", vo.getHeadVO().getDpraydate().toString(), null, vo, null, null);
 					ivo.insertVOArray(purchasevos);
 					
 					
@@ -779,12 +1002,12 @@ public class YsAction extends YsQuseryAction{
 					}
 					
 					
-					SpecialBillVO aggvo=new  SpecialBillVO();
+			//		SpecialBillVO aggvo=new  SpecialBillVO();
 					SpecialBillHeaderVO headvo=new SpecialBillHeaderVO();
 					headvo.setCbilltypecode("4K");
-					headvo.setCinwarehouseid("1001V51000000000039Z");//入库仓库ID  工装
+					headvo.setCinwarehouseid(getstordocpk("GZ001"));//入库仓库ID  工装
 					headvo.setCoperatorid(ClientEnvironment.getInstance().getUser().getPrimaryKey());
-					headvo.setCoutwarehouseid("1001V5100000000003A1");//出库仓库ID  家装
+					headvo.setCoutwarehouseid(getstordocpk("JZ002"));//出库仓库ID  家装
 					headvo.setCshlddiliverdate(new UFDate(ClientEnvironment.getInstance().getBusinessDate().toString()));
 					headvo.setDbilldate(new UFDate(ClientEnvironment.getInstance().getBusinessDate().toString()));
 					headvo.setFbillflag(2);
@@ -800,9 +1023,9 @@ public class YsAction extends YsQuseryAction{
 						billitem.setDshldtransnum(new UFDouble(vo.getMatchnum()));
 						billitems[i]=billitem;
 					}
-					aggvo.setParentVO(headvo);
-					aggvo.setChildrenVO(billitems);
-					iIplatFormEntry.processAction( "WRITE", "4K",null, null, aggvo, null, null);
+//					aggvo.setParentVO(headvo);
+//					aggvo.setChildrenVO(billitems);
+//					iIplatFormEntry.processAction( "WRITE", "4K",null, null, aggvo, null, null);
 					ivo.insertVOArray(purchasevos_zk);
 				}
 			}catch(Exception e) {
@@ -812,16 +1035,244 @@ public class YsAction extends YsQuseryAction{
 				ivo.deleteVOList(bancevos);
 				throw new  ValidationException(e.getMessage());
 			}	
+			
+			getDataModel().setExtraCondition(" and pk_corp = '" + Global.getCorpPK() + "'"+" and pk_operation=  '" + pk_operation + "'"   );
 	
 			}else {
-				
 				//家装
+				/**
+				 * 1.查询安全库存的存货、起订点
+				 * 2.存货查询现存量
+				 * 3.没现存量的就生成请购
+				 * 
+				 */
+				
+				String sqlaqkc="select cmaterialcode,color,sizing ,alloy,standard from  ic_safetystock where isnull(dr,0)=0;";
+				List<AqkcVO> lisobs=(List<AqkcVO>) iuap.executeQuery(sqlaqkc, new BeanListProcessor(AqkcVO.class));
+				if(null==lisobs || lisobs.size()==0) {
+					throw new  ValidationException("请先维护下安全库存!");
+				}
+				
+				String vbillcode=new BillcodeGenerater().getBillCode("MM01", PubEnv.getPk_corp(), null, null);
+				OperationMainVO opmainvo=new OperationMainVO();
+				opmainvo.setBillmaker(ClientEnvironment.getInstance().getUser().getPrimaryKey());
+				opmainvo.setDbilldate(new UFDate(ClientEnvironment.getInstance().getBusinessDate().toString()));
+				opmainvo.setBusitype(butype);
+				opmainvo.setBillstatus(8);
+				opmainvo.setPk_corp(PubEnv.getCorpCode());
+				opmainvo.setProjectid(xmname);
+				opmainvo.setVbillcode(vbillcode);
+				String pk_operation=ivo.insertVO(opmainvo);
+				
+				//需求页签
+				String sqlaqkc2="select *  from  ic_safetystock where isnull(dr,0)=0;";
+				List<SafetystockVO> lisobs2=(List<SafetystockVO>) iuap.executeQuery(sqlaqkc2, new BeanListProcessor(SafetystockVO.class));
+				
+				List<OperationDemandVO> demandvos=new ArrayList<OperationDemandVO>();
+				
+				for(int i=0;i<lisobs2.size();i++) {
+					OperationDemandVO  operdemandvo=new OperationDemandVO();
+					SafetystockVO styvo=lisobs2.get(i);
+					operdemandvo.setAlloy(styvo.getAlloy());
+					operdemandvo.setColor(styvo.getColor());
+					operdemandvo.setPk_operation(pk_operation);
+					operdemandvo.setNum(new UFDouble(styvo.getVdef1()));
+					operdemandvo.setDemandtyoe("安全库存");
+					operdemandvo.setDemanddate(PubEnv.getLoginDate().toString());
+//					operdemandvo.setWarehouse(getstordocpk("JZ002"));//仓库
+//					operdemandvo.setCmaterialcode(getCmangchid(styvo.getCmaterialcode()));//存货编码
+//					operdemandvo.setCmaterialname(styvo.getCmaterialname());//存货名称
+					String cmaterpk=styvo.getCmaterialcode();
+					operdemandvo.setCmaterialcode(getCmangcodename(cmaterpk,"invcode"));//存货编码
+					operdemandvo.setCmaterialname(getCmangcodename(cmaterpk,"invname"));//存货名称
+					operdemandvo.setSpec(styvo.getSpec());
+					operdemandvo.setModel(styvo.getModel());
+//					operdemandvo.setColor(styvo.getColor());
+//					operdemandvo.setSizing(styvo.getSizing());
+//					operdemandvo.setAlloy(styvo.getAlloy());
+//					operdemandvo.setStandard(styvo.getStandard());
+					operdemandvo.setColor(getdefdocid(styvo.getColor(),"YS(颜色)"));
+					operdemandvo.setSizing(getdefdocid(styvo.getSizing(),"DC(定尺)"));
+					operdemandvo.setAlloy(getdefdocid(styvo.getAlloy(),"HI(合金)"));
+					operdemandvo.setStandard(getdefdocid(styvo.getStandard(),"BZ(标准)"));
+					demandvos.add(operdemandvo);
+				}
+				ivo.insertVOList(demandvos);
+				
+				// 存货主键:cmaterialcode  color : 颜色   sizing;尺寸  alloy :合金   standard : 标准   VDEF1:起订点
+				List<String> lisvos=(List<String>) iuap.executeQuery("select cmaterialcode from  ic_safetystock where isnull(dr,0)=0;", new ColumnListProcessor());
+				
+				//查询现存量
+				SqlBuilder sqlbuild=new SqlBuilder();
+				String sqlonhandnum="select  vlot,cwarehouseid,cinventoryid,cinvbasid,vfree1,vfree2,vfree3,vfree4,nonhandnum "
+						+ "from  ic_onhandnum  where cwarehouseid= (select pk_stordoc  from  bd_stordoc "
+						+ "where storcode='JZ002') and  nonhandnum>0  and  ";
+				sqlbuild.append(sqlonhandnum);
+				sqlbuild.append("cinventoryid", lisvos.toArray(new String[lisvos.size()]));
+				
+				List<OnhandunmUAPVO> lisonhandnums_gg= (List<OnhandunmUAPVO>) iuap.executeQuery(sqlbuild.toString(), new BeanListProcessor(OnhandunmUAPVO.class));
+				List<OperationSupplyVO> supplyvos=new ArrayList<OperationSupplyVO>();
+				for(OnhandunmUAPVO vo:lisonhandnums_gg) {
+					OperationSupplyVO opernsupplyvo=new  OperationSupplyVO();
+					opernsupplyvo.setSupplytype("库存量_家装库");//供应类型
+	//				opernsupplyvo.setVbatchcode(vo.getVlot());//批次
+					opernsupplyvo.setCmaterialcode(getInvbasdocValue(vo.getCinvbasid(),"invcode"));//物料编码
+					opernsupplyvo.setCmaterialname(getInvbasdocValue(vo.getCinvbasid(),"invname"));//物料名称
+					opernsupplyvo.setSpec(getInvbasdocValue(vo.getCinvbasid(),"invspec"));//规格
+					opernsupplyvo.setModel(getInvbasdocValue(vo.getCinvbasid(),"invtype"));//型号
+					opernsupplyvo.setColor(vo.getVfree1());//颜色
+					opernsupplyvo.setSizing(vo.getVfree3());//定尺
+					opernsupplyvo.setAlloy(vo.getVfree2());//合金
+					opernsupplyvo.setStandard(vo.getVfree4());//标准
+					opernsupplyvo.setNum(new UFDouble(vo.getNonhandnum()));//数量
+					opernsupplyvo.setVdef1(getStordocValue(vo.getCwarehouseid(),"storname"));//仓库名称
+					opernsupplyvo.setPk_operation(pk_operation);//主表主键
+					supplyvos.add(opernsupplyvo);
+				}
+				
+				ivo.insertVOList(supplyvos);
+				
+				
+				
+				//供需平衡结果
+				List<OperationBalanceVO> bancevos=new ArrayList<OperationBalanceVO>();
+				List<OperationBalanceVO> bancevoscg=new ArrayList<OperationBalanceVO>();//采购
+				//查询需求页签数据
+			    String sqlxq="select * from mm_operation_demand where pk_operation='"+pk_operation+"' and isnull(dr,0)=0 ";
+				List<OperationDemandVO> lisopens=(List<OperationDemandVO>) iuap.executeQuery(sqlxq, new BeanListProcessor(OperationDemandVO.class));
+				for(OperationDemandVO vo:lisopens) {
+					OperationBalanceVO bancevo=new OperationBalanceVO();
+					for(String name : bancevo.getAttributeNames()) {
+						if("ts".equals(name)) {
+							continue;
+						}else if("demandtype".equals(name)) {
+							bancevo.setDemandtype("安全库存");//需求类型
+						}else {
+							bancevo.setAttributeValue(name, vo.getAttributeValue(name));
+						}
+						
+					}
+				
+					bancevos.add(bancevo);
+					
+					//供应数据--查询供应页签数据库数据
+					StringBuffer sbf=new StringBuffer();
+					String gysqlw="select * from mm_operation_supply where pk_operation='"+pk_operation+"' and isnull(dr,0)=0 "
+							+ "and cmaterialcode='"+bancevo.getCmaterialcode()+"' ";
+					sbf.append(gysqlw);		
+					if(null!=vo.getColor() && !"".equals(vo.getColor())) {
+						sbf.append( " and color='"+vo.getColor()+"' ");
+					}
+					if(null!=vo.getSizing() && !"".equals(vo.getSizing())) {
+						sbf.append( " and  sizing='"+vo.getSizing()+"' ");
+					}
+					if(null!=vo.getAlloy() && !"".equals(vo.getAlloy())) {
+						sbf.append( " and alloy='"+vo.getAlloy()+"' ");
+					}
+					if(null!=vo.getStandard() && !"".equals(vo.getStandard())) {
+						sbf.append( " and standard='"+vo.getStandard()+"' ");
+					}
+				   //查询供应页签--现存量
+					List<OperationSupplyVO> lissupplyvos=(List<OperationSupplyVO>) iuap.executeQuery(sbf.toString(), new BeanListProcessor(OperationSupplyVO.class));
+					if(null!=lissupplyvos && lissupplyvos.size()>0) {
+						UFDouble toalnum= UFDouble.ZERO_DBL;//现存量总数量
+						for(OperationSupplyVO  supiyvo:lissupplyvos) {
+							UFDouble num=supiyvo.getNum();
+							toalnum=toalnum.add(num);
+						}
+						
+						//安全库存起订点大于等于现存量,需要采购
+						if(new UFDouble(vo.getNum()).compareTo(toalnum)>=0) {
+							OperationBalanceVO bancevo1=new OperationBalanceVO();
+							bancevo1.setSupplytype("库存量_家装库");//供应类型
+							bancevo1.setWarehouse("家装库");//仓库
+							bancevo1.setProexecutenum(new UFDouble(vo.getNum()).sub(toalnum).setScale(2,UFDouble.ROUND_HALF_UP ).toString());//建议执行数量
+							bancevo1.setMatchnum(new UFDouble(vo.getNum()).sub(toalnum).setScale(2,UFDouble.ROUND_HALF_UP ).toString());//已匹配主数量
+							bancevo1.setSurdenum(UFDouble.ZERO_DBL.setScale(2,UFDouble.ROUND_HALF_UP ).toString());//剩余需求主数量
+							bancevo1.setPk_operation(pk_operation);
+							bancevo1.setCmaterialcode(bancevo.getCmaterialcode());//存货编码
+							bancevo1.setCmaterialname(bancevo.getCmaterialname());//存货名称
+							bancevo1.setSpec(bancevo.getSpec());//规格
+							bancevo1.setModel(bancevo.getModel());//型号
+							bancevo1.setColor(bancevo.getColor());//颜色
+							bancevo1.setSizing(bancevo.getSizing());//定尺
+							bancevo1.setAlloy(bancevo.getAlloy());//合金
+							bancevo1.setStandard(bancevo.getStandard());//标准
+							bancevo1.setWeight(bancevo.getWeight());//米重
+							bancevo1.setUnitid(bancevo.getUnitid());//计量单位
+							bancevo1.setProexecute("采购");//建议执行
+							bancevoscg.add(bancevo1);
+							bancevos.add(bancevo1);
+						}
+						
+						
+					}else {
+						OperationBalanceVO bancevo1=new OperationBalanceVO();
+						bancevo1.setSupplytype("库存量_家装库");//供应类型
+						bancevo1.setWarehouse("家装库");//仓库
+						bancevo1.setProexecutenum(new UFDouble(vo.getNum()).setScale(2,UFDouble.ROUND_HALF_UP ).toString());//建议执行数量
+						bancevo1.setMatchnum(new UFDouble(vo.getNum()).setScale(2,UFDouble.ROUND_HALF_UP ).toString());//已匹配主数量
+						bancevo1.setSurdenum(UFDouble.ZERO_DBL.toString());//剩余需求主数量
+						bancevo1.setPk_operation(pk_operation);
+						bancevo1.setCmaterialcode(bancevo.getCmaterialcode());//存货编码
+						bancevo1.setCmaterialname(bancevo.getCmaterialname());//存货名称
+						bancevo1.setSpec(bancevo.getSpec());//规格
+						bancevo1.setModel(bancevo.getModel());//型号
+						bancevo1.setColor(bancevo.getColor());//颜色
+						bancevo1.setSizing(bancevo.getSizing());//定尺
+						bancevo1.setAlloy(bancevo.getAlloy());//合金
+						bancevo1.setStandard(bancevo.getStandard());//标准
+						bancevo1.setWeight(bancevo.getWeight());//米重
+						bancevo1.setUnitid(bancevo.getUnitid());//计量单位
+						bancevo1.setProexecute("采购");//建议执行
+						bancevos.add(bancevo1);
+						bancevoscg.add(bancevo1);
+						
+					}
+				
+				}
+				
+				ivo.insertVOList(bancevos);
+				
+				
+				// 采购需求  
+				if(null!=bancevoscg && bancevoscg.size()>0) {
+					OperationPurchaseVO[] purchasevos=new OperationPurchaseVO[bancevoscg.size()];
+					int flg=0;
+					for(OperationBalanceVO cgdd : bancevoscg) {
+						OperationPurchaseVO vo=new OperationPurchaseVO();
+						vo.setPrjcode(cgdd.getPrjcode());
+						vo.setPrjname(cgdd.getPrjname());
+						vo.setPrjtypecode(cgdd.getPrjtypecode());
+						vo.setPrjtypename(cgdd.getPrjtypename());
+						vo.setVbatchcode(cgdd.getVbatchcode());
+						vo.setWarehouse(cgdd.getWarehouse());
+						vo.setCmaterialcode(cgdd.getCmaterialcode());
+						vo.setCmaterialname(cgdd.getCmaterialname());
+						vo.setSpec(cgdd.getSpec());
+						vo.setModel(cgdd.getModel());
+						vo.setColor(cgdd.getColor());
+						vo.setSizing(cgdd.getSizing());
+						vo.setAlloy(cgdd.getAlloy());
+						vo.setStandard(cgdd.getStandard());
+						vo.setWeight(cgdd.getWeight());
+						vo.setNum(new UFDouble(cgdd.getProexecutenum()));
+						vo.setNprice(cgdd.getNprice());
+						vo.setNmny(cgdd.getNmny());
+						vo.setPk_operation(pk_operation);
+						purchasevos[flg]=vo;
+						flg+=1;
+					}
+					ivo.insertVOArray(purchasevos);
+					
+				}
+				
+				
+				getDataModel().setExtraCondition(" and pk_corp = '" + Global.getCorpPK() + "'"+" and pk_operation=  '" + pk_operation + "'"   );
 				
 				
 			}
-			
-			
-			getDataModel().setExtraCondition(" and pk_corp = '" + Global.getCorpPK() + "'"+" and pk_operation=  '" + pk_operation + "'"   );
+
 			
 			super.execute();
 			
@@ -873,6 +1324,17 @@ public class YsAction extends YsQuseryAction{
 	}
 	
 	
+	public String getCmangcodename(String pk_invmandoc,String value) throws BusinessException {
+		String cmangid = null;
+		String sql = " select invcode,invname from bd_invbasdoc where pk_invbasdoc =( select pk_invbasdoc from bd_invmandoc" + " where pk_invmandoc  ='" + pk_invmandoc + "' and dr =0 )";
+		cmangid = (String) iuap.executeQuery(sql, new ColumnProcessor(value));
+		if (cmangid == null) {
+			throw new BusinessException("U8C物料主键不存在:" + pk_invmandoc);
+		}
+		return cmangid;
+	}
+	
+	
 	
     //物料
     public  String getInvbasdocValue(String pk_invbasdoc,String param) throws Exception {
@@ -910,7 +1372,26 @@ public class YsAction extends YsQuseryAction{
     }
     
     
+    public  String getstordocpk(String storcode)throws Exception{
+    	String sql = "select pk_stordoc from bd_stordoc where storcode = '"+storcode+"'";
+    	String pk_stordoc = (String) iuap.executeQuery(sql, new ColumnProcessor());
+    	if(pk_stordoc == null) {
+    		throw new Exception("仓库"+storcode+"未查到,请检查");
+    	}
+    	return pk_stordoc;
+    }
     
+ 
+    //查询自定义档案主键查询编码
+    public  String getdefdocid(String pk_defdoc,String defcode) throws Exception{
+    	String qrysql = "select docname from bd_defdoc where pk_defdoclist = "
+    			+ "(select pk_defdoclist from bd_defdef where defcode='"+defcode+"') and pk_defdoc = '"+pk_defdoc+"'";
+    	String res = (String) iuap.executeQuery(qrysql, new ColumnProcessor());
+    	if(res == null) {
+    		return "";
+    	}
+    	return res;
+    }
     
 	
   }