|
@@ -0,0 +1,146 @@
|
|
|
+
|
|
|
+ * $文件说明$
|
|
|
+ *
|
|
|
+ * @author zhaoyha
|
|
|
+ * @version 6.0
|
|
|
+ * @see
|
|
|
+ * @since 6.0
|
|
|
+ * @time 2010-1-22 上午10:56:43
|
|
|
+ */
|
|
|
+package nc.bs.pu.m25.maintain;
|
|
|
+
|
|
|
+import nc.bs.pu.m25.maintain.rule.InvocieWriteBackOrderRule;
|
|
|
+import nc.bs.pu.m25.maintain.rule.WriteBackSourceRule;
|
|
|
+
|
|
|
+import nc.bs.pu.m25.maintain.rule.save.DirectTranTypeChkRule;
|
|
|
+
|
|
|
+import nc.bs.pu.m25.maintain.rule.save.InvcSaveAfterEventRule;
|
|
|
+import nc.bs.pu.m25.maintain.rule.save.InvcSaveBeforeEventRule;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+import nc.bs.pu.m25.maintain.rule.save.OrderPriceCheckRule;
|
|
|
+import nc.bs.pu.m25.maintain.rule.save.ScOrderPriceCheckRule;
|
|
|
+
|
|
|
+import nc.bs.pu.m25.plugin.InvoicePluginPoint;
|
|
|
+import nc.impl.pubapp.bd.userdef.UserDefSaveRule;
|
|
|
+import nc.impl.pubapp.pattern.data.bill.BillInsert;
|
|
|
+import nc.impl.pubapp.pattern.data.bill.BillUpdate;
|
|
|
+import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser;
|
|
|
+import nc.vo.pu.m25.entity.InvoiceHeaderVO;
|
|
|
+import nc.vo.pu.m25.entity.InvoiceItemVO;
|
|
|
+import nc.vo.pu.m25.entity.InvoiceVO;
|
|
|
+import nc.vo.pu.m25.env.InvoiceUIToBSEnv;
|
|
|
+import nc.vo.pu.m25.rule.InvoiceAuditInfoFillRule;
|
|
|
+import nc.vo.pu.m25.rule.InvoiceDateChkRule;
|
|
|
+import nc.vo.pu.m25.rule.InvoiceNotNullChkRule;
|
|
|
+import nc.vo.pu.m25.rule.InvoiceNumValueChkRule;
|
|
|
+import nc.vo.pu.m25.rule.InvoiceSourceInfoChkRule;
|
|
|
+import nc.vo.pu.m25.rule.ParaValidityChkRule;
|
|
|
+import nc.vo.pu.m25.rule.maintain.InvoiceLimitCheckRule;
|
|
|
+import nc.vo.pu.m25.rule.maintain.InvoiceRowNoCheckRule;
|
|
|
+import nc.vo.pu.m25.rule.maintain.InvoiceScaleCheckRule;
|
|
|
+import nc.vo.pu.m25.rule.maintain.InvoiceTotalValueCalcRule;
|
|
|
+import nc.vo.pu.m25.rule.maintain.save.ConfirmInvoiceBiztypeRule;
|
|
|
+import nc.vo.pu.m25.rule.maintain.save.FeeMaterialCheckRule;
|
|
|
+import nc.vo.pu.m25.rule.maintain.save.InvoiceCodeProcRule;
|
|
|
+import nc.vo.pu.m25.rule.maintain.save.InvoiceCodeUniqueCheckRule;
|
|
|
+import nc.vo.pu.m25.rule.maintain.save.InvoiceRowTypeFillRule;
|
|
|
+import nc.vo.pu.m25.rule.maintain.save.SynchronizeDupDataRule;
|
|
|
+import nc.vo.pu.pub.rule.NewestOrgVersionFillRule;
|
|
|
+import nc.vo.pu.pub.rule.TrantypeNotNullCheckRule;
|
|
|
+import nc.vo.pu.pub.rule.pf.NoPassUpdateRule;
|
|
|
+import nc.vo.pu.pub.util.ArrayUtil;
|
|
|
+import nc.vo.scmpub.rule.FinanceOrgEnableCheckRule;
|
|
|
+
|
|
|
+import org.apache.commons.lang.ArrayUtils;
|
|
|
+
|
|
|
+
|
|
|
+ * <p>
|
|
|
+ * <b>本类主要完成以下功能:</b>
|
|
|
+ * <ul>
|
|
|
+ * <li>采购发票保存的核心BP
|
|
|
+ * </ul>
|
|
|
+ * <p>
|
|
|
+ * <p>
|
|
|
+ *
|
|
|
+ * @version 6.0
|
|
|
+ * @since 6.0
|
|
|
+ * @author zhaoyha
|
|
|
+ * @time 2010-1-22 上午10:56:43
|
|
|
+ */
|
|
|
+public class InvoiceSaveBP {
|
|
|
+
|
|
|
+ private InvoiceUIToBSEnv env;
|
|
|
+
|
|
|
+
|
|
|
+ * InvoiceSaveBP 的构造子
|
|
|
+ *
|
|
|
+ * @param env
|
|
|
+ */
|
|
|
+ public InvoiceSaveBP(InvoiceUIToBSEnv env) {
|
|
|
+ this.env = env;
|
|
|
+ }
|
|
|
+
|
|
|
+ public InvoiceVO[] save(InvoiceVO[] insertInvoiceVOs,
|
|
|
+ InvoiceVO[] updateInvoiceVOs, InvoiceVO[] updateOrgVos) {
|
|
|
+ InvoiceVO[] insertVos = insertInvoiceVOs;
|
|
|
+ InvoiceVO[] updateVos = updateInvoiceVOs;
|
|
|
+ CompareAroundProcesser<InvoiceVO> processer =
|
|
|
+ new CompareAroundProcesser<InvoiceVO>(InvoicePluginPoint.SAVE_BP);
|
|
|
+ this.addRule(processer);
|
|
|
+ if (!ArrayUtils.isEmpty(insertVos)) {
|
|
|
+ processer.before(insertVos, null);
|
|
|
+ insertVos = new BillInsert<InvoiceVO>().insert(insertVos);
|
|
|
+ processer.after(insertVos, null);
|
|
|
+ }
|
|
|
+ if (!ArrayUtils.isEmpty(updateVos)) {
|
|
|
+ processer.before(updateVos, updateOrgVos);
|
|
|
+ updateVos = new BillUpdate<InvoiceVO>().update(updateVos, updateOrgVos);
|
|
|
+ processer.after(updateVos, updateOrgVos);
|
|
|
+ }
|
|
|
+ InvoiceVO[] savedVos = ArrayUtil.combinArrays(insertVos, updateVos);
|
|
|
+ return savedVos;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void addRule(CompareAroundProcesser<InvoiceVO> processer) {
|
|
|
+ processer.addBeforeFinalRule(new ParaValidityChkRule());
|
|
|
+ processer.addBeforeRule(new InvoiceSourceInfoChkRule());
|
|
|
+ processer.addBeforeFinalRule(new NewestOrgVersionFillRule<InvoiceVO>(
|
|
|
+ InvoiceHeaderVO.PK_INVOICE));
|
|
|
+ processer.addBeforeRule(new InvoiceAuditInfoFillRule());
|
|
|
+ processer.addBeforeRule(new InvoiceCodeProcRule());
|
|
|
+ processer.addBeforeFinalRule(new InvoiceRowTypeFillRule());
|
|
|
+ processer.addBeforeFinalRule(new InvoiceTotalValueCalcRule());
|
|
|
+ processer.addBeforeFinalRule(new InvoiceNotNullChkRule());
|
|
|
+ processer.addBeforeFinalRule(new TrantypeNotNullCheckRule<InvoiceVO>());
|
|
|
+ processer.addBeforeFinalRule(new InvoiceDateChkRule());
|
|
|
+ processer.addBeforeFinalRule(new InvoiceNumValueChkRule());
|
|
|
+ processer.addBeforeFinalRule(new InvoiceScaleCheckRule());
|
|
|
+ processer.addBeforeRule(new InvoiceRowNoCheckRule());
|
|
|
+ processer.addBeforeRule(new FinanceOrgEnableCheckRule<InvoiceVO>());
|
|
|
+ processer.addBeforeFinalRule(new DirectTranTypeChkRule());
|
|
|
+ processer.addBeforeFinalRule(new InvoiceLimitCheckRule());
|
|
|
+ processer.addBeforeFinalRule(new ConfirmInvoiceBiztypeRule());
|
|
|
+ processer.addBeforeFinalRule(new SynchronizeDupDataRule());
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ processer.addBeforeRule(new UserDefSaveRule<InvoiceVO>(new Class[] {
|
|
|
+ InvoiceHeaderVO.class, InvoiceItemVO.class
|
|
|
+ }));
|
|
|
+ processer.addBeforeFinalRule(new NoPassUpdateRule<InvoiceVO>());
|
|
|
+ processer.addBeforeRule(new InvcSaveBeforeEventRule());
|
|
|
+ processer.addAfterRule(new InvoiceCodeUniqueCheckRule());
|
|
|
+ processer.addAfterRule(new FeeMaterialCheckRule());
|
|
|
+ processer.addAfterFinalRule(new InvocieWriteBackOrderRule(this.env));
|
|
|
+ processer.addAfterFinalRule(new WriteBackSourceRule(this.env));
|
|
|
+ processer.addAfterFinalRule(new OrderPriceCheckRule(this.env));
|
|
|
+
|
|
|
+ processer.addAfterFinalRule(new InvcSaveAfterEventRule());
|
|
|
+ }
|
|
|
+
|
|
|
+}
|