You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sdny-jxpt/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java

456 lines
18 KiB

package com.dxhy.erp.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dxhy.common.aspect.SysLog;
import com.dxhy.common.constant.CommonConstants;
import com.dxhy.common.constant.DbConstant;
import com.dxhy.common.controller.AbstractController;
import com.dxhy.common.datasource.config.DynamicContextHolder;
import com.dxhy.common.enums.FplxEnum;
import com.dxhy.common.enums.SNFplxEnum;
import com.dxhy.common.jwt.IJWTInfo;
import com.dxhy.common.util.InvoiceUtil;
import com.dxhy.common.util.UserInfoUtil;
import com.dxhy.common.utils.BaseContextHandler;
import com.dxhy.common.utils.R;
import com.dxhy.erp.entity.TdxCheckRecordInvoice;
import com.dxhy.erp.entity.TdxRecordInvoice;
import com.dxhy.erp.entity.sdny.*;
import com.dxhy.erp.service.InvoiceQueryService;
import com.dxhy.erp.service.SNPushCheckRecordService;
import com.dxhy.erp.service.SignCheckRecordService;
import com.dxhy.erp.service.SignSaveInvoiceInfoService;
import com.dxhy.erp.utils.ServiceResult;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONString;
import org.omg.PortableInterceptor.INACTIVE;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.security.auth.message.config.AuthConfig;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* 山东能源查验主流程控制器
*
* @author ariesy
* @date 2023-03-15
*/
@SuppressWarnings({"AlibabaUndefineMagicConstant", "AlibabaMethodTooLong"})
@RestController
@Slf4j
public class SDNYMainProcessController extends AbstractController {
@Resource
private InvoiceQueryService invoiceQueryService;
@Resource
private SNPushCheckRecordService snPushCheckRecordService;
@Resource
private SignSaveInvoiceInfoService signSaveInvoiceInfoService;
@Resource
private SignCheckRecordService signCheckRecordService;
/**
* 查验发票
*/
@PostMapping("/sn/singleInvoiceCheck")
@ResponseBody
@SysLog("发票查验")
public ResponseEntity<?> singleInvoiceCheck(@RequestBody Map<String, String> pramsMap) {
String userid = "101833";
String dbName = "business";
String company = "BIGB";
// 入参统一在入口处理
// String userid = getLoginName();
// String dbName = getUserInfo().getDbName();
// String company = getUserInfo().getCompany();
InvoiceUtil iu = new InvoiceUtil(pramsMap.get("invoiceCode"));
String fplxdm = iu.getFplxdm();
//权限校验
if (pramsMap.get("invoiceCode").isEmpty()) {
return ResponseEntity.ok(R.error("发票代码不能为空!"));
}
if (pramsMap.get("invoiceNumber").isEmpty()) {
return ResponseEntity.ok(R.error("发票号码不能为空!"));
}
pramsMap.put("invoiceNo", pramsMap.get("invoiceNumber"));
if (!pramsMap.get("billingDate").isEmpty()) {
String billingDate = pramsMap.get("billingDate").replaceAll("-", "");
iu.setKprq(pramsMap.get("billingDate"));
pramsMap.put("invoiceDate", billingDate);
pramsMap.put("billingDate", billingDate);
if (!iu.kprqValid(null)) {
pramsMap.put("invoiceDate", "开票日期格式错误!");
}
} else {
return ResponseEntity.ok(R.error("开票日期不能为空!"));
}
if (pramsMap.get("invoiceType").isEmpty()) {
return ResponseEntity.ok(R.error("开票日期不能为空!"));
}
if (SNFplxEnum.ZP.getSnFplxDm().equals(pramsMap.get("invoiceType"))
|| SNFplxEnum.JDC.getSnFplxDm().equals(pramsMap.get("invoiceType"))
|| SNFplxEnum.DZZP.getSnFplxDm().equals(pramsMap.get("invoiceType"))
|| SNFplxEnum.ESC.getSnFplxDm().equals(pramsMap.get("invoiceType"))
|| SNFplxEnum.QDZP.getSnFplxDm().equals(pramsMap.get("invoiceType"))
|| SNFplxEnum.QDPP.getSnFplxDm().equals(pramsMap.get("invoiceType"))) {
if (pramsMap.get("totalAmount").isEmpty()) {
return ResponseEntity.ok(R.error("金额不能为空!"));
}
} else {
if (pramsMap.get("checkCode").isEmpty()) {
return ResponseEntity.ok(R.error("校验码不能为空!"));
}
}
String uuid = (StringUtils.isBlank(pramsMap.get("invoiceCode")) ? "" : pramsMap.get("invoiceCode")) + pramsMap.get("invoiceNo");
String notes = invoiceQueryService.checkingInvoiceInfo("business", uuid, getUserInfo());
if (notes != null) {
return ResponseEntity.ok(R.error(notes));
}
//查询底账库是否有对应发票,有则直接返回
TdxCheckRecordInvoice checkInvoiceByUuid = signCheckRecordService.getCheckInvoiceByUuid(uuid);
if (checkInvoiceByUuid != null) {
R data = new R(1000, "default success");
String checkInvoice = JSONObject.toJSONString(checkInvoiceByUuid);
data.put("data", checkInvoice);
return ResponseEntity.ok(data);
}
JSONObject checkInvoiceResult = null;
try {
checkInvoiceResult = snPushCheckRecordService.singleCheckInvoice(pramsMap);
} catch (Exception e) {
e.printStackTrace();
}
if (!checkInvoiceResult.containsKey("code")) {
R data = new R(1000, "default success");
data.put("data", checkInvoiceResult);
if (!checkInvoiceResult.containsKey("cyjg")) {
checkInvoiceResult.put("invoiceNo",checkInvoiceResult.getString("invoiceNumber"));
checkInvoiceResult.put("company",company);
signSaveInvoiceInfoService.saveQueryInvoiceResult(checkInvoiceResult, userid, "1", dbName);
}
return ResponseEntity.ok(data);
}
//价税分离
//snPushCheckRecordService.valoremTaxCount();
return ResponseEntity.ok(R.error().put("data", checkInvoiceResult));
}
/**
* 查验发票
*/
@PostMapping("/sn/syncInvoiceInfo")
@ResponseBody
@SysLog("同步发票信息")
public ResponseEntity<?> syncInvoiceInfo(@RequestBody SNRequestObject snRequestObject) {
log.info("影像系统同步数据:{}",snRequestObject);
String userid = "101833";
String dbName = "business";
String company = "BIGB";
// // 入参统一在入口处理
// String userid = getLoginName();
// String dbName = getUserInfo().getDbName();
// String company = getUserInfo().getCompany();
// List<String> gfshAll = UserInfoUtil.getGfshAll(getUserInfo().getOrg());
// String gfsh = "";
// if (gfshAll.size() > 0) {
// gfsh = gfshAll.get(0);
// }
String result = "";
//入票池
try {
Integer integer = snPushCheckRecordService.pushInvoiceToRecordInvoice2(snRequestObject);
//推送到SAP
List<SNInvoice> invoiceInfoList = snRequestObject.getInvoiceInfoList();
String imageId = snRequestObject.getImageId();
String compCode = snRequestObject.getCompCode();
if (invoiceInfoList != null && invoiceInfoList.size() > 0) {
for (SNInvoice invoice : invoiceInfoList) {
String fplxdm = "";
String snFplx = "";
String invoiceCode = invoice.getInvoiceCode();
if(StringUtils.isNoneBlank(invoiceCode)) {
InvoiceUtil iu = new InvoiceUtil(invoiceCode);
fplxdm = iu.getFplxdm();
}else{
snFplx = invoice.getInvoiceType();
if(SNFplxEnum.HCP.getSnFplxDm().equals(snFplx)){
fplxdm = "92";
invoice.setInvoiceType(fplxdm);
}
if(SNFplxEnum.KYQCP.getSnFplxDm().equals(snFplx)){
fplxdm = "94";
invoice.setInvoiceType(fplxdm);
}
if(SNFplxEnum.JPXCD.getSnFplxDm().equals(snFplx)){
fplxdm = "90";
invoice.setInvoiceType(fplxdm);
}
}
if(SNFplxEnum.HCP.getFplxDm().equals(fplxdm) || SNFplxEnum.KYQCP.getFplxDm().equals(fplxdm) || SNFplxEnum.JPXCD.getFplxDm().equals(fplxdm)){
InvoiceInfo invoiceInfo = convertToInvoiceInfo(invoice);
ServiceResult<InvoiceInfo> invoiceResult = snPushCheckRecordService.valoremTaxCount(invoiceInfo, "Y");
InvoiceInfo data = invoiceResult.getData();
invoice.setIsDeductible(data.getIsDeductible());
invoice.setTaxRate(data.getTaxRate());
invoice.setTotalAmount(data.getInvoiceAmount().toString());
invoice.setTotalTax(data.getTaxAmount().toString());
}
SNSAPObject object = convertToSapOnject(invoice, imageId,compCode);
log.info("推送山能数据:{}",object);
JSONObject request = new JSONObject();
request.put("IS_INPUT",object);
try {
//将信息推送到影像系统
result = snPushCheckRecordService.pushCheckResultToSAP(request.toJSONString());
} catch (Exception e) {
e.printStackTrace();
log.error("", e);
return ResponseEntity.ok(R.error(CommonConstants.MSG_ERR_PUSH_SDNY));
}
}
}
R data = new R(1000, "default success");
data.put("data", result);
return ResponseEntity.ok(data);
} catch (Exception e) {
e.printStackTrace();
}
return ResponseEntity.ok(R.error(CommonConstants.MSG_ERR_DEFAULT));
}
private InvoiceInfo convertToInvoiceInfo(SNInvoice snInvoice) {
InvoiceInfo invoice = new InvoiceInfo();
invoice.setInvoiceTypeCode(snInvoice.getInvoiceType());
Date date = new Date();
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
try {
date = ft.parse(snInvoice.getBillingDate());
} catch (ParseException e) {
e.printStackTrace();
}
invoice.setInvoiceDate(date);
invoice.setIdentityNumber(snInvoice.getIdcardNo());
invoice.setPassenger(snInvoice.getRiderName());
invoice.setDepartCity(snInvoice.getStationGetOn());
invoice.setArriveCity(snInvoice.getStationGetOff());
invoice.setFare(snInvoice.getNoTaxAmount());
invoice.setFuelSurcharge(snInvoice.getFuelSurcharge());
if(snInvoice.getNoTaxAmount() != null){
BigDecimal amount = new BigDecimal(snInvoice.getNoTaxAmount());
invoice.setInvoiceAmount(amount);
}
return invoice;
}
private SNSAPObject convertToSapOnject(SNInvoice snInvoice, String imageId,String compCode) {
Date date = new Date();
SNSAPObject object = new SNSAPObject();
object.setSYSID("FPXT");
object.setIFYWID("FI845");
object.setBSKEY(UUID.randomUUID().toString().replace("-", ""));
object.setSAPKEY("");
object.setZORG(compCode);
object.setZFILED1("");
object.setZFILED2("");
object.setZFILED3("");
object.setZFILED4("");
object.setZFILED5("200");
List<String> sapInvoiceInfos = new ArrayList<>();
SAPInvoiceInfo info = new SAPInvoiceInfo();
info.setZBAZT("0");
info.setZXFSH(snInvoice.getSalesTaxNo());
info.setZJDDM("");
info.setZJDHM("");
info.setZFPSZD(snInvoice.getPlace());
info.setZXFBM("");
info.setZSPMC(snInvoice.getDraweeName());
info.setZSPSBH(snInvoice.getDraweeTaxNo());
info.setZCJR("");
info.setZCYJG(snInvoice.getCheckResultMessage());
info.setZJKZM(snInvoice.getImportCertificateNo());
info.setZDJZH(snInvoice.getCertificateNo());
info.setZGFMC(snInvoice.getPurchaserName());
if(snInvoice.getTotalAmount() != null && snInvoice.getTotalAmount() != null) {
BigDecimal total = new BigDecimal(snInvoice.getTotalAmount());
BigDecimal tax = new BigDecimal(snInvoice.getTotalTax());
BigDecimal subtract = total.subtract(tax);
info.setZJK(subtract.toString());
}
info.setZSCSJ(date);
info.setZCYZT(snInvoice.getCheckStaus());
info.setZYSHW(snInvoice.getCargoInformation());
info.setZFPLX(snInvoice.getInvoiceType());
info.setZFU("");
info.setZQYD(snInvoice.getTransportRoute());
info.setZCCRXM(snInvoice.getRiderName());
info.setZKPRQ(snInvoice.getBillingDate());
info.setZSLT("");
info.setZYWZT("");
info.setZSE(snInvoice.getTotalTax());
info.setZTXBZ(snInvoice.getTollSign());
info.setZYHM("");
info.setZSKPH(snInvoice.getMachineCode());
info.setZGFZH(snInvoice.getPurchaserBank());
info.setZBZ(snInvoice.getRemarks());
List<SNInvoiceDetail> invoiceLineList = snInvoice.getInvoiceLineList();
List<SAPInvoiceDetail> sapInvoiceDetailList = new ArrayList<>();
if (invoiceLineList != null && invoiceLineList.size() > 0) {
SNInvoiceDetail snInvoiceDetail = invoiceLineList.get(0);
String taxRate = snInvoiceDetail.getTaxRate();
info.setZSM(taxRate);
info.setZTAX(taxRate);
SAPInvoiceDetail sapInvoiceDetail = new SAPInvoiceDetail();
sapInvoiceDetail.setZZWDJ("");
sapInvoiceDetail.setIMG_ID(imageId);
sapInvoiceDetail.setZCPH(snInvoiceDetail.getLicensePlateNum());
sapInvoiceDetail.setZCJSJ("");
sapInvoiceDetail.setZCJRQ("");
sapInvoiceDetail.setFPYXBH(snInvoice.getFileId());
sapInvoiceDetail.setZCFZ(snInvoice.getStationGetOn());
sapInvoiceDetail.setZTXZ(snInvoiceDetail.getCurrentDateEnd());
sapInvoiceDetail.setZTXQ(snInvoiceDetail.getCurrentDateStart());
sapInvoiceDetail.setZJK(snInvoiceDetail.getAmount());
sapInvoiceDetail.setZHH(snInvoiceDetail.getRowNo());
sapInvoiceDetail.setZTAX(snInvoiceDetail.getTaxRate());
sapInvoiceDetail.setZHBH("");
sapInvoiceDetail.setZDJ(snInvoiceDetail.getUnitPrice());
sapInvoiceDetail.setZHID("");
sapInvoiceDetail.setZDDZ(snInvoice.getStationGetOff());
sapInvoiceDetail.setZHWMC(snInvoiceDetail.getCommodityName());
sapInvoiceDetail.setZCYR(info.getZCYRMC());
sapInvoiceDetail.setZDW(snInvoiceDetail.getUnit());
sapInvoiceDetail.setZGSJBM(snInvoiceDetail.getCommodityCode());
sapInvoiceDetail.setZSE(snInvoiceDetail.getTax());
sapInvoiceDetail.setZSL(snInvoiceDetail.getQuantity());
sapInvoiceDetail.setZSM(info.getZSM());
sapInvoiceDetail.setZGGXH(snInvoiceDetail.getSpecificationModel());
sapInvoiceDetail.setZTID(snInvoice.getInvoiceCode() + snInvoice.getInvoiceNumber());
sapInvoiceDetailList.add(sapInvoiceDetail);
}
info.setIT_ITEM(sapInvoiceDetailList);
info.setZFPDM(snInvoice.getInvoiceCode());
info.setZCD(snInvoice.getOriginPlace());
info.setZSCCZ(snInvoice.getStationGetOn());
info.setZCC(snInvoice.getTrainNumber());
info.setZFPHM(snInvoice.getInvoiceNumber());
info.setZBXF(snInvoice.getInsurance());
info.setZRYFJ(snInvoice.getFuelSurcharge());
info.setZCLSB(snInvoice.getVehicleNo());
info.setZKPSJ(snInvoice.getBillingDate());
info.setZXCSJ(date);
info.setZXFMC(snInvoice.getSalesName());
info.setZCYRSBH(snInvoice.getCarrierName());
info.setIMG_ID(imageId);
info.setZCPH(snInvoice.getLicensePlate());
info.setZLSLBZ(snInvoice.getZeroTaxRateSign());
info.setZCJSJ(date);
info.setZFPZT(snInvoice.getState());
info.setZESCSC("");
info.setZFDJM(snInvoice.getEngineNo());
info.setZGXR("");
//认证相关
info.setZRZJG("0");
info.setZRZSSQ("202302");
info.setZRZMS("");
info.setZRZRQ("");
info.setZLC(snInvoice.getMileage());
info.setZHGZH(snInvoice.getCertificateNo());
info.setZXFDH(snInvoice.getSalesAddressPhone());
info.setZESCSH("");
info.setZGSDM(compCode);
info.setZGFSH(snInvoice.getPurchaserTaxNo());
info.setZXCRS(snInvoice.getPassengersLimited());
info.setZWSPZ(snInvoice.getPaymentVoucherNo());
info.setZCCDW(snInvoice.getTonnage());
info.setZSWJG(snInvoice.getTaxAuthorityNo());
info.setZYWDJ("");
info.setZXCCZ(snInvoice.getStationGetOff());
info.setZCCRZH(snInvoice.getIdcardNo());
info.setZCPXH(snInvoice.getBrandModel());
info.setZMHFZJJ(snInvoice.getCaacDevelopmentFund());
info.setZGFDH(snInvoice.getPurchaserAddressPhone());
info.setZXFZH(snInvoice.getSalesBank());
info.setZJYM(snInvoice.getCheckCode());
info.setZSJDH(snInvoice.getInspectionListNo());
info.setZYGC("");
info.setZJSHJ(snInvoice.getAmountTax());
info.setZCYRMC(snInvoice.getCarrierName());
info.setZJGDM(snInvoice.getAdministrativeDivisionNo());
info.setZGXSJ(date);
info.setZQM("");
info.setZPJLY(snInvoice.getSource());
info.setZZWLX(snInvoice.getSeat());
info.setZTID("500005000002601689027");
sapInvoiceInfos.add(JSONObject.toJSONString(info));
object.setZDATA(sapInvoiceInfos);
return object;
}
}