|
|
@@ -792,6 +792,17 @@ public class SyncService {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 计算不含税单价 = 含税单价 / (1 + 税率%)
|
|
|
+ * 使用BigDecimal保证精度,结果保留两位小数
|
|
|
+ */
|
|
|
+ private double divByOnePlusRate(double taxPrice, double taxRate) {
|
|
|
+ java.math.BigDecimal taxBd = java.math.BigDecimal.valueOf(taxPrice);
|
|
|
+ java.math.BigDecimal rateBd = java.math.BigDecimal.valueOf(taxRate);
|
|
|
+ java.math.BigDecimal divisor = java.math.BigDecimal.ONE.add(rateBd.divide(java.math.BigDecimal.valueOf(100), 10, java.math.RoundingMode.HALF_UP));
|
|
|
+ return taxBd.divide(divisor, 2, java.math.RoundingMode.HALF_UP).doubleValue();
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 从氚云数据同步客户到金蝶
|
|
|
*/
|
|
|
@@ -1696,6 +1707,7 @@ public class SyncService {
|
|
|
saleOrder.put("billno", bizData.getString("SeqNo")); // 单据编号
|
|
|
saleOrder.put("bizdate", formatDate(bizData.getString("F0000021"))); // 订单日期
|
|
|
|
|
|
+ saleOrder.put("istax", "true");
|
|
|
// 销售组织编码(复用查询结果)
|
|
|
String saleOrgNumber = (String) h3yunService.getFieldValueById(
|
|
|
"D29365537feb4e5e8644b21b7fd938dd322dab3", bizData.getString("F0000018"), "F0000002");
|
|
|
@@ -1720,7 +1732,7 @@ public class SyncService {
|
|
|
"D293655f08d8524a8254d35b3681ea527ce2c59", bizData.getString("F0000025"), "F0000001"));
|
|
|
|
|
|
saleOrder.put("comment", bizData.getString("F0000047")); // 备注
|
|
|
- saleOrder.put("istax", bizData.getString("F0000041")); // 是否含税
|
|
|
+ // saleOrder.put("istax", bizData.getString("F0000041")); // 是否含税
|
|
|
|
|
|
// 操作员(默认43007523)
|
|
|
String operator = (String) h3yunService.getFieldValueById(
|
|
|
@@ -1752,10 +1764,10 @@ public class SyncService {
|
|
|
"D293655248b1d9bf6c448f0a291341ec58bb943", entryData.getString("F0000030"), "F0000001"));
|
|
|
entry.put("e_stockorg_number", saleOrgNumber); // 发货组织(复用)
|
|
|
entry.put("entrysettleorg_number", saleOrgNumber); // 结算组织(复用)
|
|
|
- //entry.put("price", entryData.getDouble("F0000032")/(1+(entryData.getDouble("F0000078")/100)) ); // 单价
|
|
|
+ // entry.put("price", divByOnePlusRate(entryData.getDouble("F0000032"), entryData.getDouble("F0000078"))); // 单价(不含税)
|
|
|
entry.put("priceandtax", entryData.getDouble("F0000032")); // h含税单价
|
|
|
entry.put("qty", entryData.getDouble("F0000031")); // 数量
|
|
|
- entry.put("amount", entryData.getDouble("F0000033")); // 金额
|
|
|
+ // entry.put("amount", entryData.getDouble("F0000033")); // 金额
|
|
|
entry.put("al95_textfield", entryData.getString("F0000053")); // 物料明细.收货人
|
|
|
entry.put("al95_textfield1", entryData.getString("F0000054")); // 物料明细.收货人地址
|
|
|
entry.put("al95_textfield2", entryData.getString("F0000055")); // 物料明细.收货人联系电话
|
|
|
@@ -1933,12 +1945,13 @@ public class SyncService {
|
|
|
"D293655248b1d9bf6c448f0a291341ec58bb943", entryData.getString("F0000032"), "F0000001"));//基本单位.编码
|
|
|
entry.put("baseunit_name", h3yunService.getFieldValueById(
|
|
|
"D293655248b1d9bf6c448f0a291341ec58bb943", entryData.getString("F0000032"), "F0000002"));//基本单位.名称
|
|
|
- // entry.put("price", entryData.getDouble("F0000043")); // 物料明细.单价
|
|
|
+ // entry.put("price", entryData.getDouble("F0000043")); // 物料明细.单价
|
|
|
+ entry.put("price", divByOnePlusRate(entryData.getDouble("F0000043"), entryData.getDouble("F0000016"))); // 单价(不含税)
|
|
|
entry.put("priceandtax", entryData.getDouble("F0000043")); // 物料明细.含税单价
|
|
|
//entry.put("taxrate", entryData.getDouble("F0000016"));//物料明细.税率%
|
|
|
-// entry.put("amount", entryData.getDouble("F0000018"));//物料明细.金额
|
|
|
-// entry.put("amountandtax", entryData.getDouble("F0000018"));//物料明细.价税合计
|
|
|
- // entry.put("taxamount", entryData.getDouble("F0000045"));//物料明细.税额
|
|
|
+ entry.put("amount", divByOnePlusRate(entryData.getDouble("F0000043"), entryData.getDouble("F0000016")) * entryData.getDouble("F0000017"));//物料明细.金额
|
|
|
+ entry.put("amountandtax", entryData.getDouble("F0000018"));//物料明细.价税合计
|
|
|
+ entry.put("taxamount", entryData.getDouble("F0000045"));//物料明细.税额
|
|
|
|
|
|
entry.put("purorderbillnumber", purorderbillnumber); //物料明细.采购订单号
|
|
|
// entry.put("project_number", project_number);//项目编码.项目编码invstatus_number
|
|
|
@@ -2121,7 +2134,7 @@ public class SyncService {
|
|
|
"D293655srqj5uui3keso9oraeqm", bizData.getString("F0000044"), "F0000041"));//物料明细.来源单据编号
|
|
|
|
|
|
entry.put("price", entryData.getDouble("F0000066"));//单价
|
|
|
- entry.put("priceandtax", entryData.getDouble("F0000066"));//含税单价
|
|
|
+ entry.put("priceandtax", entryData.getDouble("F0000066"));//含税单价
|
|
|
|
|
|
entry.put("taxrateid_number", h3yunService.getFieldValueById(
|
|
|
"D293655sl91vt6h8d0qg1heqw5aq", entryData.getString("F0000065"), "F0000001"));//F0000065
|
|
|
@@ -2158,7 +2171,7 @@ public class SyncService {
|
|
|
// 头部信息
|
|
|
deliveryNotice.put("billno", bizData.getString("SeqNo")); // 单据编号
|
|
|
// deliveryNotice.put("trdbillno", bizData.getString("SeqNo"));
|
|
|
-
|
|
|
+ deliveryNotice.put("istax", true);//含税
|
|
|
deliveryNotice.put("deliverorg_number", h3yunService.getFieldValueById(
|
|
|
"D29365537feb4e5e8644b21b7fd938dd322dab3", bizData.getString("F0000018"), "F0000002")); // 发货组织.编码
|
|
|
deliveryNotice.put("billtype_number", "sm_delivernotice_STD_BT_S"); // 单据类型.编码
|
|
|
@@ -2230,6 +2243,12 @@ public class SyncService {
|
|
|
entry.put("mainbillentryid", ida);
|
|
|
entry.put("mainbillnumber", h3yunService.getFieldValueById(
|
|
|
"D29365523b214414c2b4e50b9bdca110a9a5951", bizData.getString("F0000050"), "SeqNo"));//物料明细.来源单据编号
|
|
|
+
|
|
|
+ //税率
|
|
|
+ entry.put("taxrateid_number", h3yunService.getFieldValueById(
|
|
|
+ "D293655sl91vt6h8d0qg1heqw5aq", entryData.getString("F0000068"), "F0000001"));//税率
|
|
|
+
|
|
|
+
|
|
|
List<Map<String, Object>> lkList = new ArrayList<>();
|
|
|
Map<String, Object> lkEntry = new LinkedHashMap<>();
|
|
|
lkEntry.put("billentry_lk_stableid", "602924332909361155");
|
|
|
@@ -2393,7 +2412,7 @@ public class SyncService {
|
|
|
"D293655Fb2deb81ad33c41e4bac91630e399d141", bizData.getString("F0000042"), "F0000027"));//收款账号
|
|
|
|
|
|
paymentRequest.put("usage", bizData.getString("F0000043"));//转账附言
|
|
|
-
|
|
|
+ paymentRequest.put("istax", "true");//含税
|
|
|
|
|
|
String exratetable_number = bizData.getString("F0000038");
|
|
|
if ("预算汇率".equals(exratetable_number)) {
|
|
|
@@ -2421,15 +2440,12 @@ public class SyncService {
|
|
|
paymentRequest.put("description", bizData.getString("F0000018")); // 摘要-备注
|
|
|
//
|
|
|
// paymentRequest.put("supplier_number", bizData.getString("F0000004")); // 供应商编码
|
|
|
-//
|
|
|
-//
|
|
|
// paymentRequest.put("paymode", bizData.getString("F0000007")); // 付款方式
|
|
|
// paymentRequest.put("bank_number", bizData.getString("F0000008")); // 银行编码
|
|
|
// paymentRequest.put("bankaccount", bizData.getString("F0000009")); // 银行账号
|
|
|
// paymentRequest.put("comment", bizData.getString("F0000010")); // 备注
|
|
|
// paymentRequest.put("operator_operatornumber", bizData.getString("CreatedBy")); // 操作人
|
|
|
|
|
|
-
|
|
|
// 分录信息 cn_payableentry
|
|
|
List<Map<String, Object>> entryList = new ArrayList<>();
|
|
|
JSONArray billentryArray = bizData.getJSONArray("D293655F51615cc524e746388f8ac7fe290b57a3");
|
|
|
@@ -2447,7 +2463,6 @@ public class SyncService {
|
|
|
entry.put("taxrate", entryData.getDouble("F0000029"));//分录.税率(%)
|
|
|
entry.put("taxamt", entryData.getDouble("F0000030"));//分录.税额
|
|
|
entry.put("expectdate", formatDate(entryData.getString("F0000026")));//期望付款日期
|
|
|
-
|
|
|
String uuidHex = entryData.getString("F0000034").replace("-", "");
|
|
|
long id = Long.parseUnsignedLong(uuidHex.substring(uuidHex.length() - 16), 16);
|
|
|
|
|
|
@@ -2642,7 +2657,7 @@ public class SyncService {
|
|
|
entry.put("quantity", entryData.getDouble("F0000031")); // 数量
|
|
|
entry.put("price", entryData.getDouble("F0000032")); // 单价
|
|
|
entry.put("pricetax", entryData.getDouble("F0000080"));//明细.含税单价
|
|
|
- entry.put("e_amount", entryData.getDouble("F0000084")); // 金额
|
|
|
+ entry.put("e_amount", entryData.getDouble("F0000084")); // 金额
|
|
|
entry.put("e_pricetaxtotal", entryData.getDouble("F0000033"));//价税合计
|
|
|
entry.put("discountmode", "NULL"); // 折扣方式默认写死无
|
|
|
// 单位
|