更新收款单对应的到账通知的生成状态
This commit is contained in:
		
							parent
							
								
									5c9050f002
								
							
						
					
					
						commit
						4a824b44f3
					
				|  | @ -0,0 +1,62 @@ | |||
| // | ||||
| // Source code recreated from a .class file by IntelliJ IDEA | ||||
| // (powered by FernFlower decompiler) | ||||
| // | ||||
| 
 | ||||
| package nc.bs.pub.action; | ||||
| 
 | ||||
| import nc.bs.arap.actions.N_BASE_ACTION; | ||||
| import nc.bs.arap.util.GatheringBillAfter; | ||||
| import nc.bs.framework.common.NCLocator; | ||||
| import nc.vo.arap.gathering.AggGatheringBillVO; | ||||
| import nc.vo.arap.pub.ArapConstant; | ||||
| import nc.vo.fipub.exception.ExceptionHandler; | ||||
| import nc.vo.pub.BusinessException; | ||||
| import nc.vo.pub.compiler.PfParameterVO; | ||||
| import nccloud.pubitf.arap.arappub.IArapBillPubUtilService; | ||||
| 
 | ||||
| import java.util.Hashtable; | ||||
| 
 | ||||
| public class N_F2_DELETE extends N_BASE_ACTION { | ||||
|     private Hashtable<String, Object> m_keyHas = null; | ||||
| 
 | ||||
|     public N_F2_DELETE() { | ||||
|     } | ||||
| 
 | ||||
|     public Object runComClass(PfParameterVO paraVo) throws BusinessException { | ||||
|         try { | ||||
|             if (paraVo.m_preValueVos == null) { | ||||
|                 return null; | ||||
|             } else { | ||||
|                 Object obj = null; | ||||
|                 super.m_tmpVo = paraVo; | ||||
|                 String actionCode = ArapConstant.DELETE; | ||||
|                 ((IArapBillPubUtilService) NCLocator.getInstance().lookup(IArapBillPubUtilService.class)).interceptorVaildator(paraVo.m_preValueVos, actionCode); | ||||
|                 this.setParameter("context", paraVo.m_preValueVos); | ||||
|                 obj = this.runClass("nc.bs.arap.actions.GatheringbillDeleteBatchBSAction", "deleteVOs", "&context:nc.vo.pub.AggregatedValueObject[]", paraVo, this.m_keyHas); | ||||
|                 this.afterCheck(); | ||||
|                 // 收款单删除后将对应的到账通知cmp_informer的生成状态generateflag修改为已生成hasnogenerate | ||||
|                 AggGatheringBillVO[] aggVos = (AggGatheringBillVO[]) paraVo.m_preValueVos; | ||||
|                 GatheringBillAfter.updateInformerGenerateFlag(aggVos, "hasnogenerate"); | ||||
|                 return obj; | ||||
|             } | ||||
|         } catch (Exception ex) { | ||||
|             throw ExceptionHandler.handleException(this.getClass(), ex); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public String getCodeRemark() { | ||||
|         return " arap action script not allowed to modify ,all rights reserved!"; | ||||
|     } | ||||
| 
 | ||||
|     protected void setParameter(String key, Object val) { | ||||
|         if (this.m_keyHas == null) { | ||||
|             this.m_keyHas = new Hashtable(); | ||||
|         } | ||||
| 
 | ||||
|         if (val != null) { | ||||
|             this.m_keyHas.put(key, val); | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,186 @@ | |||
| package nc.bs.pub.action; | ||||
| 
 | ||||
| import nc.bs.arap.actions.N_BASE_ACTION; | ||||
| import nc.bs.arap.gatheringbp.GatherBillBO; | ||||
| import nc.bs.arap.util.GatheringBillAfter; | ||||
| import nc.bs.dao.BaseDAO; | ||||
| import nc.bs.framework.common.InvocationInfoProxy; | ||||
| import nc.bs.framework.common.NCLocator; | ||||
| import nc.bs.logging.Logger; | ||||
| import nc.impl.pubapp.env.BSContext; | ||||
| import nc.pubitf.so.m30.sobalance.ISoBalance4VerifyQryBill; | ||||
| import nc.vo.arap.gathering.AggGatheringBillVO; | ||||
| import nc.vo.arap.pub.ArapConstant; | ||||
| import nc.vo.arap.pub.BillEnumCollection; | ||||
| import nc.vo.arap.receivable.ReceivableBillItemVO; | ||||
| import nc.vo.arap.utils.StringUtil; | ||||
| import nc.vo.fi.pub.SqlUtils; | ||||
| import nc.vo.fipub.exception.ExceptionHandler; | ||||
| import nc.vo.ml.NCLangRes4VoTransl; | ||||
| import nc.vo.pub.AggregatedValueObject; | ||||
| import nc.vo.pub.BusinessException; | ||||
| import nc.vo.pub.compiler.PfParameterVO; | ||||
| import nc.vo.pub.lang.UFBoolean; | ||||
| import nc.vo.pub.lang.UFDouble; | ||||
| import nccloud.bs.arap.util.commit.ArapCommitUtil; | ||||
| import nccloud.impl.platform.common.util.StringUtils; | ||||
| import nccloud.pubitf.arap.arappub.IArapBillPubUtilService; | ||||
| 
 | ||||
| import java.util.*; | ||||
| 
 | ||||
| 
 | ||||
| public class N_F2_SAVE extends N_BASE_ACTION { | ||||
|     private Hashtable<String, Object> m_keyHas = null; | ||||
| 
 | ||||
| 
 | ||||
|     public String getCodeRemark() { | ||||
|         return " arap action script not allowed to modify ,all rights reserved!"; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     public Object runComClass(PfParameterVO paraVo) throws BusinessException { | ||||
|         try { | ||||
|             super.m_tmpVo = paraVo; | ||||
|             Object obj = null; | ||||
|             setParameter("context", paraVo.m_preValueVos); | ||||
| 
 | ||||
|             if (paraVo.isCloudEntry) { | ||||
| 
 | ||||
|                 String actionCode = ArapConstant.SAVE; | ||||
|                 ((IArapBillPubUtilService) NCLocator.getInstance().lookup(IArapBillPubUtilService.class)).interceptorVaildator(paraVo.m_preValueVos, actionCode); | ||||
|             } | ||||
| 
 | ||||
| 
 | ||||
|             String code = InvocationInfoProxy.getInstance().getProperty(ArapConstant.NCCFlOW_PARAMTER); | ||||
|             if (!StringUtils.isEmpty(code)) { | ||||
|                 String[] codes = code.split(","); | ||||
|                 for (int i = 0; i < codes.length; i++) { | ||||
|                     BSContext.getInstance().setSession(codes[i], UFBoolean.FALSE); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             this.beforeCheck(); | ||||
| 
 | ||||
|             AggregatedValueObject bill = (paraVo.m_preValueVo == null) ? paraVo.m_preValueVos[0] : paraVo.m_preValueVo; | ||||
|             if (bill != null && bill.getChildrenVO() != null && bill.getChildrenVO().length > 0 && bill.getChildrenVO()[0] != null) { | ||||
|                 String pk_billtype = (String) bill.getChildrenVO()[0].getAttributeValue("pk_billtype"); | ||||
|                 String top_billtype = (String) bill.getChildrenVO()[0].getAttributeValue("top_billtype"); | ||||
|                 String src_billtype = (String) bill.getChildrenVO()[0].getAttributeValue("src_billtype"); | ||||
| 
 | ||||
|                 if ("F2".equals(pk_billtype) && "30".equals(src_billtype) && "F0".equals(top_billtype)) { | ||||
| 
 | ||||
|                     Map<String, UFDouble> f2mnyMap = new HashMap<>(); | ||||
|                     Map<String, UFDouble> f0mnyMap = new HashMap<>(); | ||||
| 
 | ||||
|                     List<String> orderIds = new ArrayList<>(); | ||||
|                     List<String> f0pks = new ArrayList<>(); | ||||
|                     for (int i = 0; i < bill.getChildrenVO().length; i++) { | ||||
|                         String src_billid = (String) bill.getChildrenVO()[i].getAttributeValue("src_billid"); | ||||
|                         UFDouble money_bal = (UFDouble) bill.getChildrenVO()[i].getAttributeValue("money_bal"); | ||||
|                         if (!StringUtil.isEmpty(src_billid)) { | ||||
|                             orderIds.add((String) bill.getChildrenVO()[i].getAttributeValue("src_billid")); | ||||
|                         } | ||||
|                         if (f2mnyMap.get(src_billid) == null) { | ||||
|                             f2mnyMap.put(src_billid, money_bal); | ||||
|                         } else { | ||||
|                             f2mnyMap.put(src_billid, ((UFDouble) f2mnyMap.get(src_billid)).add(money_bal)); | ||||
|                         } | ||||
|                         f0pks.add((String) bill.getChildrenVO()[i].getAttributeValue("top_billid")); | ||||
|                     } | ||||
| 
 | ||||
|                     String f0sql = SqlUtils.getInStr("pk_recbill", (String[]) f0pks.toArray(new String[0]), true); | ||||
| 
 | ||||
|                     Collection<ReceivableBillItemVO> foItemvos = (new BaseDAO()).retrieveByClause(ReceivableBillItemVO.class, f0sql); | ||||
|                     for (ReceivableBillItemVO vo : foItemvos) { | ||||
|                         String src_billid = (String) vo.getAttributeValue("src_billid"); | ||||
|                         UFDouble money_bal = (UFDouble) vo.getAttributeValue("money_bal"); | ||||
|                         if (f0mnyMap.get(src_billid) == null) { | ||||
|                             f0mnyMap.put(src_billid, money_bal); | ||||
|                             continue; | ||||
|                         } | ||||
|                         f0mnyMap.put(src_billid, ((UFDouble) f0mnyMap.get(src_billid)).add(money_bal)); | ||||
|                     } | ||||
| 
 | ||||
| 
 | ||||
|                     Map<String, Map<String, UFDouble>> soOrderIdTOF2ItemMnyMap = ((ISoBalance4VerifyQryBill) NCLocator.getInstance().lookup(ISoBalance4VerifyQryBill.class)).querySobalanceAccVerifyMnyMap((String[]) orderIds.toArray(new String[0])); | ||||
|                     if (soOrderIdTOF2ItemMnyMap != null && soOrderIdTOF2ItemMnyMap.size() > 0) { | ||||
|                         for (String order : orderIds) { | ||||
|                             Map<String, UFDouble> mnys = (Map) soOrderIdTOF2ItemMnyMap.get(order); | ||||
|                             UFDouble summny = UFDouble.ZERO_DBL; | ||||
|                             if (mnys == null || mnys.size() == 0) { | ||||
|                                 continue; | ||||
|                             } | ||||
|                             for (String key : mnys.keySet()) { | ||||
|                                 UFDouble mny = (mnys.get(key) == null) ? UFDouble.ZERO_DBL : (UFDouble) mnys.get(key); | ||||
|                                 summny = summny.add(mny); | ||||
|                             } | ||||
|                             if (f2mnyMap.get(order) == null) { | ||||
|                                 f2mnyMap.put(order, summny); | ||||
|                                 continue; | ||||
|                             } | ||||
|                             f2mnyMap.put(order, ((UFDouble) f2mnyMap.get(order)).add(summny)); | ||||
|                         } | ||||
| 
 | ||||
| 
 | ||||
|                         for (String order : orderIds) { | ||||
|                             if (f0mnyMap.get(order) != null && f2mnyMap.get(order) != null && ((UFDouble) f2mnyMap.get(order)).abs().compareTo(((UFDouble) f0mnyMap.get(order)).abs()) > 0) { | ||||
|                                 throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("2006pub_0", "02006pub-1678")); | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
| 
 | ||||
|             String primaryKey = paraVo.m_preValueVos[0].getParentVO().getPrimaryKey(); | ||||
| 
 | ||||
|             if (hasBill(primaryKey)) { | ||||
|                 obj = runClass("nc.bs.arap.actions.GatheringbillEditSaveBatchBSAction", "updateVOs", "&context:nc.vo.pub.AggregatedValueObject[]", paraVo, this.m_keyHas); | ||||
|             } else { | ||||
| 
 | ||||
|                 paraVo = approveStatusChange(paraVo); | ||||
|                 obj = runClass("nc.bs.arap.actions.GatheringbillSaveBatchBSAction", "insertVOs", "&context:nc.vo.pub.AggregatedValueObject[]", paraVo, this.m_keyHas); | ||||
|             } | ||||
|             // 生成收款单后将对应的到账通知cmp_informer的生成状态generateflag修改为已生成hasgenerate | ||||
|             AggGatheringBillVO[] aggVos = (AggGatheringBillVO[]) paraVo.m_preValueVos; | ||||
|             GatheringBillAfter.updateInformerGenerateFlag(aggVos, "hasgenerate"); | ||||
| 
 | ||||
|             return (new ArapCommitUtil()).autoCommit(obj); | ||||
| 
 | ||||
|         } catch (Exception exception) { | ||||
|             throw ExceptionHandler.handleException(getClass(), exception); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private boolean hasBill(String primaryKey) throws BusinessException { | ||||
|         boolean hasBill = false; | ||||
|         if (primaryKey != null) { | ||||
|             AggGatheringBillVO[] bvos = null; | ||||
|             try { | ||||
|                 GatherBillBO payableBO = new GatherBillBO(); | ||||
|                 bvos = payableBO.findBillByPrimaryKey(new String[]{primaryKey}); | ||||
|             } catch (Exception e) { | ||||
|                 Logger.error(e.getMessage(), e); | ||||
|             } | ||||
|             if (bvos != null && bvos.length != 0 && bvos[0] != null) { | ||||
|                 hasBill = true; | ||||
|             } | ||||
|         } | ||||
|         return hasBill; | ||||
|     } | ||||
| 
 | ||||
|     protected void setParameter(String key, Object val) { | ||||
|         if (this.m_keyHas == null) { | ||||
|             this.m_keyHas = new Hashtable(); | ||||
|         } | ||||
|         if (val != null) | ||||
|             this.m_keyHas.put(key, val); | ||||
|     } | ||||
| 
 | ||||
|     private PfParameterVO approveStatusChange(PfParameterVO paraVo) { | ||||
|         for (AggregatedValueObject vo : paraVo.m_preValueVos) { | ||||
|             vo.getParentVO().setAttributeValue("approvestatus", BillEnumCollection.ApproveStatus.NOSTATE.VALUE); | ||||
|         } | ||||
|         return paraVo; | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,58 @@ | |||
| package nc.bs.arap.util; | ||||
| 
 | ||||
| import nc.bs.dao.BaseDAO; | ||||
| import nc.bs.logging.Logger; | ||||
| import nc.jdbc.framework.SQLParameter; | ||||
| import nc.vo.arap.gathering.AggGatheringBillVO; | ||||
| import nc.vo.arap.gathering.GatheringBillItemVO; | ||||
| import nccloud.commons.lang.StringUtils; | ||||
| 
 | ||||
| import java.util.Arrays; | ||||
| import java.util.LinkedHashSet; | ||||
| import java.util.Set; | ||||
| 
 | ||||
| /** | ||||
|  * 更新到账通知的收款生成状态 | ||||
|  * | ||||
|  * @author mzr | ||||
|  * @date 2025/6/13 | ||||
|  */ | ||||
| public class GatheringBillAfter { | ||||
| 
 | ||||
|     /** | ||||
|      * 更新收款单对应的到账通知 cmp_informer 的 generateflag 生成状态 | ||||
|      * | ||||
|      * @param aggVos       收款单vo数组 | ||||
|      * @param generateFlag 目标状态(例如 "hasgenerate" 或 "hasnogenerate") | ||||
|      */ | ||||
|     public static void updateInformerGenerateFlag(AggGatheringBillVO[] aggVos, String generateFlag) { | ||||
|         if (aggVos == null || aggVos.length == 0) { | ||||
|             return; // 参数为空时直接返回 | ||||
|         } | ||||
|         try { | ||||
|             Set<String> codeSet = new LinkedHashSet<>(); | ||||
|             for (AggGatheringBillVO aggVo : aggVos) { | ||||
|                 GatheringBillItemVO[] bvos = aggVo.getBodyVOs(); | ||||
|                 for (GatheringBillItemVO bvo : bvos) { | ||||
|                     String bankrelatedCode = bvo.getBankrelated_code(); | ||||
|                     if (StringUtils.isNotEmpty(bankrelatedCode) && !"~".equals(bankrelatedCode)) { | ||||
|                         codeSet.add(bankrelatedCode); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             String[] codes = codeSet.toArray(new String[0]); | ||||
|             Logger.error("updateInformerGenerateFlag-codes = " + Arrays.toString(codes)); | ||||
|             if (codes.length == 0) { | ||||
|                 return; | ||||
|             } | ||||
|             BaseDAO baseDAO = new BaseDAO(); | ||||
|             String inStr = SqlUtils.getInStr("bankrelated_code", codes, true); | ||||
|             String sql = "UPDATE cmp_informer SET generateflag = ? WHERE " + inStr; | ||||
|             SQLParameter params = new SQLParameter(); | ||||
|             params.addParam(generateFlag); | ||||
|             baseDAO.executeUpdate(sql, params); | ||||
|         } catch (Exception e) { | ||||
|             Logger.error("updateInformerGenerateFlag-exp:", e); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue