接收BIP开票申请生成销售发票-汇率及币种调整
This commit is contained in:
		
							parent
							
								
									7309d459d8
								
							
						
					
					
						commit
						a46c3275c1
					
				|  | @ -0,0 +1,422 @@ | |||
| package nccloud.api.so.saleinvoice.operator; | ||||
| 
 | ||||
| import com.alibaba.fastjson.JSONArray; | ||||
| import com.alibaba.fastjson.JSONObject; | ||||
| import nc.bs.framework.common.InvocationInfoProxy; | ||||
| import nc.bs.framework.common.NCLocator; | ||||
| import nc.bs.framework.core.util.ObjectCreator; | ||||
| import nc.itf.uap.IUAPQueryBS; | ||||
| import nc.jdbc.framework.processor.ColumnProcessor; | ||||
| import nc.jdbc.framework.processor.MapProcessor; | ||||
| import nc.pubitf.so.m32.api.ISaleinvoiceQueryAPI; | ||||
| import nc.vo.pub.BusinessException; | ||||
| import nc.vo.pub.lang.UFDouble; | ||||
| import nc.vo.pubapp.pattern.model.entity.bill.AbstractBill; | ||||
| import nc.vo.pubapp.pflow.PfUserObject; | ||||
| import nc.vo.so.m32.entity.SaleInvoiceHVO; | ||||
| import nc.vo.so.m32.entity.SaleInvoiceVO; | ||||
| 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.dto.scmpub.script.entity.SCMScriptResultDTO; | ||||
| import nccloud.dto.scmpub.tax.entity.TaxInvoiceType; | ||||
| import nccloud.pubitf.riart.pflow.CloudPFlowContext; | ||||
| import nccloud.pubitf.scmpub.commit.service.IBatchRunScriptService; | ||||
| import nccloud.pubitf.scmpub.ssc.service.ISSCService; | ||||
| import nccloud.pubitf.ssctp.sscbd.lientage.ISSClientageMatchService.BusiUnitTypeEnum; | ||||
| 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.math.BigDecimal; | ||||
| import java.math.RoundingMode; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| 
 | ||||
| @Path("so/saleinvoice/operator") | ||||
| public class saveCommitAction extends AbstractNCCRestResource { | ||||
| 
 | ||||
|     public static String fplxStr = "";// 开票申请发票类型 | ||||
| 
 | ||||
|     public saveCommitAction() { | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     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("/saveCommit") | ||||
|     @Consumes({"application/json"}) | ||||
|     @Produces({"application/json"}) | ||||
|     public JSONString saveCommit(JSONString json) throws Exception { | ||||
|         JSONObject jobject = JSONObject.parseObject(json.toJSONString()); | ||||
|         if (jobject == null) { | ||||
|             return ResultMessageUtil.exceptionToJSON(new NullPointerException("JSONString:null")); | ||||
|         } else { | ||||
|             JSONObject bject = jobject.getJSONObject("billhead"); | ||||
|             if (bject == null) { | ||||
|                 return ResultMessageUtil.exceptionToJSON(new NullPointerException("billhead:null")); | ||||
|             } else { | ||||
| 
 | ||||
|                 JSONObject ufinterfaceObj = jsonObjectAss(jobject); | ||||
|                 String tsType = ufinterfaceObj.getString("tsType"); | ||||
|                 if (tsType != null && tsType.equals("1")) { | ||||
|                     Exception e = new NullPointerException("销售订单查询关联失败!"); | ||||
|                     return ResultMessageUtil.exceptionToJSON(e); | ||||
|                 } | ||||
|                 JSONObject bjects = ufinterfaceObj.getJSONObject("ufinterface"); | ||||
|                 String billtype = bjects.getString("billtype"); | ||||
|                 String account = bjects.getString("account"); | ||||
|                 String omscode = bjects.getString("orgcode"); | ||||
|                 String groupcode = bjects.getString("groupcode"); | ||||
| 
 | ||||
|                 if (billtype != null && account != null && groupcode != null && "32".equals(billtype)) { | ||||
|                     OpenApiConvertDataObject openApiconvertData0bject = new OpenApiConvertDataObject(); | ||||
|                     openApiconvertData0bject.setAccount(account); | ||||
|                     openApiconvertData0bject.setBilltype(billtype); | ||||
|                     openApiconvertData0bject.setGroupcode(groupcode); | ||||
|                     openApiconvertData0bject.setOpenApiJsonData(ufinterfaceObj); | ||||
|                     try { | ||||
|                         OpenApiJsonConvertToExChangeXmlService oService = new OpenApiJsonConvertToExChangeXmlService(); | ||||
|                         OpenApiConvertDataResult r = oService.changeToExchangeData(openApiconvertData0bject); | ||||
|                         JSONObject returnJson = r.getDesc(); | ||||
|                         String content = ""; | ||||
|                         // 逐层解析 JSON 数据 | ||||
|                         JSONObject ufinterface = returnJson.getJSONObject("ufinterface"); | ||||
|                         if (ufinterface != null) { | ||||
|                             JSONArray sendResultArray = ufinterface.getJSONArray("sendresult"); | ||||
|                             if (sendResultArray != null && sendResultArray.size() > 0) { | ||||
|                                 // 提取 content 字段 | ||||
|                                 content = sendResultArray.getJSONObject(0).getString("content"); | ||||
|                             } | ||||
|                         } | ||||
|                         if (content == null || content.equals("")) { | ||||
|                             return r != null | ||||
|                                     ? ResultMessageUtil.toJSON(r.getDesc(), "0") | ||||
|                                     : ResultMessageUtil.exceptionToJSON(new NullPointerException("未知异常")); | ||||
|                         } | ||||
|                         String[] ids = {content}; | ||||
|                         SaleInvoiceVO[] saleInvoiceVO = NCLocator.getInstance().lookup(ISaleinvoiceQueryAPI.class) | ||||
|                                 .queryVOByIDs(ids); | ||||
|                         SaleInvoiceVO saleInvoiceVO22 = saleInvoiceVO[0]; | ||||
|                         SaleInvoiceHVO saleInvoiceHVO = saleInvoiceVO22.getParentVO(); | ||||
|                         // 销售发票审核开始 | ||||
|                         InvocationInfoProxy.getInstance().setUserId(saleInvoiceHVO.getApprover()); | ||||
|                         CloudPFlowContext context = new CloudPFlowContext(); | ||||
|                         context.setBillType("32"); | ||||
|                         context.setBillVos(new SaleInvoiceVO[]{saleInvoiceVO[0]}); | ||||
|                         ISSCService sscService = (ISSCService) NCLocator.getInstance().lookup(ISSCService.class); | ||||
|                         String[] actionNames = sscService.isStartSSCWorkFlow( | ||||
|                                 (AbstractBill[]) ((AbstractBill[]) context.getBillVos()), BusiUnitTypeEnum.SO); | ||||
|                         context.setActionName("APPROVE"); | ||||
|                         context.setTrantype("32-02"); | ||||
|                         context.setBatch(false); | ||||
|                         context.setBatchUserObj(new PfUserObject[]{new PfUserObject()}); | ||||
|                         IBatchRunScriptService service = (IBatchRunScriptService) NCLocator.getInstance() | ||||
|                                 .lookup(IBatchRunScriptService.class); | ||||
|                         SCMScriptResultDTO result = service.runBacth(context, SaleInvoiceVO.class); | ||||
|                         // 销售发票审核结束 | ||||
|                         TaxInvoiceType typeObj = TaxInvoiceType.SpecialInvoice; | ||||
|                         SaleInvoiceToTaxInvServiceImpl saleInvoiceToTaxInvService = new SaleInvoiceToTaxInvServiceImpl(); | ||||
|                         saleInvoiceToTaxInvService.issueTaxInvoice(saleInvoiceVO, typeObj); | ||||
| 
 | ||||
|                         return r != null | ||||
|                                 ? ResultMessageUtil.toJSON(r.getDesc(), "0") | ||||
|                                 : ResultMessageUtil.exceptionToJSON(new NullPointerException("未知异常")); | ||||
|                     } catch (Exception e) { | ||||
|                         return ResultMessageUtil.exceptionToJSON(e); | ||||
|                     } | ||||
|                 } else { | ||||
|                     Exception e = new NullPointerException( | ||||
|                             "billtype:" + billtype + ",account:" + account + ",groupcode:" + groupcode); | ||||
|                     return ResultMessageUtil.exceptionToJSON(e); | ||||
|                 } | ||||
| 
 | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public static JSONObject jsonObjectAss(JSONObject originalJson) throws Exception { | ||||
|         try { | ||||
|             // 构建目标 JSON 格式 | ||||
|             JSONObject resultJson = new JSONObject(); | ||||
|             // 添加 ufinterface 字段 | ||||
|             JSONObject ufinterface = new JSONObject(); | ||||
|             ufinterface.put("billtype", "32"); | ||||
|             ufinterface.put("sender", "BIP_NC"); | ||||
|             ufinterface.put("level", "0"); | ||||
|             ufinterface.put("replace", "Y"); | ||||
|             ufinterface.put("roottag", "bill"); | ||||
|             ufinterface.put("isexchange", "Y"); | ||||
|             ufinterface.put("account", "01"); | ||||
|             ufinterface.put("groupcode", "00"); | ||||
|             // 处理 bill 数组 | ||||
|             JSONArray billArray = new JSONArray(); | ||||
|             JSONObject bill = new JSONObject(); | ||||
|             // billhead 结构 | ||||
|             JSONObject billhead = new JSONObject(); | ||||
|             billhead = originalJson.getJSONObject("billhead");// 传入JSON对象 | ||||
|             billhead.put("pk_org_v", originalJson.getJSONObject("billhead").getString("pk_org"));// 开票组织版本=开票组织 | ||||
|             billhead.put("pk_group", "00");// 集团 | ||||
|             fplxStr = originalJson.getJSONObject("billhead").getString("vdef22"); | ||||
|             billhead.put("vtrantypecode", "32-02");// 发票类型编码 | ||||
|             billhead.put("cbiztypeid", "SO01");// 业务流程 | ||||
|             billhead.put("approver", "BIP");// 审批人 | ||||
|             billhead.put("fstatusflag", 1);// 单据状态 | ||||
|             billhead.put("billmaker", "BIP");// 制单人 | ||||
|             billhead.put("csendcountryid", "CN");// 发货国家 | ||||
|             billhead.put("crececountryid", "CN");// 收货国家 | ||||
|             billhead.put("ctaxcountryid", "CN");// 报税国家 | ||||
|             // 2025-2-8付业要求修改,根据发票类型Q(自定义档案)对照发票类型 | ||||
|             String ctrantypeidStr = "32-02";// 默认普通发票 | ||||
|             if (fplxStr != null && fplxStr.equals("31")) { | ||||
|                 ctrantypeidStr = "32-01"; | ||||
|             } else if (fplxStr != null && fplxStr.equals("32")) { | ||||
|                 ctrantypeidStr = "32-02"; | ||||
|             } else if (fplxStr != null && fplxStr.equals("36")) { | ||||
|                 ctrantypeidStr = "32-Cxx-03"; | ||||
|             } | ||||
|             billhead.put("ctrantypeid", ctrantypeidStr);// 发票类型 | ||||
|             // billhead.put("ctrantypeid", "32-02");//发票类型 | ||||
|             billhead.put("fbuysellflag", "1");// 购销类型 | ||||
|             billhead.put("creator", "BIP");// 创建人 | ||||
|             billhead.put("ccurrencyid", "CNY");// 本位币 | ||||
|             billhead.put("corigcurrencyid", "CNY");// 币种 | ||||
|             billhead.put("nexchangerate", 1);// 折本汇率 | ||||
|             billhead.put("btriatradeflag", 0);// 三角贸易 | ||||
|             JSONObject newItem = new JSONObject(); | ||||
|             JSONObject otherJson = new JSONObject(); | ||||
|             JSONArray csaleinvoicebid = new JSONArray(); | ||||
|             // 遍历原始数据中的 csaleinvoicebid 数组 | ||||
|             for (int i = 0; i < originalJson.getJSONObject("billhead").getJSONArray("csaleinvoicebid").size(); i++) { | ||||
|                 JSONObject item = originalJson.getJSONObject("billhead").getJSONArray("csaleinvoicebid") | ||||
|                         .getJSONObject(i); | ||||
| 
 | ||||
|                 JSONObject itemDetails = new JSONObject(); | ||||
|                 itemDetails = item; | ||||
|                 itemDetails.put("carorgid", originalJson.getJSONObject("billhead").getString("pk_org"));// 应收组织 | ||||
|                 itemDetails.put("csendstockorgid", | ||||
|                         originalJson.getJSONObject("billhead").getString("pk_org"));// 库存组织原始版本 | ||||
|                 itemDetails.put("cmaterialid", item.getString("cmaterialvid"));// 物料编码 | ||||
|                 Map<String, Object> value2 = getSaleorderVo(item.getString("csrcbid")); | ||||
|                 if (value2 == null) { | ||||
|                     resultJson = new JSONObject(); | ||||
|                     resultJson.put("tsType", "1"); | ||||
|                     return resultJson; | ||||
|                 } | ||||
|                 itemDetails.put("vfirsttype", "30");// 源头单据类型 | ||||
|                 itemDetails.put("vfirstcode", value2.get("vbillcode"));// 源头单据号 | ||||
|                 itemDetails.put("blargessflag", value2.get("blargessflag"));// 赠品 | ||||
|                 itemDetails.put("vfirsttrantype", "30-01");// 源头交易类型 | ||||
|                 itemDetails.put("vfirstrowno", value2.get("crowno"));// 源头单据行号 | ||||
|                 itemDetails.put("cfirstid", item.getString("csrcid"));// 源头单据主表 | ||||
|                 itemDetails.put("cfirstbid", item.getString("csrcbid"));// 源头单据子表 | ||||
|                 itemDetails.put("vsrctype", "30");// 来源单据类型 | ||||
|                 itemDetails.put("vsrccode", value2.get("vbillcode"));// 来源单据号 | ||||
|                 itemDetails.put("vsrctrantype", "30-01");// 来源交易类型 | ||||
|                 itemDetails.put("vsrcrowno", value2.get("crowno"));// 来源单据行号 | ||||
|                 // 通过 ntaxrate 获取 taxcode | ||||
|                 String taxcodeStr = getTaxcode(item.getString("ntaxrate")); | ||||
|                 // 将 taxcodeStr 放入 bodyMap | ||||
|                 itemDetails.put("ctaxcodeid", taxcodeStr);// 税码 | ||||
|                 itemDetails.put("nnum", item.getString("nastnum"));// 主数量 | ||||
|                 itemDetails.put("ftaxtypeflag", 1);// 扣税类别 | ||||
|                 itemDetails.put("pk_group", "00");// 集团 | ||||
|                 itemDetails.put("pk_org", originalJson.getJSONObject("billhead").getString("pk_org"));// 开票组织 | ||||
|                 itemDetails.put("cunitid", item.getString("castunitid"));// 主单位 | ||||
| 
 | ||||
| //                double nastnum = Double.parseDouble(item.getString("nastnum"));//数量 | ||||
| //                double nqtorigtaxprice = Double.parseDouble(item.getString("nqtorigtaxprice"));//含税单价 | ||||
| //                double ntaxrate = Double.parseDouble(item.getString("ntaxrate"));//税率 | ||||
| // | ||||
| //                double nqtorigprice = | ||||
| //                        Math.round(nqtorigtaxprice / (1 + ntaxrate) * 100.0) / 100.0;//不含税单价、无税单价(含税单价/(1+税率)) | ||||
| //                double norigmny = Math.round(nqtorigprice * nastnum * 100.0) / 100.0;//无税金额(不含税单价*数量) | ||||
| //                double norigtaxmny = Math.round(nastnum * nqtorigtaxprice * 100.0) / 100.0;//价税合计、含税金额(数量*含税单价) | ||||
| //                double norigtaxprice = Math.round(nqtorigtaxprice * 100.0) / 100.0;//主含税单价(含税单价) | ||||
| //                double norignetprice = nqtorigprice;//主无税净价(不含税单价) | ||||
| //                double ntax = Math.round(norigtaxmny / (1 + ntaxrate) * ntaxrate * 100.0) / 100.0;//税额(含税金额/(1+税率)*税率) | ||||
| //                double ncaltaxmny = norigmny;//计税金额(无税金额) | ||||
| //                double norigtaxnetprice = norigtaxprice;//主含税净价(主含税单价) | ||||
| 
 | ||||
| //                BigDecimal nastnum = new BigDecimal(item.getString("nastnum"));//数量 | ||||
| //                BigDecimal nqtorigtaxprice = new BigDecimal(item.getString("nqtorigtaxprice"));//含税单价 | ||||
| //                BigDecimal ntaxrate = new BigDecimal(item.getString("ntaxrate"));//税率 | ||||
| // | ||||
| //                // 1. 计算不含税单价 | ||||
| //                BigDecimal nqtorigprice = nqtorigtaxprice.divide(BigDecimal.ONE.add(ntaxrate), 4, RoundingMode.HALF_UP); | ||||
| //                // 2. 计算无税金额 = 不含税单价 * 数量 | ||||
| //                BigDecimal norigmny = nqtorigprice.multiply(nastnum).setScale(4, RoundingMode.HALF_UP); | ||||
| //                // 3. 计算税额 = 无税金额 * 税率 | ||||
| //                BigDecimal ntax = norigmny.multiply(ntaxrate).setScale(4, RoundingMode.HALF_UP); | ||||
| //                // 4. 计算含税金额 = 无税金额 + 税额 | ||||
| //                BigDecimal norigtaxmny = norigmny.add(ntax).setScale(4, RoundingMode.HALF_UP); | ||||
| //                // 主含税单价(即含税单价) | ||||
| //                BigDecimal norigtaxprice = nqtorigtaxprice.setScale(4, RoundingMode.HALF_UP); | ||||
| //                // 主无税净价(即不含税单价) | ||||
| //                BigDecimal norignetprice = nqtorigprice; | ||||
| //                // 计税金额 = 无税金额 | ||||
| //                BigDecimal ncaltaxmny = norigmny; | ||||
| //                // 主含税净价 = 含税单价(原始) | ||||
| //                BigDecimal norigtaxnetprice = norigtaxprice; | ||||
| 
 | ||||
|                 // 输入参数:从你的 item 获取各个字段 | ||||
|                 BigDecimal nastnum = new BigDecimal(item.getString("nastnum"));  // 数量 | ||||
|                 nastnum = nastnum.setScale(4, RoundingMode.HALF_UP); | ||||
|                 BigDecimal nqtorigtaxprice = new BigDecimal(item.getString("nqtorigtaxprice"));  // 含税单价 | ||||
|                 nqtorigtaxprice = nqtorigtaxprice.setScale(4, RoundingMode.HALF_UP); | ||||
|                 BigDecimal ntaxrate = new BigDecimal(item.getString("ntaxrate")).divide(new BigDecimal("100"));  // 税率 | ||||
|                 ntaxrate = ntaxrate.setScale(4, RoundingMode.HALF_UP); | ||||
| 
 | ||||
|                 // 含税净价 | ||||
|                 BigDecimal norigtaxnetprice = nqtorigtaxprice; | ||||
|                 // 1. 计算价税合计(含税金额) | ||||
|                 BigDecimal norigtaxmny = nastnum.multiply(norigtaxnetprice).setScale(2, RoundingMode.HALF_UP); | ||||
|                 // 2. 计算折扣额 | ||||
|                 BigDecimal discountAmount = nastnum.multiply(nqtorigtaxprice).subtract(norigtaxmny) | ||||
|                         .setScale(4, RoundingMode.HALF_UP); | ||||
|                 // 3. 计算税额(两种方法:应税外加税和应税内含税) | ||||
|                 BigDecimal ntax = norigtaxmny.multiply(ntaxrate) | ||||
|                         .divide(BigDecimal.ONE.add(ntaxrate), 2, RoundingMode.HALF_UP);  // 应税外加税 | ||||
|                 BigDecimal taxInclusiveInner = norigtaxmny.multiply(ntaxrate) | ||||
|                         .setScale(4, RoundingMode.HALF_UP);  // 应税内含税 | ||||
|                 // 4. 计算无税金额 | ||||
|                 BigDecimal norigmny = norigtaxmny.subtract(ntax).setScale(2, RoundingMode.HALF_UP); | ||||
|                 // 4. 计算无税单价(nqtorigprice = 无税金额 / 数量) | ||||
|                 BigDecimal nqtorigprice = norigmny.divide(nastnum, 4, RoundingMode.HALF_UP); | ||||
|                 // 计税金额 = 无税金额 | ||||
|                 BigDecimal ncaltaxmny = norigmny; | ||||
|                 // 主含税单价(即含税单价) | ||||
|                 BigDecimal norigtaxprice = nqtorigtaxprice.setScale(4, RoundingMode.HALF_UP); | ||||
|                 // 主无税净价(即不含税单价) | ||||
|                 BigDecimal norignetprice = nqtorigprice; | ||||
| 
 | ||||
|                 // 从销售订单中获取币种 | ||||
|                 String corigcurrencyid = getString_TrimAsNull(value2.get("corigcurrencyid")); | ||||
|                 otherJson.put("corigcurrencyid", "".equals(corigcurrencyid) ? "CNY" : corigcurrencyid); | ||||
|                 // 从销售订单中获取折本汇率 | ||||
|                 BigDecimal nexchangerate = getUFDouble_NullAsZero(value2.get("nexchangerate")).toBigDecimal(); | ||||
|                 otherJson.put("nexchangerate", nexchangerate); | ||||
|                 // 单价和金额*汇率 | ||||
|                 nqtorigprice = nqtorigprice.multiply(nexchangerate); | ||||
|                 norigmny = norigmny.multiply(nexchangerate); | ||||
|                 norigtaxmny = norigtaxmny.multiply(nexchangerate); | ||||
|                 norigtaxprice = norigtaxprice.multiply(nexchangerate); | ||||
|                 norignetprice = norignetprice.multiply(nexchangerate); | ||||
|                 nqtorigtaxprice = nqtorigtaxprice.multiply(nexchangerate); | ||||
|                 norigtaxnetprice = norigtaxnetprice.multiply(nexchangerate); | ||||
| 
 | ||||
| 
 | ||||
|                 itemDetails.put("nqtorigprice", nqtorigprice);// 无税单价 | ||||
|                 itemDetails.put("norigprice", nqtorigprice);// 主无税单价 | ||||
|                 itemDetails.put("norigmny", norigmny);// 无税金额 | ||||
|                 itemDetails.put("nmny", norigmny);// 本币无税金额 | ||||
|                 itemDetails.put("norigtaxmny", norigtaxmny);// 价税合计 | ||||
|                 itemDetails.put("norigtaxprice", norigtaxprice);// 主含税单价 | ||||
|                 itemDetails.put("norignetprice", norignetprice);// 主无税净价 | ||||
|                 itemDetails.put("nqtorigtaxprice", nqtorigtaxprice);// 含税单价 | ||||
|                 itemDetails.put("ntax", ntax);// 税额 | ||||
|                 itemDetails.put("ncaltaxmny", ncaltaxmny);// 计税金额 | ||||
|                 itemDetails.put("norigtaxnetprice", norigtaxnetprice);// 主含税净价 | ||||
|                 itemDetails.put("nnetprice", norignetprice);// 主本币无税净价 | ||||
|                 itemDetails.put("ntaxmny", norigtaxmny);// 本币价税合计 | ||||
|                 csaleinvoicebid.add(itemDetails); | ||||
| 
 | ||||
| 
 | ||||
|             } | ||||
|             newItem.put("item", csaleinvoicebid); | ||||
|             billhead.put("csaleinvoicebid", newItem); | ||||
|             if (otherJson != null && !otherJson.isEmpty()) { | ||||
|                 // 查询销售订单中的币种和汇率 | ||||
|                 billhead.put("corigcurrencyid", otherJson.get("corigcurrencyid"));// 币种 | ||||
|                 billhead.put("nexchangerate", otherJson.get("nexchangerate"));// 折本汇率 | ||||
|             } | ||||
|             bill.put("billhead", billhead); | ||||
|             bill.put("id", ""); | ||||
|             // 将 bill 数组添加到 ufinterface 中 | ||||
|             billArray.add(bill); | ||||
|             ufinterface.put("bill", billArray); | ||||
|             // 将 ufinterface 添加到最终的 resultJson 中 | ||||
|             resultJson.put("ufinterface", ufinterface); | ||||
|             return resultJson; | ||||
|         } catch (Exception e) { | ||||
|             return (JSONObject) ResultMessageUtil.exceptionToJSON(e); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     // 方法:检查必填项并返回转化后的Map | ||||
|     public static String checkRequiredFields(JSONObject data) throws Exception { | ||||
|         String returnStr = ""; | ||||
|         // 2. 检查必填字段 pk_org | ||||
|         String pkOrg = (String) data.getOrDefault("pk_org", ""); | ||||
|         if (pkOrg.isEmpty()) { | ||||
|             return "字段pk_org缺失或为空!"; | ||||
|         } | ||||
|         // 2. 检查必填字段 pk_org | ||||
|         String vbillcode = (String) data.getOrDefault("vbillcode", ""); | ||||
|         if (vbillcode.isEmpty()) { | ||||
|             return "字段vbillcode缺失或为空!"; | ||||
|         } | ||||
|         return returnStr; | ||||
|     } | ||||
| 
 | ||||
|     private static String getTaxcode(String taxrateStr) throws BusinessException { | ||||
|         IUAPQueryBS queryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class); | ||||
|         String sql = | ||||
|                 " select code FROM bd_taxrate tt inner join bd_taxcode tc on tt.pk_taxcode=tc.pk_taxcode where taxrate='" | ||||
|                         + taxrateStr + "' AND ROWNUM = 1 "; | ||||
|         String taxcodeStr = (String) queryBS.executeQuery(sql, new ColumnProcessor()); | ||||
|         return taxcodeStr; | ||||
|     } | ||||
| 
 | ||||
|     private static Map<String, Object> getSaleorderVo(String csourcebillbidStr) throws BusinessException { | ||||
|         IUAPQueryBS queryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class); | ||||
|         String sql = " select s.vbillcode,s.csaleorderid,sb.csaleorderbid,sb.crowno,sb.blargessflag,sb.nexchangerate,s.corigcurrencyid from so_saleorder_b sb\n" | ||||
|                 + "inner join so_saleorder s on sb.csaleorderid=s.csaleorderid\n" | ||||
|                 + "where sb.csaleorderbid='" + csourcebillbidStr + "' "; | ||||
|         Map<String, Object> value2 = (Map<String, Object>) queryBS.executeQuery(sql, new MapProcessor()); | ||||
|         return value2; | ||||
|     } | ||||
| 
 | ||||
|     private static String getString_TrimAsNull(Object value) { | ||||
|         if ((value == null) || (value.toString().trim().isEmpty())) { | ||||
|             return ""; | ||||
|         } | ||||
|         return value.toString().trim(); | ||||
|     } | ||||
| 
 | ||||
|     private static UFDouble getUFDouble_NullAsZero(Object value) { | ||||
|         if ((value == null) || (value.toString().trim().isEmpty()) || (value.toString().trim().equals("~"))) | ||||
|             return UFDouble.ONE_DBL; | ||||
|         if ((value instanceof UFDouble)) | ||||
|             return (UFDouble) value; | ||||
|         if ((value instanceof BigDecimal)) { | ||||
|             return new UFDouble((BigDecimal) value); | ||||
|         } | ||||
|         return new UFDouble(value.toString().trim()); | ||||
|     } | ||||
| 
 | ||||
|     public IUAPQueryBS getQueryService() { | ||||
|         return NCLocator.getInstance().lookup(IUAPQueryBS.class); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
		Loading…
	
		Reference in New Issue