档案开发:增加查询和打卡按钮
和单据开发的不同点
- 没有单据类型
- 不是右击–>特性–>单据主表/单据子表,而是右击–>特性–>选择想要的接口
- 访问器类型是NCVO
- 不需要映射
- 不是项目右键–>新建–>其他–>主子表单据结点,而是项目右键–>新建–>其他–>单表档案结点(如图四)
- 档案无查询按钮,只有刷新按钮(可以后面自己加)
- 档案要实现–>特性–>富客户端单据信息并实现对应映射,否则无法获取修改和删除的数据(如下图二和图三;图一的档案中不需要获取修改和删除的数据,所以可以不实现富客户端单据信息)
- 行号设置为不可编辑
- 图一
- 图二
- 图三(组织对应组织而不是组织版本)
- 图四
查询按钮开发(分页功能的档案)
-
在查询模板初始化中新建查询模板,并在功能结点默认模板设置中分配新建的查询模板
-
查询按钮类
package nc.ui.cjkcmg.cjyxdk.action;
import nc.bs.framework.common.NCLocator;
import nc.itf.cjkcmg.ICjyxdkMaintain;
import nc.ui.pubapp.uif2app.query2.action.DefaultQueryAction;
import nc.ui.querytemplate.querytree.IQueryScheme;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
public class QueryAction extends DefaultQueryAction{
/**
* 点击查询按钮,弹出打卡档案查询模板
*/
private static final long serialVersionUID = 1310679326706972915L;
@Override
protected void executeQuery(IQueryScheme queryScheme) {
// TODO 自动生成的方法存根
try {
getDataManager().initModelByQueryScheme(queryScheme);
} catch (Exception e) {
// TODO 自动生成的 catch 块
ExceptionUtils.wrappBusinessException("查询异常:"+e.getMessage());
}
}
}
- xml类
<!--======= 动作:[newActions] [打卡] ===========-->
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 环境变量 -->
<bean id="context" class="nc.vo.uif2.LoginContext"></bean>
<!-- 模型部分配置*********************************************************** -->
<!-- 应用服务类,负责进行模型操作的处理 -->
<!-- <bean id="batchModelModelService" class="nc.ui.pubapp.pub.smart.SmartBatchAppModelService"> -->
<bean id="batchModelModelService" class="nc.ui.cjkcmg.cjyxdk.model.ListModelService">
<!-- <property name="serviceItf" value="nc.itf.cjkcmg.ICjyxdkMaintain" />
<property name="voClass" value="nc.vo.cjkcmg.cjyxdk.Cjyxdk" /> -->
</bean>
<!-- 对象转换器工厂,由此获取操作对象的特征信息 -->
<bean id="BOAdapterFactory" class="nc.vo.bd.meta.GeneralBDObjectAdapterFactory">
<property name="mode" value="MD"/>
</bean>
<!-- 层次结构构造策略 -->
<!-- 模型元素 -->
<!--========= 模型元素:[PUBAPP单表模型(BatchBillTableModel)实例对象] ==========-->
<bean id="batchModel" class="nc.ui.pubapp.uif2app.model.BatchBillTableModel">
<property name="context"><ref bean="context"/></property>
<property name="service"><ref bean="batchModelModelService" /></property>
<property name="businessObjectAdapterFactory"><ref bean="BOAdapterFactory"/></property>
</bean>
<!-- 数据模型管理器,主要负责各种方式的模型初始化 -->
<!-- <bean id="batchModelModelDataManager" class="nc.ui.pubapp.uif2app.model.BatchModelDataManager"> -->
<bean id="batchModelModelDataManager" class="nc.ui.cjkcmg.cjyxdk.model.ListModelDataManager">
<property name="model"><ref bean="batchModel"/></property>
<!-- <property name="service"><ref bean="batchModelModelService" /></property> -->
<property name="paginationModel" ref="paginationModel" />
<property name="delegator" ref="paginationDelegator" />
</bean>
<!-- Mediator,模型之间监听关系部分 -->
<!-- 组织面板//newadd -->
<!-- 卡片界面的工具栏和返回按钮 -->
<!-- 模板容器,负责对模板的统一装载 -->
<bean id="templateContainer" class="nc.ui.pubapp.uif2app.view.TemplateContainer" init-method="load">
<property name="context" ref="context"/>
<property name="nodeKeies">
<list>
<value>bt</value>
</list>
</property>
</bean>
<!-- 界面元素 ***********************************************************-->
<!--====== 视图元素:[组织面板控件实例对象] ==============-->
<bean id="viewa" class="nc.ui.pubapp.uif2app.view.OrgPanel" init-method="initUI">
<property name="model"><ref bean="batchModel" /></property>
<property name="dataManager" ref="batchModelModelDataManager" />
</bean>
<!--====== 视图元素:[PUBAPP单表编辑控件(BatchBillTable)实例对象] ==============-->
<!--<bean id="batchBillTable" class="nc.ui.pubapp.uif2app.view.ShowUpableBatchBillTable" init-method="initUI">-->
<bean id="batchBillTable" class="nc.ui.cjkcmg.cjyxdk.ace.view.ListEditor" init-method="initUI">
<property name="model"><ref bean="batchModel" /></property>
<property name="nodekey" value="bt" />
</bean>
<!-- 界面布局总装*********************************************************** -->
<bean id="container" class="nc.ui.uif2.TangramContainer" init-method="initUI">
<property name="tangramLayoutRoot">
<bean class="nc.ui.uif2.tangramlayout.node.VSNode">
<property name="up">
<bean class="nc.ui.uif2.tangramlayout.node.CNode">
<property name="component">
<ref bean="viewa" />
</property>
</bean>
</property>
<property name="down">
<bean class="nc.ui.uif2.tangramlayout.node.CNode">
<property name="component">
<!-- <ref bean="batchBillTable" /> -->
<ref bean="listContainerWithPaginationBar" />
</property>
</bean>
</property>
<property name="dividerLocation" value="74.0f" />
<property name="name" value="" />
</bean>
</property>
<property name="actions">
<list>
<!-- <ref bean="batchEditAction" />
<ref bean="batchRefreshAction" />
<ref bean="batchAddLineAction" />
<ref bean="batchDelLineAction" /> -->
<ref bean="queryAction" />
<ref bean="dkAction" />
</list>
</property>
<property name="editActions">
<list>
<ref bean="batchSaveAction" />
<ref bean="batchCancelAction" />
<ref bean="batchAddLineActiona" />
<ref bean="batchDelLineActiona" />
</list>
</property>
<property name="model" ref="batchModel" />
<!--
<property name="model">
<ref bean="$vmObject.topActionDependModel"/>
</property>
-->
</bean>
<!-- 打开节点监听 newadd-->
<bean id="InitDataListener" class="nc.ui.pubapp.uif2app.model.DefaultFuncNodeInitDataListener">
<property name="model" ref="batchModel"/>
<property name="context" ref="context"></property>
<property name="voClassName" value="nc.vo.cjkcmg.cjyxdk.Cjyxdk"/>
</bean>
<!-- ClosingListener 编辑态关闭节点时提示是否保存//newadd***************************************************-->
<!-- 事件监听newadd -->
<bean id="batchModelEventMediator" class="nc.ui.pubapp.uif2app.model.AppEventHandlerMediator">
<property name="model" ref="batchModel" />
<property name="handlerGroup">
<list>
<!-- 表体字段编辑前事件 -->
<bean class="nc.ui.pubapp.uif2app.event.EventHandlerGroup">
<property name="event" value="nc.ui.pubapp.uif2app.event.card.CardBodyBeforeEditEvent"/>
<property name="handler">
<bean class="nc.ui.cjkcmg.cjyxdk.ace.handler.CjyxdkBeforeEditHandler"/>
</property>
</bean>
<!-- 表体表尾字段编辑后事件 -->
<bean class="nc.ui.pubapp.uif2app.event.EventHandlerGroup">
<property name="event" value="nc.ui.pubapp.uif2app.event.card.CardBodyAfterEditEvent"/>
<property name="handler">
<bean class="nc.ui.cjkcmg.cjyxdk.ace.handler.CjyxdkAfterEditHandler"/>
</property>
</bean>
</list>
</property>
</bean>
<!--懒加载信息配置*******************************************************-->
<!-- Action部分 ***********************************************************-->
<!--======= 动作:[newActions] [修改] ===========-->
<bean id="batchEditAction" class="nc.ui.pubapp.uif2app.actions.batch.BatchEditAction">
<property name="model"><ref bean="batchModel"/></property>
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<!--======= 动作:[newActions] [刷新] ===========-->
<bean id="batchRefreshAction" class="nc.ui.pubapp.uif2app.actions.batch.BatchRefreshAction">
<property name="model"><ref bean="batchModel"/></property>
<property name="modelManager"><ref bean="batchModelModelDataManager"/></property>
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<!--======= 动作:[newActions] [新增] ===========-->
<bean id="batchAddLineAction" class="nc.ui.cjkcmg.cjyxdk.action.CjyxdkAddLineAction">
<property name="model"><ref bean="batchModel"/></property>
<property name="voClassName" value="nc.vo.cjkcmg.cjyxdk.Cjyxdk" />
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<!--======= 动作:[newActions] [删除] ===========-->
<bean id="batchDelLineAction" class="nc.ui.pubapp.uif2app.actions.batch.BatchDelLineAction">
<property name="model"><ref bean="batchModel"/></property>
<property name="batchBillTable"><ref bean="batchBillTable"/></property>
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<bean id="queryTemplateContainer" class="nc.ui.uif2.editor.QueryTemplateContainer">
<property name="context" ref="context"></property>
<property name="nodeKey" value="qt"></property>
</bean>
<!--======= 动作:[newActions] [查询] ===========-->
<bean id="queryAction" class="nc.ui.cjkcmg.cjyxdk.action.QueryAction">
<property name="model"><ref bean="batchModel" /></property>
<property name="templateContainer"><ref bean="queryTemplateContainer" /></property>
<property name="nodeKey" value="qt"/>
<property name="dataManager"><ref bean="batchModelModelDataManager" /></property>
</bean>
<!--======= 动作:[newActions] [打卡] ===========-->
<bean id="dkAction" class="nc.ui.cjkcmg.cjyxdk.action.DkAction">
<property name="model" ref="batchModel" />
<property name="editor" ref="batchBillTable" />
<property name="dataManager" ref ="batchModelModelDataManager"/>
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<!--======= 动作:[newActions] [保存] ===========-->
<bean id="batchSaveAction" class="nc.ui.pubapp.uif2app.actions.batch.BatchSaveAction">
<property name="model"><ref bean="batchModel"/></property>
<property name="editor"><ref bean="batchBillTable"/></property>
<property name="validationService"><ref bean="batchBillTableValidateService" /></property>
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<!--======= 动作:[newActions] [取消] ===========-->
<bean id="batchCancelAction" class="nc.ui.pubapp.uif2app.actions.batch.BatchCancelAction">
<property name="model"><ref bean="batchModel"/></property>
<property name="editor"><ref bean="batchBillTable"/></property>
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<!--======= 动作:[newActions] [新增] ===========-->
<bean id="batchAddLineActiona" class="nc.ui.cjkcmg.cjyxdk.action.CjyxdkAddLineActiona">
<property name="model"><ref bean="batchModel"/></property>
<property name="voClassName" value="nc.vo.cjkcmg.cjyxdk.Cjyxdk" />
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<!--======= 动作:[newActions] [删除] ===========-->
<bean id="batchDelLineActiona" class="nc.ui.pubapp.uif2app.actions.batch.BatchDelLineAction">
<property name="model"><ref bean="batchModel"/></property>
<property name="batchBillTable"><ref bean="batchBillTable"/></property>
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<bean id="exceptionHandler" class="nc.ui.uif2.DefaultExceptionHanler">
<constructor-arg><ref bean="container"/></constructor-arg>
<property name="context"><ref bean="context" /></property>
</bean>
<!-- 批量保存校验服务类 -->
<bean id="batchBillTableValidateService" class="nc.ui.uif2.model.DefaultBatchValidationService">
<property name="editor"><ref bean="batchBillTable" /></property>
</bean>
<!-- 分页适配 -->
<bean id="paginationDelegator" class="nc.ui.bd.pub.BillBatchPaginationDelegator">
<property name="paginationModel" ref="paginationModel" />
<property name="billModel" ref="batchModel" />
<property name="editor" ref="batchBillTable" />
</bean>
<bean id="paginationModel" class="nc.ui.uif2.components.pagination.PaginationModel"
init-method="init">
<property name="paginationQueryService" ref="batchModelModelService" />
<property name="pageSize" value="500" />
</bean>
<bean id="paginationBar" class="nc.ui.uif2.components.pagination.PaginationBar"
init-method="registeCallbak">
<property name="paginationModel" ref="paginationModel" />
<property name="context" ref="context" />
</bean>
<bean name="listContainerWithPaginationBar" class="nc.ui.cjkcmg.cjyxdk.ace.view.ListSplitPanel">
<property name="component1" ref="batchBillTable" />
<property name="component2" ref="paginationBar" />
<property name="divideLocation" value="30" />
<property name="model" ref="batchModel" />
</bean>
</beans>
- 模型数据管理类
package nc.ui.cjkcmg.cjyxdk.model;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.ArrayUtils;
import nc.bs.framework.common.NCLocator;
import nc.bs.logging.Logger;
import nc.itf.cjkcmg.ICjyxdkMaintain;
import nc.ui.bd.pub.BillBatchPaginationDelegator;
import nc.ui.pubapp.uif2app.query2.model.IModelDataManager;
import nc.ui.querytemplate.filter.IFilter;
import nc.ui.querytemplate.querytree.IQueryScheme;
import nc.ui.uif2.components.pagination.IPaginationModelListener;
import nc.ui.uif2.components.pagination.PaginationModel;
import nc.ui.uif2.model.AbstractBatchAppModel;
import nc.ui.uif2.model.ModelDataDescriptor;
import nc.vo.cjkcmg.cjyxdk.Cjyxdk;
public class ListModelDataManager implements IModelDataManager,
IPaginationModelListener {
private BillBatchPaginationDelegator delegator;
private AbstractBatchAppModel model;
private PaginationModel paginationModel;
private IQueryScheme queryScheme;
public BillBatchPaginationDelegator getDelegator() {
return this.delegator;
}
public AbstractBatchAppModel getModel() {
return this.model;
}
public PaginationModel getPaginationModel() {
return this.paginationModel;
}
public IQueryScheme getQueryScheme() {
return this.queryScheme;
}
@Override
public void initModel() {
this.model.initModel(null, new ModelDataDescriptor());
}
@Override
public void initModelByQueryScheme(IQueryScheme scheme) {
this.setQueryScheme(scheme);
Map<String, String> conds = this.getCondMap(scheme);
try {
List<String> pkList = new ArrayList<String>();
Cjyxdk[] vos = this.getService().query(scheme);
for (int i = 0; i < vos.length; i++) {
Cjyxdk CpyclfzsxVO = vos[i];
pkList.add(CpyclfzsxVO.getPk_yxdk());
}
this.getPaginationModel().setObjectPks(
pkList.toArray(new String[pkList.size()]), new ModelDataDescriptor());
}
catch (Exception ex) {
Logger.error(ex.getMessage(), ex);
}
}
@Override
public void onDataReady() {
this.getDelegator().onDataReady();
}
@Override
public void onStructChanged() {
}
@Override
public void refresh() {
this.initModelByQueryScheme(this.queryScheme);
}
public void setDelegator(BillBatchPaginationDelegator delegator) {
this.delegator = delegator;
}
public void setModel(AbstractBatchAppModel model) {
this.model = model;
}
public void setPaginationModel(PaginationModel paginationModel) {
this.paginationModel = paginationModel;
this.paginationModel.addPaginationModelListener(this);
}
public void setQueryScheme(IQueryScheme queryScheme) {
this.queryScheme = queryScheme;
}
private Map<String, String> getCondMap(IQueryScheme scheme) {
if (scheme == null) {
return null;
}
IFilter[] filters = (IFilter[]) scheme.get("filters");
if (ArrayUtils.isEmpty(filters)) {
return null;
}
Map<String, String> conds = new HashMap<String, String>();
for (IFilter filter : filters) {
if (filter == null) {
continue;
}
conds.put(filter.getFilterMeta().getFieldCode(), filter.getSqlString());
}
return conds;
}
private ICjyxdkMaintain getService() {
return NCLocator.getInstance().lookup(ICjyxdkMaintain.class);
}
}
- 模型服务类
package nc.ui.cjkcmg.cjyxdk.model;
import org.apache.commons.lang.ArrayUtils;
import nc.bs.framework.common.NCLocator;
import nc.itf.cjkcmg.ICjyxdkMaintain;
import nc.ui.uif2.components.pagination.IPaginationQueryService;
import nc.ui.uif2.model.IBatchAppModelService;
import nc.vo.bd.meta.BatchOperateVO;
import nc.vo.cjkcmg.cjyxdk.Cjyxdk;
import nc.vo.pub.BusinessException;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.uif2.LoginContext;
public class ListModelService implements IBatchAppModelService, IPaginationQueryService {
@Override
public BatchOperateVO batchSave(BatchOperateVO batchVO) throws Exception {
BatchOperateVO batchSave = getService().batchSave(batchVO);
return batchSave;
}
@Override
public Object[] queryByDataVisibilitySetting(LoginContext context) throws Exception {
return null;
}
@Override
public Object[] queryObjectByPks(String[] pks) throws BusinessException {
Cjyxdk[] vos = null;
try {
if (ArrayUtils.isEmpty(pks)) {
return null;
}
vos = this.getService().queryDataByPks(pks);
return vos;
}
catch (Exception ex) {
ExceptionUtils.wrappException(ex);
}
return null;
}
private ICjyxdkMaintain getService() {
return NCLocator.getInstance().lookup(ICjyxdkMaintain.class);
}
}
打卡按钮开发
package nc.ui.cjkcmg.cjyxdk.action;
import java.awt.event.ActionEvent;
import nc.bs.framework.common.NCLocator;
import nc.itf.cjkcmg.ICjyxdkMaintain;
import nc.ui.pub.beans.MessageDialog;
import nc.ui.pub.beans.UIRefPane;
import nc.ui.pubapp.uif2app.model.BatchBillTableModel;
import nc.ui.pubapp.uif2app.model.BatchModelDataManager;
import nc.ui.uif2.NCAction;
import nc.ui.uif2.editor.BatchBillTable;
import nc.uif2.annoations.MethodType;
import nc.uif2.annoations.ModelMethod;
import nc.uif2.annoations.ModelType;
import nc.vo.bd.meta.BatchOperateVO;
import nc.vo.cjkcmg.cjyxdk.Cjyxdk;
import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFDate;
import nc.vo.wgbfb.utils.NullValueUtils;
public class DkAction extends NCAction{
/**
* 新增打卡按钮,点击打卡按钮,自动生成一条打卡记录
*/
private static final long serialVersionUID = 1L;
private BatchBillTableModel model;
private BatchBillTable editor;
private BatchModelDataManager dataManager ;
public DkAction() {
// TODO 自动生成的构造函数存根
setCode("dkAction");
setBtnName("打卡");
}
@Override
public void doAction(ActionEvent e) throws BusinessException {
try{
//直接弹一个(客户)参照
UIRefPane refPane = new UIRefPane("客户档案");
//显示参照
refPane.showModel();
//获取选中参照的数据
String[] unit = (String[]) refPane.getValueObj();
if(unit == null) {
return;
}
//客户
String pk_customer = refPane.getRefPK();
//打卡人
String userId = getModel().getContext().getPk_loginUser();
//新建一个打卡vo
Cjyxdk dkvo = new Cjyxdk();
//集团
dkvo.setPk_group("0001A1100000000003UJ");
//组织
dkvo.setPk_org("GLOBLE00000000000000");
//客户
dkvo.setCustomer(pk_customer);
//打卡时间
dkvo.setDksj(new UFDate());
//打卡人
dkvo.setDkr(userId);
//打卡年度
dkvo.setDknd(NullValueUtils.getNullStringValue(new UFDate()).substring(0, 4));
//档案新增方法
BatchOperateVO batchVO = new BatchOperateVO();
batchVO.setAddObjs(new Cjyxdk[]{dkvo});
getService().batchSave(batchVO);
//刷新打卡档案
getDataManager().refresh();
//弹框提示打卡成功
MessageDialog.showHintDlg(null, "提示", "打卡成功");
}catch(Exception e2){
throw new BusinessException("打卡失败:" + e2.getMessage());
}
}
//要修改哪个单子调哪个单子的接口
private ICjyxdkMaintain service;
private ICjyxdkMaintain getService(){
if (service == null) {
service = NCLocator.getInstance().lookup(ICjyxdkMaintain.class);
}
return service;
}
public BatchBillTableModel getModel() {
return model;
}
@ModelMethod(modelType=ModelType.AbstractUIAppModel, methodType=MethodType.SETTER)
public void setModel(BatchBillTableModel model) {
this.model = model;
this.model.addAppEventListener(this);
}
public BatchBillTable getEditor() {
return editor;
}
public void setEditor(BatchBillTable editor) {
this.editor = editor;
}
public BatchModelDataManager getDataManager() {
return dataManager;
}
public void setDataManager(BatchModelDataManager dataManager) {
this.dataManager = dataManager;
}
}
查询按钮开发(无分页功能的档案)
-
在查询模板初始化中新建查询模板,并在功能结点默认模板设置中分配新建的查询模板
-
查询按钮类
package nc.ui.jych.pzjtkjqjsz.action;
import java.awt.event.ActionEvent;
import java.util.List;
import nc.bs.framework.common.NCLocator;
import nc.itf.jych.IPzjtkjqjszMaintain;
import nc.ui.pub.beans.UIDialog;
import nc.ui.pubapp.uif2app.query2.action.DefaultQueryAction;
import nc.ui.pubapp.uif2app.view.ShowUpableBatchBillTable;
import nc.ui.uif2.IShowMsgConstant;
import nc.ui.uif2.ShowStatusBarMsgUtil;
import nc.vo.jych.cache.QueryCacheUtil;
import nc.vo.jych.pzjtkjqjsz.PzjtkjqjszVO;
import nc.vo.jych.pzjtkjqjsz.QueryParam;
import nc.vo.jygyl.tool.NullValueUtils;
import nc.vo.pub.query.ConditionVO;
import nc.vo.pubapp.AppContext;
/**
* 凭证计提会计期间设置查询
* @author hanh
* @date 2024-05-30
* @Describe:
*/
public class QueryAction extends DefaultQueryAction{
private static final long serialVersionUID = 196082364021310229L;
private ShowUpableBatchBillTable list;
@Override
public void doAction(ActionEvent e) throws Exception {
// TODO 自动生成的方法存根
if (this.getQryDLGDelegator().showModal() == UIDialog.ID_OK) {
ConditionVO[] vos = this.getQryDLGDelegator().getQueryConditionDLG().getQryCondEditor().getGeneralCondtionVOs();
QueryParam param = new QueryParam();
String whereSql = "";
if (vos.length >0) {
whereSql = vos[0].getWhereSQL(vos);
}
param.setWhereSql(whereSql);
//封装查询条件
for (int i = 0; i < vos.length; i++) {
if (vos[i].getFieldCode().equals("hszbbm")) {
String hszbbm = NullValueUtils.getNullStringValue(vos[i].getValue());
param.setHszbbm(hszbbm);
}else if (vos[i].getFieldCode().equals("pzh")) {
String pzh = NullValueUtils.getNullStringValue(vos[i].getValue());
param.setPzh(pzh);
}else if (vos[i].getFieldCode().equals("kjqj")) {
String kjqj = NullValueUtils.getNullStringValue(vos[i].getValue());
param.setKjqj(kjqj);
}else if (vos[i].getFieldCode().equals("hzjtkjqj")) {
String hzjtkjqj = NullValueUtils.getNullStringValue(vos[i].getValue());
param.setHzjtkjqj(hzjtkjqj);
}else if (vos[i].getFieldCode().equals("project")){
String project = NullValueUtils.getNullStringValue(vos[i].getValue());
param.setProject(project);
}
}
// ============================获取符合条件数据================================
List<PzjtkjqjszVO> volist = getService().queryData(param);
String pkUser = AppContext.getInstance().getPkUser();
//查询缓存
QueryCacheUtil.remove("H9H327" + pkUser);
QueryCacheUtil.put("H9H327" + pkUser, param);
// 将数据显示到界面
if(volist != null && volist.size() > 0){
this.getModel().initModel(volist.toArray(new PzjtkjqjszVO[0]));
getList().getBillCardPanel().getBillModel().setBodyDataVO(volist.toArray(new PzjtkjqjszVO[0]));
getList().getBillCardPanel().getBillModel().loadLoadRelationItemValue();
}else{
getModel().initModel(null);
ShowStatusBarMsgUtil.showStatusBarMsg(IShowMsgConstant.getQueryNullInfo(), this.getModel().getContext());
}
}
}
public ShowUpableBatchBillTable getList() {
return list;
}
public void setList(ShowUpableBatchBillTable list) {
this.list = list;
}
private IPzjtkjqjszMaintain queryservice;
private IPzjtkjqjszMaintain getService() {
if (queryservice == null) {
queryservice = NCLocator.getInstance().lookup(
IPzjtkjqjszMaintain.class);
}
return queryservice;
}
}
- xml类
查询按钮里面的 这句必须有,不然查询的时候会报未知的错误(空指针错误)
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 环境变量 -->
<bean id="context" class="nc.vo.uif2.LoginContext"></bean>
<!-- 模型部分配置*********************************************************** -->
<!-- 应用服务类,负责进行模型操作的处理 -->
<bean id="batchModelModelService" class="nc.ui.jych.pzjtkjqjsz.ace.model.ListModelService">
<!--<property name="serviceItf" value="nc.itf.jych.IPzjtkjqjszMaintain" />
<property name="voClass" value="nc.vo.jych.pzjtkjqjsz.PzjtkjqjszVO" />-->
</bean>
<!-- 对象转换器工厂,由此获取操作对象的特征信息 -->
<bean id="BOAdapterFactory" class="nc.vo.bd.meta.GeneralBDObjectAdapterFactory">
<property name="mode" value="MD"/>
</bean>
<!-- 层次结构构造策略 -->
<!-- 模型元素 -->
<!--========= 模型元素:[PUBAPP单表模型(BatchBillTableModel)实例对象] ==========-->
<bean id="batchModel" class="nc.ui.pubapp.uif2app.model.BatchBillTableModel">
<property name="context"><ref bean="context"/></property>
<property name="service"><ref bean="batchModelModelService" /></property>
<property name="businessObjectAdapterFactory"><ref bean="BOAdapterFactory"/></property>
</bean>
<!-- 数据模型管理器,主要负责各种方式的模型初始化 -->
<bean id="batchModelModelDataManager" class="nc.ui.jych.pzjtkjqjsz.ace.model.ListModelDataManager">
<property name="model"><ref bean="batchModel"/></property>
<!--<property name="service"><ref bean="batchModelModelService" /></property>-->
</bean>
<!-- Mediator,模型之间监听关系部分 -->
<!-- 组织面板//newadd -->
<!-- 卡片界面的工具栏和返回按钮 -->
<!-- 模板容器,负责对模板的统一装载 -->
<bean id="templateContainer" class="nc.ui.pubapp.uif2app.view.TemplateContainer" init-method="load">
<property name="context" ref="context"/>
<property name="nodeKeies">
<list>
<value>bt</value>
</list>
</property>
</bean>
<!-- 界面元素 ***********************************************************-->
<!--====== 视图元素:[组织面板控件实例对象] ==============-->
<bean id="viewa" class="nc.ui.pubapp.uif2app.view.OrgPanel" init-method="initUI">
<property name="model"><ref bean="batchModel" /></property>
<property name="dataManager" ref="batchModelModelDataManager" />
</bean>
<!--====== 视图元素:[PUBAPP单表编辑控件(BatchBillTable)实例对象] ==============-->
<bean id="batchBillTable" class="nc.ui.pubapp.uif2app.view.ShowUpableBatchBillTable" init-method="initUI">
<property name="model"><ref bean="batchModel" /></property>
<property name="nodekey" value="bt" />
</bean>
<!-- 界面布局总装*********************************************************** -->
<bean id="container" class="nc.ui.uif2.TangramContainer" init-method="initUI">
<property name="tangramLayoutRoot">
<bean class="nc.ui.uif2.tangramlayout.node.VSNode">
<property name="up">
<bean class="nc.ui.uif2.tangramlayout.node.CNode">
<property name="component">
<ref bean="viewa" />
</property>
</bean>
</property>
<property name="down">
<bean class="nc.ui.uif2.tangramlayout.node.CNode">
<property name="component">
<ref bean="batchBillTable" />
</property>
</bean>
</property>
<property name="dividerLocation" value="74.0f" />
<property name="name" value="" />
</bean>
</property>
<property name="actions">
<list>
<ref bean="batchAddLineAction" />
<ref bean="separatorAction" />
<ref bean="batchEditAction" />
<ref bean="batchDelLineAction" />
<ref bean="separatorAction" />
<ref bean="queryAction" />
<!--<ref bean="batchRefreshAction" />-->
<ref bean="separatorAction" />
<ref bean="importAction" />
</list>
</property>
<property name="editActions">
<list>
<ref bean="batchAddLineActiona" />
<ref bean="batchDelLineActiona" />
<ref bean="separatorAction" />
<ref bean="batchSaveAction" />
<ref bean="batchCancelAction" />
</list>
</property>
<property name="model">
<ref bean="batchModel" />
</property>
<!--
<property name="model">
<ref bean="$vmObject.topActionDependModel"/>
</property>
-->
</bean>
<!-- 打开节点监听 newadd-->
<bean id="InitDataListener" class="nc.ui.pubapp.uif2app.model.DefaultFuncNodeInitDataListener">
<property name="model" ref="batchModel"/>
<property name="context" ref="context"></property>
<property name="voClassName" value="nc.vo.jych.pzjtkjqjsz.PzjtkjqjszVO"/>
</bean>
<!-- ClosingListener 编辑态关闭节点时提示是否保存//newadd***************************************************-->
<!-- 事件监听newadd -->
<bean id="batchModelEventMediator" class="nc.ui.pubapp.uif2app.model.AppEventHandlerMediator">
<property name="model" ref="batchModel" />
<property name="handlerGroup">
<list>
<!-- 表体字段编辑前事件 -->
<bean class="nc.ui.pubapp.uif2app.event.EventHandlerGroup">
<property name="event" value="nc.ui.pubapp.uif2app.event.card.CardBodyBeforeEditEvent"/>
<property name="handler">
<bean class="nc.ui.jych.pzjtkjqjsz.ace.handler.PzjtkjqjszBeforeEditHandler"/>
</property>
</bean>
<!-- 表体表尾字段编辑后事件 -->
<bean class="nc.ui.pubapp.uif2app.event.EventHandlerGroup">
<property name="event" value="nc.ui.pubapp.uif2app.event.card.CardBodyAfterEditEvent"/>
<property name="handler">
<bean class="nc.ui.jych.pzjtkjqjsz.ace.handler.PzjtkjqjszAfterEditHandler"/>
</property>
</bean>
</list>
</property>
</bean>
<!--懒加载信息配置*******************************************************-->
<!-- Action部分 ***********************************************************-->
<!--======= 动作:[newActions] [修改] ===========-->
<bean id="batchEditAction" class="nc.ui.pubapp.uif2app.actions.batch.BatchEditAction">
<property name="model"><ref bean="batchModel"/></property>
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<bean id="queryTemplateContainer" class="nc.ui.uif2.editor.QueryTemplateContainer">
<property name="context" ref="context"></property>
<property name="nodeKey" value="qt"></property>
</bean>
<!--======= 动作:[newActions] [查询] ===========-->
<bean id="queryAction" class="nc.ui.jych.pzjtkjqjsz.action.QueryAction">
<property name="model"><ref bean="batchModel"/></property>
<property name="list"><ref bean="batchBillTable"/></property>
<property name="templateContainer"><ref bean="queryTemplateContainer" /></property>
<property name="nodeKey" value="qt"/>
<property name="dataManager"><ref bean="batchModelModelDataManager"/></property>
</bean>
<!--======= 动作:[newActions] [刷新] ===========-->
<bean id="batchRefreshAction" class="nc.ui.pubapp.uif2app.actions.batch.BatchRefreshAction">
<property name="model"><ref bean="batchModel"/></property>
<property name="modelManager"><ref bean="batchModelModelDataManager"/></property>
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<!--======= 动作:[newActions] [新增] ===========-->
<bean id="batchAddLineAction" class="nc.ui.jych.pzjtkjqjsz.action.PzjtkjqjszAddLineAction">
<property name="model"><ref bean="batchModel"/></property>
<property name="voClassName" value="nc.vo.jych.pzjtkjqjsz.PzjtkjqjszVO" />
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<!--======= 动作:[newActions] [删除] ===========-->
<bean id="batchDelLineAction" class="nc.ui.pubapp.uif2app.actions.batch.BatchDelLineAction">
<property name="model"><ref bean="batchModel"/></property>
<property name="batchBillTable"><ref bean="batchBillTable"/></property>
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<!--======= 动作:[newActions] [保存] ===========-->
<bean id="batchSaveAction" class="nc.ui.pubapp.uif2app.actions.batch.BatchSaveAction">
<property name="model"><ref bean="batchModel"/></property>
<property name="editor"><ref bean="batchBillTable"/></property>
<property name="validationService"><ref bean="batchBillTableValidateService" /></property>
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<!--======= 动作:[newActions] [取消] ===========-->
<bean id="batchCancelAction" class="nc.ui.jych.pzjtkjqjsz.action.BatchCancelAction">
<property name="model"><ref bean="batchModel"/></property>
<property name="editor"><ref bean="batchBillTable"/></property>
<property name="list"><ref bean="batchBillTable"/></property>
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<!--======= 动作:[newActions] [新增] ===========-->
<bean id="batchAddLineActiona" class="nc.ui.jych.pzjtkjqjsz.action.PzjtkjqjszAddLineActiona">
<property name="model"><ref bean="batchModel"/></property>
<property name="voClassName" value="nc.vo.jych.pzjtkjqjsz.PzjtkjqjszVO" />
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<!--======= 动作:[newActions] [删除] ===========-->
<bean id="batchDelLineActiona" class="nc.ui.pubapp.uif2app.actions.batch.BatchDelLineAction">
<property name="model"><ref bean="batchModel"/></property>
<property name="batchBillTable"><ref bean="batchBillTable"/></property>
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<!--======= 动作:[newActions] [导入] ===========-->
<bean id="importAction" class="nc.ui.jych.pzjtkjqjsz.action.ImportAction">
<property name="model"><ref bean="batchModel"/></property>
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
<bean id="exceptionHandler" class="nc.ui.uif2.DefaultExceptionHanler">
<constructor-arg><ref bean="container"/></constructor-arg>
<property name="context"><ref bean="context" /></property>
</bean>
<!-- 批量保存校验服务类 -->
<bean id="batchBillTableValidateService" class="nc.ui.uif2.model.DefaultBatchValidationService">
<property name="editor"><ref bean="batchBillTable" /></property>
</bean>
<bean id="separatorAction" class="nc.funcnode.ui.action.SeparatorAction" />
</beans>
- 接口实现类
package nc.impl.jych;
import java.util.List;
import nc.bs.dao.BaseDAO;
import nc.impl.pub.ace.AcePzjtkjqjszPubServiceImpl;
import nc.impl.pubapp.pattern.database.IDQueryBuilder;
import nc.impl.pubapp.pub.smart.BatchSaveAction;
import nc.itf.jych.IPzjtkjqjszMaintain;
import nc.jdbc.framework.processor.BeanListProcessor;
import nc.ui.querytemplate.querytree.IQueryScheme;
import nc.vo.bd.meta.BatchOperateVO;
import nc.vo.jych.pzjtkjqjsz.PzjtkjqjszVO;
import nc.vo.jych.pzjtkjqjsz.QueryParam;
import nc.vo.pub.BusinessException;
import nc.vo.pubapp.pattern.pub.SqlBuilder;
import nc.vo.wgbfb.tool.NullValueUtils;
public class PzjtkjqjszMaintainImpl extends AcePzjtkjqjszPubServiceImpl
implements IPzjtkjqjszMaintain {
@Override
public PzjtkjqjszVO[] query(IQueryScheme queryScheme) throws BusinessException {
return super.pubquerybasedoc(queryScheme);
}
@Override
public BatchOperateVO batchSave(BatchOperateVO batchVO) throws BusinessException {
BatchSaveAction<PzjtkjqjszVO> saveAction = new BatchSaveAction<PzjtkjqjszVO>();
BatchOperateVO retData = saveAction.batchSave(batchVO);
return retData;
}
@Override
public PzjtkjqjszVO[] queryDataByPks(String[] pks) throws BusinessException {
// TODO 自动生成的方法存根
SqlBuilder sqlBuilder = new SqlBuilder();
sqlBuilder.append("select * from jych_pzjtkjqjsz where dr = 0 ");
sqlBuilder.append(new IDQueryBuilder().buildSQL(" and pk_pzjtkjqjsz ", pks));
@SuppressWarnings("unchecked")
List<PzjtkjqjszVO> list = (List<PzjtkjqjszVO>) getDao().executeQuery(sqlBuilder.toString(), new BeanListProcessor(PzjtkjqjszVO.class));
return list == null || list.size() == 0 ? null:list.toArray(new PzjtkjqjszVO[0]);
}
@SuppressWarnings("unchecked")
@Override
public List<PzjtkjqjszVO> queryData(QueryParam queryparam)
throws BusinessException {
String hszbbm = NullValueUtils.getNullStringValue(queryparam.getHszbbm());
String pzh = NullValueUtils.getNullStringValue(queryparam.getPzh());
String kjqj = NullValueUtils.getNullStringValue(queryparam.getKjqj());
String hzjtkjqj = NullValueUtils.getNullStringValue(queryparam.getHzjtkjqj());
String project = NullValueUtils.getNullStringValue(queryparam.getProject());
SqlBuilder sql = new SqlBuilder();
sql.append(" select h.* from jych_pzjtkjqjsz h ");
sql.append(" left join org_accountingbook acc on acc.pk_accountingbook = h.hszbbm ");
sql.append(" left join gl_voucher vou on vou.pk_voucher = h.pzh ");
sql.append(" left join bd_vouchertype typ on typ.pk_vouchertype = vou.pk_vouchertype ");
sql.append(" left join bd_accperiodmonth mon on mon.pk_accperiodmonth = h.kjqj ");
sql.append(" left join bd_accperiodmonth hzmon on hzmon.pk_accperiodmonth = h.hzjtkjqj ");
sql.append(" left join bd_defdoc def on def.pk_defdoc = h.project");
sql.append(" where nvl(h.dr,0) = 0 ");
sql.append(" and nvl(acc.dr,0) = 0 ");
sql.append(" and nvl(vou.dr,0) = 0 ");
sql.append(" and nvl(mon.dr,0) = 0 ");
sql.append(" and nvl(hzmon.dr,0) = 0 ");
sql.append(" and nvl(def.dr,0) = 0 ");
if (!hszbbm.equals("")) {
sql.append(" AND acc.name = '"+hszbbm+"' ");//核算账簿编码
}
if (!pzh.equals("")) {
sql.append(" AND typ.shortname || '-' || vou.num = '"+pzh+"' ");//凭证号
}
if (!kjqj.equals("")) {
sql.append(" AND mon.yearmth = '"+kjqj+"' ");//会计期间
}
if (!hzjtkjqj.equals("")) {
sql.append(" AND hzmon.yearmth = '"+hzjtkjqj+"' ");//坏账计提会计期间
}
if (!project.equals("")){
sql.append(" AND def.name = '"+project+"' ");//项目
}
List<PzjtkjqjszVO> volist = (List<PzjtkjqjszVO>) getDao().executeQuery(sql.toString(), new BeanListProcessor(PzjtkjqjszVO.class));
return volist;
}
//后端查sql要用到的方法
private BaseDAO dao;
private BaseDAO getDao() {
if(dao == null) {
dao = new BaseDAO();
}
return dao;
}
}
- 模型数据管理类
package nc.ui.jych.pzjtkjqjsz.ace.model;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import nc.bs.framework.common.NCLocator;
import nc.bs.logging.Logger;
import nc.itf.jych.IPzjtkjqjszMaintain;
import nc.ui.bd.pub.BillBatchPaginationDelegator;
import nc.ui.pubapp.uif2app.query2.model.IModelDataManager;
import nc.ui.querytemplate.filter.IFilter;
import nc.ui.querytemplate.querytree.IQueryScheme;
import nc.ui.uif2.components.pagination.IPaginationModelListener;
import nc.ui.uif2.components.pagination.PaginationModel;
import nc.ui.uif2.model.AbstractBatchAppModel;
import nc.ui.uif2.model.ModelDataDescriptor;
import nc.vo.jych.pzjtkjqjsz.PzjtkjqjszVO;
import nc.vo.pubapp.query2.sql.process.QueryConstants;
import org.apache.commons.lang.ArrayUtils;
public class ListModelDataManager implements IModelDataManager,
IPaginationModelListener {
private BillBatchPaginationDelegator delegator;
private AbstractBatchAppModel model;
private PaginationModel paginationModel;
private IQueryScheme queryScheme;
public BillBatchPaginationDelegator getDelegator() {
return this.delegator;
}
public AbstractBatchAppModel getModel() {
return this.model;
}
public PaginationModel getPaginationModel() {
return this.paginationModel;
}
public IQueryScheme getQueryScheme() {
return this.queryScheme;
}
@Override
public void initModel() {
initModelByQueryScheme(queryScheme);
}
@Override
public void initModelByQueryScheme(IQueryScheme scheme) {
this.setQueryScheme(scheme);
Map<String, String> conds = this.getCondMap(scheme);
try {
if(scheme == null){
return;
}
List<String> pkList = new ArrayList<String>();
PzjtkjqjszVO[] vos = this.getService().query(scheme);
for (int i = 0; i < vos.length; i++) {
PzjtkjqjszVO PzjtkjqjszVO = vos[i];
pkList.add(PzjtkjqjszVO.getPrimaryKey());
}
this.getPaginationModel().setObjectPks(
pkList.toArray(new String[pkList.size()]), new ModelDataDescriptor());
}
catch (Exception ex) {
Logger.error(ex.getMessage(), ex);
}
}
@Override
public void onDataReady() {
this.getDelegator().onDataReady();
}
@Override
public void onStructChanged() {
}
@Override
public void refresh() {
this.initModelByQueryScheme(this.queryScheme);
}
public void setDelegator(BillBatchPaginationDelegator delegator) {
this.delegator = delegator;
}
public void setModel(AbstractBatchAppModel model) {
this.model = model;
}
public void setPaginationModel(PaginationModel paginationModel) {
this.paginationModel = paginationModel;
this.paginationModel.addPaginationModelListener(this);
}
public void setQueryScheme(IQueryScheme queryScheme) {
this.queryScheme = queryScheme;
}
private Map<String, String> getCondMap(IQueryScheme scheme) {
if (scheme == null) {
return null;
}
IFilter[] filters = (IFilter[]) scheme.get("filters");
if (ArrayUtils.isEmpty(filters)) {
return null;
}
Map<String, String> conds = new HashMap<String, String>();
for (IFilter filter : filters) {
if (filter == null) {
continue;
}
conds.put(filter.getFilterMeta().getFieldCode(), filter.getSqlString());
}
return conds;
}
private IPzjtkjqjszMaintain getService() {
return NCLocator.getInstance().lookup(IPzjtkjqjszMaintain.class);
}
}
- 模型数据服务类
package nc.ui.jych.pzjtkjqjsz.ace.model;
import nc.bs.framework.common.NCLocator;
import nc.itf.jych.IPzjtkjqjszMaintain;
import nc.ui.uif2.components.pagination.IPaginationQueryService;
import nc.ui.uif2.model.IBatchAppModelService;
import nc.vo.bd.meta.BatchOperateVO;
import nc.vo.jych.pzjtkjqjsz.PzjtkjqjszVO;
import nc.vo.pub.BusinessException;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.uif2.LoginContext;
import org.apache.commons.lang.ArrayUtils;
public class ListModelService implements IBatchAppModelService, IPaginationQueryService {
@Override
public BatchOperateVO batchSave(BatchOperateVO batchVO) throws Exception {
BatchOperateVO batchSave = getService().batchSave(batchVO);
return batchSave;
}
@Override
public Object[] queryByDataVisibilitySetting(LoginContext context) throws Exception {
return null;
}
@Override
public Object[] queryObjectByPks(String[] pks) throws BusinessException {
PzjtkjqjszVO[] vos = null;
try {
if (ArrayUtils.isEmpty(pks)) {
return null;
}
vos = this.getService().queryDataByPks(pks);
return vos;
}
catch (Exception ex) {
ExceptionUtils.wrappException(ex);
}
return null;
}
private IPzjtkjqjszMaintain getService() {
return NCLocator.getInstance().lookup(IPzjtkjqjszMaintain.class);
}
}
档案唯一校验:核算账簿+凭证+会计期间+项目+坏账计提会计期间不允许重复(只要有唯一性校验,肯定就要实现富客户端单据信息特性,否则无法获取前台修改和删除的数据)
package nc.impl.jych;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import nc.bs.dao.BaseDAO;
import nc.bs.framework.common.InvocationInfoProxy;
import nc.impl.pub.ace.AcePzjtkjqjszPubServiceImpl;
import nc.impl.pubapp.pattern.database.IDQueryBuilder;
import nc.impl.pubapp.pub.smart.BatchSaveAction;
import nc.itf.jych.IPzjtkjqjszMaintain;
import nc.jdbc.framework.processor.BeanListProcessor;
import nc.ui.querytemplate.querytree.IQueryScheme;
import nc.vo.bd.meta.BatchOperateVO;
import nc.vo.jych.pzjtkjqjsz.PzjtkjqjszVO;
import nc.vo.jych.pzjtkjqjsz.QueryParam;
import nc.vo.pub.BusinessException;
import nc.vo.pub.SuperVOUtil;
import nc.vo.pub.lang.UFDateTime;
import nc.vo.pubapp.pattern.pub.SqlBuilder;
import nc.vo.wgbfb.tool.NullValueUtils;
public class PzjtkjqjszMaintainImpl extends AcePzjtkjqjszPubServiceImpl
implements IPzjtkjqjszMaintain {
@Override
public PzjtkjqjszVO[] query(IQueryScheme queryScheme) throws BusinessException {
return super.pubquerybasedoc(queryScheme);
}
@SuppressWarnings("unchecked")
@Override
public BatchOperateVO batchSave(BatchOperateVO batchVO) throws BusinessException {
//3、唯一校验:核算账簿+凭证+会计期间不允许重复
List<PzjtkjqjszVO> updlist = new ArrayList<PzjtkjqjszVO>();
List<PzjtkjqjszVO> addlist = new ArrayList<PzjtkjqjszVO>();
List<PzjtkjqjszVO> dellist = new ArrayList<PzjtkjqjszVO>();
//修改
Object[] updatedatas = batchVO.getUpdObjs();
if(updatedatas != null && updatedatas.length > 0){
for (int i = 0; i < updatedatas.length; i++) {
PzjtkjqjszVO vo = (PzjtkjqjszVO) updatedatas[i];
vo.setMaketime(new UFDateTime());
vo.setModifier(InvocationInfoProxy.getInstance().getUserId());
vo.setModifiedtime(new UFDateTime());
PzjtkjqjszVO clonevo = (PzjtkjqjszVO) vo.clone();
updlist.add(clonevo);
}
}
//修改vo参照翻译
SuperVOUtil.execFormulaWithVOs(updlist.toArray(new PzjtkjqjszVO[0]), new String[]{
"hszbbm->getcolvalue(org_accountingbook,code,pk_accountingbook,hszbbm)",
"pzh->getcolvalue(voucherref_view,num,pk_voucher,pzh)",
"kjqj->getcolvalue(bd_accperiodmonth,yearmth,pk_accperiodmonth,kjqj)",
"project->getcolvalue2(bd_defdoc,code,pk_defdoc,project,pk_defdoclist,getcolvalue(bd_defdoclist,pk_defdoclist,code,\"ZKKJXM\"))",
"hzjtkjqj->getcolvalue(bd_accperiodmonth,yearmth,pk_accperiodmonth,hzjtkjqj)"
});
//新增
Object[] adddatas = batchVO.getAddObjs();
if(adddatas != null && adddatas.length > 0){
for (int i = 0; i < adddatas.length; i++) {
PzjtkjqjszVO vo = (PzjtkjqjszVO) adddatas[i];
vo.setMaketime(new UFDateTime());
PzjtkjqjszVO clonevo = (PzjtkjqjszVO) vo.clone();
addlist.add(clonevo);
}
}
//新增vo参照翻译
SuperVOUtil.execFormulaWithVOs(addlist.toArray(new PzjtkjqjszVO[0]), new String[]{
"hszbbm->getcolvalue(org_accountingbook,code,pk_accountingbook,hszbbm)",
"pzh->getcolvalue(voucherref_view,num,pk_voucher,pzh)",
"kjqj->getcolvalue(bd_accperiodmonth,yearmth,pk_accperiodmonth,kjqj)",
"project->getcolvalue2(bd_defdoc,code,pk_defdoc,project,pk_defdoclist,getcolvalue(bd_defdoclist,pk_defdoclist,code,\"ZKKJXM\"))",
"hzjtkjqj->getcolvalue(bd_accperiodmonth,yearmth,pk_accperiodmonth,hzjtkjqj)"
});
//前台新增和修改的数据放到一起
List<PzjtkjqjszVO> addAndUpdList = new ArrayList<PzjtkjqjszVO>();
addAndUpdList.addAll(addlist);
addAndUpdList.addAll(updlist);
//前台新增和修改的数据放到一起,对比里面有没有重复的数据
if(addAndUpdList != null && addAndUpdList.size() > 0){
Map<String, List<String>> map = new HashMap<String, List<String>>();
//往map中存值,往list中存值
for(int i = 0; i < addAndUpdList.size(); i++){
PzjtkjqjszVO addAndUpdvo = addAndUpdList.get(i);
//核算账簿编码
String addAndUpdhszbbm = NullValueUtils.getNullStringValue(addAndUpdvo.getHszbbm());
//凭证号
String addAndUpdpzh = NullValueUtils.getNullStringValue(addAndUpdvo.getPzh());
//会计期间
String addAndUpdkjqj = NullValueUtils.getNullStringValue(addAndUpdvo.getKjqj());
//项目
String addAndUpdproject = NullValueUtils.getNullStringValue(addAndUpdvo.getProject());
//坏账计提会计期间
String addAndUpdhzjtkjqj = NullValueUtils.getNullStringValue(addAndUpdvo.getHzjtkjqj());
String addAndUpdid = addAndUpdhszbbm + addAndUpdpzh + addAndUpdkjqj + addAndUpdproject + addAndUpdhzjtkjqj;
if(map.containsKey(addAndUpdid)){
List<String> list = map.get(addAndUpdid);
list.add(addAndUpdhszbbm);
list.add(addAndUpdpzh);
list.add(addAndUpdkjqj);
list.add(addAndUpdproject);
list.add(addAndUpdhzjtkjqj);
}else{
List<String> list = new ArrayList<>();
list.add(addAndUpdhszbbm);
list.add(addAndUpdpzh);
list.add(addAndUpdkjqj);
list.add(addAndUpdproject);
list.add(addAndUpdhzjtkjqj);
map.put(addAndUpdid, list);
}
}
//遍历map,遍历list
for (String addAndUpdid : map.keySet()) {
List<String> list = map.get(addAndUpdid);
if(list.size() > 5){
throw new BusinessException("核算账簿编码:"+list.get(0)+",凭证号:"+list.get(1)+",会计期间:"+list.get(2)+",项目编码:"+list.get(3)+",坏账计提会计期间:"+list.get(4)+"重复,请检查!");
}
}
}
//删除
Object[] deldatas = batchVO.getDelObjs();
if (deldatas != null && deldatas.length > 0) {
for (int i = 0; i < deldatas.length; i++) {
PzjtkjqjszVO vo = (PzjtkjqjszVO) deldatas[i];
dellist.add(vo);
}
}
//获取数据库数据
SqlBuilder sqlBuilder = new SqlBuilder();
sqlBuilder.append(" select * ");
sqlBuilder.append(" from jych_pzjtkjqjsz ");
sqlBuilder.append(" where nvl(dr, 0) = 0 ");
List<PzjtkjqjszVO> databaselist= (List<PzjtkjqjszVO>) getDao().executeQuery(sqlBuilder.toString(), new BeanListProcessor(PzjtkjqjszVO.class));
//把数据库中的数据除去前台删除和修改的
Iterator<PzjtkjqjszVO> iterator = databaselist.iterator();
while (iterator.hasNext()) {
PzjtkjqjszVO vo = iterator.next();
String pk = vo.getPrimaryKey();
for(PzjtkjqjszVO delvo:dellist){
String pk_del = delvo.getPrimaryKey();
if(pk_del.equals(pk)){
iterator.remove();
}
}
for(PzjtkjqjszVO updvo:updlist){
String pk_upd = updvo.getPrimaryKey();
if(pk_upd.equals(pk)){
iterator.remove();
}
}
}
//克隆数据库的数据并翻译
List<PzjtkjqjszVO> clonedatabaselist = new ArrayList<PzjtkjqjszVO>();
if(databaselist != null && databaselist.size() > 0){
for (int i = 0; i < databaselist.size(); i++) {
PzjtkjqjszVO vo = (PzjtkjqjszVO) databaselist.get(i);
PzjtkjqjszVO clonevo = (PzjtkjqjszVO) vo.clone();
clonedatabaselist.add(clonevo);
}
}
//数据库vo参照翻译
SuperVOUtil.execFormulaWithVOs(clonedatabaselist.toArray(new PzjtkjqjszVO[0]), new String[]{
"hszbbm->getcolvalue(org_accountingbook,code,pk_accountingbook,hszbbm)",
"pzh->getcolvalue(voucherref_view,num,pk_voucher,pzh)",
"kjqj->getcolvalue(bd_accperiodmonth,yearmth,pk_accperiodmonth,kjqj)",
"project->getcolvalue2(bd_defdoc,code,pk_defdoc,project,pk_defdoclist,getcolvalue(bd_defdoclist,pk_defdoclist,code,\"ZKKJXM\"))",
"hzjtkjqj->getcolvalue(bd_accperiodmonth,yearmth,pk_accperiodmonth,hzjtkjqj)",
});
for(int i = 0; i < addAndUpdList.size(); i++){
PzjtkjqjszVO addAndUpdVO = (PzjtkjqjszVO) addAndUpdList.get(i);
//核算账簿编码
String addAndUpdhszbbm = NullValueUtils.getNullStringValue(addAndUpdVO.getHszbbm());
//凭证号
String addAndUpdpzh = NullValueUtils.getNullStringValue(addAndUpdVO.getPzh());
//会计期间
String addAndUpdkjqj = NullValueUtils.getNullStringValue(addAndUpdVO.getKjqj());
//项目
String addAndUpdproject = NullValueUtils.getNullStringValue(addAndUpdVO.getProject());
//坏账计提会计期间
String addAndUpdhzjtkjqj = NullValueUtils.getNullStringValue(addAndUpdVO.getHzjtkjqj());
String addAndUpdid = addAndUpdhszbbm + addAndUpdpzh + addAndUpdkjqj + addAndUpdproject + addAndUpdhzjtkjqj;
for(PzjtkjqjszVO vo : clonedatabaselist){
//核算账簿编码
String hszbbm = NullValueUtils.getNullStringValue(vo.getHszbbm());
//凭证号
String pzh = NullValueUtils.getNullStringValue(vo.getPzh());
//会计期间
String kjqj = NullValueUtils.getNullStringValue(vo.getKjqj());
//项目
String project = NullValueUtils.getNullStringValue(vo.getProject());
//坏账计提会计期间
String hzjtkjqj = NullValueUtils.getNullStringValue(vo.getHzjtkjqj());
String id = hszbbm + pzh + kjqj + project + hzjtkjqj;
if(addAndUpdid.equals(id)){
throw new BusinessException("核算账簿编码:"+hszbbm+",凭证号:"+pzh+",会计期间:"+kjqj+",项目编码:"+project+",坏账计提会计期间:"+hzjtkjqj+"重复,请检查!");
}
}
}
BatchSaveAction<PzjtkjqjszVO> saveAction = new BatchSaveAction<PzjtkjqjszVO>();
BatchOperateVO retData = saveAction.batchSave(batchVO);
return retData;
}
@Override
public PzjtkjqjszVO[] queryDataByPks(String[] pks) throws BusinessException {
// TODO 自动生成的方法存根
SqlBuilder sqlBuilder = new SqlBuilder();
sqlBuilder.append("select * from jych_pzjtkjqjsz where dr = 0 ");
sqlBuilder.append(new IDQueryBuilder().buildSQL(" and pk_pzjtkjqjsz ", pks));
@SuppressWarnings("unchecked")
List<PzjtkjqjszVO> list = (List<PzjtkjqjszVO>) getDao().executeQuery(sqlBuilder.toString(), new BeanListProcessor(PzjtkjqjszVO.class));
return list == null || list.size() == 0 ? null:list.toArray(new PzjtkjqjszVO[0]);
}
//后端查sql要用到的方法
private BaseDAO dao;
private BaseDAO getDao() {
if(dao == null) {
dao = new BaseDAO();
}
return dao;
}
@SuppressWarnings("unchecked")
@Override
public List<PzjtkjqjszVO> queryData(QueryParam queryparam)
throws BusinessException {
String hszbbm = NullValueUtils.getNullStringValue(queryparam.getHszbbm());
String pzh = NullValueUtils.getNullStringValue(queryparam.getPzh());
String kjqj = NullValueUtils.getNullStringValue(queryparam.getKjqj());
String hzjtkjqj = NullValueUtils.getNullStringValue(queryparam.getHzjtkjqj());
String project = NullValueUtils.getNullStringValue(queryparam.getProject());
SqlBuilder sql = new SqlBuilder();
sql.append(" select h.* from jych_pzjtkjqjsz h ");
sql.append(" left join org_accountingbook acc on acc.pk_accountingbook = h.hszbbm ");
sql.append(" left join gl_voucher vou on vou.pk_voucher = h.pzh ");
sql.append(" left join bd_vouchertype typ on typ.pk_vouchertype = vou.pk_vouchertype ");
sql.append(" left join bd_accperiodmonth mon on mon.pk_accperiodmonth = h.kjqj ");
sql.append(" left join bd_accperiodmonth hzmon on hzmon.pk_accperiodmonth = h.hzjtkjqj ");
sql.append(" left join bd_defdoc def on def.pk_defdoc = h.project");
sql.append(" where nvl(h.dr,0) = 0 ");
sql.append(" and nvl(acc.dr,0) = 0 ");
sql.append(" and nvl(vou.dr,0) = 0 ");
sql.append(" and nvl(mon.dr,0) = 0 ");
sql.append(" and nvl(hzmon.dr,0) = 0 ");
sql.append(" and nvl(def.dr,0) = 0 ");
if (!hszbbm.equals("")) {
sql.append(" AND acc.name = '"+hszbbm+"' ");//核算账簿编码
}
if (!pzh.equals("")) {
sql.append(" AND typ.shortname || '-' || vou.num = '"+pzh+"' ");//凭证号
}
if (!kjqj.equals("")) {
sql.append(" AND mon.yearmth = '"+kjqj+"' ");//会计期间
}
if (!hzjtkjqj.equals("")) {
sql.append(" AND hzmon.yearmth = '"+hzjtkjqj+"' ");//坏账计提会计期间
}
if (!project.equals("")){
sql.append(" AND def.name = '"+project+"' ");//项目
}
List<PzjtkjqjszVO> volist = (List<PzjtkjqjszVO>) getDao().executeQuery(sql.toString(), new BeanListProcessor(PzjtkjqjszVO.class));
return volist;
}
}