From 79a760a3795bf6c8c9c835fe50c6a2272546afa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E8=8D=A3=E6=99=9F?= <9691125+pan-rongsheng@user.noreply.gitee.com> Date: Mon, 17 Nov 2025 18:14:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E7=A5=A8=E6=A3=80=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/TemplateInstanceDataRespVO.java | 4 + .../tmpltp/TemplateInstanceServiceImpl.java | 1 + .../plat/module/erp/api/InvoiceticketApi.java | 14 ++- .../ErpElectronicInvoiceReversalReqDTO.java | 42 +++++++ .../dto/ErpElectronicInvoiceSubmitReqDTO.java | 105 ++++++++++++++++++ .../module/erp/api/InvoiceticketImpl.java | 20 ++++ .../service/erp/ErpInvoiceticketService.java | 8 ++ .../erp/ErpInvoiceticketServiceImpl.java | 58 +++++++++- 8 files changed, 246 insertions(+), 6 deletions(-) create mode 100644 zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpElectronicInvoiceReversalReqDTO.java create mode 100644 zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpElectronicInvoiceSubmitReqDTO.java diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceDataRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceDataRespVO.java index b5e3385..c5a44b9 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceDataRespVO.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceDataRespVO.java @@ -40,4 +40,8 @@ public class TemplateInstanceDataRespVO { @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("创建时间") private LocalDateTime createTime; + + @Schema(description = "是否必填", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否必填") + private String isMust; } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java index 8251529..e63b896 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java @@ -420,6 +420,7 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { if (templateInstanceDataRespVO.getFldKy().equals(tmplTpFldDO.getFldKy())) { templateInstanceDataRespVO.setFldName(tmplTpFldDO.getFldName()); templateInstanceDataRespVO.setFldDoc(tmplTpFldDO.getFldDoc()); + templateInstanceDataRespVO.setIsMust(tmplTpFldDO.getIsMust()); } }); }); diff --git a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/InvoiceticketApi.java b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/InvoiceticketApi.java index c1c1cf4..23a7029 100644 --- a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/InvoiceticketApi.java +++ b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/InvoiceticketApi.java @@ -1,9 +1,7 @@ package com.zt.plat.module.erp.api; 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.ErpInvoiceticketSubmitRespDTO; -import com.zt.plat.module.erp.api.dto.ErpSubmitReqDTO; +import com.zt.plat.module.erp.api.dto.*; import com.zt.plat.module.erp.enums.ApiConstants; import io.swagger.v3.oas.annotations.Operation; 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 java.util.HashMap; +import java.util.Map; @FeignClient(name = ApiConstants.NAME) @Tag(name = "RPC 服务 - ERP") @@ -23,4 +22,13 @@ public interface InvoiceticketApi { @PostMapping(PREFIX + "/submit") @Operation(summary = "erp数据提交") CommonResult submitDataToErp(@Valid @RequestBody ErpInvoiceticketSubmitReqDTO reqDTO); + @PostMapping(PREFIX + "/submit098") + @Operation(summary = "erp数据提交,参数需要billdoc和action,id") + CommonResult> submitDataToErp098(@Valid @RequestBody Map reqDTO); + @PostMapping(PREFIX + "/submit096") + @Operation(summary = "erp数据提交,参数需要billdoc和action,id") + CommonResult> submitDataToErp096(@Valid @RequestBody ErpElectronicInvoiceSubmitReqDTO reqDTO); + @PostMapping(PREFIX + "/submit097") + @Operation(summary = "erp数据提交") + CommonResult> submitDataToErp097(@Valid @RequestBody ErpElectronicInvoiceReversalReqDTO reqDTO); } diff --git a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpElectronicInvoiceReversalReqDTO.java b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpElectronicInvoiceReversalReqDTO.java new file mode 100644 index 0000000..afbfb48 --- /dev/null +++ b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpElectronicInvoiceReversalReqDTO.java @@ -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 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; +// } +} diff --git a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpElectronicInvoiceSubmitReqDTO.java b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpElectronicInvoiceSubmitReqDTO.java new file mode 100644 index 0000000..e4c3dbf --- /dev/null +++ b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpElectronicInvoiceSubmitReqDTO.java @@ -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 item; + + @Schema(description = "发票条件明细列表", requiredMode = Schema.RequiredMode.REQUIRED) + private List cond; + + @Schema(description = "发票附件列表") + private List 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; + } +} diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/InvoiceticketImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/InvoiceticketImpl.java index 5c85f2f..d29ed78 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/InvoiceticketImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/InvoiceticketImpl.java @@ -1,6 +1,8 @@ package com.zt.plat.module.erp.api; 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.ErpInvoiceticketSubmitRespDTO; 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.web.bind.annotation.RestController; +import java.util.HashMap; +import java.util.Map; + import static com.zt.plat.framework.common.pojo.CommonResult.success; @RestController @@ -22,4 +27,19 @@ public class InvoiceticketImpl implements InvoiceticketApi { public CommonResult submitDataToErp(ErpInvoiceticketSubmitReqDTO reqDTO) { return success(erpInvoiceticketService.sbumitToErp020(reqDTO)); } + + @Override + public CommonResult> submitDataToErp098(Map reqDTO) { + return success(erpInvoiceticketService.sbumitToErp098(reqDTO)); + } + + @Override + public CommonResult> submitDataToErp096(ErpElectronicInvoiceSubmitReqDTO reqDTO) { + return success(erpInvoiceticketService.sbumitToErp096(reqDTO)); + } + + @Override + public CommonResult> submitDataToErp097(ErpElectronicInvoiceReversalReqDTO reqDTO) { + return success(erpInvoiceticketService.sbumitToErp097(reqDTO)); + } } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpInvoiceticketService.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpInvoiceticketService.java index 20a1bcb..3290ac2 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpInvoiceticketService.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpInvoiceticketService.java @@ -1,8 +1,16 @@ 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.ErpInvoiceticketSubmitRespDTO; +import java.util.HashMap; +import java.util.Map; + public interface ErpInvoiceticketService { ErpInvoiceticketSubmitRespDTO sbumitToErp020(ErpInvoiceticketSubmitReqDTO reqDTO); + HashMap sbumitToErp098(Map reqDTO); + HashMap sbumitToErp096(ErpElectronicInvoiceSubmitReqDTO reqDTO); + HashMap sbumitToErp097(ErpElectronicInvoiceReversalReqDTO reqDTO); } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpInvoiceticketServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpInvoiceticketServiceImpl.java index 4e9f906..2807ce9 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpInvoiceticketServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpInvoiceticketServiceImpl.java @@ -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.module.erp.api.ErpExternalApi; -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.ErpSubmitReqDTO; +import com.zt.plat.module.erp.api.dto.*; import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -59,6 +57,7 @@ public class ErpInvoiceticketServiceImpl implements ErpInvoiceticketService { return respDTO; } + /** * 转换采购发票过账差异明细列表 * 假设HashMap中子列表字段格式为:callBackSettlementDetails[0].factoryCode、callBackSettlementDetails[0].materialCode... @@ -123,4 +122,57 @@ public class ErpInvoiceticketServiceImpl implements ErpInvoiceticketService { return null; } } + + @Override + public HashMap sbumitToErp098(Map 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 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 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 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 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); + } + + }