|
|
|
@ -111,6 +111,7 @@ public class SDNYMainProcessController extends AbstractController { |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private RequestRecordService requestRecordService; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 查验发票 |
|
|
|
|
*/ |
|
|
|
@ -274,7 +275,6 @@ public class SDNYMainProcessController extends AbstractController { |
|
|
|
|
DynamicContextHolder.push("business" + DbConstant.DETAIL_READ); |
|
|
|
|
baseTDxRecordInvoiceDetail = baseTDxRecordInvoiceDetailDao.selectList(detailWrapper); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
DynamicContextHolder.push("business" + DbConstant.BUSINESS_READ); |
|
|
|
|
|
|
|
|
|
if ((baseTDxRecordInvoiceDetail == null || baseTDxRecordInvoiceDetail.size() == 0) && (vehicleList == null || vehicleList.size() == 0)) { |
|
|
|
@ -301,6 +301,7 @@ public class SDNYMainProcessController extends AbstractController { |
|
|
|
|
baseTDxRecordInvoiceDetail = baseTDxRecordInvoiceDetailDao.selectList(detailWrapper); |
|
|
|
|
DynamicContextHolder.push("business" + DbConstant.BUSINESS_READ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} else if (checkInvoiceResult.containsKey("cyjg") && !"0001".equals(checkInvoiceResult.getString("cyjg"))) { |
|
|
|
|
data = errorInfo(checkInvoiceResult, data); |
|
|
|
@ -823,6 +824,209 @@ public class SDNYMainProcessController extends AbstractController { |
|
|
|
|
String taxRate = ""; |
|
|
|
|
List<Map<String, String>> returnDetailList = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
JSONArray detailList = detailArray; |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < detailList.size(); i++) { |
|
|
|
|
String taxRateDetail = ""; |
|
|
|
|
JSONObject detail = (JSONObject) detailList.get(i); |
|
|
|
|
if (StringUtils.isNotEmpty(detail.getString("goodsName")) && (detail.getString("goodsName").equals("(详见销货清单)") || detail.getString("goodsName").equals("(详见销货清单)"))) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
Map<String, String> snDetailMap = new HashMap<String, String>(); |
|
|
|
|
snDetailMap.put("rowNo", i + 1 + ""); |
|
|
|
|
snDetailMap.put("commodityCode", detail.getString("goodsNum")); |
|
|
|
|
snDetailMap.put("commodityName", detail.getString("goodsName")); |
|
|
|
|
snDetailMap.put("specificationModel", detail.getString("model")); |
|
|
|
|
snDetailMap.put("unit", detail.getString("unit")); |
|
|
|
|
String quantity = detail.getString("num"); |
|
|
|
|
snDetailMap.put("quantity", quantity); |
|
|
|
|
|
|
|
|
|
String unitPrice = detail.getString("unitPrice"); |
|
|
|
|
snDetailMap.put("unitPrice", unitPrice); |
|
|
|
|
|
|
|
|
|
if ("11".equals(invoiceType)) { |
|
|
|
|
snDetailMap.put("tax", "0"); |
|
|
|
|
|
|
|
|
|
//如果是卷票计算合计金额
|
|
|
|
|
String hjje = null; |
|
|
|
|
if (detail.getString("detailAmount") != null && detail.getString("taxAmount") != null) { |
|
|
|
|
BigDecimal je = new BigDecimal(detail.getString("detailAmount")); |
|
|
|
|
if (detail.getString("taxAmount") != null) { |
|
|
|
|
hjje = je.add(new BigDecimal(detail.getString("taxAmount"))).toPlainString(); |
|
|
|
|
} else { |
|
|
|
|
hjje = je.toPlainString(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(hjje)) |
|
|
|
|
snDetailMap.put("amount", hjje); |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
snDetailMap.put("tax", "***".equals(detail.getString("taxAmount")) ? "0.00" : detail.getString("taxAmount")); |
|
|
|
|
snDetailMap.put("amount", detail.getString("detailAmount")); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ("免税".equals(detail.getString("taxRate")) || "不征税".equals(detail.getString("taxRate")) || "***".equals(detail.getString("taxRate"))) { |
|
|
|
|
taxRateDetail = "0"; |
|
|
|
|
snDetailMap.put("taxRate", taxRateDetail); |
|
|
|
|
} else { |
|
|
|
|
if (detail.get("taxRate") != null && StringUtils.isNoneBlank(detail.get("taxRate").toString())) { |
|
|
|
|
try { |
|
|
|
|
taxRateDetail = detail.get("taxRate").toString(); |
|
|
|
|
if (!"0".equals(taxRateDetail)) { |
|
|
|
|
if (StringUtils.isNoneBlank(taxRateDetail)) { |
|
|
|
|
if (taxRateDetail.contains("%")) { |
|
|
|
|
taxRateDetail = taxRateDetail.replace("%", ""); |
|
|
|
|
} |
|
|
|
|
BigDecimal tax = new BigDecimal(taxRateDetail); |
|
|
|
|
BigDecimal tax1 = tax.divide(new BigDecimal("100")); |
|
|
|
|
if (tax.compareTo(new BigDecimal("0.99")) < 1) { |
|
|
|
|
taxRateDetail = tax.toPlainString(); |
|
|
|
|
} else { |
|
|
|
|
taxRateDetail = tax1.toPlainString(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("报错的原因为:{}", e); |
|
|
|
|
taxRateDetail = "0.00"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ("11".equals(invoiceType)) { |
|
|
|
|
taxRateDetail = "0.000"; |
|
|
|
|
} |
|
|
|
|
log.info("明细-发票税率为:{}", taxRateDetail); |
|
|
|
|
snDetailMap.put("taxRate", taxRateDetail); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
log.info("明细-tax={}", detail.get("taxAmount")); |
|
|
|
|
snDetailMap.put("currentDateEnd", detail.getString("txrqz")); |
|
|
|
|
snDetailMap.put("currentDateStart", detail.getString("txrqq")); |
|
|
|
|
snDetailMap.put("licensePlateNum", detail.getString("cph")); |
|
|
|
|
snDetailMap.put("type", detail.getString("lx")); |
|
|
|
|
|
|
|
|
|
returnDetailList.add(snDetailMap); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
checkInvoice.put("invoiceLineList", returnDetailList); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void convertToResult(JSONObject checkInvoice, JSONArray detailArray, JSONObject vehicleList) throws ParseException { |
|
|
|
|
|
|
|
|
|
checkInvoice.put("totalTax", checkInvoice.getString("taxAmount")); |
|
|
|
|
checkInvoice.put("amountTax", checkInvoice.getString("totalAmount")); |
|
|
|
|
checkInvoice.put("totalAmount", checkInvoice.getString("invoiceAmount")); |
|
|
|
|
// 增加备注字段
|
|
|
|
|
checkInvoice.put("remarks", checkInvoice.getString("remark")); |
|
|
|
|
//添加非空判断
|
|
|
|
|
String invoiceCode = null; |
|
|
|
|
if (checkInvoice.get("invoiceCode") != null) { |
|
|
|
|
invoiceCode = checkInvoice.get("invoiceCode").toString(); |
|
|
|
|
} |
|
|
|
|
String invoiceType = checkInvoice.get("invoiceType").toString(); |
|
|
|
|
if ("22".equals(invoiceType)) { |
|
|
|
|
invoiceType = "33"; |
|
|
|
|
} |
|
|
|
|
if ("21".equals(invoiceType)) { |
|
|
|
|
invoiceType = "31"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
checkInvoice.put("invoiceType", invoiceType); |
|
|
|
|
checkInvoice.put("administrativeDivisionNo", ""); |
|
|
|
|
checkInvoice.put("administrativeDivisionName", ""); |
|
|
|
|
|
|
|
|
|
if ("31".equals(invoiceType) || "32".equals(invoiceType) || "185".equals(invoiceType) || "186".equals(invoiceType)) { |
|
|
|
|
checkInvoice.put("invoiceCode", ""); |
|
|
|
|
checkInvoice.put("invoiceNumber", invoiceCode == null ? checkInvoice.get("invoiceNo").toString() : invoiceCode + checkInvoice.get("invoiceNo").toString()); |
|
|
|
|
} else { |
|
|
|
|
checkInvoice.put("invoiceCode", invoiceCode); |
|
|
|
|
checkInvoice.put("invoiceNumber", checkInvoice.get("invoiceNo").toString()); |
|
|
|
|
} |
|
|
|
|
String uuid = ""; |
|
|
|
|
if (invoiceCode != null && StringUtils.isNoneBlank(invoiceCode)) { |
|
|
|
|
uuid = invoiceCode + checkInvoice.get("invoiceNo").toString(); |
|
|
|
|
checkInvoice.put("uuid", uuid); |
|
|
|
|
} else { |
|
|
|
|
uuid = checkInvoice.get("invoiceNo").toString(); |
|
|
|
|
checkInvoice.put("uuid", uuid); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String kprq = checkInvoice.get("invoiceDate").toString(); |
|
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US); |
|
|
|
|
Date date = sdf.parse(kprq); |
|
|
|
|
String formatStr = new SimpleDateFormat("yyyy-MM-dd").format(date); |
|
|
|
|
log.info("开票日期为:{} ", formatStr); |
|
|
|
|
|
|
|
|
|
checkInvoice.put("billingDate", formatStr); |
|
|
|
|
checkInvoice.put("purchaserName", checkInvoice.get("gfName")); |
|
|
|
|
checkInvoice.put("purchaserTaxNo", checkInvoice.get("gfTaxNo")); |
|
|
|
|
checkInvoice.put("purchaserBank", checkInvoice.get("gfBankAndNo")); |
|
|
|
|
checkInvoice.put("purchaserAddressPhone", checkInvoice.get("gfAddressAndPhone")); |
|
|
|
|
checkInvoice.put("salesName", checkInvoice.get("xfName")); |
|
|
|
|
checkInvoice.put("salesTaxNo", checkInvoice.get("xfTaxNo")); |
|
|
|
|
checkInvoice.put("salesAddressPhone", checkInvoice.get("gfAddressAndPhone")); |
|
|
|
|
checkInvoice.put("salesBank", checkInvoice.get("gfBankAndNo")); |
|
|
|
|
checkInvoice.put("checkCode", checkInvoice.get("checkCode")); |
|
|
|
|
if("1".equals(checkInvoice.get("invoiceStatus"))){ |
|
|
|
|
checkInvoice.put("state", "3"); |
|
|
|
|
}else if("2".equals(checkInvoice.get("invoiceStatus"))){ |
|
|
|
|
checkInvoice.put("state", "1"); |
|
|
|
|
}else if("3".equals(checkInvoice.get("invoiceStatus")) || "7".equals(checkInvoice.get("invoiceStatus")) || "8".equals(checkInvoice.get("invoiceStatus"))){ |
|
|
|
|
checkInvoice.put("state", "2"); |
|
|
|
|
}else if("4".equals(checkInvoice.get("invoiceStatus"))){ |
|
|
|
|
checkInvoice.put("state", "4"); |
|
|
|
|
}else if("0".equals(checkInvoice.get("invoiceStatus"))){ |
|
|
|
|
checkInvoice.put("state", "0"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
checkInvoice.put("tollSign", "07"); |
|
|
|
|
//机动车
|
|
|
|
|
if ("03".equals(invoiceType)) { |
|
|
|
|
checkInvoice.put("vehicleType", vehicleList.getString("vehicleType")); |
|
|
|
|
checkInvoice.put("brandModel", vehicleList.getString("factoryModel")); |
|
|
|
|
checkInvoice.put("originPlace", vehicleList.getString("productPlace")); |
|
|
|
|
checkInvoice.put("certificateNo", vehicleList.getString("certificate")); |
|
|
|
|
checkInvoice.put("inspectionListNo", vehicleList.getString("inspectionNum")); |
|
|
|
|
checkInvoice.put("engineNo", vehicleList.getString("engineNo")); |
|
|
|
|
checkInvoice.put("vehicleNo", vehicleList.getString("vehicleNo")); |
|
|
|
|
checkInvoice.put("paymentVoucherNo", vehicleList.getString("taxRecords")); |
|
|
|
|
checkInvoice.put("passengersLimited", vehicleList.getString("limitPeople")); |
|
|
|
|
checkInvoice.put("taxAuthorityNo", vehicleList.getString("taxBureauCode")); |
|
|
|
|
checkInvoice.put("taxAuthorityName", vehicleList.getString("taxBureauName")); |
|
|
|
|
checkInvoice.put("idcardNo", vehicleList.getString("buyerIdNum")); |
|
|
|
|
checkInvoice.put("amountTax", vehicleList.getString("carPrice")); |
|
|
|
|
} |
|
|
|
|
//二手车
|
|
|
|
|
if ("15".equals(invoiceType)) { |
|
|
|
|
checkInvoice.put("vehicleType", vehicleList.getString("vehicleType")); |
|
|
|
|
checkInvoice.put("vehicleNo", vehicleList.getString("vehicleNo")); |
|
|
|
|
checkInvoice.put("brandModel", vehicleList.getString("factoryModel")); |
|
|
|
|
checkInvoice.put("licensePlate", vehicleList.getString("plateNo")); |
|
|
|
|
checkInvoice.put("buyerUnitOrIndividual", vehicleList.getString("buyerUnit")); |
|
|
|
|
checkInvoice.put("buyerUnitCodeOrIdNo", vehicleList.getString("buyerUnitCode")); |
|
|
|
|
checkInvoice.put("buyerUnitOrIndividualAddress", vehicleList.getString("buyerUnitAddress")); |
|
|
|
|
checkInvoice.put("sellerUnitOrIndividual", vehicleList.getString("sellerUnit")); |
|
|
|
|
checkInvoice.put("sellerUnitCodeOrIdNo", vehicleList.getString("sellerUnitCode")); |
|
|
|
|
checkInvoice.put("sellerUnitOrIndividualAddress", vehicleList.getString("sellerUnitAddress")); |
|
|
|
|
checkInvoice.put("sellerPhone", vehicleList.getString("sellerPhone")); |
|
|
|
|
checkInvoice.put("lemonMarket", vehicleList.getString("carMarket")); |
|
|
|
|
checkInvoice.put("lemonMarketAddress", vehicleList.getString("carMarketAddress")); |
|
|
|
|
checkInvoice.put("lemonMarketPhone", vehicleList.getString("carMarketPhone")); |
|
|
|
|
checkInvoice.put("lemonMarketBankAndAccount", vehicleList.getString("carMarketBank")); |
|
|
|
|
checkInvoice.put("vehicleAdminOffice", vehicleList.getString("vehicleAdminOffice")); |
|
|
|
|
checkInvoice.put("registrationNo", vehicleList.getString("registrationNo")); |
|
|
|
|
checkInvoice.put("lemonMarketTaxNo", vehicleList.getString("carMarketTaxNo")); |
|
|
|
|
checkInvoice.put("idcardNo", vehicleList.getString("buyerIdNum")); |
|
|
|
|
checkInvoice.put("amountTax", vehicleList.getString("carPrice")); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
String taxRate = ""; |
|
|
|
|
List<Map<String, String>> returnDetailList = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
JSONArray detailList = detailArray; |
|
|
|
|
if (detailList != null) { |
|
|
|
|
for (int i = 0; i < detailList.size(); i++) { |
|
|
|
@ -1043,9 +1247,26 @@ public class SDNYMainProcessController extends AbstractController { |
|
|
|
|
result = snPushCheckRecordService.pushCheckResultToSAP(request.toJSONString()); |
|
|
|
|
|
|
|
|
|
record.setActiveCallResponse(JSONObject.toJSONString(result)); |
|
|
|
|
R data = new R(); |
|
|
|
|
JSONObject sapResult = JSONObject.parseObject(result); |
|
|
|
|
String es_output = sapResult.getString("ES_OUTPUT"); |
|
|
|
|
if(StringUtils.isNotEmpty(es_output)) { |
|
|
|
|
JSONObject outputResult = JSONObject.parseObject(es_output); |
|
|
|
|
|
|
|
|
|
R data = new R(1000, "default success"); |
|
|
|
|
if ("S".equals(outputResult.getString("ZTYPE"))) { |
|
|
|
|
data = new R(1000, "default success"); |
|
|
|
|
data.put("data", result); |
|
|
|
|
} else if ("E".equals(outputResult.getString("ZTYPE"))) { |
|
|
|
|
data = new R(1001, "request error"); |
|
|
|
|
data.put("data", result); |
|
|
|
|
} else { |
|
|
|
|
data = new R(1002, "unknown error"); |
|
|
|
|
data.put("data", result); |
|
|
|
|
} |
|
|
|
|
}else{ |
|
|
|
|
data = new R(1002, "unknown error"); |
|
|
|
|
data.put("data", result); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
DynamicContextHolder.push("business" + DbConstant.BUSINESS_WRITE); |
|
|
|
@ -1136,7 +1357,7 @@ public class SDNYMainProcessController extends AbstractController { |
|
|
|
|
log.error("发票同步接口记录保存失败,errormsg:{}", e); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return ResponseEntity.status(HttpStatus.GATEWAY_TIMEOUT).body(JSONObject.toJSONString(R.error(CommonConstants.CONNECT_TIMEOUT))); |
|
|
|
|
return ResponseEntity.ok(JSONObject.toJSONString(R.error(CommonConstants.CONNECT_TIMEOUT))); |
|
|
|
|
} catch (NullPointerException exception) { |
|
|
|
|
log.error("同步SAP失败,报错信息为:{}", exception); |
|
|
|
|
exception.printStackTrace(); |
|
|
|
@ -1149,7 +1370,7 @@ public class SDNYMainProcessController extends AbstractController { |
|
|
|
|
log.error("发票同步接口记录保存失败,errormsg:{}", e); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(JSONObject.toJSONString(R.error(CommonConstants.NULL_POINTER_TIMEOUT))); |
|
|
|
|
return ResponseEntity.ok(JSONObject.toJSONString(R.error(CommonConstants.NULL_POINTER_TIMEOUT))); |
|
|
|
|
} catch (Exception exception) { |
|
|
|
|
log.error("同步SAP失败,报错信息为:{}", exception); |
|
|
|
|
exception.printStackTrace(); |
|
|
|
|