AceAddHandler
package nc.ui.jygyl.inventory.ace.handler;
import nc.ui.pubapp.uif2app.event.IAppEventHandler;
import nc.ui.pubapp.uif2app.event.billform.AddEvent;
import nc.vo.pub.lang.UFDate;
import nc.vo.pub.pf.BillStatusEnum;
import nc.vo.pubapp.AppContext;
import nc.ui.pub.bill.BillCardPanel;
public class AceAddHandler implements IAppEventHandler<AddEvent> {
@Override
public void handleAppEvent(AddEvent e) {
String pk_group = e.getContext().getPk_group();
String pk_org = e.getContext().getPk_org();
BillCardPanel panel = e.getBillForm().getBillCardPanel();
// 设置主组织默认值
panel.setHeadItem("pk_group", pk_group);
panel.setHeadItem("pk_org", pk_org);
// 设置单据状态、单据业务日期默认值
panel.setHeadItem("vbillstatus", BillStatusEnum.FREE.value());
//单据类型
panel.setHeadItem("pk_billtype", "PDDJ");
//交易编码
panel.setHeadItem("transtypecode", "PDDJ");
// 盘点人 //获取当前登录用户的上下文信息
panel.setHeadItem("pdr", e.getContext().getPk_loginUser());
}
}
根据项目季度带出表体信息,每个项目季度在盘点表中只能存在一次(进行保存校验,根据项目和单据日期(季度开始日期和结束日期来查询)来查询是否有着一张盘点表), 根据季度的选择来给单据日期赋值(选择每个季度的最后一天);盘点人带出制单人。
AceHeadTailAfterEditHandler
package nc.ui.jygyl.inventory.ace.handler;
import java.util.List;
import nc.bs.framework.common.NCLocator;
import nc.itf.uap.IUAPQueryBS;
import nc.jdbc.framework.processor.ArrayListProcessor;
import nc.ui.pubapp.uif2app.event.IAppEventHandler;
import nc.ui.pubapp.uif2app.event.card.CardHeadTailAfterEditEvent;
import nc.vo.jygyl.inventory.InventoryBVO;
import nc.vo.jygyl.tool.NullValueUtils;
import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFDate;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.pubapp.pattern.pub.SqlBuilder;
/**
* 单据表头表尾字段编辑后事件处理类
*
* @since 6.0
* @version 2011-7-7 下午02:52:22
* @author duy
*/
public class AceHeadTailAfterEditHandler implements IAppEventHandler<CardHeadTailAfterEditEvent> {
@Override
public void handleAppEvent(CardHeadTailAfterEditEvent e) {
String key = e.getKey();
try {
// 判断当前编辑字段是盘点人
if (key.equals("pdr")) {
pdrafter(e);
}
// 判断当前编辑字段是季度
if (key.equals("jd")) {
jdafter(e);
xmafter(e);
}
// 判断当前编辑字段是项目
if (key.equals("xmbm")) {
xmafter(e);
}
} catch (BusinessException e1) {
ExceptionUtils.wrappBusinessException(e1.getMessage());
}
}
/**
* 根据季度自动带出单据日期
* @author wf
* @date : 2023-06-21
* @param e
*/
private void jdafter(CardHeadTailAfterEditEvent e) {
// TODO 自动生成的方法存根
// 季度
String jd = NullValueUtils.getNullStringValue(e.getBillCardPanel().getHeadItem("jd").getValueObject());
// 单据日期(获取年份)
String date = NullValueUtils.getNullStringValue(new UFDate().getYear());
if (jd.equals("1")) {
//直接给date赋值
date = date+"-03-31";
} else if (jd.equals("2")) {
date = date+"-06-30";
} else if (jd.equals("3")) {
date = date+"-09-30";
} else if (jd.equals("4")) {
date = date+"-12-31";
}
e.getBillCardPanel().setHeadItem("dbilldate", NullValueUtils.getUFDateNullValue(date));
}
/**
* 根据季度、项目带出表体
* @author wf
* @date : 2023-06-21
* @param e
* @throws BusinessException
*/
@SuppressWarnings("unchecked")
private void xmafter(CardHeadTailAfterEditEvent e) throws BusinessException {
// TODO 自动生成的方法存根
String xmbm = NullValueUtils.getNullStringValue(e.getBillCardPanel().getHeadItem("xmbm").getValueObject());
String jd = NullValueUtils.getNullStringValue(e.getBillCardPanel().getHeadItem("jd").getValueObject());
if (jd.equals("")) {
throw new BusinessException("季度不可以为空,请检查!");
}
// 获取页签编码为id_inventorybvo表体总行数
int rowCount = e.getBillCardPanel().getBillModel("id_inventorybvo").getRowCount();
int[] rows = new int[rowCount];
if (rows.length > 0) {
// 清空页签编码为id_inventorybvo表体
e.getBillCardPanel().getBillModel("id_inventorybvo").delLine(rows);
}
if (xmbm.equals("")) {
return;
}
// 年份
String date = NullValueUtils.getNullStringValue(new UFDate().getYear());
// 开始日期
String startdate = "";
// 结束日期
String enddate = "";
if (jd.equals("1")) {
//赋值
startdate = date+"-01-01";
enddate = date+"-03-31";
} else if (jd.equals("2")) {
startdate = date+"-04-01";
enddate = date+"-06-30";
} else if (jd.equals("3")) {
startdate = date+"-07-01";
enddate = date+"-09-30";
} else if (jd.equals("4")) {
startdate = date+"-10-01";
enddate = date+"-12-31";
}
//查询出库数量
SqlBuilder sqlBuilder = new SqlBuilder();
sqlBuilder.append(" SELECT ");
sqlBuilder.append(" b.cmaterialvid, ");
sqlBuilder.append(" b.nshouldassistnum, ");
sqlBuilder.append(" b.cvendorid ");
sqlBuilder.append(" FROM ic_generalout_h h ");
sqlBuilder.append(" LEFT JOIN ic_generalout_b b ");
sqlBuilder.append(" ON h.cgeneralhid = b.cgeneralhid ");
sqlBuilder.append(" LEFT JOIN bd_billtype type ");
sqlBuilder.append(" ON h.ctrantypeid = type.pk_billtypeid ");
sqlBuilder.append(" WHERE h.dr = 0 ");
sqlBuilder.append(" AND b.dr = 0 ");
sqlBuilder.append(" AND h.fbillflag = 3 ");
sqlBuilder.append(" AND h.vtrantypecode IN ('4I-Cxx-2', '4I-Cxx-1', '4I-Cxx-3') ");
sqlBuilder.append(" and type.billtypename != '生产物料出库' ");
sqlBuilder.append(" and cast(case when b.vbdef2 = '~' then '0' else b.vbdef2 end AS DECIMAL(28,8)) > 0 ");
sqlBuilder.append(" and h.cwarehouseid != '1001A110000000039SKD' ");
sqlBuilder.append(" AND b.cprojectid = '"+ xmbm +"' ");
sqlBuilder.append(" AND h.dbilldate >= '"+ startdate +"00:00:00" +"' ");
sqlBuilder.append(" AND h.dbilldate <= '"+ enddate + " 23:59:59" +"' ");
List<Object[]> list = (List<Object[]>) getService().executeQuery(sqlBuilder.toString(), new ArrayListProcessor());
if(list.size() > 0 && list != null){
for (int i = 0; i < list.size(); i++) {
//获取集合中的元素
Object[] objs = list.get(i);
InventoryBVO bodyvo = new InventoryBVO();
//物料编码
bodyvo.setWlbm(NullValueUtils.getNullStringValue(objs[0]));
//账面数量
bodyvo.setZmnum(NullValueUtils.getNullUFdoubleValue(objs[1]));
//制造商
bodyvo.setZzs(NullValueUtils.getNullStringValue(objs[2]));
//表体增行
e.getBillCardPanel().getBillModel("id_inventorybvo").addLine();
e.getBillCardPanel().getBillModel("id_inventorybvo")
.setBodyRowVO(bodyvo,i);
e.getBillCardPanel().getBillModel("id_inventorybvo")
.setValueAt((i + 1) * 10 + "", i, "rowno");
}
}
}
/**
* @desc:盘点表盘点人带出制单人
* @author wf
* @date:2023-06-20
*/
private void pdrafter(CardHeadTailAfterEditEvent e) throws BusinessException {
// TODO 自动生成的方法存根
//获取盘点人字段
String pdr = NullValueUtils.getNullStringValue(e.getBillCardPanel().getHeadItem("pdr").getValueObject());
if (!pdr.equals("")) {
e.getBillCardPanel().setHeadItem("creator", pdr);
} else {
e.getBillCardPanel().setHeadItem("creator", null);
}
}
private IUAPQueryBS service;
private IUAPQueryBS getService() {
if(service == null) {
service = NCLocator.getInstance().lookup(IUAPQueryBS.class);
}
return service;
}
}
InsertBeforeRule(在新增前规则和更新前规则中调用)
package nc.bs.jygyl.inventory.ace.bp.rule;
import java.util.List;
import nc.bs.dao.BaseDAO;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.jdbc.framework.processor.ColumnListProcessor;
import nc.vo.jygyl.inventory.AggInventoryVO;
import nc.vo.jygyl.tool.NullValueUtils;
import nc.vo.pub.BusinessException;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.pubapp.pattern.pub.SqlBuilder;
/**
* @desc:保存事件
* @author: wf
* @date : 2023-6-21
*/
public class InsertBeforeRule implements IRule<AggInventoryVO>{
@Override
public void process(AggInventoryVO[] aggvos) {
for (int i = 0; i < aggvos.length; i++) {
try {
savecheck(aggvos[i]);
} catch (BusinessException e) {
ExceptionUtils.wrappBusinessException(e.getMessage());
}
}
}
/**
* @desc:保存校验一个项目季度只能生成一个盘点表
* @author: wf
* @date : 2023-3-14
*/
private void savecheck(AggInventoryVO aggvo) throws BusinessException{
//项目
String xmbm = NullValueUtils.getNullStringValue(aggvo.getParentVO().getXmbm());
//单据日期(季度)
String dbilldate = NullValueUtils.getNullStringValue(aggvo.getParentVO().getDbilldate());
SqlBuilder sqlBuilder = new SqlBuilder();
sqlBuilder.append(" SELECT ");
sqlBuilder.append(" pk_inventory ");
sqlBuilder.append(" FROM ");
sqlBuilder.append(" jygyl_Inventory ");
sqlBuilder.append(" WHERE ");
sqlBuilder.append(" isnull(dr, 0) = 0 ");
sqlBuilder.append(" AND xmbm = '"+xmbm+"' ");
sqlBuilder.append(" AND substring(dbilldate,1,11) = '"+dbilldate.substring(0, 10)+"' ");
List<String> list = (List<String>)getDao().executeQuery(sqlBuilder.toString(), new ColumnListProcessor());
if(list.size() > 0 && list != null){
throw new BusinessException(" 保存失败:当前项目与季度已经存在盘点表,请检查! ");
}
}
private BaseDAO dao;
private BaseDAO getDao() {
if(dao == null) {
dao = new BaseDAO();
}
return dao;
}
}