diff --git a/base-server/src/main/resources/application-dev.yml b/base-server/src/main/resources/application-dev.yml
index dde03828..7fe41af2 100644
--- a/base-server/src/main/resources/application-dev.yml
+++ b/base-server/src/main/resources/application-dev.yml
@@ -111,9 +111,11 @@ justauth:
prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟
+# erp相关配置
erp:
address: hana-dev.yncic.com
sapsys: ZTDEV203
+ secretKey: 123456789 # erp秘钥
eplat:
share:
diff --git a/base-server/src/main/resources/application-local.yml b/base-server/src/main/resources/application-local.yml
index 0f27eee8..3511ab7f 100644
--- a/base-server/src/main/resources/application-local.yml
+++ b/base-server/src/main/resources/application-local.yml
@@ -101,9 +101,11 @@ zt:
access-log: # 访问日志的配置项
enable: true
+# erp相关配置
erp:
address: hana-dev.yncic.com
sapsys: ZTDEV203
+ secretKey: 123456789 # erp秘钥
eplat:
share:
diff --git a/base-server/src/main/resources/logback-spring.xml b/base-server/src/main/resources/logback-spring.xml
index 19d38bf5..c932c0af 100644
--- a/base-server/src/main/resources/logback-spring.xml
+++ b/base-server/src/main/resources/logback-spring.xml
@@ -90,6 +90,9 @@
+
+
+
@@ -107,5 +110,4 @@
-
diff --git a/sql/dm/2026-1-14物料相关表增加索引.sql b/sql/dm/2026-1-14物料相关表增加索引.sql
new file mode 100644
index 00000000..2ab2ea62
--- /dev/null
+++ b/sql/dm/2026-1-14物料相关表增加索引.sql
@@ -0,0 +1,29 @@
+CREATE INDEX idx_hs_cls_tenant_deleted_cls
+ ON bse_mtrl_hs_cls(tenant_id, deleted, CLS_ID, INF_ID);
+
+CREATE INDEX idx_hs_cls_composite
+ ON bse_mtrl_hs_cls(tenant_id, deleted, CLS_ID);
+
+CREATE INDEX idx_mtrl_inf_tenant_deleted_id
+ ON bse_mtrl_inf(tenant_id, deleted, id);
+
+CREATE INDEX idx_mtrl_inf_tenant_deleted_cd
+ ON bse_mtrl_inf(tenant_id, deleted, CD, id);
+
+CREATE INDEX idx_mtrl_inf_cover
+ ON bse_mtrl_inf(tenant_id, deleted, CD, id, NAME, RMK, create_time, update_time, creator, updater);
+
+CREATE INDEX idx_hs_prps_tenant_deleted_inf
+ ON bse_mtrl_hs_prps(tenant_id, deleted, INF_ID, PRPS_ID);
+
+CREATE INDEX idx_hs_prps_tenant_inf_deleted
+ ON bse_mtrl_hs_prps(tenant_id, INF_ID, deleted);
+
+CREATE INDEX idx_hs_prps_cover
+ ON bse_mtrl_hs_prps(tenant_id, deleted, INF_ID, PRPS_ID, UNT_ID, IS_KY, IS_MTNG, SRT, DEPT_ID);
+
+CREATE INDEX idx_mtrl_prps_tenant_deleted_id
+ ON bse_mtrl_prps(tenant_id, deleted, id);
+
+CREATE INDEX idx_mtrl_prps_cover
+ ON bse_mtrl_prps(tenant_id, deleted, id, CD, NAME, UNT_QTY_ID, DIC_DAT_VAL, DAT_TP, RMK, DEPT_ID);
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/MaterialHasPropertiesDeptController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/MaterialHasPropertiesDeptController.java
index 27e8fb63..08bb476a 100644
--- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/MaterialHasPropertiesDeptController.java
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/MaterialHasPropertiesDeptController.java
@@ -52,7 +52,7 @@ public class MaterialHasPropertiesDeptController {
public CommonResult batchSave(@Valid @RequestBody MaterialHasPropertiesBatchSaveReqVO reqVO) {
Long deptId = reqVO.getDeptId();
if (deptId == null) {
- throw new ServiceException(401, "部门ID不能为空");
+ throw new ServiceException(500, "部门ID不能为空");
}
MaterialHasPropertiesBatchSaveRespVO resp = materialHasPropertiesService.batchSave(reqVO, deptId);
return success(resp);
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/MaterialPropertiesDeptController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/MaterialPropertiesDeptController.java
index fe37ca8e..e1237a90 100644
--- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/MaterialPropertiesDeptController.java
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/MaterialPropertiesDeptController.java
@@ -97,7 +97,7 @@ public class MaterialPropertiesDeptController {
public CommonResult getMaterialProperties(@RequestParam("id") Long id) {
MaterialPropertiesRespVO materialProperties = materialPropertiesService.getMaterialProperties(id);
if (materialProperties.getDeptId() == null) {
- throw new ServiceException(401, "没有权限");
+ throw new ServiceException(500, "没有权限");
}
return success(materialProperties);
}
@@ -107,7 +107,7 @@ public class MaterialPropertiesDeptController {
@PreAuthorize("@ss.hasPermission('base:material-properties-dept:query')")
public CommonResult> getMaterialPropertiesPage(@Valid MaterialPropertiesPageReqVO pageReqVO) {
if (pageReqVO.getDeptId() == null) {
- throw new ServiceException(401, "部门ID不能为空");
+ throw new ServiceException(500, "部门ID不能为空");
}
PageResult pageResult = materialPropertiesService.getMaterialPropertiesPage(pageReqVO);
return success(pageResult);
@@ -118,7 +118,7 @@ public class MaterialPropertiesDeptController {
@PreAuthorize("@ss.hasPermission('base:material-properties-dept:query')")
public CommonResult> getMaterialPropertiesSimplePage(@Valid MaterialPropertiesSimplePageReqVO pageReqVO) {
if (pageReqVO.getDeptId() == null) {
- throw new ServiceException(401, "部门ID不能为空");
+ throw new ServiceException(500, "部门ID不能为空");
}
return success(materialPropertiesService.getMaterialPropertiesSimplePage(pageReqVO));
}
@@ -130,7 +130,7 @@ public class MaterialPropertiesDeptController {
public void exportMaterialPropertiesExcel(@Valid MaterialPropertiesPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
if (pageReqVO.getDeptId() == null) {
- throw new ServiceException(401, "部门ID不能为空");
+ throw new ServiceException(500, "部门ID不能为空");
}
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List list = materialPropertiesService.getMaterialPropertiesPage(pageReqVO).getList();
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/job/TestJob.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/job/TestJob.java
new file mode 100644
index 00000000..ef389213
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/job/TestJob.java
@@ -0,0 +1,60 @@
+package com.zt.plat.module.base.job;
+
+import com.xxl.job.core.handler.annotation.XxlJob;
+import com.zt.plat.framework.tenant.core.job.TenantJob;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * 测试定时任务
+ *
+ * @author base
+ */
+@Component
+@Slf4j
+public class TestJob {
+
+ private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+ /**
+ * 简单测试任务
+ */
+ @XxlJob("testSimpleJob")
+ @TenantJob
+ public void testSimpleJob() {
+ String currentTime = LocalDateTime.now().format(FORMATTER);
+ log.info("[testSimpleJob][开始执行] 当前时间: {}", currentTime);
+
+ try {
+ // 模拟业务处理
+ Thread.sleep(2000);
+ log.info("[testSimpleJob][执行成功] 任务已完成");
+ } catch (Exception e) {
+ log.error("[testSimpleJob][执行失败] 错误信息: {}", e.getMessage(), e);
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * 带参数的测试任务
+ */
+ @XxlJob("testParamJob")
+ @TenantJob
+ public void testParamJob() {
+ String currentTime = LocalDateTime.now().format(FORMATTER);
+ log.info("[testParamJob][开始执行] 当前时间: {}", currentTime);
+
+ try {
+ // 模拟带参数的业务处理
+ log.info("[testParamJob][处理中] 正在处理业务逻辑...");
+ Thread.sleep(1000);
+ log.info("[testParamJob][执行成功] 任务已完成");
+ } catch (Exception e) {
+ log.error("[testParamJob][执行失败] 错误信息: {}", e.getMessage(), e);
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/materialhasproperties/MaterialHasPropertiesServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/materialhasproperties/MaterialHasPropertiesServiceImpl.java
index 6681d747..d9903e76 100644
--- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/materialhasproperties/MaterialHasPropertiesServiceImpl.java
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/materialhasproperties/MaterialHasPropertiesServiceImpl.java
@@ -114,8 +114,14 @@ public class MaterialHasPropertiesServiceImpl implements MaterialHasPropertiesSe
return resp;
}
// 全量替换:先删除该物料的已有属性
- materialHasPropertiesMapper.delete(new LambdaQueryWrapperX()
- .eq(MaterialHasPropertiesDO::getInfomationId, infoId));
+ LambdaQueryWrapperX delQuery = new LambdaQueryWrapperX<>();
+ delQuery.eq(MaterialHasPropertiesDO::getInfomationId, infoId);
+ if (deptId == null) {
+ delQuery.isNull(MaterialHasPropertiesDO::getDeptId);
+ } else {
+ delQuery.eq(MaterialHasPropertiesDO::getDeptId, deptId);
+ }
+ materialHasPropertiesMapper.delete(delQuery);
List properties = batchReqVO.getProperties();
if (CollUtil.isEmpty(properties)) {
diff --git a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpSubmitReqDTO.java b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpSubmitReqDTO.java
index d7e5ab14..e2a5b551 100644
--- a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpSubmitReqDTO.java
+++ b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpSubmitReqDTO.java
@@ -21,7 +21,7 @@ public class ErpSubmitReqDTO {
* "bskey": 调用系统业务单据编号,必须,在外部系统唯一,用于关联
* "usrid": 外部系统用户id
* "usrnm": 外部系统用户名
- * "sign": 签名,uuid+srcsys+密码,MD5 32位小写签名,密码另行约定
+ * "sign": 签名,uuid+srcsys+密码,MD5 32位小写签名,秘钥另行约定
* "req": {具体参数,参见RFC功能列表}
*/
@Schema(description = "接口编号,必须,参见RFC功能列表,可调用接口编号范围051-900")
@@ -40,7 +40,7 @@ public class ErpSubmitReqDTO {
@NotBlank(message = "外部系统用户名不能为空")
private String usrnm;
- @Schema(description = "签名,uuid+srcsys+密码,MD5 32位小写签名,密码另行约定")
+ @Schema(description = "签名,uuid+srcsys+密码,MD5 32位小写签名,秘钥另行约定")
private String sign;
@Schema(description = "具体参数,参见RFC功能列表")
diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/utils/ErpConfig.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/utils/ErpConfig.java
index b8585886..fa6dabd7 100644
--- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/utils/ErpConfig.java
+++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/utils/ErpConfig.java
@@ -1,10 +1,12 @@
package com.zt.plat.module.erp.utils;
import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.digest.DigestUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zt.plat.module.erp.api.dto.ErpSubmitReqDTO;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpEntity;
@@ -13,6 +15,7 @@ import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
+import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@@ -29,6 +32,9 @@ public class ErpConfig {
@Value("${erp.sapsys:}")
private String sapsys;
+ @Value("${erp.secretKey:}")
+ private String secretKey;
+
/**
* 调用ERP接口获取erp数据
*/
@@ -110,7 +116,11 @@ public class ErpConfig {
requestBody.put("usrid", reqDTO.getUsrid());
requestBody.put("usrnm", reqDTO.getUsrnm());
// todo 密码另行约定
- //requestBody.put("sign", StrUtil.(uuid + sapsys + "密码另行约定"));
+ if (StringUtils.isBlank(reqDTO.getSign())) {
+ requestBody.put("sign", DigestUtil.md5Hex(uuid + "DSC" + secretKey, StandardCharsets.UTF_8));
+ } else {
+ requestBody.put("sign", reqDTO.getSign());
+ }
if (reqDTO.getReq() != null) {
requestBody.put("req", reqDTO.getReq());
}
@@ -166,4 +176,5 @@ public class ErpConfig {
}
}
+
}