开票检验

This commit is contained in:
潘荣晟
2025-11-17 18:14:50 +08:00
parent d382abba10
commit 79a760a379
8 changed files with 246 additions and 6 deletions

View File

@@ -40,4 +40,8 @@ public class TemplateInstanceDataRespVO {
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间") @ExcelProperty("创建时间")
private LocalDateTime createTime; private LocalDateTime createTime;
@Schema(description = "是否必填", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("是否必填")
private String isMust;
} }

View File

@@ -420,6 +420,7 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService {
if (templateInstanceDataRespVO.getFldKy().equals(tmplTpFldDO.getFldKy())) { if (templateInstanceDataRespVO.getFldKy().equals(tmplTpFldDO.getFldKy())) {
templateInstanceDataRespVO.setFldName(tmplTpFldDO.getFldName()); templateInstanceDataRespVO.setFldName(tmplTpFldDO.getFldName());
templateInstanceDataRespVO.setFldDoc(tmplTpFldDO.getFldDoc()); templateInstanceDataRespVO.setFldDoc(tmplTpFldDO.getFldDoc());
templateInstanceDataRespVO.setIsMust(tmplTpFldDO.getIsMust());
} }
}); });
}); });

View File

@@ -1,9 +1,7 @@
package com.zt.plat.module.erp.api; package com.zt.plat.module.erp.api;
import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.module.erp.api.dto.ErpInvoiceticketSubmitReqDTO; import com.zt.plat.module.erp.api.dto.*;
import com.zt.plat.module.erp.api.dto.ErpInvoiceticketSubmitRespDTO;
import com.zt.plat.module.erp.api.dto.ErpSubmitReqDTO;
import com.zt.plat.module.erp.enums.ApiConstants; import com.zt.plat.module.erp.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@@ -13,6 +11,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map;
@FeignClient(name = ApiConstants.NAME) @FeignClient(name = ApiConstants.NAME)
@Tag(name = "RPC 服务 - ERP") @Tag(name = "RPC 服务 - ERP")
@@ -23,4 +22,13 @@ public interface InvoiceticketApi {
@PostMapping(PREFIX + "/submit") @PostMapping(PREFIX + "/submit")
@Operation(summary = "erp数据提交") @Operation(summary = "erp数据提交")
CommonResult<ErpInvoiceticketSubmitRespDTO> submitDataToErp(@Valid @RequestBody ErpInvoiceticketSubmitReqDTO reqDTO); CommonResult<ErpInvoiceticketSubmitRespDTO> submitDataToErp(@Valid @RequestBody ErpInvoiceticketSubmitReqDTO reqDTO);
@PostMapping(PREFIX + "/submit098")
@Operation(summary = "erp数据提交,参数需要billdoc和action,id")
CommonResult<HashMap<String, String>> submitDataToErp098(@Valid @RequestBody Map<String,Object> reqDTO);
@PostMapping(PREFIX + "/submit096")
@Operation(summary = "erp数据提交,参数需要billdoc和action,id")
CommonResult<HashMap<String, String>> submitDataToErp096(@Valid @RequestBody ErpElectronicInvoiceSubmitReqDTO reqDTO);
@PostMapping(PREFIX + "/submit097")
@Operation(summary = "erp数据提交")
CommonResult<HashMap<String, String>> submitDataToErp097(@Valid @RequestBody ErpElectronicInvoiceReversalReqDTO reqDTO);
} }

View File

@@ -0,0 +1,42 @@
package com.zt.plat.module.erp.api.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Data
@Schema(description = "管理后台 - 电子发票冲销请求DTO")
public class ErpElectronicInvoiceReversalReqDTO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
private String id;
@Schema(description = "要冲销的发票号长度10位字符", requiredMode = Schema.RequiredMode.REQUIRED)
private String billdoc;
@Schema(description = "冲销过账日期格式为YYYYMMDD如20251106", requiredMode = Schema.RequiredMode.REQUIRED)
private String postingdate;
@Schema(description = "冲销原因描述长度200位字符", requiredMode = Schema.RequiredMode.REQUIRED)
private String reason;
@Schema(description = "不开具电子发票X-不开票长度1位字符")
private String no_invoicing;
@Schema(description = "红冲原因枚举值no_invoicing为空时必填枚举值开票有误、销货退回、服务终止、销售折让长度20位字符", requiredMode = Schema.RequiredMode.REQUIRED)
private String reversal_reason;
@Schema(description = "冲销相关附件列表", requiredMode = Schema.RequiredMode.REQUIRED)
private List<String> filedata;
// @Data
// @Schema(description = "冲销附件信息")
// public static class InvoiceReversalFileData {
//
// @Schema(description = "文件名必须带文件后缀名长度200位字符", requiredMode = Schema.RequiredMode.REQUIRED)
// private String filename;
//
// @Schema(description = "文件内容BASE64编码", requiredMode = Schema.RequiredMode.REQUIRED)
// private String filect;
// }
}

View File

@@ -0,0 +1,105 @@
package com.zt.plat.module.erp.api.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
@Schema(description = "管理后台 - 电子发票开具请求DTO")
public class ErpElectronicInvoiceSubmitReqDTO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
private String id;
@Schema(description = "开票日期格式为YYYYMMDD如20251106", requiredMode = Schema.RequiredMode.REQUIRED)
private String bill_date;
@Schema(description = "是否暂估开票长度1位字符")
private String provi_estimate;
@Schema(description = "发票抬头文本长度25位字符")
private String bill_text;
@Schema(description = "最晚收款日期格式为YYYYMMDD如20251106", requiredMode = Schema.RequiredMode.REQUIRED)
private String bline_date;
@Schema(description = "不开具电子发票X-不开票长度1位字符")
private String no_invoicing;
@Schema(description = "电子发票类型no_invoicing为空时必填05-普通发票06-增值税专用发票长度2位字符")
private String invoice_type;
@Schema(description = "电子发票备注会带入到电子发票上长度200位字符")
private String invoice_note;
@Schema(description = "红冲原因no_invoicing为空且生成的是红字发票时必填枚举值开票有误、销货退回、服务终止、销售折让长度20位字符")
private String reversal_reason;
@Schema(description = "发票行项目列表", requiredMode = Schema.RequiredMode.REQUIRED)
private List<InvoiceItem> item;
@Schema(description = "发票条件明细列表", requiredMode = Schema.RequiredMode.REQUIRED)
private List<String> cond;
@Schema(description = "发票附件列表")
private List<InvoiceFileData> filedata;
@Data
@Schema(description = "发票行项目明细")
public static class InvoiceItem {
@Schema(description = "发票行号从1开始顺序编号", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer data_index;
@Schema(description = "参照类别C-参照销售订单开票J-根据交货单开票", requiredMode = Schema.RequiredMode.REQUIRED)
private String ref_doc_ca;
@Schema(description = "参照单号长度10位字符", requiredMode = Schema.RequiredMode.REQUIRED)
private String ref_doc;
@Schema(description = "参照行号长度6位数字", requiredMode = Schema.RequiredMode.REQUIRED)
private String ref_item;
@Schema(description = "开票数量保留3位小数", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal req_qty;
@Schema(description = "规格型号会带入到电子发票上长度100位字符")
private String model_note;
}
@Data
@Schema(description = "发票条件明细")
public static class InvoiceCond {
@Schema(description = "发票行号与item-data_index关联", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer data_index;
@Schema(description = "条件类型长度4位字符", requiredMode = Schema.RequiredMode.REQUIRED)
private String cond_type;
@Schema(description = "条件金额保留4位小数", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal cond_value;
@Schema(description = "货币码长度5位字符", requiredMode = Schema.RequiredMode.REQUIRED)
private String cond_curr;
@Schema(description = "条件单位使用基本计量单位长度3位字符", requiredMode = Schema.RequiredMode.REQUIRED)
private String cond_d_unt;
@Schema(description = "条件定价单位固定值1长度5位数字", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal cond_p_unt;
}
@Data
@Schema(description = "发票附件信息")
public static class InvoiceFileData {
@Schema(description = "文件名必须带文件后缀名长度200位字符", requiredMode = Schema.RequiredMode.REQUIRED)
private String filename;
@Schema(description = "文件内容BASE64编码", requiredMode = Schema.RequiredMode.REQUIRED)
private String filect;
}
}

View File

@@ -1,6 +1,8 @@
package com.zt.plat.module.erp.api; package com.zt.plat.module.erp.api;
import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.module.erp.api.dto.ErpElectronicInvoiceReversalReqDTO;
import com.zt.plat.module.erp.api.dto.ErpElectronicInvoiceSubmitReqDTO;
import com.zt.plat.module.erp.api.dto.ErpInvoiceticketSubmitReqDTO; import com.zt.plat.module.erp.api.dto.ErpInvoiceticketSubmitReqDTO;
import com.zt.plat.module.erp.api.dto.ErpInvoiceticketSubmitRespDTO; import com.zt.plat.module.erp.api.dto.ErpInvoiceticketSubmitRespDTO;
import com.zt.plat.module.erp.service.erp.ErpInvoiceticketService; import com.zt.plat.module.erp.service.erp.ErpInvoiceticketService;
@@ -9,6 +11,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
import static com.zt.plat.framework.common.pojo.CommonResult.success; import static com.zt.plat.framework.common.pojo.CommonResult.success;
@RestController @RestController
@@ -22,4 +27,19 @@ public class InvoiceticketImpl implements InvoiceticketApi {
public CommonResult<ErpInvoiceticketSubmitRespDTO> submitDataToErp(ErpInvoiceticketSubmitReqDTO reqDTO) { public CommonResult<ErpInvoiceticketSubmitRespDTO> submitDataToErp(ErpInvoiceticketSubmitReqDTO reqDTO) {
return success(erpInvoiceticketService.sbumitToErp020(reqDTO)); return success(erpInvoiceticketService.sbumitToErp020(reqDTO));
} }
@Override
public CommonResult<HashMap<String, String>> submitDataToErp098(Map<String, Object> reqDTO) {
return success(erpInvoiceticketService.sbumitToErp098(reqDTO));
}
@Override
public CommonResult<HashMap<String, String>> submitDataToErp096(ErpElectronicInvoiceSubmitReqDTO reqDTO) {
return success(erpInvoiceticketService.sbumitToErp096(reqDTO));
}
@Override
public CommonResult<HashMap<String, String>> submitDataToErp097(ErpElectronicInvoiceReversalReqDTO reqDTO) {
return success(erpInvoiceticketService.sbumitToErp097(reqDTO));
}
} }

View File

@@ -1,8 +1,16 @@
package com.zt.plat.module.erp.service.erp; package com.zt.plat.module.erp.service.erp;
import com.zt.plat.module.erp.api.dto.ErpElectronicInvoiceReversalReqDTO;
import com.zt.plat.module.erp.api.dto.ErpElectronicInvoiceSubmitReqDTO;
import com.zt.plat.module.erp.api.dto.ErpInvoiceticketSubmitReqDTO; import com.zt.plat.module.erp.api.dto.ErpInvoiceticketSubmitReqDTO;
import com.zt.plat.module.erp.api.dto.ErpInvoiceticketSubmitRespDTO; import com.zt.plat.module.erp.api.dto.ErpInvoiceticketSubmitRespDTO;
import java.util.HashMap;
import java.util.Map;
public interface ErpInvoiceticketService { public interface ErpInvoiceticketService {
ErpInvoiceticketSubmitRespDTO sbumitToErp020(ErpInvoiceticketSubmitReqDTO reqDTO); ErpInvoiceticketSubmitRespDTO sbumitToErp020(ErpInvoiceticketSubmitReqDTO reqDTO);
HashMap<String, String> sbumitToErp098(Map<String, Object> reqDTO);
HashMap<String, String> sbumitToErp096(ErpElectronicInvoiceSubmitReqDTO reqDTO);
HashMap<String, String> sbumitToErp097(ErpElectronicInvoiceReversalReqDTO reqDTO);
} }

View File

@@ -2,9 +2,7 @@ package com.zt.plat.module.erp.service.erp;
import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils;
import com.zt.plat.module.erp.api.ErpExternalApi; import com.zt.plat.module.erp.api.ErpExternalApi;
import com.zt.plat.module.erp.api.dto.ErpInvoiceticketSubmitReqDTO; import com.zt.plat.module.erp.api.dto.*;
import com.zt.plat.module.erp.api.dto.ErpInvoiceticketSubmitRespDTO;
import com.zt.plat.module.erp.api.dto.ErpSubmitReqDTO;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -59,6 +57,7 @@ public class ErpInvoiceticketServiceImpl implements ErpInvoiceticketService {
return respDTO; return respDTO;
} }
/** /**
* 转换采购发票过账差异明细列表 * 转换采购发票过账差异明细列表
* 假设HashMap中子列表字段格式为callBackSettlementDetails[0].factoryCode、callBackSettlementDetails[0].materialCode... * 假设HashMap中子列表字段格式为callBackSettlementDetails[0].factoryCode、callBackSettlementDetails[0].materialCode...
@@ -123,4 +122,57 @@ public class ErpInvoiceticketServiceImpl implements ErpInvoiceticketService {
return null; return null;
} }
} }
@Override
public HashMap<String, String> sbumitToErp098(Map<String, Object> param) {
ErpSubmitReqDTO reqDTO = new ErpSubmitReqDTO();
reqDTO.setFuncnr("098");
reqDTO.setBskey(param.get("id").toString());
reqDTO.setUsrid(String.valueOf(SecurityFrameworkUtils.getLoginUserId()));
reqDTO.setUsrnm((SecurityFrameworkUtils.getLoginUserNickname()));
param.remove("id");
reqDTO.setReq(param);
return erpExternalApi.submitDataToErp(reqDTO);
}
@Override
public HashMap<String, String> sbumitToErp096(ErpElectronicInvoiceSubmitReqDTO erpElectronicInvoiceSubmitReqDTO) {
ErpSubmitReqDTO reqDTO = new ErpSubmitReqDTO();
reqDTO.setFuncnr("096");
reqDTO.setBskey(erpElectronicInvoiceSubmitReqDTO.getId());
reqDTO.setUsrid(String.valueOf(SecurityFrameworkUtils.getLoginUserId()));
reqDTO.setUsrnm((SecurityFrameworkUtils.getLoginUserNickname()));
Map<String, Object> req = new HashMap<>();
req.put("bill_date", erpElectronicInvoiceSubmitReqDTO.getBill_date());
req.put("provi_estimate", erpElectronicInvoiceSubmitReqDTO.getProvi_estimate());
req.put("bline_date", erpElectronicInvoiceSubmitReqDTO.getBline_date());
req.put("bill_text", erpElectronicInvoiceSubmitReqDTO.getBill_text());
req.put("no_invoicing", erpElectronicInvoiceSubmitReqDTO.getNo_invoicing());
req.put("invoice_type", erpElectronicInvoiceSubmitReqDTO.getInvoice_type());
req.put("invoice_note", erpElectronicInvoiceSubmitReqDTO.getInvoice_note());
req.put("reversal_reason", erpElectronicInvoiceSubmitReqDTO.getReversal_reason());
req.put("item", erpElectronicInvoiceSubmitReqDTO.getItem());
req.put("cond", erpElectronicInvoiceSubmitReqDTO.getCond());
req.put("filedata", erpElectronicInvoiceSubmitReqDTO.getBline_date());
reqDTO.setReq(req);
return erpExternalApi.submitDataToErp(reqDTO);
}
@Override
public HashMap<String, String> sbumitToErp097(ErpElectronicInvoiceReversalReqDTO reqDTO) {
ErpSubmitReqDTO submitReqDTO = new ErpSubmitReqDTO();
submitReqDTO.setFuncnr("097");
submitReqDTO.setBskey(reqDTO.getId());
submitReqDTO.setUsrid(String.valueOf(SecurityFrameworkUtils.getLoginUserId()));
submitReqDTO.setUsrnm((SecurityFrameworkUtils.getLoginUserNickname()));
Map<String, Object> req = new HashMap<>();
req.put("billdoc", reqDTO.getBilldoc());
req.put("postingdate", reqDTO.getPostingdate());
req.put("reason", reqDTO.getReason());
req.put("no_invoicing", reqDTO.getNo_invoicing());
req.put("filedata", reqDTO.getFiledata());
return erpExternalApi.submitDataToErp(submitReqDTO);
}
} }