From 59964c6254db5ae29af7130519d6c92cde2fa549 Mon Sep 17 00:00:00 2001 From: mzr Date: Tue, 8 Apr 2025 13:34:18 +0800 Subject: [PATCH] =?UTF-8?q?bip=E9=94=80=E5=94=AE=E5=8F=91=E7=A5=A8?= =?UTF-8?q?=E7=BA=A2=E5=86=B2=E6=8E=A5=E5=8F=A3-=E5=88=98=E6=9D=B020250314?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- so/META-INF/saleinvoice.rest | 6 + .../saleinvoice/operator/billSaveAction.java | 344 ++++++++++++++++++ 2 files changed, 350 insertions(+) create mode 100644 so/META-INF/saleinvoice.rest create mode 100644 so/src/public/nc/vo/so/m32/saleinvoice/operator/billSaveAction.java diff --git a/so/META-INF/saleinvoice.rest b/so/META-INF/saleinvoice.rest new file mode 100644 index 0000000..94b8e77 --- /dev/null +++ b/so/META-INF/saleinvoice.rest @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/so/src/public/nc/vo/so/m32/saleinvoice/operator/billSaveAction.java b/so/src/public/nc/vo/so/m32/saleinvoice/operator/billSaveAction.java new file mode 100644 index 0000000..0e0b043 --- /dev/null +++ b/so/src/public/nc/vo/so/m32/saleinvoice/operator/billSaveAction.java @@ -0,0 +1,344 @@ +package nc.vo.so.m32.saleinvoice.operator; + +import com.alibaba.fastjson.JSONObject; +import nc.bs.framework.common.NCLocator; +import nc.bs.framework.core.util.ObjectCreator; +import nc.bs.ia.audit.pub.CloneUtil; +import nc.bs.logging.Logger; +import nc.bs.trade.business.HYSuperDMO; +import nc.itf.uap.IUAPQueryBS; +import nc.pubitf.so.m32.api.ISaleinvoiceQueryAPI; +import nc.vo.pub.BusinessException; +import nc.vo.pub.lang.UFBoolean; +import nc.vo.pub.lang.UFDate; +import nc.vo.pub.lang.UFDouble; +import nc.vo.scmpub.res.billtype.SOBillType; +import nc.vo.so.m32.entity.SaleInvoiceBVO; +import nc.vo.so.m32.entity.SaleInvoiceHVO; +import nc.vo.so.m32.entity.SaleInvoiceVO; +import nc.vo.sscivm.ivsale.IVApplicationAggVO; +import nc.vo.sscivm.ivsale.IVApplicationBodyVO; +import nc.vo.sscivm.ivsale.IVApplicationHeadVO; +import nccloud.api.baseapp.exchange.convert.IExchangeForService; +import nccloud.api.baseapp.exchange.convert.OpenApiConvertDataObject; +import nccloud.api.baseapp.exchange.convert.OpenApiConvertDataResult; +import nccloud.api.rest.utils.ResultMessageUtil; +import nccloud.itf.sscivm.ivsale.impl.IVApplicationServiceImpl; +import nccloud.pubitf.riart.pflow.CloudPFlowContext; +import nccloud.pubitf.riart.pflow.ICloudScriptPFlowService; +import nccloud.ws.rest.resource.AbstractNCCRestResource; +import org.json.JSONString; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import java.util.List; + + +@Path("so/saleinvoice/operator") +public class billSaveAction extends AbstractNCCRestResource { + + public static String fplxStr = "";// Ʊ뷢Ʊ + + public billSaveAction() { + + } + + public OpenApiConvertDataResult changeToExchangeData(OpenApiConvertDataObject openApiConvertDataObject) + throws Exception { + return getPFxxEJBService().changeToExchangeData(openApiConvertDataObject); + } + + public static IExchangeForService getPFxxEJBService() { + IExchangeForService exchangeForService = (IExchangeForService) ObjectCreator.newInstance("ufesbexpress", + "nccloud.pubimpl.pfxx.convert.ExchangeForServiceImpl"); + return exchangeForService; + } + + @Override + public String getModule() { + return "so"; + } + + @POST + @Path("/billSaveRp") + @Consumes({"application/json"}) + @Produces({"application/json"}) + public JSONString billSaveRp(JSONString json) throws Exception { + /** + * ۷Ʊ壺 + * 1.bipе۷Ʊidѯerp۷ƱVO + * 2.ݲѯ۷ƱVOɺ۷Ʊ + */ + JSONObject jobject = JSONObject.parseObject(json.toJSONString()); + if (jobject == null) { + return ResultMessageUtil.exceptionToJSON(new NullPointerException("JSONString:null")); + } + JSONObject bject = jobject.getJSONObject("billhead"); + if (bject == null) { + return ResultMessageUtil.exceptionToJSON(new NullPointerException("billhead:null")); + } + String csaleinvoiceid = bject.getString("csaleinvoiceid"); // ۷Ʊid + // ۷Ʊʵidѯ۷Ʊ + String[] ids = {csaleinvoiceid}; + SaleInvoiceVO[] saleInvoiceVOs = NCLocator.getInstance().lookup(ISaleinvoiceQueryAPI.class) + .queryVOByIDs(ids); + if (saleInvoiceVOs.length <= 0) { + return ResultMessageUtil.exceptionToJSON(new NullPointerException("δѯErpӦ۷Ʊ")); + } + try { + // úԭ۷Ʊװº巢Ʊ + SaleInvoiceVO saleInvoiceRedRushVO = makeNewRedRushSaleInvoice(saleInvoiceVOs[0], bject); + // ɺ巢Ʊ + ICloudScriptPFlowService flowService = NCLocator.getInstance().lookup(ICloudScriptPFlowService.class); + CloudPFlowContext context = new CloudPFlowContext(); + context.setBillType("32"); + context.setBillVos(new SaleInvoiceVO[]{saleInvoiceRedRushVO}); + context.setActionName("WRITE"); + SaleInvoiceVO[] returnSaveSaleInvoiceVOs = (SaleInvoiceVO[]) flowService.exeScriptPFlow(context); +// SaleInvoiceVO[] returnSaveSaleInvoiceVO = (SaleInvoiceVO[])PfServiceScmUtil.processBatch("WRITE", SOBillType.Invoice.getCode(), new SaleInvoiceVO[] { saleInvoiceRedRushVO }, null, null); + if (returnSaveSaleInvoiceVOs != null && returnSaveSaleInvoiceVOs.length > 0) { + // ɺ巢Ʊɹִ۷Ʊ + context.setBillType("32"); + context.setBillVos(returnSaveSaleInvoiceVOs); + context.setActionName("APPROVE"); + SaleInvoiceVO[] returnApproveSaleInvoiceVOs = (SaleInvoiceVO[]) flowService.exeScriptPFlow(context); + if (returnApproveSaleInvoiceVOs == null && returnApproveSaleInvoiceVOs.length <= 0) { + throw new BusinessException("۷Ʊʧ"); + } + /** + * Ʊ߼ + * 1.۷ƱŲѯοƱ + * 2.ԭƱº + */ + String vBillcode = saleInvoiceVOs[0].getParentVO().getVbillcode(); + HYSuperDMO dmo = new HYSuperDMO(); + // Ʊ뵥 + IVApplicationHeadVO[] iVApplicationHeadVO = (IVApplicationHeadVO[]) dmo.queryByWhereClause(IVApplicationHeadVO.class, "src_billno='" + vBillcode + "' and dr=0 "); + String pk_ivapplication = iVApplicationHeadVO[0].getPk_ivapplication(); // Ʊid + // Ʊ뵥ӱ + IVApplicationBodyVO[] iVApplicationBodyVOs = (IVApplicationBodyVO[]) dmo.queryByWhereClause(IVApplicationBodyVO.class, "pk_ivapplication='" + pk_ivapplication + "' and dr=0 "); + // úװƱVO + IVApplicationAggVO iVApplicationAggVO = makeNewRedRushIVApplicationAggVO(iVApplicationHeadVO[0], iVApplicationBodyVOs, bject, returnApproveSaleInvoiceVOs); + // ɺĿƱ +// context.setBillType("SSCIVA"); +// context.setBillVos( new IVApplicationAggVO[] { iVApplicationAggVO }); +// context.setActionName("SAVE"); +// IVApplicationAggVO[] returnSaveIVApplicationAggVO = (IVApplicationAggVO[] )flowService.exeScriptPFlow(context); + IVApplicationServiceImpl serviceImpl = new IVApplicationServiceImpl(); + IVApplicationAggVO returnSaveIVApplicationAggVO = serviceImpl.save(iVApplicationAggVO); +// Object returnIVApplicationAggVO = PfServiceScmUtil.processBatch("SAVE", "SSCIVA", new IVApplicationAggVO[] { iVApplicationAggVO }, null, null); + if (returnSaveIVApplicationAggVO != null) { + return ResultMessageUtil.toJSON(null, "ӿڵóɹ"); + } else { + Exception e = new Exception("ӿڵʧ"); + return ResultMessageUtil.exceptionToJSON(e); + } + } else { + Exception e = new Exception("ӿڵʧ"); + return ResultMessageUtil.exceptionToJSON(e); + } + } catch (BusinessException e) { + Logger.error("writeBack Error: ", e); + return ResultMessageUtil.exceptionToJSON(e); + } + } + + /** + * 巢ƱVO + * + * @param originalSaleInvoiceVO + * @param bject + * @return + * @throws Exception + */ + public static SaleInvoiceVO makeNewRedRushSaleInvoice(SaleInvoiceVO originalSaleInvoiceVO, JSONObject bject) throws Exception { + try { + SaleInvoiceVO saleInvoiceVO = new SaleInvoiceVO(); + SaleInvoiceHVO saleInvoiceHVO = originalSaleInvoiceVO.getParentVO(); // ʵ + SaleInvoiceBVO[] saleInvoiceBVOs = originalSaleInvoiceVO.getChildrenVO(); // ʵ + SaleInvoiceHVO newSaleInvoiceHVO = new SaleInvoiceHVO(); // ʵ + + // ʵԸֵ + UFDouble sumNum = new UFDouble(); // ϼ + UFDouble sumNtax = new UFDouble(); // ϼ˰ + UFDouble sumNcaltaxmny = new UFDouble(); // ϼƼ˰ + UFDouble sumNorigmny = new UFDouble(); // ϼ˰ + UFDouble sumNorigtaxmny = new UFDouble(); // ϼƼ˰ϼ + int i = 0; + com.alibaba.fastjson.JSONArray paramsSaleInvoiceBVOsJSA = (com.alibaba.fastjson.JSONArray) bject.get("SaleInvoiceBVOs"); // ʵ + List paramsSaleInvoiceBVOs = paramsSaleInvoiceBVOsJSA.toJavaList(JSONObject.class); + SaleInvoiceBVO[] newSaleInvoiceBVOs = new SaleInvoiceBVO[paramsSaleInvoiceBVOs.size()]; // ʵ + for (SaleInvoiceBVO saleInvoiceBVO : saleInvoiceBVOs) { + String csaleinvoicebid = saleInvoiceBVO.getCsaleinvoicebid(); // ӱid + // ɸѡӱ + List newParamsSaleInvoiceBVOs = paramsSaleInvoiceBVOs.stream().filter(item -> { + String parCsaleinvoicebid = item.getString("csaleinvoicebid") + ""; + return csaleinvoicebid.equals(parCsaleinvoicebid); + }).toList(); + if (newParamsSaleInvoiceBVOs.size() <= 0) { + continue; + } + JSONObject paramSaleInvoiceBVO = newParamsSaleInvoiceBVOs.get(0); // ӱ + SaleInvoiceBVO newSaleInvoiceBVO = new SaleInvoiceBVO(); +// BeanUtil.copyProperties(saleInvoiceBVO,newSaleInvoiceBVO); + // ¡ȡֵԭӱ۷Ʊ + newSaleInvoiceBVO = (SaleInvoiceBVO) CloneUtil.depthClone(saleInvoiceBVO); + // ֵ֮޸ʵʱֶ + newSaleInvoiceBVO.setCsaleinvoicebid(null); // Ʊʵid + newSaleInvoiceBVO.setDbilldate(newSaleInvoiceHVO.getDbilldate()); // Ʊ + newSaleInvoiceBVO.setNastnum(new UFDouble(paramSaleInvoiceBVO.getString("nastnum"))); // + newSaleInvoiceBVO.setNnum(new UFDouble(paramSaleInvoiceBVO.getString("nnum"))); // + newSaleInvoiceBVO.setNtax(new UFDouble(paramSaleInvoiceBVO.getString("ntax"))); // ˰ + newSaleInvoiceBVO.setNmny(new UFDouble(paramSaleInvoiceBVO.getString("nmny"))); // ˰ + newSaleInvoiceBVO.setNtaxmny(new UFDouble(paramSaleInvoiceBVO.getString("ntaxmny"))); // Ҽ˰ϼ + newSaleInvoiceBVO.setNcaltaxmny(new UFDouble(paramSaleInvoiceBVO.getString("ncaltaxmny"))); // ˰ + newSaleInvoiceBVO.setNorigmny(new UFDouble(paramSaleInvoiceBVO.getString("norigmny"))); // ˰ + newSaleInvoiceBVO.setNorigtaxmny(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny"))); // ˰ϼ + newSaleInvoiceBVO.setCopposesrcbid(paramSaleInvoiceBVO.getString("csaleinvoicebid")); // ԳԴӱid + newSaleInvoiceBVO.setNqtunitnum(null); // + newSaleInvoiceBVO.setCsaleinvoiceid(null); // Ʊid + newSaleInvoiceBVO.setNtotalcostnum(null); // ۼƳɱ + newSaleInvoiceBVO.setNtotalincomemny(null); // ۼȷӦս + newSaleInvoiceBVO.setNtotalincomenum(null); // ۼȷӦ + newSaleInvoiceBVO.setVchangerate("1.00/1.00"); // + newSaleInvoiceBVOs[i++] = newSaleInvoiceBVO; + sumNum = sumNum.add(new UFDouble(paramSaleInvoiceBVO.getString("nnum"))); + sumNtax = sumNtax.add(new UFDouble(paramSaleInvoiceBVO.getString("ntax"))); + sumNcaltaxmny = sumNcaltaxmny.add(new UFDouble(paramSaleInvoiceBVO.getString("ncaltaxmny"))); + sumNorigmny = sumNorigmny.add(new UFDouble(paramSaleInvoiceBVO.getString("norigmny"))); + sumNorigtaxmny = sumNorigtaxmny.add(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny"))); + } + + // ¡ȡֵԭӱ۷Ʊ + newSaleInvoiceHVO = (SaleInvoiceHVO) CloneUtil.depthClone(saleInvoiceHVO); + // ֵ֮޸ʵʱֶ + newSaleInvoiceHVO.setCsaleinvoiceid(null); // Ʊʵid + newSaleInvoiceHVO.setVbillcode(null); // Ʊ + newSaleInvoiceHVO.setDbilldate(new UFDate()); // Ʊ + newSaleInvoiceHVO.setDmakedate(new UFDate()); // Ƶ + newSaleInvoiceHVO.setBsubunitflag(UFBoolean.TRUE); // ֱ + newSaleInvoiceHVO.setFopposeflag(2); // Գ 2Գɣ + newSaleInvoiceHVO.setFstatusflag(1); // ״̬ 1̬ + newSaleInvoiceHVO.setNtotalastnum(null); // + newSaleInvoiceHVO.setNtotalorigsubmny(null); // ֽ + newSaleInvoiceHVO.setNtotalorigmny(null); // ˰ϼ + newSaleInvoiceHVO.setVopposesrccode(saleInvoiceHVO.getVbillcode()); // ԳԴƱ + newSaleInvoiceHVO.setCopposesrcid(saleInvoiceHVO.getCsaleinvoiceid()); // ԳԴƱid + newSaleInvoiceHVO.setApprover(null); // + newSaleInvoiceHVO.setTaudittime(null); // + + // װVO + saleInvoiceVO.setParentVO(newSaleInvoiceHVO); + saleInvoiceVO.setChildrenVO(newSaleInvoiceBVOs); + return saleInvoiceVO; + } catch (Exception e) { + throw new BusinessException(e.getMessage()); + } + } + + /** + * 忪ƱVO + * + * @param ivApplicationHeadVO ԭƱʵ + * @param ivApplicationBodyVOS ԭƱʵ + * @param bject bip + * @param returnApproveSaleInvoiceVOs ɵĺ۷Ʊʵ + * @return + * @throws Exception + */ + public static IVApplicationAggVO makeNewRedRushIVApplicationAggVO(IVApplicationHeadVO ivApplicationHeadVO, IVApplicationBodyVO[] ivApplicationBodyVOS, JSONObject bject, SaleInvoiceVO[] returnApproveSaleInvoiceVOs) throws Exception { + try { + IVApplicationAggVO ivApplicationAggVO = new IVApplicationAggVO(); + IVApplicationHeadVO newivApplicationHeadVO = new IVApplicationHeadVO(); // ʵ + + // ȡɺ巢Ʊʵ + String csaleinvoiceid = returnApproveSaleInvoiceVOs[0].getParentVO().getCsaleinvoiceid(); + String[] ids = {csaleinvoiceid}; + SaleInvoiceVO[] rpSaleInvoiceVOs = NCLocator.getInstance().lookup(ISaleinvoiceQueryAPI.class) + .queryVOByIDs(ids); + SaleInvoiceHVO rpSaleInvoiceHVO = rpSaleInvoiceVOs[0].getParentVO(); + + // ʵԸֵ +// BeanUtil.copyProperties(ivApplicationHeadVO,newivApplicationHeadVO, CopyOptions.create().setIgnoreNullValue(true)); + // ¡ȡֵԭӱƱ + newivApplicationHeadVO = (IVApplicationHeadVO) CloneUtil.depthClone(ivApplicationHeadVO); + // ݲжǷΪֺ + boolean isPartHCFlag = false; + UFDouble paramNtotalorigmny = new UFDouble(bject.getString("ntotalorigmny")); // ˰ϼƣ + UFDouble ntotalorigmny = ivApplicationHeadVO.getJshj(); // ԭƱ˰ϼ + // 뿪ƱԴ˰ϼƱȽֵ㣬Ϊֺ + if (ntotalorigmny.add(paramNtotalorigmny).compareTo(UFDouble.ZERO_DBL) > 0) { + isPartHCFlag = true; + } + UFDouble sumXmsl = new UFDouble(); // ϼ + UFDouble sumXmje = new UFDouble(); // ϼƽ + UFDouble sumXmjshj = new UFDouble(); // ϼƼ˰ϼ + UFDouble sumBchcje = new UFDouble(); // ϼƱκ + UFDouble sumSe = new UFDouble(); // ϼ˰ + // ʵԸֵ + int i = 0; + com.alibaba.fastjson.JSONArray paramsSaleInvoiceBVOsJSA = (com.alibaba.fastjson.JSONArray) bject.get("SaleInvoiceBVOs"); // ʵ + List paramsSaleInvoiceBVOs = paramsSaleInvoiceBVOsJSA.toJavaList(JSONObject.class); + IVApplicationBodyVO[] newivApplicationBodyVOS = new IVApplicationBodyVO[paramsSaleInvoiceBVOs.size()]; // ʵ + for (IVApplicationBodyVO ivApplicationBodyVO : ivApplicationBodyVOS) { + String src_pkdetail = ivApplicationBodyVO.getSrc_pkdetail(); // Դid + // ɸѡӱ + List newParamsSaleInvoiceBVOs = paramsSaleInvoiceBVOs.stream().filter(item -> { + String parCsaleinvoicebid = item.getString("csaleinvoicebid") + ""; + return src_pkdetail.equals(parCsaleinvoicebid); + }).toList(); + if (newParamsSaleInvoiceBVOs.size() <= 0) { + continue; + } + JSONObject paramSaleInvoiceBVO = newParamsSaleInvoiceBVOs.get(0); // ӱ + IVApplicationBodyVO newivApplicationBodyVO = new IVApplicationBodyVO(); +// BeanUtil.copyProperties(ivApplicationBodyVO,newivApplicationBodyVO, CopyOptions.create().setIgnoreNullValue(true)); + // ¡ȡֵԭӱƱ + newivApplicationBodyVO = (IVApplicationBodyVO) CloneUtil.depthClone(ivApplicationBodyVO); + // ֵ֮޸ʵʱֶ + newivApplicationBodyVO.setPk_ivappdetail(null); // Ʊʵid + newivApplicationBodyVO.setBillno(null); // Ʊʵ嵥ݺ + newivApplicationBodyVO.setSe(new UFDouble(paramSaleInvoiceBVO.getString("ntax"))); // ˰ + newivApplicationBodyVO.setXmsl(new UFDouble(paramSaleInvoiceBVO.getString("nnum"))); // + newivApplicationBodyVO.setXmje(new UFDouble(paramSaleInvoiceBVO.getString("norigmny"))); // + newivApplicationBodyVO.setXmjshj(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny"))); // ˰ϼ + newivApplicationBodyVO.setBchcje(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny")).multiply(new UFDouble(-1))); // κ = β + newivApplicationBodyVOS[i++] = newivApplicationBodyVO; + sumSe = sumSe.add(new UFDouble(paramSaleInvoiceBVO.getString("ntax"))); + sumXmsl = sumXmsl.add(new UFDouble(paramSaleInvoiceBVO.getString("nnum"))); + sumXmje = sumXmje.add(new UFDouble(paramSaleInvoiceBVO.getString("norigmny"))); + sumXmjshj = sumXmjshj.add(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny"))); + sumBchcje = sumBchcje.add(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny")).multiply(new UFDouble(-1))); + } + // ֵ֮޸ʵʱֶ + newivApplicationHeadVO.setPk_ivapplication(null); // Ʊ뵥ʵid + newivApplicationHeadVO.setBillno(null); // ݺ + newivApplicationHeadVO.setPreparedate(new UFDate()); // + newivApplicationHeadVO.setJshj(sumXmjshj); // ˰ϼ + newivApplicationHeadVO.setHjje(sumXmje); // ϼƽ + newivApplicationHeadVO.setHjse(sumSe); // ϼ˰ + newivApplicationHeadVO.setBchcje(sumBchcje); // κ + newivApplicationHeadVO.setHzfp(UFBoolean.TRUE); // ַƱ + newivApplicationHeadVO.setSrc_billtype(SOBillType.Invoice.getCode()); // Դ + newivApplicationHeadVO.setSrc_tradetype(rpSaleInvoiceHVO.getCtrantypeid()); // Դ + newivApplicationHeadVO.setTranstypecode(rpSaleInvoiceHVO.getVtrantypecode()); // Դͱ + newivApplicationHeadVO.setSrc_pkbusibill(rpSaleInvoiceHVO.getCsaleinvoiceid()); // Դid + newivApplicationHeadVO.setSrc_billno(rpSaleInvoiceHVO.getVbillcode()); // Դݱ + newivApplicationHeadVO.setHcyy("2"); // ԭ2Ʊ + + // װVO + ivApplicationAggVO.setParentVO(newivApplicationHeadVO); + ivApplicationAggVO.setChildrenVO(newivApplicationBodyVOS); + return ivApplicationAggVO; + } catch (Exception e) { + throw new BusinessException(e.getMessage()); + } + } + + public IUAPQueryBS getQueryService() { + return NCLocator.getInstance().lookup(IUAPQueryBS.class); + } + +} \ No newline at end of file