From 292d4a534d8a1bf293b35c70ff0e1bb47273d922 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: Thu, 6 Nov 2025 16:06:16 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E6=B6=88=E8=B4=B9=E8=AE=A2=E5=8D=95=E6=98=8E=E7=BB=86id?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OnlyOfficeCallbackController.java | 11 +- .../OnlyOfficeCallbackServiceImpl.java | 2 + .../vo/TemplateInstanceDataRespVO.java | 5 + .../vo/TemplateInstanceItemRespVO.java | 1 + .../tmpltp/TemplateInstanceDataDO.java | 4 + .../TemplateInstanceItemServiceImpl.java | 2 +- .../tmpltp/TemplateInstanceServiceImpl.java | 23 +++- .../service/tmpltp/TmplTpFldServiceImpl.java | 3 + .../salesorder/vo/SalesOrderSaveReqVO.java | 16 +-- .../dataobject/salesorder/SalesOrderDO.java | 12 +- .../plat/module/erp/api/InvoiceticketApi.java | 26 ++++ .../api/dto/ErpInvoiceticketSubmitReqDTO.java | 29 ++++ .../dto/ErpInvoiceticketSubmitRespDTO.java | 61 +++++++++ .../module/erp/api/InvoiceticketImpl.java | 25 ++++ .../service/erp/ErpInvoiceticketService.java | 8 ++ .../erp/ErpInvoiceticketServiceImpl.java | 126 ++++++++++++++++++ 16 files changed, 328 insertions(+), 26 deletions(-) create mode 100644 zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/InvoiceticketApi.java create mode 100644 zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpInvoiceticketSubmitReqDTO.java create mode 100644 zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpInvoiceticketSubmitRespDTO.java create mode 100644 zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/InvoiceticketImpl.java create mode 100644 zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpInvoiceticketService.java create mode 100644 zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpInvoiceticketServiceImpl.java diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/onlyoffice/controller/OnlyOfficeCallbackController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/onlyoffice/controller/OnlyOfficeCallbackController.java index 86408279..282464b3 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/onlyoffice/controller/OnlyOfficeCallbackController.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/onlyoffice/controller/OnlyOfficeCallbackController.java @@ -7,6 +7,7 @@ import com.zt.plat.module.base.controller.admin.templtp.onlyoffice.service.OnlyO import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.security.PermitAll; import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; +@Slf4j @RestController @RequestMapping("/base/onlyoffice") @Tag(name = "管理后台 - onlyOffice回调") @@ -31,19 +33,21 @@ public class OnlyOfficeCallbackController { @PostMapping("/callback/{id}") @PermitAll @TenantIgnore - public ResponseEntity> handleCallback(@RequestBody OnlyOfficeCallback callback, @PathVariable String id,@RequestParam("fileName") String fileName) { + public ResponseEntity> handleCallback(@RequestBody OnlyOfficeCallback callback, @PathVariable String id,@RequestParam("fileName") String fileName) { // 处理回调逻辑 callbackService.processCallback(callback,id,fileName); + log.info("回调参数:【{}】",callback.toString()); // 返回必须的响应,否则OnlyOffice会显示错误 - Map response = new HashMap<>(); + Map response = new HashMap<>(); response.put("error", 0); + // response.put("version", 100); return new ResponseEntity<>(response, HttpStatus.OK); } /** * 处理OnlyOffice文档编辑服务发送的回调 */ - @PostMapping("/contract /callback/{id}") + @PostMapping("/contract/callback/{id}") @PermitAll @TenantIgnore public ResponseEntity> handleContractCallback(@RequestBody OnlyOfficeCallback callback, @PathVariable String id,@RequestParam("fileName") String fileName) { @@ -52,6 +56,7 @@ public class OnlyOfficeCallbackController { // 返回必须的响应,否则OnlyOffice会显示错误 Map response = new HashMap<>(); response.put("error", 0); + // response.put("version", 0); return new ResponseEntity<>(response, HttpStatus.OK); } } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/onlyoffice/service/OnlyOfficeCallbackServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/onlyoffice/service/OnlyOfficeCallbackServiceImpl.java index 14d75f9e..70a16ed7 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/onlyoffice/service/OnlyOfficeCallbackServiceImpl.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/onlyoffice/service/OnlyOfficeCallbackServiceImpl.java @@ -168,6 +168,7 @@ public class OnlyOfficeCallbackServiceImpl implements OnlyOfficeCallbackService fileInfo.put("id",String.valueOf(fileRespDTO.getId())); fileInfo.put("name", fileRespDTO.getName()); fileInfo.put("directory", fileRespDTO.getDirectory()); + fileInfo.put("key", callback.getKey()); templateInstanceService.updateTemplateInstanceFileUrlByInstanceId(id, JSONObject.toJSONString(fileInfo)); } else { // 创建文件失败,处理错误 @@ -352,6 +353,7 @@ public class OnlyOfficeCallbackServiceImpl implements OnlyOfficeCallbackService fileInfo.put("id",String.valueOf(fileRespDTO.getId())); fileInfo.put("name", fileRespDTO.getName()); fileInfo.put("directory", fileRespDTO.getDirectory()); + fileInfo.put("key", callback.getKey()); templateInstanceService.updateTemplateInstanceFileUrlByInstanceId(id, JSONObject.toJSONString(fileInfo)); } else { // 创建文件失败,处理错误 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 a744a725..9dd2a17c 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 @@ -16,6 +16,11 @@ public class TemplateInstanceDataRespVO { @ExcelProperty("主键") private Long id; + + @Schema(description = "字段名字", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("字段名字") + private String fldName; + @Schema(description = "关联实例主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "25824") @ExcelProperty("关联实例主键") private String inscId; diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceItemRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceItemRespVO.java index 430a5799..0fec83f8 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceItemRespVO.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceItemRespVO.java @@ -1,5 +1,6 @@ package com.zt.plat.module.base.controller.admin.templtp.vo; +import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/tmpltp/TemplateInstanceDataDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/tmpltp/TemplateInstanceDataDO.java index b4547d22..ca0b381b 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/tmpltp/TemplateInstanceDataDO.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/tmpltp/TemplateInstanceDataDO.java @@ -44,4 +44,8 @@ public class TemplateInstanceDataDO extends BusinessBaseDO { @TableField("FLD_VAL") private String fldVal; + + @TableField(exist = false) + private String fldName; + } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceItemServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceItemServiceImpl.java index a831abfe..cf21051d 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceItemServiceImpl.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceItemServiceImpl.java @@ -46,7 +46,7 @@ public class TemplateInstanceItemServiceImpl implements TemplateInstanceItemServ @Override public void updateTemplateInstanceItem(TemplateInstanceItemSaveReqVO updateReqVO) { // 校验存在 - validateTemplateInstanceItemExists(updateReqVO.getInscId()); + validateTemplateInstanceItemExists(updateReqVO.getId()); // 更新 TemplateInstanceItemDO updateObj = BeanUtils.toBean(updateReqVO, TemplateInstanceItemDO.class); templateInstanceItemMapper.updateById(updateObj); 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 6db2e292..c4c9ee59 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 @@ -217,18 +217,18 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { // 校验当前状态是否能够进行发布 publishReqVOS.forEach(reqVO -> { TemplateInstanceDO templateInstanceDO = templateInstanceMapper.selectById(reqVO.getId()); - if (templateInstanceDO.getCntt()==null||templateInstanceDO.getCntt().isEmpty()){ + if (templateInstanceDO.getCntt() == null || templateInstanceDO.getCntt().isEmpty()) { throw exception(TEMPLATE_INSTANCE_FILE_NOT_EXISTS); } String currentStatus = reqVO.getCurrentStatus(); if (currentStatus.isEmpty()) { - currentStatus =templateInstanceDO.getSts(); + currentStatus = templateInstanceDO.getSts(); } PublishStatusEnum status = PublishStatusEnum.fromCode(currentStatus); boolean transitionAllowed = false; if (status != null) { transitionAllowed = status.isTransitionAllowed(TmplStsEnum.DRAFT.getCode()); - if (!transitionAllowed){ + if (!transitionAllowed) { transitionAllowed = status.isTransitionAllowed(TmplStsEnum.START.getCode()); } } @@ -286,7 +286,7 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { newTpInstanceDO.setTenantId(templateInstanceDO.getTenantId()); newTpInstanceDO.setVer(incrementVersion(templateInstanceDO.getVer())); newTpInstanceDO.setPublishTime(LocalDateTime.now()); - newTpInstanceDO.setOrigCntt(templateInstanceDO.getCntt()!=null?templateInstanceDO.getCntt():templateInstanceDO.getOrigCntt());//模板实例内容,默认为上一个版本的当前文件内容 + newTpInstanceDO.setOrigCntt(templateInstanceDO.getCntt() != null ? templateInstanceDO.getCntt() : templateInstanceDO.getOrigCntt());//模板实例内容,默认为上一个版本的当前文件内容 newTpInstanceDO.setCreateTime(null); newTpInstanceDO.setUpdateTime(null); templateInstanceMapper.insert(newTpInstanceDO); @@ -409,9 +409,18 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { // 实例数据 private List setTemplateInstanceDataRespVOS(Long id) { - return BeanUtils.toBean(templateInstanceDataMapper.selectList(new LambdaQueryWrapper() + List templateInstanceDataRespVOS = BeanUtils.toBean(templateInstanceDataMapper.selectList(new LambdaQueryWrapper() .eq(TemplateInstanceDataDO::getInscId, id) .eq(TemplateInstanceDataDO::getCompanyId, CompanyContextHolder.getCompanyId())), TemplateInstanceDataRespVO.class); + List tmplTpListByValKeys = tmplTpFldService.getTmplTpListByValKeys(templateInstanceDataRespVOS.stream().map(TemplateInstanceDataRespVO::getFldKy).toList()); + templateInstanceDataRespVOS.forEach(templateInstanceDataRespVO -> { + tmplTpListByValKeys.forEach(tmplTpFldDO -> { + if (templateInstanceDataRespVO.getFldKy().equals(tmplTpFldDO.getFldKy())) { + templateInstanceDataRespVO.setFldName(tmplTpFldDO.getFldName()); + } + }); + }); + return templateInstanceDataRespVOS; } private void validateStatusCanDelete(List ids) { @@ -470,11 +479,11 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { List itmIds = templateInstanceItemMapper.selectList(new LambdaQueryWrapper().eq(TemplateInstanceItemDO::getInscId, id)).stream().map(TemplateInstanceItemDO::getItmId).toList(); // 例模版条款去条款库查询条款信息 - if (!itmIds.isEmpty()){ + if (!itmIds.isEmpty()) { List tmplItmRespVOS = BeanUtils.toBean(tmplItmService.listTmplItmByIds(itmIds), TmplItmRespVO.class); fieldAndClauseRespVO.setTmplItmRespVOS(BeanUtils.toBean(tmplItmRespVOS, TmplItmRespVO.class)); } - if (!valKeys.isEmpty()){ + if (!valKeys.isEmpty()) { //例模版字段去字段库查询字段信息 List tmplTpListByValKeys = tmplTpFldService.getTmplTpListByValKeys(valKeys); fieldAndClauseRespVO.setTmplFldRespVOS(BeanUtils.toBean(tmplTpListByValKeys, TmplFldRespVO.class)); diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TmplTpFldServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TmplTpFldServiceImpl.java index e50c1aa7..4472e840 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TmplTpFldServiceImpl.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TmplTpFldServiceImpl.java @@ -96,6 +96,9 @@ public class TmplTpFldServiceImpl extends ServiceImpl getTmplTpListByValKeys(List valNames) { + if (CollUtil.isEmpty(valNames)){ + return new ArrayList<>(); + } return baseMapper.selectList(new LambdaQueryWrapper().in(TmplTpFldDO::getFldKy, valNames)); } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderSaveReqVO.java index 2fa08df0..1083eb1d 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderSaveReqVO.java @@ -133,7 +133,6 @@ public class SalesOrderSaveReqVO { private String erpSalesCompanyName; - @Schema(description = "ERP状态(字典: ERP_REQ_STS)", example = "2") private String erpStatus; @@ -172,17 +171,10 @@ public class SalesOrderSaveReqVO { @ExcelProperty("订单分类") private String splyBsnTp; - /** - * 销售组织编码 - * - */ @Schema(description = "销售组织编码", example = "2") @ExcelProperty("销售组织编码") private String saleOrgzCd; - /** - * 销售组织名称 - * - */ + @Schema(description = "销售组织名称", example = "2") @ExcelProperty("销售组织名称") private String saleOrgzName; @@ -200,4 +192,10 @@ public class SalesOrderSaveReqVO { @Schema(description = "产品组编码") @ExcelProperty("产品组编码") private String pdtGrpCdg; + @Schema(description = "付款方名称") + @ExcelProperty("付款方名称") + private String payerName; + @Schema(description = "付款方编码") + @ExcelProperty("付款方编码") + private String payerNum; } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/salesorder/SalesOrderDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/salesorder/SalesOrderDO.java index 30602a3b..b57601f7 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/salesorder/SalesOrderDO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/salesorder/SalesOrderDO.java @@ -295,7 +295,7 @@ public class SalesOrderDO extends BusinessBaseDO { * 付款方名称 * */ - @TableField("PYER_NUM") + @TableField("PYER_NAME") private String payerName; /** * 付款方编码 @@ -303,9 +303,9 @@ public class SalesOrderDO extends BusinessBaseDO { */ @TableField("PYER_NUM") private String payerNum; - /** - * 税码 - */ - @TableField("TAX_NUM") - private String taxNum; +// /** +// * 税码 +// */ +// @TableField("TAX_NUM") +// private String taxNum; } 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 new file mode 100644 index 00000000..c1c1cf47 --- /dev/null +++ b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/InvoiceticketApi.java @@ -0,0 +1,26 @@ +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.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.HashMap; + +@FeignClient(name = ApiConstants.NAME) +@Tag(name = "RPC 服务 - ERP") +public interface InvoiceticketApi { + + String PREFIX = ApiConstants.PREFIX + "/invoiceticket"; + + @PostMapping(PREFIX + "/submit") + @Operation(summary = "erp数据提交") + CommonResult submitDataToErp(@Valid @RequestBody ErpInvoiceticketSubmitReqDTO reqDTO); +} diff --git a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpInvoiceticketSubmitReqDTO.java b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpInvoiceticketSubmitReqDTO.java new file mode 100644 index 00000000..82cce75a --- /dev/null +++ b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpInvoiceticketSubmitReqDTO.java @@ -0,0 +1,29 @@ +package com.zt.plat.module.erp.api.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; +import lombok.Data; + +@Data +@Schema(description = "管理后台 - 发票相关操作 Request VO") +public class ErpInvoiceticketSubmitReqDTO { + @Schema(description = "id,用作bskey", requiredMode = Schema.RequiredMode.REQUIRED) + private String id; + + @Schema(description = "发票类型;RE-采购发票,RV-销售发票", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "发票类型不能为空") + @Size(min = 2, max = 2, message = "发票类型必须为2位字符") + @Pattern(regexp = "^(RE|RV)$", message = "发票类型仅支持RE(采购发票)、RV(销售发票)") + private String vouchertype; + + @Schema(description = "发票编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "发票编号不能为空") + @Size(min = 1, max = 10, message = "发票编号长度不能超过10位") + private String voucherno; + + @Schema(description = "会计年度;发票类型为RE(采购发票)时必填,格式为4位数字(如2025)") + @Pattern(regexp = "^\\d{4}$", message = "会计年度必须为4位数字(如2025)") + private String voucheryear; +} diff --git a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpInvoiceticketSubmitRespDTO.java b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpInvoiceticketSubmitRespDTO.java new file mode 100644 index 00000000..c4d45f12 --- /dev/null +++ b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpInvoiceticketSubmitRespDTO.java @@ -0,0 +1,61 @@ +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 = "管理后台 - 发票相关操作 响应 VO") +public class ErpInvoiceticketSubmitRespDTO { + @Schema(description = "发票过账日期;格式为YYYYMMDD(如20251106)") + private String postDate; + + @Schema(description = "业务单据号;长度20位字符") + private String settlementsCode; + + @Schema(description = "状态码;详见《发票状态》表;长度1位字符") + private String state; + + @Schema(description = "消息文本;生单失败、驳回、过账失败等状态时返回共享端和SAP消息") + private String reason; + + @Schema(description = "会计凭证编号;已生成会计凭证的情况下返回;长度10位字符") + private String refDoc; + + @Schema(description = "冲销凭证号;状态为已冲销时返回;长度10位字符") + private String revDoc; + + @Schema(description = "冲销凭证会计年度;仅RE发票(采购发票)且状态为已冲销时返回;4位数字") + private String revYear; + + @Schema(description = "冲销凭证过账日期;状态为已冲销时返回;格式为YYYYMMDD(如20251106)") + private String revDate; + + @Schema(description = "采购发票过账差异明细;仅RE发票(采购发票)且状态为3时返回") + private List callBackSettlementDetails; + + /** + * 采购发票过账差异明细子项 + */ + @Schema(description = "采购发票过账差异明细子项") + @Data + public static class CallBackSettlementDetail { + + @Schema(description = "工厂编号") + private String factoryCode; + + @Schema(description = "物料编号") + private String materialCode; + + @Schema(description = "物料凭证号") + private String matDoc; + + @Schema(description = "物料描述") + private String materialDesc; + + @Schema(description = "差异金额") + private BigDecimal differenceAmount; + } +} 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 new file mode 100644 index 00000000..5c85f2fd --- /dev/null +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/InvoiceticketImpl.java @@ -0,0 +1,25 @@ +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.service.erp.ErpInvoiceticketService; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import static com.zt.plat.framework.common.pojo.CommonResult.success; + +@RestController +@Validated +@Slf4j +public class InvoiceticketImpl implements InvoiceticketApi { + @Resource + private ErpInvoiceticketService erpInvoiceticketService; + + @Override + public CommonResult submitDataToErp(ErpInvoiceticketSubmitReqDTO reqDTO) { + return success(erpInvoiceticketService.sbumitToErp020(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 new file mode 100644 index 00000000..20a1bcb3 --- /dev/null +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpInvoiceticketService.java @@ -0,0 +1,8 @@ +package com.zt.plat.module.erp.service.erp; + +import com.zt.plat.module.erp.api.dto.ErpInvoiceticketSubmitReqDTO; +import com.zt.plat.module.erp.api.dto.ErpInvoiceticketSubmitRespDTO; + +public interface ErpInvoiceticketService { + ErpInvoiceticketSubmitRespDTO sbumitToErp020(ErpInvoiceticketSubmitReqDTO 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 new file mode 100644 index 00000000..4e9f9064 --- /dev/null +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpInvoiceticketServiceImpl.java @@ -0,0 +1,126 @@ +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 jakarta.annotation.Resource; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +@Validated +public class ErpInvoiceticketServiceImpl implements ErpInvoiceticketService { + + @Resource + public ErpExternalApi erpExternalApi; + + @Override + public ErpInvoiceticketSubmitRespDTO sbumitToErp020(ErpInvoiceticketSubmitReqDTO erpInvoiceticketSubmitReqDTO) { + ErpSubmitReqDTO reqDTO = new ErpSubmitReqDTO(); + reqDTO.setFuncnr("020"); + reqDTO.setBskey(erpInvoiceticketSubmitReqDTO.getId()); + reqDTO.setUsrid(String.valueOf(SecurityFrameworkUtils.getLoginUserId())); + reqDTO.setUsrnm((SecurityFrameworkUtils.getLoginUserNickname())); + + Map req = new HashMap<>(); + req.put("vouchertype", erpInvoiceticketSubmitReqDTO.getVouchertype()); + req.put("voucherno", erpInvoiceticketSubmitReqDTO.getVoucherno()); + req.put("voucheryear", erpInvoiceticketSubmitReqDTO.getVoucheryear()); + reqDTO.setReq(req); + // 1. 调用ERP接口获取HashMap结果 + + HashMap result = erpExternalApi.submitDataToErp(reqDTO); + + // 2. 初始化响应实体 + ErpInvoiceticketSubmitRespDTO respDTO = new ErpInvoiceticketSubmitRespDTO(); + + // 3. 基础字段映射(String类型直接赋值,兼容空值) + respDTO.setPostDate(getStringValue(result, "postDate")); + respDTO.setSettlementsCode(getStringValue(result, "settlementsCode")); + respDTO.setState(getStringValue(result, "state")); + respDTO.setReason(getStringValue(result, "reason")); + respDTO.setRefDoc(getStringValue(result, "refDoc")); + respDTO.setRevDoc(getStringValue(result, "revDoc")); + respDTO.setRevYear(getStringValue(result, "revYear")); + respDTO.setRevDate(getStringValue(result, "revDate")); + + // 4. 子列表 callBackSettlementDetails 映射 + respDTO.setCallBackSettlementDetails(convertSettlementDetails(result)); + + return respDTO; + } + + /** + * 转换采购发票过账差异明细列表 + * 假设HashMap中子列表字段格式为:callBackSettlementDetails[0].factoryCode、callBackSettlementDetails[0].materialCode... + */ + private List convertSettlementDetails(Map result) { + List detailList = new ArrayList<>(); + if (result == null) { + return detailList; + } + + // 按索引遍历子列表数据,直到无对应字段为止 + int index = 0; + while (true) { + // 拼接子字段的key(根据实际返回的key格式调整,此处为标准嵌套格式) + String factoryCodeKey = String.format("callBackSettlementDetails[%d].factoryCode", index); + String materialCodeKey = String.format("callBackSettlementDetails[%d].materialCode", index); + String matDocKey = String.format("callBackSettlementDetails[%d].matDoc", index); + String materialDescKey = String.format("callBackSettlementDetails[%d].materialDesc", index); + String differenceAmountKey = String.format("callBackSettlementDetails[%d].differenceAmount", index); + + // 若核心字段(如factoryCode)为空,说明无更多子项,退出循环 + if (StringUtils.isBlank(getStringValue(result, factoryCodeKey))) { + break; + } + + // 构建子明细实体 + ErpInvoiceticketSubmitRespDTO.CallBackSettlementDetail detail = new ErpInvoiceticketSubmitRespDTO.CallBackSettlementDetail(); + detail.setFactoryCode(getStringValue(result, factoryCodeKey)); + detail.setMaterialCode(getStringValue(result, materialCodeKey)); + detail.setMatDoc(getStringValue(result, matDocKey)); + detail.setMaterialDesc(getStringValue(result, materialDescKey)); + // 金额字段转换(兼容空值和非数字场景) + detail.setDifferenceAmount(getBigDecimalValue(result, differenceAmountKey)); + + detailList.add(detail); + index++; + } + + // 无数据时返回null,避免前端接收空列表 + return detailList.isEmpty() ? null : detailList; + } + + /** + * 安全获取String值,避免null指针 + */ + private String getStringValue(Map map, String key) { + return map.getOrDefault(key, StringUtils.EMPTY); + } + + /** + * 安全转换BigDecimal,处理空值和格式错误 + */ + private BigDecimal getBigDecimalValue(Map map, String key) { + String value = map.get(key); + if (StringUtils.isBlank(value)) { + return null; + } + try { + return new BigDecimal(value); + } catch (NumberFormatException e) { + // 若金额格式错误,可根据业务选择返回null或抛出异常 + return null; + } + } +} From 8b1e09736c2ea5d98c74750510905ee8ccb8fb78 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: Thu, 6 Nov 2025 16:21:12 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E8=AE=A2=E5=8D=95=E6=98=8E=E7=BB=86id?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plat/module/contractorder/api/ContractApi.java | 9 +++++++++ .../module/contractorder/api/ContractApiImpl.java | 14 ++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/ContractApi.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/ContractApi.java index 791f7ba7..2a289f93 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/ContractApi.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/ContractApi.java @@ -4,6 +4,7 @@ package com.zt.plat.module.contractorder.api; import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.module.contractorder.api.dto.contract.ContractRespDTO; +import com.zt.plat.module.contractorder.api.dto.order.PrchOrdDtlDTO; import com.zt.plat.module.contractorder.api.dto.order.PurchaseOrderWithDetailsDTO; import com.zt.plat.module.contractorder.api.dto.order.SalesOrdDtlDTO; import com.zt.plat.module.contractorder.api.vo.contract.international.IntContract; @@ -56,4 +57,12 @@ public interface ContractApi { @GetMapping(PREFIX + "/sales-order-detail-by-ids") @Operation(summary = "通过消费订单详情id批量获取消费订单详情") CommonResult> getSalesOrderDetailByIds(@RequestParam("ids") List ids); + + @GetMapping(PREFIX + "/po-order-detail-by-id") + @Operation(summary = "通过采购订单详情id获取消费订单详情") + CommonResult getPoOrderDetailById(@RequestParam("id") Long id); + + @GetMapping(PREFIX + "/po-order-detail-by-ids") + @Operation(summary = "通过采购订单详情id批量获取消费订单详情") + CommonResult> getPoOrderDetailByIds(@RequestParam("ids") List ids); } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java index 48e91825..cd3efdb6 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java @@ -19,6 +19,7 @@ import com.zt.plat.module.contractorder.dal.dataobject.contract.ContractMainDO; import com.zt.plat.module.contractorder.dal.dataobject.contract.ContractOtherFieldDO; import com.zt.plat.module.contractorder.dal.dataobject.contract.ContractOtherFormDO; import com.zt.plat.module.contractorder.dal.dataobject.contract.SystemRelativityDO; +import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PrchOrdDtlDO; import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO; import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDO; import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDetailDO; @@ -26,6 +27,7 @@ import com.zt.plat.module.contractorder.dal.mysql.contract.ContractMainMapper; import com.zt.plat.module.contractorder.dal.mysql.contract.ContractOtherFieldMapper; import com.zt.plat.module.contractorder.dal.mysql.contract.ContractOtherFormMapper; import com.zt.plat.module.contractorder.dal.mysql.contract.SystemRelativityMapper; +import com.zt.plat.module.contractorder.dal.mysql.purchaseorder.PrchOrdDtlMapper; import com.zt.plat.module.contractorder.dal.mysql.salesorder.SalesOrderDetailMapper; import com.zt.plat.module.contractorder.dal.mysql.salesorder.SalesOrderMapper; import com.zt.plat.module.contractorder.enums.contract.DictEnum; @@ -639,4 +641,16 @@ public class ContractApiImpl implements ContractApi { List salesOrderDetailDOS = SpringUtil.getBean(SalesOrderDetailMapper.class).selectList(SalesOrderDetailDO::getId, ids); return success(BeanUtils.toBean(salesOrderDetailDOS, SalesOrdDtlDTO.class)); } + + @Override + public CommonResult getPoOrderDetailById(Long id) { + PrchOrdDtlDO prchOrdDtlDO = SpringUtil.getBean(PrchOrdDtlMapper.class).selectById(id); + return success(BeanUtils.toBean(prchOrdDtlDO, PrchOrdDtlDTO.class)); + } + + @Override + public CommonResult> getPoOrderDetailByIds(List ids) { + List prchOrdDtlDOS = SpringUtil.getBean(PrchOrdDtlMapper.class).selectList(PrchOrdDtlDO::getId, ids); + return success(BeanUtils.toBean(prchOrdDtlDOS, PrchOrdDtlDTO.class)); + } } From 3c121f6c1aca967bee1df951e2151eb051c5c314 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: Fri, 7 Nov 2025 14:58:46 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E8=AE=A2=E5=8D=95=E6=98=8E=E7=BB=86id?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/TemplateInstanceDataRespVO.java | 4 + .../tmpltp/TemplateInstanceDataDO.java | 4 + .../tmpltp/TemplateInstanceServiceImpl.java | 1 + .../module/contractorder/api/ContractApi.java | 2 + .../api/dto/order/OrdDtlDTO.java | 288 ++++++++++++++++++ .../order/PurchaseOrderWithDetailsDTO.java | 5 + .../salesorder/SalesOrderController.java | 14 + .../purchaseorder/PurchaseOrderDO.java | 5 + .../service/salesorder/SalesOrderService.java | 7 + .../salesorder/SalesOrderServiceImpl.java | 7 + 10 files changed, 337 insertions(+) create mode 100644 zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/OrdDtlDTO.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 9dd2a17c..b5e33858 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 @@ -29,6 +29,10 @@ public class TemplateInstanceDataRespVO { @ExcelProperty("字段标识;关联字段库") private String fldKy; + @Schema(description = "字段結構", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("字段結構;") + private String fldDoc; + @Schema(description = "用户填写的值", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("用户填写的值") private String fldVal; diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/tmpltp/TemplateInstanceDataDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/tmpltp/TemplateInstanceDataDO.java index ca0b381b..c188ed0e 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/tmpltp/TemplateInstanceDataDO.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/tmpltp/TemplateInstanceDataDO.java @@ -48,4 +48,8 @@ public class TemplateInstanceDataDO extends BusinessBaseDO { @TableField(exist = false) private String fldName; + @TableField(exist = false) + private String fldDoc; + + } 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 c4c9ee59..97820d1e 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 @@ -417,6 +417,7 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { tmplTpListByValKeys.forEach(tmplTpFldDO -> { if (templateInstanceDataRespVO.getFldKy().equals(tmplTpFldDO.getFldKy())) { templateInstanceDataRespVO.setFldName(tmplTpFldDO.getFldName()); + templateInstanceDataRespVO.setFldDoc(tmplTpFldDO.getFldDoc()); } }); }); diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/ContractApi.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/ContractApi.java index 2a289f93..217a20dd 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/ContractApi.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/ContractApi.java @@ -65,4 +65,6 @@ public interface ContractApi { @GetMapping(PREFIX + "/po-order-detail-by-ids") @Operation(summary = "通过采购订单详情id批量获取消费订单详情") CommonResult> getPoOrderDetailByIds(@RequestParam("ids") List ids); + + //销售采购融合。主子表 } diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/OrdDtlDTO.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/OrdDtlDTO.java new file mode 100644 index 00000000..14735758 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/OrdDtlDTO.java @@ -0,0 +1,288 @@ +package com.zt.plat.module.contractorder.api.dto.order; + +import lombok.Data; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +public class OrdDtlDTO { + + // ========================== 公共属性(两个类均存在,统一保留)========================== + /** + * 主键 + */ + private Long id; + + /** + * 订单主键(PrchOrdDtlDTO.ordId / SalesOrdDtlDTO.orderId 统一命名) Y + */ + private Long orderId; + + /** + * 行项目;推送ERP(必须)(PrchOrdDtlDTO.lineNum / SalesOrdDtlDTO.lineNumber 统一命名)Y + */ + private Long lineNum; + + /** + * 物料名称(PrchOrdDtlDTO.mtrlName / SalesOrdDtlDTO.materialName 统一命名)Y + */ + private String mtrlName; + + /** + * 物料编码;推送ERP(必须)(PrchOrdDtlDTO.mtrlNum / SalesOrdDtlDTO.materialNumber 统一命名)Y + */ + private String mtrlNum; + + /** + * 工厂名称(PrchOrdDtlDTO.rcvFactName / SalesOrdDtlDTO.factoryName 统一命名) Y + */ + private String factoryName; + + /** + * 工厂编码;推送ERP(必须)(PrchOrdDtlDTO.rcvFactNum / SalesOrdDtlDTO.factoryNumber 统一命名)Y + */ + private String factoryNum; + + /** + * 库位名称(PrchOrdDtlDTO.rcvWrhName / SalesOrdDtlDTO.warehouseName 统一命名)Y + */ + private String warehouseName; + + /** + * 库位编码;推送ERP(PrchOrdDtlDTO.rcvWrhNum / SalesOrdDtlDTO.warehouseNumber 统一命名)Y + */ + private String warehouseNum; + + /** + * 计量单位;推送ERP(必须)(PrchOrdDtlDTO.unt / SalesOrdDtlDTO.unit 统一命名)Y + */ + private String unit; + + /** + * 暂估数量;推送ERP(必须)(PrchOrdDtlDTO.qty / SalesOrdDtlDTO.quantity 统一命名,类型统一为BigDecimal)Y + */ + private BigDecimal quantity; + + /** + * 项目类别;推送ERP(PrchOrdDtlDTO.prjCtgr / SalesOrdDtlDTO.projectCategory 统一命名) + */ + private String projectCategory; + + /** + * 小协议号(PrchOrdDtlDTO.agrNum / SalesOrdDtlDTO.agreementNumber 统一命名)Y + */ + private String agreementNumber; + + /** + * 金属元素缩写(PrchOrdDtlDTO.elemAbbr / SalesOrdDtlDTO.elementAbbreviation 统一命名)Y + */ + private String elementAbbreviation; + + /** + * 金属元素名称(PrchOrdDtlDTO.elemName / SalesOrdDtlDTO.elementName 统一命名)Y + */ + private String elementName; + + /** + * 金属元素编码(PrchOrdDtlDTO.elemCdg / SalesOrdDtlDTO.elementNumber 统一命名)Y + */ + private String elementCode; + + /** + * 是否启用(字典:ERP_CTRT_YN);处理明细中多个相同物料,只能允许一种物料启用(PrchOrdDtlDTO.isEnb / SalesOrdDtlDTO.isEnable 统一命名)Y + */ + private String isEnable; + + + /** + * 税码(字典: PRCH_TAX);推送ERP Y + */ + private String taxNum; + + // ========================== 采购订单特有属性(PrchOrdDtlDTO 独有)========================== + /** + * 含税单价;推送ERP(必须) + */ + private BigDecimal inTaxUprc; + + /** + * 价格单位;推送ERP + */ + private BigDecimal prcUnt; + + /** + * 是否基于GR的发票校验;推送ERP + */ + private String isGrInv; + + /** + * 是否允许无限制收货;推送ERP + */ + private String isUnlRcv; + + /** + * 批次;推送ERP + */ + private String bat; + + /** + * 科目分配类别(字典: PRCH_ACTS_CTGR);推送ERP:联动订单类型,固定资产订单A,服务订单S-销售服务费K-成本中心F-订单 + */ + private String actsCtgr; + + /** + * 物料组编码(字典: PRCH_MATERIAL_GROUP);推送ERP:联动订单类型,服务订单必传 Y + */ + private String mtrlCpntNum; + + /** + * 物料组描述;推送ERP:联动订单类型,服务订单必传 Y + */ + private String mtrlCpntDsp; + + /** + * 短文本 Y + */ + private String shrtTxt; + + /** + * 退货标识X标识退货;推送ERP + */ + private String isRlbkCgo; + + /** + * 是否免费收货标识X;推送ERP + */ + private String isFreeRcv; + + /** + * 外部行项目号;推送ERP + */ + private Long outLineNum; + + /** + * 备注信息-需求单位;推送ERP + */ + private String rmkUnt; + + /** + * 备注信息-物料详细;推送ERP + */ + private String rmkMtrl; + + /** + * 交货起始日期;推送ERP Y + */ + private LocalDateTime bgnDt; + + /** + * 交货截止日期;推送ERP Y + */ + private LocalDateTime ddlDt; + + /** + * 已收货量 + */ + private BigDecimal lstQty; + + /** + * 已移库量库;存针对该订单产生的移库量 + */ + private BigDecimal trfQty; + + /** + * 移库工厂名称 Y + */ + private String trfFactName; + + /** + * 移库工厂编码 Y + */ + private String trfFactNum; + + /** + * 移库库位名称 Y + */ + private String trfWrhName; + + /** + * 移库库位编码 Y + */ + private String trfWrhNum; + + /** + * 备注 Y + */ + private String rmk; + + /** + * 原料湿重;推送ERP + */ + private BigDecimal origWet; + + /** + * 销售物料号;推送ERP:科目分配类别为S时必填 + */ + private String saleMtrlNum; + + /** + * 统计型内部订单;推送ERP + */ + private String inOrd; + + /** + * 采购类别;推送ERP:0-生产性物资类1-项目投资类 + */ + private String prchCtgr; + + /** + * 科目分配详情;科目分配类别为K或P时使用(JSON) + */ + private String actsCtgrDtl; + + /** + * 委托加工详情;委托加工订单使用(JSON) + */ + private String enttDtl; + + // ========================== 销售订单特有属性(SalesOrdDtlDTO 独有)========================== + /** + * 开票类型;推送ERP(必须) + */ + private String invoiceType; + +// /** +// * 稅分类(字典:SALE_TAX);推送ERP(必须) +// */ +// private String taxAcctasscat; + + /** + * 装运地点;推送ERP + */ + private String shippingPlace; + + /** + * 物料科目分配组;推送ERP(必须) + */ + private String metalAcctasscatGroup; + + /** + * 总价 + */ + private BigDecimal gross; + + /** + * 税率 Y + */ + private BigDecimal taxRte; + + /** + * 价格条件详情;推送ERP(必须):JSON + */ + private String priceConditionDetail; + + /** + * 来料加工原料详情;推送ERP:订单类型(JSON) + */ + private String originDetail; +} diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/PurchaseOrderWithDetailsDTO.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/PurchaseOrderWithDetailsDTO.java index 020f5c03..a67db32c 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/PurchaseOrderWithDetailsDTO.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/PurchaseOrderWithDetailsDTO.java @@ -109,6 +109,11 @@ public class PurchaseOrderWithDetailsDTO { * 物料编码 */ private String materialNumber; + + /** + * 单位 + */ + private String unt; /** * 物料名称 */ diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/SalesOrderController.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/SalesOrderController.java index 15467c3a..2ee17b3a 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/SalesOrderController.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/SalesOrderController.java @@ -100,6 +100,20 @@ public class SalesOrderController implements BusinessControllerMarker { return success(salesOrderRespVO); } + @GetMapping("/order-no") + @Operation(summary = "通过订单号获得销售订单") + @Parameter(name = "orderNo", description = "订单号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('base:sales-order:query')") + public CommonResult getSalesOrderByNo(@RequestParam("orderNo") String orderNo) { + SalesOrderDO purchaseOrder = salesOrderService.getSalesOrderByOrderNo(orderNo); + SalesOrderRespVO salesOrderRespVO = BeanUtils.toBean(purchaseOrder, SalesOrderRespVO.class); + if (salesOrderRespVO == null) { + return success(null); + } + salesOrderService.setSalesOrderDetail(salesOrderRespVO); + return success(salesOrderRespVO); + } + @GetMapping("/page") @Operation(summary = "获得销售订单分页") @PreAuthorize("@ss.hasPermission('base:sales-order:query')") diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/purchaseorder/PurchaseOrderDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/purchaseorder/PurchaseOrderDO.java index 9d3b4f16..239e6eb3 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/purchaseorder/PurchaseOrderDO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/purchaseorder/PurchaseOrderDO.java @@ -278,4 +278,9 @@ public class PurchaseOrderDO extends BusinessBaseDO { @TableField("SALE_ACS_NAME") private String saleAcsName; + /** + * 税率 + */ + @TableField("TAX_RTE") + private BigDecimal taxRte; } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderService.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderService.java index 50ba33f1..84a70119 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderService.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderService.java @@ -121,4 +121,11 @@ public interface SalesOrderService { * */ void updateOrderStatusByIdOrOrderNo(OrderStsReqVO req); + /** + * 获取订单详情 + * + * @param orderNo 订单编号 + * + */ + SalesOrderDO getSalesOrderByOrderNo(String orderNo); } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java index 79be6c49..e47f6de1 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java @@ -524,6 +524,8 @@ public class SalesOrderServiceImpl implements SalesOrderService { salesOrderMapper.update(new LambdaUpdateWrapper().in(reqVO.getOrderNos() != null, SalesOrderDO::getSystemOrderNumber, reqVO.getOrderNos()).in(reqVO.getIds() != null, SalesOrderDO::getId, reqVO.getIds()).set(SalesOrderDO::getStatus, reqVO.getSts())); } + + private void validateSalesOrderNosExists(List orderNos) { List list = salesOrderMapper.selectList(new LambdaQueryWrapper().in(SalesOrderDO::getSystemOrderNumber, orderNos)); if (CollUtil.isEmpty(list) || list.size() != orderNos.size()) { @@ -546,4 +548,9 @@ public class SalesOrderServiceImpl implements SalesOrderService { int number = (int) (Math.random() * 900000 + 100000); return String.valueOf(number); } + + @Override + public SalesOrderDO getSalesOrderByOrderNo(String orderNo) { + return salesOrderMapper.selectOne(SalesOrderDO::getSystemOrderNumber, orderNo); + } }