用友NC63 醫藥行業 消耗彙總 出庫單批次模糊查詢
阿新 • • 發佈:2018-12-16
背景: v6醫藥行業 消耗彙總 參照 銷售出庫單 彈出的查詢對話方塊裡的 產品批號 條件原本是參照格式,根據vfree6 自有輔助屬性6 linked 得到的 。
客戶不滿意該處,需要找物料才能進行查詢,要求只需要輸入一個模糊的 批號的值, 就可以查詢該批號的出庫單。
修改後程式碼如下:liljb編輯。
package nc.ui.ic.m50.action; import java.util.ArrayList; import java.util.List; import nc.bs.framework.common.NCLocator; import nc.itf.ic.vmirule.IVmiRuleService; import nc.itf.uap.IUAPQueryBS; import nc.pubitf.rbac.IFunctionPermissionPubService; import nc.ui.ic.m50.model.VmiSumModelService; import nc.ui.ic.m50.query.VmiSumQueryCondProcessor; import nc.ui.ic.m50.view.ICVmiSumDialog; import nc.ui.pubapp.uif2app.query2.QueryConditionDLGDelegator; import nc.ui.pubapp.uif2app.query2.action.DefaultQueryAction; import nc.ui.pubapp.uif2app.query2.model.ModelDataManager; import nc.ui.querytemplate.querytree.FromWhereSQL; import nc.ui.querytemplate.querytree.FromWhereSQLImpl; import nc.ui.querytemplate.querytree.IQueryScheme; import nc.ui.scmpub.action.SCMActionInitializer; import nc.vo.ic.m50.entity.VmiSumGenerateParam; import nc.vo.ic.m50.entity.VmiSumQueryParam; import nc.vo.ic.pub.define.ICPubMetaNameConst; import nc.vo.ic.pub.util.CollectionUtils; import nc.vo.ic.pub.util.ValueCheckUtil; import nc.vo.ic.vmirule.entity.VmiRuleHeadVO; import nc.vo.ic.vmirule.entity.VmiRuleVO; import nc.vo.org.OrgVO; import nc.vo.pub.BusinessException; import nc.vo.pubapp.AppContext; import nc.vo.pubapp.pattern.exception.ExceptionUtils; import nc.vo.pubapp.pattern.pub.PubAppTool; import nc.vo.pubapp.pattern.pub.SqlBuilder; import nc.vo.pubapp.query2.sql.process.QuerySchemeProcessor; import nc.vo.scmpub.res.SCMActionCode; /** * 消耗彙總查詢Action;此動作查詢出庫單進行消耗彙總 */ public class VmiSumOutBillAction extends DefaultQueryAction { private static final long serialVersionUID = 2010090423320001L; /** * 顯示生成消耗彙總單查詢結果的對話方塊,即顯示出庫單VO和銷售發票VO的對話方塊 */ private ICVmiSumDialog icVmiSumDialog; private VmiSumQueryCondProcessor vmiSumQueryCondProcessor = null; public VmiSumOutBillAction() { SCMActionInitializer.initializeAction(this, SCMActionCode.IC_VMISUMOUTBILL); } public ICVmiSumDialog getIcVmiSumDialog() { if (this.icVmiSumDialog == null) { this.icVmiSumDialog = new ICVmiSumDialog(this.getModel().getContext().getEntranceUI()); this.icVmiSumDialog.initQueryDialog(this, this.icVmiSumDialog); } return this.icVmiSumDialog; } public VmiSumGenerateParam getVmiSumGenerateParam() { return this.getCondProcessor().getVmiSumGenerateParam(); } public VmiSumQueryParam getVmiSumQueryParam() { return this.getCondProcessor().getVmiSumQueryParam(); } public void setIcVmiSumDialog(ICVmiSumDialog dialog) { this.icVmiSumDialog = dialog; } private void constructParams(QueryConditionDLGDelegator delegator) { // 獲取Sql串時,不需要生成真正的Sql串,而是生成一個查詢條件物件vmiSumQueryParam FromWhereSQL querySQL = delegator.getQueryConditionDLG().getTableJoinFromWhereSQL(); String fromPart = querySQL.getFrom(); String wherePart = querySQL.getWhere(); if (!PubAppTool.isNull(fromPart)) { fromPart = fromPart.replace(" ic_flow", " flow"); } if (!PubAppTool.isNull(wherePart)) { wherePart = wherePart.replace("ic_flow.", "flow."); } this.getCondProcessor() .fillVmiSumQueryParam(delegator, fromPart, wherePart); this.getCondProcessor().fillVmiSumGenerateParam(delegator); } private VmiSumQueryCondProcessor getCondProcessor() { if (this.vmiSumQueryCondProcessor == null) { this.vmiSumQueryCondProcessor = new VmiSumQueryCondProcessor(); } return this.vmiSumQueryCondProcessor; } private String[] getFuncPermissionOrg(OrgVO[] orgVOs) { if (orgVOs == null) { return null; } String[] pk_orgs = new String[orgVOs.length]; for (int i = 0; i < pk_orgs.length; i++) { pk_orgs[i] = orgVOs[i].getPk_org(); } return pk_orgs; } /** * 許可權校驗 * * @param cvmiruleid */ private void validatePower(String cvmiruleid) { VmiRuleVO[] ruleVO = null; try { SqlBuilder sqlpart = new SqlBuilder(); sqlpart.append( VmiRuleHeadVO.TABLE_NAME + "." + VmiRuleHeadVO.CVMIRULEHID, cvmiruleid); ruleVO = NCLocator.getInstance().lookup(IVmiRuleService.class) .query(sqlpart.toString()); } catch (BusinessException e) { ExceptionUtils.wrappException(e); return; } final String funcode = "40082802"; String cuserid = AppContext.getInstance().getPkUser(); String pkGroup = AppContext.getInstance().getPkGroup(); List<String> orgList = new ArrayList<String>(); try { OrgVO[] orgVOs = NCLocator.getInstance().lookup(IFunctionPermissionPubService.class) .getUserPermissionOrg(cuserid, funcode, pkGroup); String[] orgs = this.getFuncPermissionOrg(orgVOs); CollectionUtils.addArrayToList(orgList, orgs); } catch (BusinessException e) { ExceptionUtils.wrappException(e); } if (ValueCheckUtil.isNullORZeroLength(ruleVO)) { ExceptionUtils .wrappBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() .getStrByID("4008015_0", "04008015-0011")/*@res "請檢查消耗彙總規則是否已經被刪除"*/); return; } for (VmiRuleVO rule : ruleVO) { if (!orgList.contains(rule.getParentVO().getAttributeValue( VmiRuleHeadVO.PK_ORG))) { ExceptionUtils .wrappBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() .getStrByID("4008015_0", "04008015-0012")/*@res "當前使用者沒有彙總規則定義中財務組織的資料許可權"*/); return; } } } @Override protected void executeQuery(IQueryScheme queryScheme) { QueryConditionDLGDelegator delegator = this.getQryDLGDelegator(); this.constructParams(delegator); // 注:通過引數傳過來的sqlWhere沒有用,生成消耗彙總單不需要這個引數 // 因為 // 1. 查詢引數已經包裝成vmiSumQueryParam,需要傳到後臺進行復雜的sql邏輯處理 // 2. 生成消耗彙總單的引數已經包裝成vmiSumGenerateParam,需要傳到後臺進行消耗彙總 VmiSumQueryParam vmiSumQueryParam = this.getVmiSumQueryParam(); // String sqlold=queryScheme.getTableJoinFromWhereSQL(); String old=queryScheme.getTableJoinFromWhereSQL().getWhere().toString(); //liljb add String new1="";//liljb add FromWhereSQLImpl newFrom= (FromWhereSQLImpl) queryScheme.getTableJoinFromWhereSQL();//liljb add //增加下面的if 判斷 如果有vfree7 的sql 進行替換處理 liljb if(old.contains("AND ic_flow.vfree7 = '")){ old.length(); int indexofnext = old.indexOf("AND ic_flow.vfree7 = '"); String old2=old.substring(indexofnext+22, old.length()); int indexofnext2=old2.indexOf("'"); int len=indexofnext+22+indexofnext2; String old3=old.substring(indexofnext, len+1); new1= old.substring(indexofnext+22, indexofnext+22+indexofnext2); System.out.println(new1); String sqlmid="AND ic_flow.vfree6 IN ( SELECT mlot.pk_lotno FROM med_lotno_148 mlot where mlot.vlotno like '%"+new1+"%' AND nvl(mlot.dr,0)=0 ) "; String old4= old.replace(old3, sqlmid); newFrom.setWhere(old4); } //return FromWhereSQL 介面 queryScheme.getTableJoinFromWhereSQL(); // vmiSumQueryParam.setFromWhereSQL(queryScheme.getTableJoinFromWhereSQL()); OLD liljb 消耗彙總出庫單查詢替換vfree6為7 vmiSumQueryParam.setFromWhereSQL(newFrom);//liljb 替換上行程式碼 QuerySchemeProcessor proc = new QuerySchemeProcessor(queryScheme); String[] dbilldate = proc.getQueryCondition(ICPubMetaNameConst.DBILLDATE).getValues(); vmiSumQueryParam.setDbilldate(dbilldate); this.validatePower(vmiSumQueryParam.getCvmirulehid()); ModelDataManager dataManager = (ModelDataManager) super.getDataManager(); VmiSumModelService service = (VmiSumModelService) dataManager.getQryService(); try { this.getIcVmiSumDialog().setViewData( service.generateVmiSumQuery(vmiSumQueryParam)); this.getIcVmiSumDialog().setVmiSumGenerateParam( this.getVmiSumGenerateParam()); this.getIcVmiSumDialog().showModal(); } catch (Exception e) { ExceptionUtils.wrappException(e); } } /** * 生成消耗彙總單彙總條件提示資訊 */ @Override protected void showQueryInfo() { // } }