nc生成临时凭证配置

nc生成临时凭证配置

要实现的功能:

  • 审批时生成临时凭证
  • 弃审时删除临时凭证
  1. 前台配置
    在这里插入图片描述
    在这里插入图片描述
  2. 后台配置
  • BillReflectorServiceImpl.java
package nc.pubimpl.jych.qtsq.voucher;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import nc.impl.pubapp.pattern.data.bill.BillQuery;
import nc.impl.pubapp.pattern.data.bill.tool.BillConcurrentTool;
import nc.pubitf.fip.external.IBillReflectorService;
import nc.vo.fip.external.FipExtendAggVO;
import nc.vo.fip.service.FipRelationInfoVO;
import nc.vo.jych.qthtfksqd.AggQthtfksqdVO;
import nc.vo.pub.BusinessException;
import nc.vo.pubapp.pattern.log.TimeLog;

public class BillReflectorServiceImpl implements IBillReflectorService{

	@Override
	public Collection<FipExtendAggVO> queryBillByRelations(
			Collection<FipRelationInfoVO> collection) throws BusinessException {
		// TODO 自动生成的方法存根
		Map<String, FipRelationInfoVO> mapInfo = this.getMapRelationInfo(collection);
		String[] hids =
				mapInfo.keySet().toArray(new String[mapInfo.keySet().size()]);

		BillQuery<AggQthtfksqdVO> query =
				new BillQuery<AggQthtfksqdVO>(AggQthtfksqdVO.class);
		AggQthtfksqdVO[] bills = query.query(hids);
		// 加锁
		BillConcurrentTool tool = new BillConcurrentTool();
		TimeLog.logStart();
		tool.lockBill(bills);
		TimeLog.info("锁定表头、表体主健"); /*-=notranslate=-*/

		Collection<FipExtendAggVO> fipAggVO = this.createFipMsgVO(bills);
		return fipAggVO;
	}


	private Collection<FipExtendAggVO> createFipMsgVO(AggQthtfksqdVO[] vos) {
		Collection<FipExtendAggVO> msgvolist = new ArrayList<FipExtendAggVO>();
		for (AggQthtfksqdVO vo : vos) {
			// SaleInvoiceBVO[] items = vo.getChildrenVO();
			FipExtendAggVO msgvo = new FipExtendAggVO();
			// String cbillbid = items[0].getCsaleinvoicebid();
			msgvo.setBillVO(vo);
			msgvo.setRelationID(vo.getPrimaryKey());
			// FipRelationInfoVO infovo = mapInfo.get(cbillbid);
			// msgvo.setMessageinfo(infovo);
			msgvolist.add(msgvo);
		}
		return msgvolist;
	}

	private Map<String, FipRelationInfoVO> getMapRelationInfo(
			Collection<FipRelationInfoVO> relationvos) {
		Map<String, FipRelationInfoVO> map =
				new HashMap<String, FipRelationInfoVO>();
		for (FipRelationInfoVO vo : relationvos) {
			String id = vo.getRelationID();
			map.put(id, vo);
		}
		return map;
	}
}
  • 执行一条sql插入脚本
insert into fip_billregister (BILLDRAWCLASS, BILLREFLECTCLASS, BILLSUMCLASS, CLASS_ENTITY_ID, CTRLORGFINDCLASS, DEFDOC1, DEFDOC2, DEFDOC3, DEFQUERYCLASS, DESBILLSERVCLASS, DESBILLSUMCLASS, DESCTRLRULECLASS, DESSUMRULECLASS, DESSUMRULEENTITY, DESSUMRULEREF, DISPLAYCLASS, DR, DRAWQUERYCLASS, EDITCLASS, LINKQUERYCLASS, MODULECODE, ORG_CTRL_ENTITY1, ORG_CTRL_ENTITY2, ORG_ENTITY_ID, PK_BILLREGISTER, PK_BILLTYPE, PK_GROUP, PK_ORG, TS)
values (null, 'nc.pubimpl.zyzj.loanytlx.voucher.BillReflectorServiceImpl', null, '~', null, '990d709e-deeb-4e73-b526-ee0d173c7870', null, null, null, null, null, null, null, null, null, null, 0, null, null, null, 'zyzj', '~', '~', '~', '0000Z80000000zyzj003', 'H104', '~', '~', '2020-04-21 16:05:53');
--------------------------------------------------------------------------------------------------------------------------------
其中:
'nc.pubimpl.zyzj.loanytlx.voucher.BillReflectorServiceImpl'为新建的一个类
'990d709e-deeb-4e73-b526-ee0d173c7870'为该单据在md_class表中的id字段的值(md_class为该单据元数据的实体表)
'zyzj'为该单据的模块名
'0000Z80000000zyzj003'自行命名,不重复即可
'H104'为该单据的单据类型
  • GenQthtsqRule.java
package nc.bs.jych.qthtfksqd.ace.bp.rule;

import nc.bs.framework.common.NCLocator;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.pubitf.fip.service.IFipMessageService;
import nc.vo.fip.service.FipMessageVO;
import nc.vo.fip.service.FipRelationInfoVO;
import nc.vo.jych.qthtfksqd.AggQthtfksqdVO;
import nc.vo.jych.qthtfksqd.QthtfksqdVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFDate;
import nc.vo.pub.lang.UFDouble;
import nc.vo.pubapp.AppContext;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.wgbfb.tool.NullValueUtils;
/**
 * @author hanh
 */
public class GenQthtsqRule implements IRule<AggQthtfksqdVO>{
	@Override
	public void process(AggQthtfksqdVO[] aggvos) {
		// TODO 自动生成的方法存根
		for (int i = 0; i < aggvos.length; i++) {
			execute(aggvos[i]);
		}
	}

	private void execute(AggQthtfksqdVO aggvo) {
		if(aggvo.getParentVO().getBillstatus() != 1){
			return;
		}
		QthtfksqdVO headvo = null;
		// 传会计平台
		try {
			headvo = aggvo.getParentVO();
			//核定金额
			UFDouble nmny = headvo.getHdje();
			
			UFDate date = AppContext.getInstance().getBusiDate();
			FipRelationInfoVO infovo = new FipRelationInfoVO();
			// 组装VO
			infovo.setPk_group(headvo.getPk_group());// 集团
			infovo.setPk_org(headvo.getPk_org());// 组织
			infovo.setPk_system("H9");// 系统类型
			infovo.setPk_billtype("QTSQ");// 单据类型或者交易类型
			infovo.setRelationID(headvo.getPrimaryKey());// 关联号-主键
			infovo.setPk_operator(headvo.getCreator());// 制单人
			infovo.setBusidate(date);// 业务日期
			infovo.setDefdoc1(null);// 自定义关联档案1
			infovo.setDefdoc2(null);// 自定义关联档案2
			infovo.setDefdoc3(null);// 自定义关联档案3
			infovo.setFreedef1(headvo.getVbillno());// 单据号
			infovo.setFreedef2(headvo.getZy());// 说明、摘要
			infovo.setFreedef3(NullValueUtils.getNullStringValue(nmny));// 金额
			infovo.setFreedef4(null);// 自定义项4
			infovo.setFreedef5(null);// 自定义项5
			
			// 消息VO
			FipMessageVO msgvo = new FipMessageVO();
			msgvo.setMessagetype(0);// 0是增加,1是删除
			msgvo.setBillVO(aggvo);
			msgvo.setMessageinfo(infovo);
			getService().sendMessage(msgvo);
		} catch (BusinessException e) {
			
			ExceptionUtils.wrappBusinessException("单据"+headvo.getVbillno()+"审核生成凭证出现异常:"+e.getMessage());
		}
	}

	
	private IFipMessageService service;
	private IFipMessageService getService(){
		if(service == null){
			service = NCLocator.getInstance().lookup(
					IFipMessageService.class);
		}
		return service;
	}
}
  • DeleteQthtsqRule.java
package nc.bs.jych.qthtfksqd.ace.bp.rule;

import nc.bs.framework.common.NCLocator;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.pubitf.fip.service.IFipMessageService;
import nc.vo.fip.service.FipMessageVO;
import nc.vo.fip.service.FipRelationInfoVO;
import nc.vo.jych.qthtfksqd.AggQthtfksqdVO;
import nc.vo.jych.qthtfksqd.QthtfksqdVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFDouble;
import nc.vo.pubapp.AppContext;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.wgbfb.tool.NullValueUtils;
/**
 * @author hanh
 */
public class DeleteQthtsqRule implements IRule<AggQthtfksqdVO>{

	@Override
	public void process(AggQthtfksqdVO[] aggvos) {
		// TODO 自动生成的方法存根
		for (int i = 0; i < aggvos.length; i++) {
			execute(aggvos[i]);
		}
	}

	private void execute(AggQthtfksqdVO aggvo) {
		
		QthtfksqdVO headvo = null;
		// 传会计平台
		try {
			headvo = aggvo.getParentVO();
			//核定金额
			UFDouble nmny = headvo.getHdje();
			FipRelationInfoVO infovo = new FipRelationInfoVO();
			// 组装VO
			infovo.setPk_group(headvo.getPk_group());// 集团
			infovo.setPk_org(headvo.getPk_org());// 组织
			infovo.setPk_system("H9");// 系统类型
			infovo.setPk_billtype("QTSQ");// 单据类型或者交易类型
			infovo.setRelationID(headvo.getPrimaryKey());// 关联号-主键
			infovo.setPk_operator(headvo.getCreator());// 制单人
			infovo.setBusidate(AppContext.getInstance().getBusiDate());// 业务日期
			infovo.setDefdoc1(null);// 自定义关联档案1
			infovo.setDefdoc2(null);// 自定义关联档案2
			infovo.setDefdoc3(null);// 自定义关联档案3
			infovo.setFreedef1(headvo.getVbillno());// 单据号
			infovo.setFreedef2(null);// 说明、摘要
			infovo.setFreedef3(NullValueUtils.getNullStringValue(nmny));// 核定金额
			infovo.setFreedef4(null);// 自定义项4
			infovo.setFreedef5(null);// 自定义项5
			
			// 消息VO
			FipMessageVO msgvo = new FipMessageVO();
			msgvo.setMessagetype(1);// 0是增加,1是删除
			msgvo.setBillVO(aggvo);
			msgvo.setMessageinfo(infovo);
			getService().sendMessage(msgvo);
		} catch (BusinessException e) {
			
			ExceptionUtils.wrappBusinessException("单据"+headvo.getVbillno()+"弃审删除凭证出现异常:"+e.getMessage());
		}
	}

	
	private IFipMessageService service;
	private IFipMessageService getService(){
		if(service == null){
			service = NCLocator.getInstance().lookup(
					IFipMessageService.class);
		}
		return service;
	}
}

  • 往审批规则和弃审规则里面引入这两个类
  1. 前台配置
    在这里插入图片描述
    转换模板找实施配置
    在这里插入图片描述
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/614919.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二、jacoco代码覆盖率工具

jacoco代码覆盖率工具 一、jacoco介绍二、常见的java代码覆盖率工具三、为什么选择jacoco四、jacoco的特点五、Jacoco 支持的覆盖率指标六、那些暂未支持的覆盖率指标七、jacoco技术原理八、Jacoco 下载与配置九、jacoco主要文件十、jacoco使用流程十一、jacoco单元测试实战1、…

用友畅捷通T+ keyEdit sql注入漏洞

产品介绍 畅捷通 T 是一款灵动&#xff0c;智慧&#xff0c;时尚的基于互联网时代开发的管理软件&#xff0c;主要针对中小型工贸与商贸企业&#xff0c;尤其适合有异地多组织机构&#xff08;多工厂&#xff0c;多仓库&#xff0c;多办事处&#xff0c;多经销商&#xff09;的…

记录一次接口优化的过程。接口响应时间从500s下降到5s。

记录一次接口优化的过程。接口响应时间从500s下降到5s。 接口说明&#xff1a; 该接口通过用户导入的一年内每天的厂区用电功率数据来计算用户安装储能设备后的收益情况。 用电功率数据具体为每15分钟一条&#xff0c;一年约有 12*30*24*4 34560 条。 代码循环情况为&…

旅游系统小程序基于Uniapp+FastAdmin+ThinkPHP(源码搭建/上线/运营/售后/更新)

一款基于UniappFastAdminThinkPHP开发的旅游系统&#xff0c;包含消费者端&#xff08;手机端&#xff09;、机构工作人员&#xff08;手机端&#xff09;、机构端&#xff08;PC&#xff09;、平台管理端&#xff08;PC&#xff09;。机构可以发布旅游线路、景点项目&#xff…

ASP.NET一个简单的媒体播放器的设计与实现

摘 要 本论文所描述的播放器是在Microsoft Visual Studio .NET 2003平台下利用Visual Basic.NET语言完成的。使用Visual Basic.NET提供的Windows Media Player控件以及文件处理&#xff0c;最终实现一款别致的&#xff0c;贴近用户操作习惯的媒体播放器。 该播放器实现了对WAV…

excel表格里,可以把百分号放在数字前面吗?

在有些版本里是可以的&#xff0c;这样做&#xff1a; 选中数据&#xff0c;鼠标右键&#xff0c;点击设置单元格格式&#xff0c;切换到自定义&#xff0c;在右侧栏输入%0&#xff0c;点击确定就可以了。 这样设置的好处是&#xff0c;它仍旧是数值&#xff0c;并且数值大小没…

进程间通信(二)

共享内存 当进程A和进程B有一块共享的内存空间时&#xff0c;这两个进程之间的数据交互就会变的很简单&#xff0c;只需要像读取自己内存空间中的元素一样去读取数据即可。实现共享内存进行数据交互的一般步骤&#xff1a; 创建/打开共享内存内存映射数据交换断开与共享内存的…

icap对flash的在线升级

文章目录 一、icap原语介绍&#xff08;针对 S6 系列的 ICap&#xff09;&#xff0c;之后可以拓展到A7、K7当中去二、程序1设计2.1信号结构框图2.2 icap_delay设计2.3 icap_ctrl设计&#xff08;可以当模板使用&#xff0c;之后修改关键参数即可&#xff09; 三、程序2设计四、…

C++中调用python函数(VS2017+WIN10+Anaconda虚拟环境)

1.利用VS创建C空项目 step1 文件——新建——项目 step2 Visual C—— Windows桌面——Windows桌面向导 step3 选择空项目 step4 源文件——新建项——添加 step5 Visual C——C文件&#xff08;.cpp&#xff09; 2.配置环境 Step1. 更换成Release与X64 Step2. 打开项目属性&…

巨坑啊! before-upload返回false 会执行on-remove

通过对on-remove对应参数的打印&#xff0c;发现回调中的file参数有个status&#xff0c;若是是在before-upload中就被过滤了&#xff0c;就是ready&#xff0c;若是已经上传成功了去点击删除&#xff0c;status是success&#xff0c;就他了。 onRemove(file,fileList){if(file…

探索Linux:深入理解各种指令与用法

文章目录 cp指令mv指令cat指令more指令less指令head指令tail指令与时间相关的指令date指令 cal指令find指令grep指令zip/unzip指令总结 上一个Linux文章我们介绍了大部分指令&#xff0c;这节我们将继续介绍Linux的指令和用法。 cp指令 功能&#xff1a;复制文件或者目录 语法…

在 Python 的哪个版本之后,字典的添加顺序与键的顺序是一致的?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 在 Python 的不同版本中&#xff0c;字典&#xff08;dict&#xff09;类型的行为发生了显著变化。在 Python 3.6 及之前的版本中&#xff0c;字典是无序的&#xff0c;这意味着字典在遍历时不能保证按…

图鸟模板-官网:基于Vue 3的前端开发新篇章

一、引言 随着前端技术的飞速发展&#xff0c;企业对于官网的需求也从简单的展示型网站向功能丰富、交互体验良好的方向转变。在这样的背景下&#xff0c;图鸟模板-官网以其基于Vue 3的纯前端开发特性&#xff0c;以及支持微信小程序、支付宝小程序、APP和H5的跨平台能力&…

【.NET Core】你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟

你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟 文章目录 你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟一、概述二、CallerMemberNameAttribute类三、CallerFilePathAttribute 类四、CallerLineNumberAttribute 类…

每个初创企业创始人都应了解的搜索引擎优化基础知识

会话式AI引擎&#xff1a;如何革新您的业务通讯&#xff1f; 对于已经身兼数职的初创企业创始人来说&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;似乎是一项艰巨的任务。然而&#xff0c;在数字时代&#xff0c;它是推动流量、建立品牌知名度和实现长期成功不可或缺的…

Golang编译优化——稀疏条件常量传播

文章目录 一、概述二、稀疏条件常量传播2.1 初始化worklist2.2 构建def-use链2.3 更新值的lattice2.4 传播constant值2.5 替换no-constant值 一、概述 常量传播&#xff08;constant propagation&#xff09;是一种转换&#xff0c;对于给定的关于某个变量 x x x和一个常量 c …

c++ 归并排序

归并排序是一种遵循分而治之方法的排序算法。它的工作原理是递归地将输入数组划分为较小的子数组并对这些子数组进行排序&#xff0c;然后将它们合并在一起以获得排序后的数组。 简单来说&#xff0c;归并排序的过程就是将数组分成两半&#xff0c;对每一半进行排序&#xff0c…

车辆运动模型中LQR代码实现

一、前言 最近看到关于架构和算法两者关系的一个描述&#xff0c;我觉得非常认同&#xff0c;分享给大家。 1、好架构起到两个作用&#xff1a;合理的分解功能、合理的适配算法&#xff1b; 2、好的架构是好的功能的必要条件&#xff0c;不是充分条件&#xff0c;一味追求架构…

贝壳面试:MySQL联合索引,最左匹配原则是什么?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 1.谈谈你对MySQL联合索引的认识&#xff1f; 2.在MySQ…

【强训笔记】day20

NO.1 思路&#xff1a;先判断能对砍几个回合&#xff0c;取最小值&#xff0c;因为回合数是整数&#xff0c;所以可能存在都大于0的情况&#xff0c;再判断一下如果都存活就再对砍一次&#xff0c;直到一家存活或者都死亡。 代码实现&#xff1a; #include<iostream>u…