From 17a7a0c0df3dbc3e6225dddb55f6332deccdb201 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期三, 03 六月 2026 11:38:30 +0800
Subject: [PATCH] 浪潮部署
---
src/main/resources/application-lc-pro.yml | 3
src/main/java/com/ruoyi/project/system/service/ISysDeptService.java | 38 +-
src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java | 41 +-
src/main/java/com/ruoyi/tide/controller/TideController.java | 122 ++++++++++
src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java | 2
src/main/java/com/ruoyi/tide/pojo/TidePojo.java | 31 ++
src/main/java/com/ruoyi/project/system/domain/SysDept.java | 14 +
src/main/resources/mapper/system/SysDeptMapper.xml | 5
src/main/java/com/ruoyi/tide/utils/TideUtils.java | 191 +++++++++++++++
src/main/resources/application-lc-khgxglxt.yml | 271 ++++++++++++++++++++++
src/main/resources/application.yml | 2
11 files changed, 684 insertions(+), 36 deletions(-)
diff --git a/src/main/java/com/ruoyi/project/system/domain/SysDept.java b/src/main/java/com/ruoyi/project/system/domain/SysDept.java
index 2c3056a..767e90d 100644
--- a/src/main/java/com/ruoyi/project/system/domain/SysDept.java
+++ b/src/main/java/com/ruoyi/project/system/domain/SysDept.java
@@ -14,7 +14,7 @@
/**
* 閮ㄩ棬琛� sys_dept
- *
+ *
* @author ruoyi
*/
public class SysDept extends BaseEntity
@@ -61,7 +61,17 @@
/** 鍛樺伐鏁伴噺 */
@TableField(exist = false)
private Integer staffCount;
-
+
+ private Long tenantId;
+
+ public Long getTenantId() {
+ return tenantId;
+ }
+
+ public void setTenantId(Long tenantId) {
+ this.tenantId = tenantId;
+ }
+
/** 瀛愰儴闂� */
@TableField(exist = false)
private List<SysDept> children = new ArrayList<SysDept>();
diff --git a/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java b/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java
index c564959..07c93d6 100644
--- a/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java
+++ b/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java
@@ -126,4 +126,6 @@
* @return
*/
Long maxLevelDeptId(Long deptId);
+
+ SysDept selectDeptByDeptName(@Param("deptName") String deptName);
}
diff --git a/src/main/java/com/ruoyi/project/system/service/ISysDeptService.java b/src/main/java/com/ruoyi/project/system/service/ISysDeptService.java
index 77eda76..cc14c7a 100644
--- a/src/main/java/com/ruoyi/project/system/service/ISysDeptService.java
+++ b/src/main/java/com/ruoyi/project/system/service/ISysDeptService.java
@@ -6,14 +6,14 @@
/**
* 閮ㄩ棬绠$悊 鏈嶅姟灞�
- *
+ *
* @author ruoyi
*/
public interface ISysDeptService
{
/**
* 鏌ヨ閮ㄩ棬绠$悊鏁版嵁
- *
+ *
* @param dept 閮ㄩ棬淇℃伅
* @return 閮ㄩ棬淇℃伅闆嗗悎
*/
@@ -21,7 +21,7 @@
/**
* 鏌ヨ閮ㄩ棬鏍戠粨鏋勪俊鎭�
- *
+ *
* @param dept 閮ㄩ棬淇℃伅
* @return 閮ㄩ棬鏍戜俊鎭泦鍚�
*/
@@ -29,7 +29,7 @@
/**
* 鏋勫缓鍓嶇鎵�闇�瑕佹爲缁撴瀯
- *
+ *
* @param depts 閮ㄩ棬鍒楄〃
* @return 鏍戠粨鏋勫垪琛�
*/
@@ -37,7 +37,7 @@
/**
* 鏋勫缓鍓嶇鎵�闇�瑕佷笅鎷夋爲缁撴瀯
- *
+ *
* @param depts 閮ㄩ棬鍒楄〃
* @return 涓嬫媺鏍戠粨鏋勫垪琛�
*/
@@ -45,7 +45,7 @@
/**
* 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戜俊鎭�
- *
+ *
* @param roleId 瑙掕壊ID
* @return 閫変腑閮ㄩ棬鍒楄〃
*/
@@ -53,7 +53,7 @@
/**
* 鏍规嵁閮ㄩ棬ID鏌ヨ淇℃伅
- *
+ *
* @param deptId 閮ㄩ棬ID
* @return 閮ㄩ棬淇℃伅
*/
@@ -61,7 +61,7 @@
/**
* 鏍规嵁ID鏌ヨ鎵�鏈夊瓙閮ㄩ棬锛堟甯哥姸鎬侊級
- *
+ *
* @param deptId 閮ㄩ棬ID
* @return 瀛愰儴闂ㄦ暟
*/
@@ -69,7 +69,7 @@
/**
* 鏄惁瀛樺湪閮ㄩ棬瀛愯妭鐐�
- *
+ *
* @param deptId 閮ㄩ棬ID
* @return 缁撴灉
*/
@@ -77,7 +77,7 @@
/**
* 鏌ヨ閮ㄩ棬鏄惁瀛樺湪鐢ㄦ埛
- *
+ *
* @param deptId 閮ㄩ棬ID
* @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦�
*/
@@ -85,7 +85,7 @@
/**
* 鏍¢獙閮ㄩ棬鍚嶇О鏄惁鍞竴
- *
+ *
* @param dept 閮ㄩ棬淇℃伅
* @return 缁撴灉
*/
@@ -93,14 +93,14 @@
/**
* 鏍¢獙閮ㄩ棬鏄惁鏈夋暟鎹潈闄�
- *
+ *
* @param deptId 閮ㄩ棬id
*/
public void checkDeptDataScope(Long deptId);
/**
* 鏂板淇濆瓨閮ㄩ棬淇℃伅
- *
+ *
* @param dept 閮ㄩ棬淇℃伅
* @return 缁撴灉
*/
@@ -108,7 +108,7 @@
/**
* 淇敼淇濆瓨閮ㄩ棬淇℃伅
- *
+ *
* @param dept 閮ㄩ棬淇℃伅
* @return 缁撴灉
*/
@@ -116,7 +116,7 @@
/**
* 鍒犻櫎閮ㄩ棬绠$悊淇℃伅
- *
+ *
* @param deptId 閮ㄩ棬ID
* @return 缁撴灉
*/
@@ -128,4 +128,12 @@
* @return
*/
Long maxLevelDeptId(Long deptId);
+
+ /**
+ * 鏍规嵁閮ㄩ棬鍚嶇О鏌ヨ閮ㄩ棬淇℃伅
+ *
+ * @param deptName 閮ㄩ棬鍚嶇О
+ * @return 閮ㄩ棬淇℃伅闆嗗悎
+ */
+ public SysDept selectDeptByDeptName(String deptName);
}
diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java
index 65f4705..fe1324b 100644
--- a/src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java
+++ b/src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java
@@ -24,7 +24,7 @@
/**
* 閮ㄩ棬绠$悊 鏈嶅姟瀹炵幇
- *
+ *
* @author ruoyi
*/
@Service
@@ -36,7 +36,7 @@
/**
* 鏌ヨ閮ㄩ棬绠$悊鏁版嵁
- *
+ *
* @param dept 閮ㄩ棬淇℃伅
* @return 閮ㄩ棬淇℃伅闆嗗悎
*/
@@ -46,10 +46,10 @@
{
return deptMapper.selectDeptList(dept);
}
-
+
/**
* 鏌ヨ閮ㄩ棬鏍戠粨鏋勪俊鎭�
- *
+ *
* @param dept 閮ㄩ棬淇℃伅
* @return 閮ㄩ棬鏍戜俊鎭泦鍚�
*/
@@ -62,7 +62,7 @@
/**
* 鏋勫缓鍓嶇鎵�闇�瑕佹爲缁撴瀯
- *
+ *
* @param depts 閮ㄩ棬鍒楄〃
* @return 鏍戠粨鏋勫垪琛�
*/
@@ -89,7 +89,7 @@
/**
* 鏋勫缓鍓嶇鎵�闇�瑕佷笅鎷夋爲缁撴瀯
- *
+ *
* @param depts 閮ㄩ棬鍒楄〃
* @return 涓嬫媺鏍戠粨鏋勫垪琛�
*/
@@ -102,7 +102,7 @@
/**
* 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戜俊鎭�
- *
+ *
* @param roleId 瑙掕壊ID
* @return 閫変腑閮ㄩ棬鍒楄〃
*/
@@ -115,7 +115,7 @@
/**
* 鏍规嵁閮ㄩ棬ID鏌ヨ淇℃伅
- *
+ *
* @param deptId 閮ㄩ棬ID
* @return 閮ㄩ棬淇℃伅
*/
@@ -127,7 +127,7 @@
/**
* 鏍规嵁ID鏌ヨ鎵�鏈夊瓙閮ㄩ棬锛堟甯哥姸鎬侊級
- *
+ *
* @param deptId 閮ㄩ棬ID
* @return 瀛愰儴闂ㄦ暟
*/
@@ -139,7 +139,7 @@
/**
* 鏄惁瀛樺湪瀛愯妭鐐�
- *
+ *
* @param deptId 閮ㄩ棬ID
* @return 缁撴灉
*/
@@ -152,7 +152,7 @@
/**
* 鏌ヨ閮ㄩ棬鏄惁瀛樺湪鐢ㄦ埛
- *
+ *
* @param deptId 閮ㄩ棬ID
* @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦�
*/
@@ -165,7 +165,7 @@
/**
* 鏍¢獙閮ㄩ棬鍚嶇О鏄惁鍞竴
- *
+ *
* @param dept 閮ㄩ棬淇℃伅
* @return 缁撴灉
*/
@@ -183,7 +183,7 @@
/**
* 鏍¢獙閮ㄩ棬鏄惁鏈夋暟鎹潈闄�
- *
+ *
* @param deptId 閮ㄩ棬id
*/
@Override
@@ -203,7 +203,7 @@
/**
* 鏂板淇濆瓨閮ㄩ棬淇℃伅
- *
+ *
* @param dept 閮ㄩ棬淇℃伅
* @return 缁撴灉
*/
@@ -222,7 +222,7 @@
/**
* 淇敼淇濆瓨閮ㄩ棬淇℃伅
- *
+ *
* @param dept 閮ㄩ棬淇℃伅
* @return 缁撴灉
*/
@@ -250,7 +250,7 @@
/**
* 淇敼璇ラ儴闂ㄧ殑鐖剁骇閮ㄩ棬鐘舵��
- *
+ *
* @param dept 褰撳墠閮ㄩ棬
*/
private void updateParentDeptStatusNormal(SysDept dept)
@@ -262,7 +262,7 @@
/**
* 淇敼瀛愬厓绱犲叧绯�
- *
+ *
* @param deptId 琚慨鏀圭殑閮ㄩ棬ID
* @param newAncestors 鏂扮殑鐖禝D闆嗗悎
* @param oldAncestors 鏃х殑鐖禝D闆嗗悎
@@ -282,7 +282,7 @@
/**
* 鍒犻櫎閮ㄩ棬绠$悊淇℃伅
- *
+ *
* @param deptId 閮ㄩ棬ID
* @return 缁撴灉
*/
@@ -319,6 +319,11 @@
}
}
+ @Override
+ public SysDept selectDeptByDeptName(String deptName) {
+ return deptMapper.selectDeptByDeptName(deptName);
+ }
+
/**
* 寰楀埌瀛愯妭鐐瑰垪琛�
*/
diff --git a/src/main/java/com/ruoyi/tide/controller/TideController.java b/src/main/java/com/ruoyi/tide/controller/TideController.java
new file mode 100644
index 0000000..a530152
--- /dev/null
+++ b/src/main/java/com/ruoyi/tide/controller/TideController.java
@@ -0,0 +1,122 @@
+package com.ruoyi.tide.controller;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.aspectj.lang.annotation.Anonymous;
+import com.ruoyi.framework.security.service.SysLoginService;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.project.system.domain.SysDept;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.service.ISysDeptService;
+import com.ruoyi.project.system.service.ISysUserService;
+import com.ruoyi.tide.pojo.TidePojo;
+import com.ruoyi.tide.utils.TideUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+@RequestMapping("/tide")
+@RestController
+@Api(tags = "瀵规帴娴疆绯荤粺")
+@Anonymous
+@Slf4j
+public class TideController {
+
+ @Autowired
+ private SysLoginService loginService;
+
+ @Autowired
+ private ISysUserService userService;
+
+ @Autowired
+ private ISysDeptService deptService;
+
+ @ApiOperation(value = "鐧诲綍")
+ @PostMapping("/tideLogin")
+ public AjaxResult login(@RequestBody TidePojo tidePojo) {
+ String token = TideUtils.getToken(tidePojo.getCode());
+ JSONObject userInfo = TideUtils.getUserInfo(token);
+ JSONObject tenant = JSONObject.parseObject(userInfo.get("tenant").toString());
+ AjaxResult ajax = AjaxResult.success();
+ // 鐢熸垚浠ょ墝
+ String generateToken = loginService.login(tenant.get("tenantAccount").toString(), tenant.get("tenantPassword").toString(), null,
+ IdWorker.get32UUID());
+ ajax.put(Constants.TOKEN, generateToken);
+ return ajax;
+ }
+
+ @PostMapping("/applicationOrdering")
+ @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
+ public JSONObject order (@RequestBody TidePojo tidePojo) {
+ SysUser user = userService.selectUserByUserName(tidePojo.getPltAccountLogin());
+ String defaultPwd = "I73Kj+Mn$+SI";//榛樿寮�閫氬瘑鐮佸浐瀹氬啓姝�
+// String randomString = TideUtils.getRandomString(12);
+ //璐﹀彿涓嶅瓨鍦紝鎵ц鏂板鎿嶄綔
+ if(ObjectUtils.isEmpty(user)){
+ //1.鍏堟柊澧炵敤鎴峰搴旂殑鍏徃
+ SysDept dept = new SysDept();
+ dept.setParentId(100L);//鐖跺叕鍙竔d
+ dept.setDeptName(tidePojo.getEnterpriseName());
+ dept.setDeptNick(tidePojo.getEnterpriseName());
+ dept.setOrderNum(0);
+ boolean deptNameUnique = deptService.checkDeptNameUnique(dept);
+ if (deptNameUnique){
+ deptService.insertDept(dept);
+ }
+ //鏌ヨ鍏徃
+ SysDept newSysDept = deptService.selectDeptByDeptName(dept.getDeptName());
+ dept.setDeptId(ObjectUtils.isEmpty(newSysDept)?100L:newSysDept.getDeptId());
+ dept.setTenantId(dept.getDeptId());
+ deptService.updateDept(dept);
+ user = new SysUser();
+ String password = SecurityUtils.encryptPassword(defaultPwd);
+ user.setPassword(password);
+ user.setUserName(tidePojo.getPltAccountLogin());
+ user.setNickName(tidePojo.getEnterpriseName());
+ user.setStatus("0");
+ user.setDelFlag("0");
+ user.setPostIds(new Long[]{1L});
+ user.setRoleId(1L);
+ user.setRoleIds(new Long[]{2L});//榛樿鏅�氳鑹�
+ user.setDeptIds(new Long[]{dept.getDeptId()});//缁戝畾鍏徃
+ user.setTenantId(dept.getDeptId());
+ userService.insertUser(user);
+ }
+ Map<String, Object> map = new HashMap<>();
+ map.put("account", tidePojo.getPltAccountLogin());
+ map.put("token", defaultPwd);
+ map.put("tenantId", user.getUserId());
+ return TideUtils.getResult(20000, "鎴愬姛", map);
+ }
+
+ @PostMapping("/cancellation")
+ public JSONObject cancellation (@RequestBody TidePojo tidePojo) {
+ log.info("鎵ц浜嗘敞閿�淇℃伅锛�" + tidePojo);
+ if(Objects.nonNull(tidePojo)){
+ SysUser sysUser = userService.selectUserByUserName(tidePojo.getPltAccountLogin());
+ if(Objects.nonNull(sysUser)){
+ userService.deleteUserById(sysUser.getUserId());
+ }
+ }
+ return TideUtils.getResult(20000, "鎴愬姛", null);
+ }
+
+ public static void main(String[] args) {
+ String password = SecurityUtils.encryptPassword("c($Rb_@!n%U7");
+ System.out.println(password);
+ }
+}
diff --git a/src/main/java/com/ruoyi/tide/pojo/TidePojo.java b/src/main/java/com/ruoyi/tide/pojo/TidePojo.java
new file mode 100644
index 0000000..45e5eab
--- /dev/null
+++ b/src/main/java/com/ruoyi/tide/pojo/TidePojo.java
@@ -0,0 +1,31 @@
+package com.ruoyi.tide.pojo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class TidePojo {
+ @ApiModelProperty("浼佷笟鍚嶇О")
+ private String enterpriseName;
+
+ @ApiModelProperty("骞冲彴鐢ㄦ埛")
+ private String pltUserCn;
+
+ @ApiModelProperty("骞冲彴璐﹀彿")
+ private String pltAccountLogin;
+
+ @ApiModelProperty("璁㈣喘鏃堕暱")
+ private Integer purchaseDuration;
+
+ @ApiModelProperty("璁㈠崟鏃堕暱鍗曚綅")
+ private String purchaseUnit;
+
+ @ApiModelProperty("appKey")
+ private String appKey;
+
+ @ApiModelProperty("appSecret")
+ private String appSecret;
+
+ @ApiModelProperty("code")
+ private String code;
+}
diff --git a/src/main/java/com/ruoyi/tide/utils/TideUtils.java b/src/main/java/com/ruoyi/tide/utils/TideUtils.java
new file mode 100644
index 0000000..10f84ab
--- /dev/null
+++ b/src/main/java/com/ruoyi/tide/utils/TideUtils.java
@@ -0,0 +1,191 @@
+package com.ruoyi.tide.utils;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.crypto.digest.HMac;
+import cn.hutool.crypto.digest.HmacAlgorithm;
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.util.HashMap;
+
+@Data
+@Component
+@Slf4j
+public class TideUtils {
+
+ public static String APP_ID;
+ public static String APP_SECRET;
+
+
+ @Value("${inspur.appId}")
+ private String appId;
+
+ @Value("${inspur.appSecret}")
+ private String appSecret;
+
+ @Value("${inspur.appId}")
+ public void setAppId(String appId) {
+ TideUtils.APP_ID = appId;
+ }
+
+ @Value("${inspur.appSecret}")
+ public void setAppSecret(String appSecret) {
+ TideUtils.APP_SECRET = appSecret;
+ }
+
+ // 鍐呯綉鍦板潃
+ private final static String ip = "http://10.136.0.8:8083";
+
+ // MD5鍔犲瘑骞惰浆鎹负16杩涘埗
+ public static String md5Encryption(String input) {
+ try {
+ MessageDigest md = MessageDigest.getInstance("MD5");
+ byte[] digest = md.digest(input.getBytes());
+ StringBuilder sb = new StringBuilder();
+ for (byte b : digest) {
+ sb.append(String.format("%02x", b & 0xff));
+ }
+ return sb.toString();
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ // get璇锋眰
+ public static HashMap<String, String> getGetHeader(String parameter) {
+ // 鏃堕棿鎴�
+ String xTime = String.valueOf(DateUtil.current());
+ // 鑾峰彇闅忔満16浣嶅瓧绗︿覆
+ String xRandom = RandomUtil.randomString(16);
+ String xSignSplicingTogether;
+ // 鏈夊弬鏁�
+ if (ObjectUtils.isNotEmpty(parameter)) {
+ // 鍔犲瘑寰楀嚭x-body
+ String xBody = md5Encryption(parameter);
+ // 涓簒-sign鍔犲瘑鍋氭嫾鎺�
+ xSignSplicingTogether = "x-body=" + xBody + "&x-random=" + xRandom + "&x-time=" + xTime;
+ // 鏃犲弬鏁�
+ } else {
+ xSignSplicingTogether = "x-random=" + xRandom + "&x-time=" + xTime;
+ }
+ // 閰嶇疆鍔犲瘑鏂瑰紡涓庡瘑閽�
+ HMac hMac = new HMac(HmacAlgorithm.HmacSHA256, APP_SECRET.getBytes());
+ // 寰楀嚭x-sign
+ String xSign = hMac.digestHex(xSignSplicingTogether);
+ HashMap<String, String> result = new HashMap<>();
+ result.put("x-time", xTime);
+ result.put("x-random", xRandom);
+ result.put("x-sign", xSign);
+ result.put("appKey", APP_ID);
+ return result;
+ }
+
+ // post璇锋眰
+ public static HashMap<String, String> getPostHeader(String parameter) {
+ // 鏃堕棿鎴�
+ String xTime = String.valueOf(DateUtil.current());
+ // 鑾峰彇闅忔満16浣嶅瓧绗︿覆
+ String xRandom = RandomUtil.randomString(16);
+ String xSignSplicingTogether;
+ // 鏈夊弬鏁�
+ if (ObjectUtils.isNotEmpty(parameter)) {
+ // 鍔犲瘑寰楀嚭x-body
+ String xBody = md5Encryption(parameter);
+ // 涓簒-sign鍔犲瘑鍋氭嫾鎺�
+ xSignSplicingTogether = "x-body=" + xBody + "&x-random=" + xRandom + "&x-time=" + xTime;
+ // 鏃犲弬鏁�
+ } else {
+ xSignSplicingTogether = "x-random=" + xRandom + "&x-time=" + xTime;
+ }
+ // x-sign 鍔犲瘑
+ HMac hMac = new HMac(HmacAlgorithm.HmacSHA256, APP_SECRET.getBytes());
+ String xSign = hMac.digestHex(xSignSplicingTogether);
+ HashMap<String, String> result = new HashMap<>();
+ result.put("x-time", xTime);
+ result.put("x-random", xRandom);
+ result.put("x-sign", xSign);
+ result.put("appKey", APP_ID);
+ return result;
+ }
+
+ /**
+ * 浜斿垎閽熶竴娆$殑蹇冭烦
+ */
+ @Scheduled(cron = "0 0/5 * * * ?")
+ public static void heartbeat(){
+ HashMap<String, String> header = getGetHeader(null);
+ String url = ip + "/cpn/api/extra/v1/application/heartbeat";
+ String body = HttpRequest.get(url).headerMap(header, false).execute().body();
+ System.out.println(body + "搴旂敤蹇冭烦鎵ц鎴愬姛锛�");
+ }
+
+ // 鑾峰彇token
+ public static String getToken(String code) {
+ String url = ip + "/cpn/extral/applicationCode/appAuthCheck";
+ JSONObject json = new JSONObject();
+ json.put("code", code);
+ json.put("appID", APP_ID);
+ json.put("appSecret", APP_SECRET);
+ HashMap<String, String> header = getPostHeader(json.toString());
+ String body = HttpRequest.post(url)
+ .headerMap(header, false)
+ .body(json.toString())
+ .execute().body();
+ JSONObject jsonObject = JSONObject.parseObject(body);
+ return jsonObject.get("data").toString();
+ }
+
+ // 鑾峰彇鐢ㄦ埛淇℃伅
+ public static JSONObject getUserInfo(String token) {
+ String url = ip + "/cpn/api/extral/applicationCode/getUserInfoByToken";
+ JSONObject json = new JSONObject();
+ json.put("appID", APP_ID);
+ HashMap<String, String> header = getPostHeader(json.toString());
+ header.put("Authorization", token);
+ String body = HttpRequest.post(url)
+ .headerMap(header, false)
+ .body(json.toString())
+ .execute().body();
+ JSONObject jsonObject = JSONObject.parseObject(body);
+ return JSONObject.parseObject(jsonObject.get("data").toString());
+ }
+
+ public static JSONObject getResult(Integer code, String msg, Object data) {
+ JSONObject json = new JSONObject();
+ json.put("code", code);
+ json.put("msg", msg);
+ json.put("data", data);
+ String xRandom = RandomUtil.randomString(16);
+ json.put("traceId", xRandom);
+ return json;
+ }
+
+ public static String getRandomString(int length) {
+ SecureRandom random = new SecureRandom();
+ String uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ String lowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
+ String numbers = "0123456789";
+ String specialCharacters = "!@$%^&*()_+-=.";
+ String characterSet = uppercaseLetters + lowercaseLetters + numbers + specialCharacters;
+ StringBuilder passwordBuilder = new StringBuilder();
+
+ for (int i = 0; i < length; i++) {
+ int randomIndex = random.nextInt(characterSet.length());
+ char randomChar = characterSet.charAt(randomIndex);
+ passwordBuilder.append(randomChar);
+ }
+
+ return passwordBuilder.toString();
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/application-lc-khgxglxt.yml b/src/main/resources/application-lc-khgxglxt.yml
new file mode 100644
index 0000000..ca41689
--- /dev/null
+++ b/src/main/resources/application-lc-khgxglxt.yml
@@ -0,0 +1,271 @@
+# 椤圭洰鐩稿叧閰嶇疆
+inspur:
+ appId: 1259507573191606272
+ appSecret: 2cbpMDMwNjIwMjYxMTE0MzE2MDA2FD
+ruoyi:
+ # 鍚嶇О
+ name: RuoYi
+ # 鐗堟湰
+ version: 3.8.9
+ # 鐗堟潈骞翠唤
+ copyrightYear: 2025
+ # 鏂囦欢璺緞 绀轰緥锛� Windows閰嶇疆D:/ruoyi/uploadPath锛孡inux閰嶇疆 /home/ruoyi/uploadPath锛�
+ profile: /javaWork/product-inventory-management/file
+
+ # 鑾峰彇ip鍦板潃寮�鍏�
+ addressEnabled: false
+ # 楠岃瘉鐮佺被鍨� math 鏁板瓧璁$畻 char 瀛楃楠岃瘉
+ captchaType: math
+ # 鍗忓悓瀹℃壒缂栧彿鍓嶇紑(閰嶇疆鏂囦欢鍚庣紑鍛藉悕)
+ approvalNumberPrefix: NEW
+
+ # 涓帹 Unipush 閰嶇疆
+ getui:
+ appId: PfjyAAE0FK64FaO1w2CMb1
+ appKey: zTMb831OEL6J4GK1uE3Ob4
+ masterSecret: K1GFtsv42v61tXGnF7SGE5
+ domain: https://restapi.getui.cn/v2/
+ # 绂荤嚎鎺ㄩ�佷娇鐢ㄧ殑鍖呭悕/缁勪欢鍚�
+ intentComponent: uni.app.UNI099A590/io.dcloud.PandoraEntry
+
+# 寮�鍙戠幆澧冮厤缃�
+server:
+ # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080
+ port: 9055
+ servlet:
+ # 搴旂敤鐨勮闂矾寰�
+ context-path: /
+ tomcat:
+ # tomcat鐨刄RI缂栫爜
+ uri-encoding: UTF-8
+ # 杩炴帴鏁版弧鍚庣殑鎺掗槦鏁帮紝榛樿涓�100
+ accept-count: 1000
+ threads:
+ # tomcat鏈�澶х嚎绋嬫暟锛岄粯璁や负200
+ max: 800
+ # Tomcat鍚姩鍒濆鍖栫殑绾跨▼鏁帮紝榛樿鍊�10
+ min-spare: 100
+
+# 鏃ュ織閰嶇疆
+logging:
+ level:
+ com.ruoyi: warn
+ org.springframework: warn
+
+minio:
+ endpoint: http://114.132.189.42/
+ port: 7019
+ secure: false
+ accessKey: admin
+ secretKey: 12345678
+ preview-expiry: 24 # 棰勮鍦板潃榛樿24灏忔椂
+ default-bucket: jxc
+# 鐢ㄦ埛閰嶇疆
+user:
+ password:
+ # 瀵嗙爜鏈�澶ч敊璇鏁�
+ maxRetryCount: 5
+ # 瀵嗙爜閿佸畾鏃堕棿锛堥粯璁�10鍒嗛挓锛�
+ lockTime: 10
+
+# Spring閰嶇疆
+spring:
+ datasource:
+ type: com.alibaba.druid.pool.DruidDataSource
+ driverClassName: com.mysql.cj.jdbc.Driver
+ druid:
+ # 涓诲簱鏁版嵁婧�
+ master:
+ url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-lc?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+ username: root
+ password: xd@123456..
+ # 浠庡簱鏁版嵁婧�
+ slave:
+ # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
+ enabled: false
+ url:
+ username:
+ password:
+ # 鍒濆杩炴帴鏁�
+ initialSize: 5
+ # 鏈�灏忚繛鎺ユ睜鏁伴噺
+ minIdle: 10
+ # 鏈�澶ц繛鎺ユ睜鏁伴噺
+ maxActive: 20
+ # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
+ maxWait: 60000
+ # 閰嶇疆杩炴帴瓒呮椂鏃堕棿
+ connectTimeout: 30000
+ # 閰嶇疆缃戠粶瓒呮椂鏃堕棿
+ socketTimeout: 60000
+ # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
+ timeBetweenEvictionRunsMillis: 60000
+ # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+ minEvictableIdleTimeMillis: 300000
+ # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+ maxEvictableIdleTimeMillis: 900000
+ # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁�
+ validationQuery: SELECT 1 FROM DUAL
+ testWhileIdle: true
+ testOnBorrow: false
+ testOnReturn: false
+ webStatFilter:
+ enabled: true
+ statViewServlet:
+ enabled: true
+ # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂�
+ allow:
+ url-pattern: /druid/*
+ # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮�
+ login-username: ruoyi
+ login-password: 123456
+ filter:
+ stat:
+ enabled: true
+ # 鎱QL璁板綍
+ log-slow-sql: true
+ slow-sql-millis: 1000
+ merge-sql: true
+ wall:
+ config:
+ multi-statement-allow: true
+ # 璧勬簮淇℃伅
+ messages:
+ # 鍥介檯鍖栬祫婧愭枃浠惰矾寰�
+ basename: i18n/messages
+ # 鏂囦欢涓婁紶
+ servlet:
+ multipart:
+ # 鍗曚釜鏂囦欢澶у皬
+ max-file-size: 1GB
+ # 璁剧疆鎬讳笂浼犵殑鏂囦欢澶у皬
+ max-request-size: 2GB
+ # 鏈嶅姟妯″潡
+ devtools:
+ restart:
+ # 鐑儴缃插紑鍏�
+ enabled: false
+ # redis 閰嶇疆
+ data:
+ mongodb:
+ uri: mongodb://114.132.189.42:9028/chat_memory_db
+ # redis 閰嶇疆
+ redis:
+ # 鍦板潃
+# host: 127.0.0.1
+ host: 172.17.0.1
+ # 绔彛锛岄粯璁や负6379
+ port: 6379
+ # 鏁版嵁搴撶储寮�
+ database: 0
+ # 瀵嗙爜
+ # password: root2022!
+ password:
+
+ # 杩炴帴瓒呮椂鏃堕棿
+ timeout: 10s
+ lettuce:
+ pool:
+ # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
+ min-idle: 0
+ # 杩炴帴姹犱腑鐨勬渶澶х┖闂茶繛鎺�
+ max-idle: 8
+ # 杩炴帴姹犵殑鏈�澶ф暟鎹簱杩炴帴鏁�
+ max-active: 8
+ # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
+ max-wait: -1ms
+
+ # Quartz瀹氭椂浠诲姟閰嶇疆锛堟柊澧為儴鍒嗭級
+ quartz:
+ job-store-type: jdbc # 浣跨敤鏁版嵁搴撳瓨鍌�
+ jdbc:
+ initialize-schema: never # 棣栨杩愯鏃惰嚜鍔ㄥ垱寤鸿〃缁撴瀯锛屾垚鍔熷悗鏀逛负never
+ schema: classpath:org/quartz/impl/jdbcjobstore/tables_mysql_innodb.sql # MySQL琛ㄧ粨鏋勮剼鏈�
+ properties:
+ org:
+ quartz:
+ scheduler:
+ instanceName: RuoYiScheduler
+ instanceId: AUTO
+ jobStore:
+ class: org.quartz.impl.jdbcjobstore.JobStoreTX
+ driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate # MySQL閫傞厤
+ tablePrefix: qrtz_ # 琛ㄥ悕鍓嶇紑锛屼笌鑴氭湰涓�鑷�
+ isClustered: false # 鍗曡妭鐐规ā寮忥紙闆嗙兢闇�鏀逛负true锛�
+ clusterCheckinInterval: 10000
+ txIsolationLevelSerializable: true
+ threadPool:
+ class: org.quartz.simpl.SimpleThreadPool
+ threadCount: 10 # 绾跨▼姹犲ぇ灏�
+ threadPriority: 5
+ makeThreadsDaemons: true
+ updateCheck: false # 鍏抽棴鐗堟湰妫�鏌�
+# token閰嶇疆
+token:
+ # 浠ょ墝鑷畾涔夋爣璇�
+ header: Authorization
+ # 浠ょ墝瀵嗛挜
+ secret: xpAVjhCjQDaDB7mjPAzMDSbQWXNu2zYkTdDNUsPMS5Xx8QMmQVYN7n74eZrYJxDJ
+ # 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛�
+ expireTime: 450
+
+# MyBatis Plus閰嶇疆
+mybatis-plus:
+ # 鎼滅储鎸囧畾鍖呭埆鍚� 鏍规嵁鑷繁鐨勯」鐩潵
+ typeAliasesPackage: com.ruoyi.**.pojo
+ # 閰嶇疆mapper鐨勬壂鎻忥紝鎵惧埌鎵�鏈夌殑mapper.xml鏄犲皠鏂囦欢
+ mapperLocations: classpath*:mapper/**/*Mapper.xml
+ # 鍔犺浇鍏ㄥ眬鐨勯厤缃枃浠�
+ configLocation: classpath:mybatis/mybatis-config.xml
+ global-config:
+ enable-sql-runner: true
+ db-config:
+ id-type: auto
+
+# PageHelper鍒嗛〉鎻掍欢
+pagehelper:
+ helperDialect: mysql
+ supportMethodsArguments: true
+ params: count=countSql
+
+# Swagger閰嶇疆
+swagger:
+ # 鏄惁寮�鍚痵wagger
+ enabled: true
+ # 璇锋眰鍓嶇紑
+ pathMapping: /dev-api
+
+# 闃叉XSS鏀诲嚮
+xss:
+ # 杩囨护寮�鍏�
+ enabled: true
+ # 鎺掗櫎閾炬帴锛堝涓敤閫楀彿鍒嗛殧锛�
+ excludes: /system/notice
+ # 鍖归厤閾炬帴
+ urlPatterns: /system/*,/monitor/*,/tool/*
+
+# 浠g爜鐢熸垚
+gen:
+ # 浣滆��
+ author: ruoyi
+ # 榛樿鐢熸垚鍖呰矾寰� system 闇�鏀规垚鑷繁鐨勬ā鍧楀悕绉� 濡� system monitor tool
+ packageName: com.ruoyi.project.system
+ # 鑷姩鍘婚櫎琛ㄥ墠缂�锛岄粯璁ゆ槸true
+ autoRemovePre: false
+ # 琛ㄥ墠缂�锛堢敓鎴愮被鍚嶄笉浼氬寘鍚〃鍓嶇紑锛屽涓敤閫楀彿鍒嗛殧锛�
+ tablePrefix: sys_
+ # 鏄惁鍏佽鐢熸垚鏂囦欢瑕嗙洊鍒版湰鍦帮紙鑷畾涔夎矾寰勶級锛岄粯璁や笉鍏佽
+ allowOverwrite: false
+
+# 鏂囦欢涓婁紶閰嶇疆
+file:
+ temp-dir: /javaWork/product-inventory-management/file/temp/uploads # 涓存椂鐩綍
+ upload-dir: /javaWork/product-inventory-management/file/prod/uploads # 姝e紡鐩綍
+ path: /javaWork/product-inventory-management/file # 涓婁紶鐩綍
+ urlPrefix: /prod-api/common # 閾炬帴鍓嶇紑
+ domain: http://1.15.17.182:9054 # 鍩熷悕鍓嶇紑
+ expired: 120 # 杩囨湡鏃堕棿(鍗曚綅:鍒嗛挓)
+ useLimit: 10 # 浣跨敤娆℃暟
+ compress: true # 鏄惁鍘嬬缉
+ needCompressSize: 10MB # 鍘嬬缉闃堝��
+ compressQuality: 0.5 # 鍘嬬缉璐ㄩ噺(0.0-1.0)
diff --git a/src/main/resources/application-lc-pro.yml b/src/main/resources/application-lc-pro.yml
index c3958ee..4534d88 100644
--- a/src/main/resources/application-lc-pro.yml
+++ b/src/main/resources/application-lc-pro.yml
@@ -1,4 +1,7 @@
# 椤圭洰鐩稿叧閰嶇疆
+inspur:
+ appId: 1205971611543404544
+ appSecret: VkyDMDYwMTIwMjYxNzQxNDM2OTItrv
ruoyi:
# 鍚嶇О
name: RuoYi
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 70324c6..f57eec0 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -3,7 +3,7 @@
main:
allow-circular-references: true
profiles:
- active: dev
+ active: lc-khgxglxt
langchain4j:
mcp:
# MCP 鏈嶅姟绔湴鍧�锛堟牴鎹疄闄呴儴缃茬殑 MCP 鏈嶅姟璋冩暣锛�
diff --git a/src/main/resources/mapper/system/SysDeptMapper.xml b/src/main/resources/mapper/system/SysDeptMapper.xml
index ec25839..ec42e7f 100644
--- a/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -184,4 +184,9 @@
WHERE parent_id = 100;
</select>
+ <select id="selectDeptByDeptName" resultType="com.ruoyi.project.system.domain.SysDept">
+ <include refid="selectDeptVo"/>
+ WHERE d.dept_name = #{deptName}
+ LIMIT 1
+ </select>
</mapper>
--
Gitblit v1.9.3