From abefef70ee144169527e878513636578742f40bc Mon Sep 17 00:00:00 2001
From: chengf <cgf12138@163.com>
Date: 星期四, 29 一月 2026 09:34:51 +0800
Subject: [PATCH] 上词掉词逻辑更新-cgf
---
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/demo/contract/controller/ContractController.java | 282 +++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 259 insertions(+), 23 deletions(-)
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/demo/contract/controller/ContractController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/demo/contract/controller/ContractController.java
index e294add..0a7b7c7 100644
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/demo/contract/controller/ContractController.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/demo/contract/controller/ContractController.java
@@ -6,11 +6,18 @@
import java.util.*;
import java.util.stream.Collectors;
+import cn.hutool.extra.pinyin.PinyinUtil;
import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.websocket.server.PathParam;
+import net.sourceforge.pinyin4j.PinyinHelper;
+import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
+import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
+import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
+import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.jeecg.common.aspect.DictAspect;
import org.jeecg.modules.demo.customer.entity.Customer;
import org.jeecg.modules.demo.customer.service.ICustomerService;
@@ -37,6 +44,8 @@
import org.jeecg.modules.demo.contract.service.ISemanticWordService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.multipart.MultipartFile;
@@ -99,14 +108,21 @@
}
// 鑷畾涔夊閫夌殑鏌ヨ瑙勫垯涓猴細LIKE_WITH_OR
customeRuleMap.put("reviewStatus", QueryRuleEnum.LIKE_WITH_OR);
- QueryWrapper<Contract> queryWrapper = QueryGenerator.initQueryWrapper(contract, req.getParameterMap(),customeRuleMap);
+ QueryWrapper<Contract> queryWrapper = QueryGenerator.initQueryWrapper(contract, req.getParameterMap(),customeRuleMap,true);
+ if (contract.getAgentAuditorIsNull() != null) {
+ if (contract.getAgentAuditorIsNull().equals("false")) {
+ queryWrapper.isNotNull("agents_name");
+ } else{
+ queryWrapper.and(wrapper -> wrapper.isNull("agents_name").or().eq("agents_name", ""));
+
+ }
+ }
if (user.equals("鏃�"));
-// else if (role.equals("1972228581703651330")){//閿�鍞�
- else{
+ else if (role.equals("1972228581703651330")){//閿�鍞�
+// else{
// if (user.equals("鏃�")){
// return Result.error("璇疯緭鍏ラ攢鍞悕绉�");//閿�鍞牴鎹敤鎴风瓫閫�
// }
- queryWrapper = new QueryWrapper<>();
QueryWrapper<SysUser> sysUserQueryWrapper = new QueryWrapper<>();
sysUserQueryWrapper.eq("agent_sales", user);
Result<IPage<SysUser>> iPageResult = sysUserService.queryPageList(req, sysUserQueryWrapper, pageSize, pageNo);
@@ -115,14 +131,42 @@
name.add(sysUser.getUsername());
}
name.add(user);
- queryWrapper.in("create_by", name);
-
+ queryWrapper.nested(wrapper -> {
+ // 鍐呭眰绗竴涓潯浠讹細(create_by IN (name) AND review_status != 2)
+ wrapper.nested(w1 -> w1.in("create_by", name).ne("review_status", 2));
+ // 鍐呭眰 OR 鏉′欢锛�(create_by = 鏈�鍚庝竴涓猲ame AND review_status = 2)
+ wrapper.or(w2 -> w2.eq("create_by", name.get(name.size()-1)).eq("review_status", 2));
+ });
}
-// else if (role.equals("1972228688033452034")){//璐㈠姟
-// queryWrapper.ne("review_status", "8");
-// }
+ if (role.equals("1972228688033452034")){//璐㈠姟
+ queryWrapper.ne("review_status", "8");
+ }
Page<Contract> page = new Page<Contract>(pageNo, pageSize);
- IPage<Contract> pageList = contractService.page(page, queryWrapper);
+ queryWrapper.orderBy(
+ true, // condition锛氭槸鍚﹀惎鐢ㄨ鎺掑簭锛坱rue=鍚敤锛�
+ false, // isAsc锛氭槸鍚﹀崌搴忥紙false=闄嶅簭锛岃 1 鍦ㄥ墠銆�0 鍦ㄥ悗锛�
+ "CASE WHEN review_status = 1 THEN 1 ELSE 0 END" // R column锛氳櫄鎷熸帓搴忓垪锛堢洿鎺ヤ紶 SQL 鐗囨锛�
+ );
+
+ queryWrapper.orderBy(
+ true, // condition锛氭槸鍚﹀惎鐢ㄨ鎺掑簭锛坱rue=鍚敤锛�
+ false, // isAsc锛氭槸鍚﹀崌搴忥紙false=闄嶅簭锛岃 1 鍦ㄥ墠銆�0 鍦ㄥ悗锛�
+ "CASE WHEN review_status = 2 THEN 1 ELSE 0 END" // R column锛氳櫄鎷熸帓搴忓垪锛堢洿鎺ヤ紶 SQL 鐗囨锛�
+ );
+
+ queryWrapper.orderBy(
+ true, // condition锛氭槸鍚﹀惎鐢ㄨ鎺掑簭锛坱rue=鍚敤锛�
+ true, // isAsc锛氭槸鍚﹀崌搴忥紙false=闄嶅簭锛岃 1 鍦ㄥ墠銆�0 鍦ㄥ悗锛�
+ "emergency_status" // R column锛氳櫄鎷熸帓搴忓垪锛堢洿鎺ヤ紶 SQL 鐗囨锛�
+ );
+
+ queryWrapper.orderBy(
+ true, // condition锛氭槸鍚﹀惎鐢ㄨ鎺掑簭锛坱rue=鍚敤锛�
+ false, // isAsc锛氭槸鍚﹀崌搴忥紙false=闄嶅簭锛岃 1 鍦ㄥ墠銆�0 鍦ㄥ悗锛�
+ "create_time" // R column锛氳櫄鎷熸帓搴忓垪锛堢洿鎺ヤ紶 SQL 鐗囨锛�
+ );
+
+ IPage<Contract> pageList = contractService.page(page, queryWrapper);
List<SemanticWord> semanticWordList = null;
for (Contract contract1 : pageList.getRecords()){
semanticWordList = semanticWordService.selectByMainId(contract1.getId());
@@ -138,8 +182,83 @@
}
return Result.OK(pageList);
}
-
- /**
+
+
+ @Operation(summary="鍚堝悓-鏌ヨ璇ヨ鑹插悎鍚屼釜鏁�")
+ @GetMapping(value = "/count")
+ public Result<IPage<Contract>> queryPageList(Contract contract,
+ @RequestParam(name="role", defaultValue="鏃�") String role,
+ @RequestParam(name="user", defaultValue="鏃�") String user,
+ HttpServletRequest req) {
+ // 鑷畾涔夋煡璇㈣鍒�
+ Map<String, QueryRuleEnum> customeRuleMap = new HashMap<>();
+ if (contract.getCreateBy() != null) {
+ user = contract.getCreateBy();
+ }
+ // 鑷畾涔夊閫夌殑鏌ヨ瑙勫垯涓猴細LIKE_WITH_OR
+ customeRuleMap.put("reviewStatus", QueryRuleEnum.LIKE_WITH_OR);
+ QueryWrapper<Contract> queryWrapper = QueryGenerator.initQueryWrapper(contract, req.getParameterMap(),customeRuleMap,true);
+ if (contract.getAgentAuditorIsNull() != null) {
+ if (contract.getAgentAuditorIsNull().equals("false")) {
+ queryWrapper.isNotNull("agents_name");
+ } else{
+ queryWrapper.and(wrapper -> wrapper.isNull("agents_name").or().eq("agents_name", ""));
+
+ }
+ }
+ if (user.equals("鏃�"));
+ else if (role.equals("1972228581703651330")){//閿�鍞�
+// else{
+// if (user.equals("鏃�")){
+// return Result.error("璇疯緭鍏ラ攢鍞悕绉�");//閿�鍞牴鎹敤鎴风瓫閫�
+// }
+ QueryWrapper<SysUser> sysUserQueryWrapper = new QueryWrapper<>();
+ sysUserQueryWrapper.eq("agent_sales", user);
+ Result<IPage<SysUser>> iPageResult = sysUserService.queryPageList(req, sysUserQueryWrapper, 100, 1);
+ List<String> name = new ArrayList<>();
+ for (SysUser sysUser : iPageResult.getResult().getRecords()){
+ name.add(sysUser.getUsername());
+ }
+ name.add(user);
+ queryWrapper.nested(wrapper -> {
+ // 鍐呭眰绗竴涓潯浠讹細(create_by IN (name) AND review_status != 2)
+ wrapper.nested(w1 -> w1.in("create_by", name).ne("review_status", 2));
+ // 鍐呭眰 OR 鏉′欢锛�(create_by = 鏈�鍚庝竴涓猲ame AND review_status = 2)
+ wrapper.or(w2 -> w2.eq("create_by", name.get(name.size()-1)).eq("review_status", 2));
+ });
+ }
+ if (role.equals("1972228688033452034")){//璐㈠姟
+ queryWrapper.ne("review_status", "8");
+ }
+ queryWrapper.orderBy(
+ true, // condition锛氭槸鍚﹀惎鐢ㄨ鎺掑簭锛坱rue=鍚敤锛�
+ false, // isAsc锛氭槸鍚﹀崌搴忥紙false=闄嶅簭锛岃 1 鍦ㄥ墠銆�0 鍦ㄥ悗锛�
+ "CASE WHEN review_status = 1 THEN 1 ELSE 0 END" // R column锛氳櫄鎷熸帓搴忓垪锛堢洿鎺ヤ紶 SQL 鐗囨锛�
+ );
+
+ queryWrapper.orderBy(
+ true, // condition锛氭槸鍚﹀惎鐢ㄨ鎺掑簭锛坱rue=鍚敤锛�
+ false, // isAsc锛氭槸鍚﹀崌搴忥紙false=闄嶅簭锛岃 1 鍦ㄥ墠銆�0 鍦ㄥ悗锛�
+ "CASE WHEN review_status = 2 THEN 1 ELSE 0 END" // R column锛氳櫄鎷熸帓搴忓垪锛堢洿鎺ヤ紶 SQL 鐗囨锛�
+ );
+
+ queryWrapper.orderBy(
+ true, // condition锛氭槸鍚﹀惎鐢ㄨ鎺掑簭锛坱rue=鍚敤锛�
+ true, // isAsc锛氭槸鍚﹀崌搴忥紙false=闄嶅簭锛岃 1 鍦ㄥ墠銆�0 鍦ㄥ悗锛�
+ "emergency_status" // R column锛氳櫄鎷熸帓搴忓垪锛堢洿鎺ヤ紶 SQL 鐗囨锛�
+ );
+
+ queryWrapper.orderBy(
+ true, // condition锛氭槸鍚﹀惎鐢ㄨ鎺掑簭锛坱rue=鍚敤锛�
+ false, // isAsc锛氭槸鍚﹀崌搴忥紙false=闄嶅簭锛岃 1 鍦ㄥ墠銆�0 鍦ㄥ悗锛�
+ "create_time" // R column锛氳櫄鎷熸帓搴忓垪锛堢洿鎺ヤ紶 SQL 鐗囨锛�
+ );
+
+ long count = contractService.count(queryWrapper);
+ return Result.OK(count+"");
+ }
+
+ /**
* 娣诲姞
*
* @param contractPage
@@ -152,10 +271,47 @@
public Result<String> add(@RequestBody ContractPage contractPage) {
Contract contract = new Contract();
BeanUtils.copyProperties(contractPage, contract);
+ contract.setContractCode(getFirstLetter(contract.getContractName()));
contractService.saveMain(contract, contractPage.getContractFileList(),contractPage.getSemanticWordList());
- return Result.OK("娣诲姞鎴愬姛锛�");
+ addContract(contract,contractPage.getSemanticWordList());
+
+
+
+ return Result.OK("娣诲姞鎴愬姛锛�");
}
-
+
+ public static String getFirstLetter(String chinese) {
+ if (chinese == null || chinese.isEmpty()) {
+ return "";
+ }
+
+ HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
+ format.setCaseType(HanyuPinyinCaseType.UPPERCASE); // 澶у啓
+ format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 蹇界暐澹拌皟
+
+ StringBuilder firstLetters = new StringBuilder();
+ char[] chars = chinese.toCharArray();
+
+ for (char c : chars) {
+ // 濡傛灉鏄腑鏂囷紝鎻愬彇棣栧瓧姣�
+ if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
+ try {
+ String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format);
+ if (pinyinArray != null && pinyinArray.length > 0) {
+ firstLetters.append(pinyinArray[0].charAt(0)); // 鍙栫涓�涓嫾闊崇殑棣栧瓧姣�
+ }
+ } catch (BadHanyuPinyinOutputFormatCombination e) {
+ e.printStackTrace();
+ }
+ } else {
+ // 闈炰腑鏂囦笉澶勭悊锛堟垨鏍规嵁闇�姹備繚鐣�/杩囨护锛�
+ // firstLetters.append(c); // 濡傞渶淇濈暀闈炰腑鏂囧瓧绗︼紝瑙e紑姝ゆ敞閲�
+ }
+ }
+
+ return firstLetters.toString();
+ }
+
/**
* 缂栬緫
*
@@ -202,6 +358,13 @@
}
contractService.updateMain(contract, contractPage.getContractFileList(),contractPage.getSemanticWordList());
customerService.updateById(contractEntity.getCustomer());
+
+ if (contractPage.getStatus() != null) {
+ UpdateWrapper<SemanticWord> updateWrapper = new UpdateWrapper<>();
+ updateWrapper.set("status", contractPage.getStatus()); // 鏇挎崲涓哄疄闄呰淇敼鐨勫瓧娈靛悕锛堝semantic_id锛�
+ updateWrapper.eq("contract_id", contract.getId()); // 澶嶇敤鏌ヨ鏉′欢
+ boolean update = semanticWordService.update(updateWrapper);
+ }
return Result.OK("缂栬緫鎴愬姛!");
}
@@ -216,7 +379,28 @@
@RequiresPermissions("contract:contract:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
- contractService.delMain(id);
+ QueryWrapper<Contract> objectQueryWrapper = new QueryWrapper<>();
+ objectQueryWrapper.eq("id",id);
+
+ List<Contract> list = contractService.list(objectQueryWrapper);
+ String customerName = list.get(0).getCustomerName();
+ contractService.delMain(id);
+
+ objectQueryWrapper = new QueryWrapper<>();
+ objectQueryWrapper.eq("customer_name",customerName);
+
+ if (contractService.count(objectQueryWrapper) == 0) {
+ QueryWrapper<Customer> customerQueryWrapper = new QueryWrapper<>();
+ customerQueryWrapper.eq("enterprise_name",customerName);
+ Customer one = customerService.getOne(customerQueryWrapper);
+ customerService.removeById(one);
+
+ QueryWrapper<SysUser> qw = new QueryWrapper<>();
+ qw.eq("username", customerName);
+ qw.eq("realname", customerName);
+
+ sysUserService.remove(qw);
+ }
return Result.OK("鍒犻櫎鎴愬姛!");
}
@@ -397,16 +581,16 @@
// 璁$畻鏃ユ湡鑼冨洿
java.time.LocalDate today = java.time.LocalDate.now();
java.util.Date startDate = java.sql.Date.valueOf(today);
- java.util.Date endDateLimit = java.sql.Date.valueOf(today.plusDays(days));
+ java.util.Date endDateLimit = java.sql.Date.valueOf(today.minusDays(days));
// 鏋勫缓鏌ヨ鏉′欢
QueryWrapper<Contract> queryWrapper = new QueryWrapper<>();
- queryWrapper.ge("end_date", startDate); // end_date >= 浠婂ぉ
- queryWrapper.le("end_date", endDateLimit); // end_date <= 浠婂ぉ+鎸囧畾澶╂暟
-
- // 鎸夌粨鏉熸棩鏈熷崌搴忔帓鍒楋紝鍗冲皢杩囨湡鐨勬帓鍓嶉潰
- queryWrapper.orderByAsc("end_date");
-
+ queryWrapper.isNotNull("month")
+ // 鏇挎崲涓� MySQL 姝g‘鐨� DATE_ADD 璇硶锛欴ATE_ADD(鏃ユ湡, INTERVAL 鏁板�� 鍗曚綅)
+ .apply("DATE_ADD(create_time, INTERVAL month MONTH) >= {0}", endDateLimit)
+ .apply("DATE_ADD(create_time, INTERVAL month MONTH) <= {0}", startDate)
+ // 鎺掑簭涔熷悓姝ユ浛鎹负 MySQL 璇硶
+ .orderByAsc("DATE_ADD(create_time, INTERVAL month MONTH)");
// 鎵ц鏌ヨ
List<Contract> contractList = contractService.list(queryWrapper);
@@ -461,6 +645,55 @@
return Result.error("鏌ヨ澶辫触: " + e.getMessage());
}
}
+
+ @Autowired
+ @Qualifier("robinJdbcTemplate") // 鎸囧畾鐗瑰畾鐨凧dbcTemplate
+ private JdbcTemplate jdbcTemplate;
+
+ public void addContract(Contract contract, List<SemanticWord> semanticWordList) {
+ for (SemanticWord semanticWord : semanticWordList){
+ String uuid = UUID.randomUUID().toString().replaceAll("-", "");
+ String sBookMarkName = PinyinUtil.getPinyin(contract.getContractName(), "") + "_" + PinyinUtil.getPinyin(semanticWord.getOutWord());
+ String sCreator = contract.getCreateBy();
+ String sType = contract.getAgentsName() == null || contract.getAgentsName().equals("") ? "瀹㈡埛" : "浠g悊鍟�";
+ String sTarget = semanticWord.getOutWord();
+ String checkSql = "SELECT COUNT(1) FROM d_Contract WHERE sBookMarkName = ?";
+ String contractId = PinyinUtil.getPinyin(contract.getContractName(), "");
+ Integer count = jdbcTemplate.queryForObject(
+ checkSql,
+ new Object[]{sBookMarkName}, // 浼犲叆鏌ヨ鍙傛暟锛堝悎鍚屽悕绉帮級
+ Integer.class
+ );
+ if (count > 0) {
+ return;
+ }
+ String[] arr = new String[]{"鍝濂�", "鍝闈犺氨", "鎺掕姒�", "閫夊摢瀹�", "鎺掑悕"};
+ for (int i = 0; i < 5; i++) {
+ uuid = UUID.randomUUID().toString().replaceAll("-", "");
+ sBookMarkName = semanticWord.getWord() + arr[i];
+ String semantic_word = semanticWord.getOutWord();
+// 鎻掑叆SQL锛屽浐瀹氬�肩洿鎺ュ啓鍦⊿QL涓紝鍔ㄦ�佸�肩敤?鍗犱綅
+ String insertSql = "INSERT INTO d_keyword_list (" + // 琛ㄥ悕淇涓� d_keyword_list
+ "UUID, sBookMarkName, ContractId, semantic_word, sCreator, sType, sDomain, " +
+ "apply_name, is_active, priority_num, interval_minute, is_proxy, proxy_mode, scan_min" + // 琛ュ厖琛ㄤ腑瀛樺湪鐨� is_proxy 瀛楁
+ ") VALUES (" +
+ "?, ?, ?, ?, 'admin', 'manual', '瀹㈡埛', " +
+ "'deepseek', 1, 8, 240, 0, 'random', 5" + // 琛ュ厖 is_proxy 鐨勯粯璁ゅ�硷紙int绫诲瀷锛岃繖閲岀敤0锛�
+ ")";
+
+ // 鎵ц鎻掑叆锛屼粎浼犲叆鍔ㄦ�佸弬鏁�
+// jdbcTemplate.update(
+// insertSql,
+// uuid, // 鍔ㄦ�乁UID
+// sBookMarkName, // 鍔ㄦ�乻BookMarkName
+// contractId,
+// semanticWord.getWord() // 鍔ㄦ�乻emantic_word
+// );
+
+ }
+ }
+ }
+
@RequiresPermissions("contract:contract:importAgentContractWord")
@RequestMapping(value = "/importAgentContractWord", method = RequestMethod.POST)
public Result<String> importAgentContractWord(@RequestBody Contract contract) {
@@ -494,6 +727,7 @@
contractFile.setContractId(one1.getId());
contractFileService.save(contractFile);
}
+ addContract(contract,contract.getSemanticWordObjs());
return Result.OK("娣诲姞鎴愬姛锛�");
}
@@ -529,7 +763,9 @@
if (phone != null && phone.matches("\\d{1,20}")) {
// 鏍¢獙閫氳繃锛屾斁鍏SONObject
jsonObject.put("phone", phone);
- } else {
+ } else if(phone == null) {
+
+ }else {
return Result.error("璇疯緭鍏ユ纭殑鐢佃瘽鍙风爜");
}
jsonObject.put("email" , customer.getCustomerEmail());
--
Gitblit v1.8.0