diff --git a/so/src/private/nccloud/api/impl/so/m30/APISaleOrderMaitainImpl.java b/so/src/private/nccloud/api/impl/so/m30/APISaleOrderMaitainImpl.java index 20fb65f9..ecbb2f40 100644 --- a/so/src/private/nccloud/api/impl/so/m30/APISaleOrderMaitainImpl.java +++ b/so/src/private/nccloud/api/impl/so/m30/APISaleOrderMaitainImpl.java @@ -123,7 +123,8 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { } // String csettleorgid = bvos[0].getCsettleorgid(); String ccurrencyorgid = o1.toString(); - // UFDouble exchangerate = SOCurrencyUtil.getInCurrencyRateByOrg(csettleorgid, BFPubTools.getString_TrimAsNull(o), ccurrencyorgid, dbilldate); + // UFDouble exchangerate = SOCurrencyUtil.getInCurrencyRateByOrg(csettleorgid, + // BFPubTools.getString_TrimAsNull(o), ccurrencyorgid, dbilldate); for (SaleOrderBVO bvo : bvos) { bvo.setCcurrencyid(BFPubTools.getString_TrimAsNull(o1)); if (!BFPubTools.getString_TrimAsNull(o).equals(ccurrencyorgid)) { @@ -132,12 +133,12 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { // bvo.setNexchangerate(UFDouble.ONE_DBL); } // 折本汇率判空及保留小数位数 - UFDouble exchangerate1 = getUFDouble_NullAsOne(bvo.getNexchangerate()).setScale(2, UFDouble.ROUND_HALF_UP); + UFDouble exchangerate1 = getUFDouble_NullAsOne(bvo.getNexchangerate()).setScale(2, + UFDouble.ROUND_HALF_UP); bvo.setNexchangerate(exchangerate1); } } - BillVOsCheckRule checker = new BillVOsCheckRule(new SaleOrderValidator()); checker.check(vos); Map origcurrencyMap = new HashMap<>(); @@ -286,14 +287,27 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { childrenVO.setVchangerate(measrate);// 换算率 childrenVO.setVqtunitrate(measrate);// 报价换算率 UFDouble[] measrateNums = HslParseUtil.parseHsl(measrate); +// UFDouble measrateNum = UFDouble.ONE_DBL; +// if (null != measrateNums && measrateNums.length != 0) { +// measrateNum = measrateNums[0].div(measrateNums[1]).setScale(2, 4); +// } +// // 主数量 +// UFDouble nnum = childrenVO.getNnum().setScale(2, UFDouble.ROUND_HALF_UP); +// childrenVO.setNnum(nnum); +// UFDouble nastnum = nnum.multiply(measrateNum).setScale(2, UFDouble.ROUND_HALF_UP); +// childrenVO.setNastnum(nastnum);// 数量 +// childrenVO.setNqtunitnum(nastnum);// 报价单位数量 +// sumnum = sumnum.add(nnum); +// sumnny = sumnny.add(norigtaxmny); + UFDouble measrateNum = UFDouble.ONE_DBL; if (null != measrateNums && measrateNums.length != 0) { - measrateNum = measrateNums[0].div(measrateNums[1]).setScale(2, 4); + measrateNum = measrateNums[0].div(measrateNums[1]); } // 主数量 - UFDouble nnum = childrenVO.getNnum().setScale(2, UFDouble.ROUND_HALF_UP); + UFDouble nnum = childrenVO.getNnum(); childrenVO.setNnum(nnum); - UFDouble nastnum = nnum.multiply(measrateNum).setScale(2, UFDouble.ROUND_HALF_UP); + UFDouble nastnum = nnum.multiply(measrateNum); childrenVO.setNastnum(nastnum);// 数量 childrenVO.setNqtunitnum(nastnum);// 报价单位数量 sumnum = sumnum.add(nnum); @@ -301,7 +315,7 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { } ordervo.getParentVO().setNtotalnum(sumnum); - ordervo.getParentVO().setNtotalorigmny(sumnny.setScale(2, 4)); + ordervo.getParentVO().setNtotalorigmny(sumnny); } @Override @@ -427,16 +441,16 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { boolean hasNewStatus = Arrays.stream(bvos).anyMatch(bvo -> bvo.getStatus() == VOStatus.NEW); // 新增子表或改订单类型的情况下不校验是否存在下游 /*if (!hasNewStatus && !isChangedTranType) { - String countSql = "SELECT count(1) FROM so_saleinvoice_b a" - + " LEFT JOIN so_saleinvoice b ON a.csaleinvoiceid = b.csaleinvoiceid" - + " WHERE b.fopposeflag = 0 AND nvl(b.dr, 0) = 0 and csrcid = '[csrcid]' "; - countSql = countSql.replace("[csrcid]", hvo.getCsaleorderid()); - Integer num = (Integer) getDao().executeQuery(countSql, new ColumnProcessor()); - if (num > 0) { - // fopposeflag 对冲标记 0=正常 1=已被对冲 2=对冲生成 - ExceptionUtils.wrappBusinessException("下游存在未红冲完成的销售发票"); - return null; - } + String countSql = "SELECT count(1) FROM so_saleinvoice_b a" + + " LEFT JOIN so_saleinvoice b ON a.csaleinvoiceid = b.csaleinvoiceid" + + " WHERE b.fopposeflag = 0 AND nvl(b.dr, 0) = 0 and csrcid = '[csrcid]' "; + countSql = countSql.replace("[csrcid]", hvo.getCsaleorderid()); + Integer num = (Integer) getDao().executeQuery(countSql, new ColumnProcessor()); + if (num > 0) { + // fopposeflag 对冲标记 0=正常 1=已被对冲 2=对冲生成 + ExceptionUtils.wrappBusinessException("下游存在未红冲完成的销售发票"); + return null; + } }*/ } @@ -479,7 +493,8 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { // 订单类型 // String ctrantypeid = orderHVO.getAttributeValue("ctrantypeid") + ""; String vtrantypecode = orderHVO.getVtrantypecode(); - // NCCForUAPLogger.debug("setOtherId-ccustomerid:" + ccustomerid + ",vtrantypecode:" + vtrantypecode); + // NCCForUAPLogger.debug("setOtherId-ccustomerid:" + ccustomerid + + // ",vtrantypecode:" + vtrantypecode); try { String sql = ""; // 部门 @@ -487,7 +502,8 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { sql = " select pk_vid,pk_dept from org_dept where code = '[code]' "; sql = sql.replace("[code]", cdeptvid); Map deptMap = (Map) getDao().executeQuery(sql, new MapProcessor()); - // NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-deptObj:" + deptMap); + // NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-deptObj:" + + // deptMap); if (deptMap != null && !deptMap.isEmpty()) { if (!"".equals(deptMap.getOrDefault("pk_dept", "") + "")) { orderHVO.setCdeptid(deptMap.getOrDefault("pk_dept", "") + ""); @@ -502,7 +518,8 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { sql = " select pk_psndoc from bd_psndoc where code = '[code]' "; sql = sql.replace("[code]", cemployeeid); Object staffObj = getDao().executeQuery(sql, new ColumnProcessor("pk_psndoc")); - // NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-staffObj:" + staffObj); + // NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-staffObj:" + + // staffObj); if (staffObj != null) { String id = BFPubTools.getString_TrimAsNull(staffObj); if (!id.isEmpty()) { @@ -541,7 +558,8 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { IBilltypeService billtypeService = NCLocator.getInstance().lookup(IBilltypeService.class); BilltypeVO billtype = billtypeService.getBilltype(vtrantypecode); if (billtype != null && billtype.getPk_billtypeid() != null) { - // NCCForUAPLogger.debug("setOtherId-pk_billtypeid:" + billtype.getPk_billtypeid()); + // NCCForUAPLogger.debug("setOtherId-pk_billtypeid:" + + // billtype.getPk_billtypeid()); orderHVO.setCtrantypeid(billtype.getPk_billtypeid()); } } @@ -724,12 +742,14 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { UFDouble[] measrateNums = HslParseUtil.parseHsl(measrate); UFDouble measrateNum = UFDouble.ONE_DBL; if (null != measrateNums && measrateNums.length != 0) { - measrateNum = measrateNums[0].div(measrateNums[1]).setScale(2, 4); + measrateNum = measrateNums[0].div(measrateNums[1]); } // 主数量 - UFDouble nnum = sourceBVO.getNnum().setScale(2, UFDouble.ROUND_HALF_UP); - targetBVO.setNnum(nnum); - UFDouble nastnum = nnum.multiply(measrateNum).setScale(2, UFDouble.ROUND_HALF_UP); + // UFDouble nnum = sourceBVO.getNnum().setScale(2, UFDouble.ROUND_HALF_UP); + UFDouble nnum = sourceBVO.getNnum(); + // UFDouble nastnum = nnum.multiply(measrateNum).setScale(2, + // UFDouble.ROUND_HALF_UP); + UFDouble nastnum = nnum.multiply(measrateNum); targetBVO.setNastnum(nastnum);// 数量 targetBVO.setNqtunitnum(nastnum);// 报价单位数量 @@ -742,20 +762,21 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { defList = getDefList("BIP-ddh"); targetBVO.setVbdef5(defList.getOrDefault(vbdef5, "")); // 新增字段的setter方法 - targetBVO.setVbdef10(sourceBVO.getVbdef10()); // 项目名称 - targetBVO.setVbdef13(sourceBVO.getVbdef13()); // 国网行项目号 - targetBVO.setVbdef14(sourceBVO.getVbdef14()); // 合同销售订单变更明细id - targetBVO.setVbdef18(sourceBVO.getVbdef18()); // 是否定制 - targetBVO.setVbdef22(sourceBVO.getVbdef22()); // 国内采购订单号 + targetBVO.setVbdef10(sourceBVO.getVbdef10()); // 项目名称 + targetBVO.setVbdef13(sourceBVO.getVbdef13()); // 国网行项目号 + targetBVO.setVbdef14(sourceBVO.getVbdef14()); // 合同销售订单变更明细id + targetBVO.setVbdef18(sourceBVO.getVbdef18()); // 是否定制 + targetBVO.setVbdef22(sourceBVO.getVbdef22()); // 国内采购订单号 if (StringUtils.isNotEmpty(sourceBVO.getCrowno())) { - targetBVO.setCrowno(sourceBVO.getCrowno()); // 行号 + targetBVO.setCrowno(sourceBVO.getCrowno()); // 行号 } if (StringUtils.isNotEmpty(sourceBVO.getVbdef19())) { - targetBVO.setVbdef19(sourceBVO.getVbdef19()); // 计划开工日期 + targetBVO.setVbdef19(sourceBVO.getVbdef19()); // 计划开工日期 } if (StringUtils.isNotEmpty(sourceBVO.getVbdef20())) { - targetBVO.setVbdef20(sourceBVO.getVbdef20()); // 计划完工日期 + targetBVO.setVbdef20(sourceBVO.getVbdef20()); // 计划完工日期 } + targetBVO.setVbdef24(sourceBVO.getVbdef24()); // 计划评审日期 } @@ -985,8 +1006,9 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { if (map == null) { throw new BusinessException(cmaterialvid + "物料未查到"); } - // NCCForUAPLogger.debug(String.format("setMaterl: cqtunitid = [%S], cunitid = [%S], castunitid = [%S]", - // map.get("cqtunitid"), map.get("cunitid"), map.get("castunitid"))); + // NCCForUAPLogger.debug(String.format("setMaterl: cqtunitid = [%S], cunitid = + // [%S], castunitid = [%S]", + // map.get("cqtunitid"), map.get("cunitid"), map.get("castunitid"))); bVO.setAttributeValue("castunitid", map.get("castunitid")); bVO.setAttributeValue("vchangerate", map.get("vchangerate")); @@ -1000,7 +1022,7 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { bVO.setVqtunitrate(map.get("measrate") + "");// 报价换算率 // UFDouble nqtunitnum = BFPubTools.getUFDouble_NullAsZero(nnum) - // .div(BFPubTools.getUFDouble_NullAsZero(map.get("measrate").toString().split("/")[0])); + // .div(BFPubTools.getUFDouble_NullAsZero(map.get("measrate").toString().split("/")[0])); // bVO.setAttributeValue("nqtunitnum", nqtunitnum); sql = "select sl.pk_taxcode from bd_taxrate sl inner join bd_taxcode sm on sl.pk_taxcode=sm.pk_taxcode where sl.taxrate=" @@ -1027,9 +1049,8 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { return null; } IUAPQueryBS queryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class); - String sql = " select nvl(measrate, '1/1') measrate" + - " from bd_materialconvert" + - " where pk_material='" + pk_material + "' "; + String sql = " select nvl(measrate, '1/1') measrate" + " from bd_materialconvert" + " where pk_material='" + + pk_material + "' "; return (Map) queryBS.executeQuery(sql, new MapProcessor()); } @@ -1195,14 +1216,30 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { // newBvo.setVchangerate(measrate);// 换算率 // newBvo.setVqtunitrate(measrate);// 报价换算率 UFDouble[] measrateNums = HslParseUtil.parseHsl(measrate); +// UFDouble measrateNum = UFDouble.ONE_DBL; +// if (null != measrateNums && measrateNums.length != 0) { +// measrateNum = measrateNums[0].div(measrateNums[1]).setScale(2, 4); +// } +// // 主数量 +// UFDouble nnum = BFPubTools.getUFDouble_NullAsZero(bodydata.get("nnum")).setScale(2, UFDouble.ROUND_HALF_UP); +// newBvo.setNnum(nnum); +// UFDouble nastnum = nnum.multiply(measrateNum).setScale(2, UFDouble.ROUND_HALF_UP); +// newBvo.setNastnum(nastnum);// 数量 +// newBvo.setNqtunitnum(nastnum);// 报价单位数量 +// +// UFDouble[] measrateNums = HslParseUtil.parseHsl(measrate); +// UFDouble measrateNum = UFDouble.ONE_DBL; +// if (null != measrateNums && measrateNums.length != 0) { +// measrateNum = measrateNums[0].div(measrateNums[1]).setScale(2, 4); +// } UFDouble measrateNum = UFDouble.ONE_DBL; if (null != measrateNums && measrateNums.length != 0) { - measrateNum = measrateNums[0].div(measrateNums[1]).setScale(2, 4); + measrateNum = measrateNums[0].div(measrateNums[1]); } // 主数量 - UFDouble nnum = BFPubTools.getUFDouble_NullAsZero(bodydata.get("nnum")).setScale(2, UFDouble.ROUND_HALF_UP); + UFDouble nnum = BFPubTools.getUFDouble_NullAsZero(bodydata.get("nnum")); + UFDouble nastnum = nnum.multiply(measrateNum); newBvo.setNnum(nnum); - UFDouble nastnum = nnum.multiply(measrateNum).setScale(2, UFDouble.ROUND_HALF_UP); newBvo.setNastnum(nastnum);// 数量 newBvo.setNqtunitnum(nastnum);// 报价单位数量 @@ -1213,10 +1250,13 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { String vbdef5 = bodydata.getOrDefault("vbdef5", "") + "";// 合同销售订单号 defList.clear(); defList = getDefList("BIP-ddh"); - newBvo.setVbdef5(defList.getOrDefault(vbdef5, "")); - newBvo.setVbdef10(bodydata.getOrDefault("vbdef10", "") + "");// 项目名称 - newBvo.setVbdef13(bodydata.getOrDefault("vbdef13", "") + "");// 国网行项目号 - newBvo.setVbdef22(bodydata.getOrDefault("vbdef22", "") + "");// 国内采购订单号 + newBvo.setVbdef5(defList.getOrDefault(vbdef5, "~")); + newBvo.setVbdef10(bodydata.getOrDefault("vbdef10", "~") + "");// 项目名称 + newBvo.setVbdef13(bodydata.getOrDefault("vbdef13", "~") + "");// 国网行项目号 + newBvo.setVbdef22(bodydata.getOrDefault("vbdef22", "~") + "");// 国内采购订单号 + if (bodydata.get("vbdef24") != null && !"".equals(bodydata.get("vbdef24")) && !"~".equals(bodydata.get("vbdef24"))) { + newBvo.setVbdef24(bodydata.get("vbdef24") + "");// 计划评审日期 + } bvoList.add(newBvo); } @@ -1393,7 +1433,6 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { String accessToken = ""; Map params = new HashMap<>(); - params.put("appKey", appKey); String timestamp = String.valueOf(System.currentTimeMillis()); params.put("timestamp", timestamp); @@ -1428,7 +1467,8 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { return accessToken; } - public static String doSendHttp(String baseUrl, String method, Map paramMap, String mediaType, Map headers, String json) { + public static String doSendHttp(String baseUrl, String method, Map paramMap, String mediaType, + Map headers, String json) { HttpURLConnection urlConnection = null; InputStream in = null; OutputStream out = null; @@ -1768,7 +1808,6 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { } } - /** * 更新关联的下游单据 * @@ -1782,6 +1821,8 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { String ccustomerid = hvo.getCcustomerid(); String ccustomervid = hvo.getCcustomervid(); String cemployeeid = hvo.getCemployeeid(); + //zhangxinah 订单客户和开票客户同步核销明细表 + dealWithBalance(hvo); String cdeptid = hvo.getCdeptid(); String cdeptvid = hvo.getCdeptvid(); SaleOrderBVO[] bvos = vo.getChildrenVO(); @@ -1946,5 +1987,35 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain { } } + /** + * zhangxinah 订单客户和开票客户同步核销明细表 + * @param hvo + */ + private void dealWithBalance(SaleOrderHVO hvo) { + String csaleorderid=hvo.getCsaleorderid(); + String ccustomerid = hvo.getCcustomerid(); + String ccustomervid = hvo.getCcustomervid(); + String cinvoicecustid = hvo.getCinvoicecustid(); + String cinvoicecustvid = hvo.getCinvoicecustvid(); + //zhangxinah 订单客户和开票客户同步核销明细表 + // 构建并执行更新SQL + String updateSql = "UPDATE so_balance SET " + + " ccustomerid = '[ccustomerid]', " + + " ccustomervid = '[ccustomervid]'," + + " cinvoicecustid = '[cinvoicecustid]'," + + " cinvoicecustvid = '[cinvoicecustvid]'" + + " WHERE csaleorderid = '[csaleorderid]'"; + updateSql = updateSql.replace("[ccustomerid]", ccustomerid); + updateSql = updateSql.replace("[ccustomervid]", ccustomervid); + updateSql = updateSql.replace("[cinvoicecustid]", cinvoicecustid); + updateSql = updateSql.replace("[cinvoicecustvid]", cinvoicecustvid); + updateSql = updateSql.replace("[csaleorderid]", csaleorderid); + try { + getDao().executeUpdate(updateSql); + } catch (Exception e) { + ExceptionUtils.wrappBusinessException("so-updateRelatedBill-exp: " + e.getMessage()); + } + + } }