保存校验,根据表体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

相关文章

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

MySQL中删除重复数据SQL的三种写法

《MySQL中删除重复数据SQL的三种写法》:本文主要介绍MySQL中删除重复数据SQL的三种写法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录方法一:使用 left join + 子查询删除重复数据(推荐)方法二:创建临时表(需分多步执行,逻辑清晰,但会