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

2024-01-06 07:36

本文主要是介绍保存校验,根据表体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;}

这篇关于保存校验,根据表体String和UFDouble的两个字段,判断哪些记录重复的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/575655

相关文章

java中判断json key是否存在的几种方法

《java中判断jsonkey是否存在的几种方法》在使用Java处理JSON数据时,如何判断某一个key是否存在?本文就来介绍三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目http://www.chinasem.cn录第一种方法是使用 jsONObject 的 has 方法

Java中的Schema校验技术与实践示例详解

《Java中的Schema校验技术与实践示例详解》本主题详细介绍了在Java环境下进行XMLSchema和JSONSchema校验的方法,包括使用JAXP、JAXB以及专门的JSON校验库等技术,本文... 目录1. XML和jsON的Schema校验概念1.1 XML和JSON校验的必要性1.2 Sche

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

SpringBoot AspectJ切面配合自定义注解实现权限校验的示例详解

《SpringBootAspectJ切面配合自定义注解实现权限校验的示例详解》本文章介绍了如何通过创建自定义的权限校验注解,配合AspectJ切面拦截注解实现权限校验,本文结合实例代码给大家介绍的非... 目录1. 创建权限校验注解2. 创建ASPectJ切面拦截注解校验权限3. 用法示例A. 参考文章本文

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、