bip销售发票红冲接口-刘杰20250314提交
This commit is contained in:
parent
f7cc3b0248
commit
59964c6254
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding='gb2312'?>
|
||||||
|
<module>
|
||||||
|
<rest>
|
||||||
|
<resource classname="nc.vo.so.m32.saleinvoice.operator.billSaveAction" exinfo="销售发票及其下游单据开票申请修改红冲逻辑"/>
|
||||||
|
</rest>
|
||||||
|
</module>
|
|
@ -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<JSONObject> paramsSaleInvoiceBVOs = paramsSaleInvoiceBVOsJSA.toJavaList(JSONObject.class);
|
||||||
|
SaleInvoiceBVO[] newSaleInvoiceBVOs = new SaleInvoiceBVO[paramsSaleInvoiceBVOs.size()]; // 新子实体
|
||||||
|
for (SaleInvoiceBVO saleInvoiceBVO : saleInvoiceBVOs) {
|
||||||
|
String csaleinvoicebid = saleInvoiceBVO.getCsaleinvoicebid(); // 子表id
|
||||||
|
// 筛选参数红冲的子表集合
|
||||||
|
List<JSONObject> 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<JSONObject> paramsSaleInvoiceBVOs = paramsSaleInvoiceBVOsJSA.toJavaList(JSONObject.class);
|
||||||
|
IVApplicationBodyVO[] newivApplicationBodyVOS = new IVApplicationBodyVO[paramsSaleInvoiceBVOs.size()]; // 新子实体
|
||||||
|
for (IVApplicationBodyVO ivApplicationBodyVO : ivApplicationBodyVOS) {
|
||||||
|
String src_pkdetail = ivApplicationBodyVO.getSrc_pkdetail(); // 来源单据行id
|
||||||
|
// 筛选参数红冲的子表集合
|
||||||
|
List<JSONObject> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue