保存校验,根据表体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中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的