从中间表取数更新TW销售合同登记数据(含表体)

2023-10-15 05:15

本文主要是介绍从中间表取数更新TW销售合同登记数据(含表体),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

package nc.bs.backgroundtasks;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import nc.bs.dao.BaseDAO;
import nc.bs.framework.common.NCLocator;
import nc.bs.pub.pa.PreAlertObject;
import nc.bs.pub.taskcenter.BgWorkingContext;
import nc.bs.pub.taskcenter.IBackgroundWorkPlugin;
import nc.impl.pubapp.pattern.data.bill.BillQuery;
import nc.itf.jych.IXshtdjMaintain;
import nc.jdbc.framework.processor.BeanListProcessor;
import nc.jdbc.framework.processor.ColumnListProcessor;
import nc.vo.jych.oavo.OaXshtBVO;
import nc.vo.jych.oavo.OaXshtVO;
import nc.vo.jych.util.SqlBuilder;
import nc.vo.jych.xshtdj.AggXshtdjVO;
import nc.vo.jych.xshtdj.XshtdjBVO;
import nc.vo.jych.xshtdj.XshtdjVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.SuperVOUtil;
import nc.vo.pub.VOStatus;
import nc.vo.pub.lang.UFDate;
import nc.vo.pub.lang.UFDateTime;
import nc.vo.wgbfb.tool.NullValueUtils;
/*** @desc : 从中间表取数更新TW销售合同登记数据* @author hanh* @date : 2023-10-09*/public class OAXshtdjPlugin implements IBackgroundWorkPlugin{@Overridepublic PreAlertObject executeTask(BgWorkingContext arg0) throws BusinessException {//抽取中间表数据generateZjXsht();return null;}//抽取中间表数据@SuppressWarnings("unchecked")private void generateZjXsht() throws BusinessException {//查询中间表中未执行的主表数据String sql = " select * from jych_zj_xsht where nvl(dr,0) = 0 and nvl(iszx,'N') != 'Y'  ";//volist存放中间表中未执行的主表数据List<OaXshtVO> volist = (List<OaXshtVO>) getDao().executeQuery(sql.toString(), new BeanListProcessor(OaXshtVO.class));if(volist == null || volist.size() < 1){return;}//idlist存放id+sjlyList<String> idlist = new ArrayList<String>(); //zjpklist存放中间表主表主键List<String> zjpklist = new ArrayList<String>();for (OaXshtVO vo : volist) {//给idlist和zjpklist赋值String id = vo.getId()+vo.getSjly();idlist.add(id);zjpklist.add(vo.getPk_xsht());}//根据中间表id+sjly,查询nc系统中已存在的主表主键SqlBuilder pksql = new SqlBuilder(); pksql.append(" select pk_xshtdj from jych_xshtdj where nvl(dr,0) = 0 and ");pksql.appendNotIn(" def1||sjly ", idlist.toArray(new String[0]));List<String> pklist = (List<String>) getDao().executeQuery(pksql.toString(), new ColumnListProcessor());//Map<key : id+sjly , value : AggVO> 将已存在的AggVO放入vomapMap<String, AggXshtdjVO> vomap = new HashMap<String, AggXshtdjVO>();if(pklist != null && pklist.size() > 0){//根据已存在的主表主键获取已存在的AggVOBillQuery<AggXshtdjVO> billQuery = new BillQuery<AggXshtdjVO>(AggXshtdjVO.class);AggXshtdjVO[] aggvos = billQuery.query(pklist.toArray(new String[0]));for (AggXshtdjVO aggvo : aggvos) {//将aggvo对应的id和aggvo捆绑String wxtbs = aggvo.getParentVO().getDef1();String sjly = aggvo.getParentVO().getSjly();String id = wxtbs + sjly;vomap.put(id, aggvo);}}SqlBuilder sqlnameb = new SqlBuilder(); //查询中间表中主表所对应的子表数据sqlnameb.append(" select * from jych_zj_xsht_b where nvl(dr,0) = 0 and ");sqlnameb.append(" mainid||sjly ", idlist.toArray(new String[0]));//bvolist存放已存在主表对应的子表数据List<OaXshtBVO> bvolist = (List<OaXshtBVO>) getDao().executeQuery(sqlnameb.toString(), new BeanListProcessor(OaXshtBVO.class));//Map<key : mainid+sjly , value : AggVO> 已存在主表对应的子表数据放入bvomapMap<String, List<OaXshtBVO>> bvomap = new HashMap<String, List<OaXshtBVO>>();if(bvolist != null && bvolist.size() > 0){for (OaXshtBVO bvo : bvolist) {//将bvo对应的mainid和bvo捆绑String mainid = bvo.getMainid()+bvo.getSjly();if(bvomap.containsKey(mainid)){//如果bvomap存在该mainid,直接将该bvo和该mainid捆绑List<OaXshtBVO> list = bvomap.get(mainid);list.add(bvo);bvomap.put(mainid, list);} else {//如果bvomap不存在该mainid,则新建一个list,然后再将该bvo和该mainid捆绑List<OaXshtBVO> list = new ArrayList<OaXshtBVO>();list.add(bvo);bvomap.put(mainid, list);}}}//翻译OaXshtVOupdateHeadVO(volist.toArray(new OaXshtVO[0])); //insertlist存放执行插入的aggvoList<AggXshtdjVO> insertlist = new ArrayList<AggXshtdjVO>();//updatelist存放执行更新后的aggvoList<AggXshtdjVO> updatelist = new ArrayList<AggXshtdjVO>();//orgupdatelist存放执行更新前的aggvo	List<AggXshtdjVO> orgupdatelist = new ArrayList<AggXshtdjVO>();		for (OaXshtVO vo : volist) {//封装insertlist、updatelist、orgupdatelistif(vomap != null && vomap.size() > 0 && vomap.containsKey(vo.getId()+vo.getSjly())){ //修改AggXshtdjVO aggvo = vomap.get(vo.getId()+vo.getSjly());AggXshtdjVO clone = (AggXshtdjVO) aggvo.clone();XshtdjVO headvo = clone.getParentVO();headvo.setStatus(VOStatus.UPDATED);setHeadvo(headvo, vo);updatelist.add(clone);orgupdatelist.add(aggvo);} else { //新增AggXshtdjVO aggvo = new AggXshtdjVO();XshtdjVO headvo = new XshtdjVO();headvo.setStatus(VOStatus.NEW);headvo.setPk_billtype("XSHT");headvo.setTranstypecode("XSHT");headvo.setPk_org(vo.getPk_org());headvo.setPk_org_v(vo.getPk_org_v());headvo.setPk_group(vo.getPk_group());headvo.setPk_transtype(vo.getPk_transtype());headvo.setDbilldate(new UFDate());headvo.setVbillstatus(-1);setHeadvo(headvo, vo);if(bvomap != null && bvomap.size() > 0 && bvomap.containsKey(vo.getId()+vo.getSjly())){XshtdjBVO[] bvos = setbodyvo(bvomap.get(vo.getId()+vo.getSjly()));aggvo.setChildrenVO(bvos);}aggvo.setParentVO(headvo);insertlist.add(aggvo);}}if(insertlist != null && insertlist.size() > 0){//调新增接口AggXshtdjVO[] insertvos = getService().insert(insertlist.toArray(new AggXshtdjVO[0]), insertlist.toArray(new AggXshtdjVO[0]));List<AggXshtdjVO> insertvolist = new ArrayList<AggXshtdjVO>();for (AggXshtdjVO insertvo : insertvos) {AggXshtdjVO clone = (AggXshtdjVO) insertvo.clone();XshtdjVO vo = clone.getParentVO();vo.setVbillstatus(1);vo.setApprovedate(new UFDateTime());vo.setApprover(vo.getCreator());insertvolist.add(clone);}getService().approve(insertvolist.toArray(new AggXshtdjVO[0]), insertvos);}if(updatelist != null && updatelist.size() > 0){//调更新接口getService().update(updatelist.toArray(new AggXshtdjVO[0]), orgupdatelist.toArray(new AggXshtdjVO[0]));}SqlBuilder updatesql = new SqlBuilder(); //更新中间表中已执行数据的是否执行标识updatesql.append(" update jych_zj_xsht set iszx = 'Y' where ");updatesql.append(" pk_xsht ", zjpklist.toArray(new String[0]));getDao().executeUpdate(updatesql.toString());}private void updateHeadVO(OaXshtVO[] headvos) {SuperVOUtil.execFormulaWithVOs(headvos, new String[] {// 组织"pk_org->getcolvalue2(org_orgs,pk_org,code,\"05\",islastversion,\"Y\")",// 组织版本"pk_org_v->getcolvalue(org_orgs,pk_vid,pk_org,pk_org)",// 集团"pk_group->getcolvalue(org_group,pk_group,code,\"01\")",//申请人"lastname->getColValue2(bd_psndoc,pk_psndoc,name,lastname,dr,0)",//申请部门"departmentname->getColValue2(org_dept,pk_dept,name,departmentname,dr,0)",//甲方"jfdwbm->getcolvalue2(bd_customer,pk_customer,name,jfdwbm,dr,0)",//乙方"partyb->getcolvalue2(bd_supplier,pk_supplier,name,\"北京城建智控科技股份有限公司\",dr,0)",//币种"bz->getcolvalue2(bd_currtype,pk_currtype,name,bz,dr,0)",//营销项目"xmbh->getColValue2(zkch_marketpro,pk_marketpro,marketprocode,xmbh,dr,0)",});}public void setHeadvo(XshtdjVO headvo, OaXshtVO vo){headvo.setDef1(vo.getId());//项目编号headvo.setPk_marketpro(vo.getXmbh());//合同编码headvo.setHtcode(vo.getHtbh());//合同名称headvo.setHtname(vo.getHtmc());//合同类型headvo.setHttype(vo.getHtlx());//投标类型headvo.setTbtype(vo.getTblx());//甲方headvo.setPartya(vo.getJfdwbm());headvo.setPartyb(vo.getPartyb());//合同金额(含税)headvo.setNmny(vo.getHtjkhs());//合同金额(不含税)headvo.setNtmny(vo.getHtjkbhs());//税率(%)headvo.setTaxrate(NullValueUtils.getNullStringValue(vo.getSl()));//税额headvo.setPaid(vo.getSe());//累计开票金额//				headvo.setLjkpmny(rs.getString(1));//累计回款金额//				headvo.setLjhkmny(rs.getString(1));//累计结算金额//				headvo.setLjnjsmny(rs.getString(1));//申请日期headvo.setSqdate(vo.getSqrq());//签约日期headvo.setQydate(vo.getQyrq());//归档日期headvo.setGddate(vo.getSjyyrq());//所属机构headvo.setSsjg(vo.getSzjg());//申请人headvo.setSqr(vo.getLastname());//申请部门headvo.setSqdept(vo.getDepartmentname());//是否关联交易方headvo.setIsgljyf(vo.getSfgljyf());//是否包含自研产品headvo.setIszycp(vo.getSfbhzycp());//合同开工日期headvo.setHtkgdate(vo.getHtkgrq());//合同竣工日期headvo.setHtjgdate(vo.getHtjgrq());//合同工期headvo.setHtgq(vo.getHtgq());//履约地点headvo.setLyadress(vo.getLydd());//币种headvo.setBz(vo.getBz());//汇率headvo.setHl(vo.getHl());//合同份数headvo.setHtfs(vo.getHtfs());//是否为公司标椎合同模板headvo.setIsgsbzmb(vo.getSfwgsbzhtmb());//合同章headvo.setHtz(vo.getHtz());//公章headvo.setGz(vo.getGz());//法人章headvo.setFrz(vo.getFrz());//总经理手签章headvo.setZjlsqz(vo.getZjlsqz());//福州分公司公章headvo.setFzfgsgz(vo.getFzfgsgz());//总经理印章headvo.setZjlyz(vo.getZjlyz());//备注说明headvo.setMemo(vo.getBzsm());headvo.setSjly(vo.getSjly());}public XshtdjBVO[] setbodyvo(List<OaXshtBVO> bvolist){XshtdjBVO[] bvos = new XshtdjBVO[bvolist.size()];for (int i = 0; i < bvos.length; i++) {OaXshtBVO bvo = bvolist.get(i);bvos[i] = new XshtdjBVO();bvos[i].setRowno(i+1+"0");//税率bvos[i].setTaxrate(bvo.getSl());//含税金额bvos[i].setNmny(bvo.getHsje());//不含税金额bvos[i].setNtmny(bvo.getBhsje());//合计税额bvos[i].setPaid(bvo.getSey());//合同事项bvos[i].setHtsx(bvo.getHtsx());bvos[i].setStatus(VOStatus.NEW);}return bvos;}private IXshtdjMaintain service;private IXshtdjMaintain getService() {if (service == null) {service = NCLocator.getInstance().lookup(IXshtdjMaintain.class);}return service;}private BaseDAO dao;private BaseDAO getDao(){if(dao == null){dao = new BaseDAO();}return dao;}}

这篇关于从中间表取数更新TW销售合同登记数据(含表体)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口