fix: 优化系统逻辑

This commit is contained in:
tangwei 2026-05-06 15:44:26 +08:00
parent fd34228c58
commit 232ae480b2
15 changed files with 205 additions and 58 deletions

View File

@ -5,6 +5,7 @@ import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.data.domain.ApprovalMain;
import com.yfd.platform.data.service.IApprovalMainService;
import com.yfd.platform.data.service.IFishDraftDataService;
import com.yfd.platform.utils.DataSourceRequestUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -26,15 +27,20 @@ public class ApprovalMainController {
@Resource
private IApprovalMainService approvalMainService;
@Resource
private IFishDraftDataService fishDraftDataService;
@GetMapping("/page")
@Operation(summary = "分页查询审批列表")
public ResponseResult queryPageList(
@RequestParam(defaultValue = "1") Integer current,
@RequestParam(defaultValue = "10") Integer size,
@RequestParam(required = false) String bizType,
@RequestParam(required = false) String status) {
@RequestParam(required = false) String status,
@RequestParam(required = false) String ennm,
@RequestParam(required = false) String hbrvnm) {
Page<ApprovalMain> page = new Page<>(current, size);
Page<ApprovalMain> result = approvalMainService.queryPageList(page, bizType, status);
Page<ApprovalMain> result = approvalMainService.queryPageList(page, bizType, status,ennm,hbrvnm);
return ResponseResult.successData(result);
}

View File

@ -10,6 +10,7 @@ import java.util.HashMap;
import java.util.Map;
import cn.hutool.core.io.FileUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yfd.platform.common.DataSourceRequest;
@ -200,6 +201,15 @@ public class FishDraftDataController {
return result ? ResponseResult.success("提交成功") : ResponseResult.error("提交失败");
}
@PostMapping("/submitDraftsAll")
@Operation(summary = "批量提交草稿")
public ResponseResult submitDraftsAll() {
List<FishDraftData> draft = fishDraftDataService.list(new LambdaQueryWrapper<FishDraftData>().eq(FishDraftData::getCreatedBy, SecurityUtils.getUserId()).eq(FishDraftData::getStatus, "DRAFT").select(FishDraftData::getId));
List<String> ids = draft.stream().map(FishDraftData::getId).toList();
boolean result = fishDraftDataService.submitDrafts(ids);
return result ? ResponseResult.success("提交成功") : ResponseResult.error("提交失败");
}
@PostMapping("/batchApprove")
@Operation(summary = "批量审批通过")
public ResponseResult batchApprove(@RequestBody BatchApproveRequest request) {
@ -207,6 +217,15 @@ public class FishDraftDataController {
return result ? ResponseResult.success("审批通过") : ResponseResult.error("审批失败");
}
@PostMapping("/batchApproveAll")
@Operation(summary = "批量全部审批通过")
public ResponseResult batchApproveAll(@RequestBody BatchApproveRequest request) {
List<FishDraftData> draft = fishDraftDataService.list(new LambdaQueryWrapper<FishDraftData>().eq(FishDraftData::getCreatedBy, SecurityUtils.getUserId()).eq(FishDraftData::getStatus, "PENDING").select(FishDraftData::getId));
List<String> ids = draft.stream().map(FishDraftData::getId).toList();
boolean result = fishDraftDataService.batchApprove(ids, request.getApproveComment());
return result ? ResponseResult.success("审批通过") : ResponseResult.error("审批失败");
}
@PostMapping("/reject")
@Operation(summary = "审批驳回")
public ResponseResult batchReject(@RequestBody BatchRejectRequest request) {

View File

@ -82,6 +82,30 @@ public class ApprovalMain implements Serializable {
*/
private String remark;
/**
* 电站
*/
private String ennm;
/**
* 流域
*/
private String hbrvnm;
/**
* 电站
*/
private String stcd;
/**
* 流域
*/
private String hbrvcd;
/**
* 创建时间
*/

View File

@ -3,6 +3,7 @@ package com.yfd.platform.data.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yfd.platform.data.domain.ApprovalMain;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@ -16,7 +17,7 @@ public interface IApprovalMainService extends IService<ApprovalMain> {
/**
* 分页查询审批列表
*/
Page<ApprovalMain> queryPageList(Page<ApprovalMain> page, String bizType, String status);
Page<ApprovalMain> queryPageList(Page<ApprovalMain> page, String bizType, String status,String ennm, String hbrvnm);
void fillUserNames(List<ApprovalMain> list);

View File

@ -1,10 +1,13 @@
package com.yfd.platform.data.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yfd.platform.data.domain.ApprovalMain;
import com.yfd.platform.data.domain.SysUserDataScope;
import com.yfd.platform.data.mapper.ApprovalMainMapper;
import com.yfd.platform.data.mapper.SysUserDataScopeMapper;
import com.yfd.platform.data.service.IApprovalLogService;
import com.yfd.platform.data.service.IApprovalMainService;
import com.yfd.platform.system.domain.SysUser;
@ -15,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* <p>
@ -33,11 +37,16 @@ public class ApprovalMainServiceImpl extends ServiceImpl<ApprovalMainMapper, App
@Resource
private SysUserMapper sysUserMapper;
@Resource
private SysUserDataScopeMapper sysUserDataScopeMapper;
@Override
public Page<ApprovalMain> queryPageList(Page<ApprovalMain> page, String bizType, String status) {
public Page<ApprovalMain> queryPageList(Page<ApprovalMain> page, String bizType, String status,String ennm, String hbrvnm) {
Page<ApprovalMain> approvalMainPage = this.page(page, this.lambdaQuery()
.eq(StringUtils.hasText(bizType), ApprovalMain::getBizType, bizType)
.eq(StringUtils.hasText(status), ApprovalMain::getStatus, status)
.like(StringUtils.hasText(ennm), ApprovalMain::getEnnm, ennm)
.like(StringUtils.hasText(hbrvnm), ApprovalMain::getHbrvnm, hbrvnm)
.orderByDesc(ApprovalMain::getCreatedAt)
.getWrapper());
fillUserNames(approvalMainPage.getRecords());
@ -52,6 +61,7 @@ public class ApprovalMainServiceImpl extends ServiceImpl<ApprovalMainMapper, App
Set<String> userIds = new HashSet<>();
for (ApprovalMain vo : list) {
if (StrUtil.isNotBlank(vo.getApproverId())) {
userIds.add(vo.getApproverId());
}
@ -63,7 +73,6 @@ public class ApprovalMainServiceImpl extends ServiceImpl<ApprovalMainMapper, App
if (userIds.isEmpty()) {
return;
}
Map<String, String> userNameMap = new HashMap<>();
List<SysUser> users = sysUserMapper.selectBatchIds(userIds);
for (SysUser user : users) {

View File

@ -9,12 +9,18 @@ import com.yfd.platform.common.DataSourceLoadOptionsBase;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.data.domain.ApprovalMain;
import com.yfd.platform.data.domain.FishDraftData;
import com.yfd.platform.data.domain.SysUserDataScope;
import com.yfd.platform.data.domain.vo.FishDraftDataVO;
import com.yfd.platform.data.mapper.FishDraftDataMapper;
import com.yfd.platform.data.mapper.SysUserDataScopeMapper;
import com.yfd.platform.data.service.IApprovalChangeLogService;
import com.yfd.platform.data.service.IApprovalLogService;
import com.yfd.platform.data.service.IApprovalMainService;
import com.yfd.platform.data.service.IFishDraftDataService;
import com.yfd.platform.env.domain.SdEngInfoBH;
import com.yfd.platform.env.domain.SdHbrvDic;
import com.yfd.platform.env.mapper.SdEngInfoBHMapper;
import com.yfd.platform.env.mapper.SdHbrvDicMapper;
import com.yfd.platform.system.domain.SysUser;
import com.yfd.platform.system.mapper.SysUserMapper;
import com.yfd.platform.utils.KendoUtil;
@ -55,6 +61,15 @@ public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, F
@Resource
private ObjectMapper objectMapper;
@Resource
private SysUserDataScopeMapper userDataScopeMapper;
@Resource
private SdEngInfoBHMapper engInfoBHMapper;
@Resource
private SdHbrvDicMapper hbrvDicMapper;
@Override
public Page<FishDraftDataVO> queryPageList(DataSourceRequest dataSourceRequest) {
Page<FishDraftDataVO> page = KendoUtil.getPage(dataSourceRequest);
@ -268,6 +283,8 @@ public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, F
approvalMain.setApplyUserId(operatorId);
approvalMain.setApplyTime(new Date());
approvalMain.setStatus("PENDING");
// 查询当前人的数据权限
setUserDataScope(approvalMain);
approvalMainService.save(approvalMain);
LambdaUpdateWrapper<FishDraftData> updateWrapper = new LambdaUpdateWrapper<>();
@ -283,6 +300,85 @@ public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, F
return true;
}
private void setUserDataScope(ApprovalMain approvalMain) {
String userId = SecurityUtils.getUserId();
if (userId == null) {
return;
}
List<SysUserDataScope> permissions = userDataScopeMapper.selectValidPermissions(Long.parseLong(userId));
if (permissions == null || permissions.isEmpty()) {
return;
}
Set<String> hbrvcdSet = new HashSet<>();
Set<String> hbrvnmSet = new HashSet<>();
Set<String> stcdSet = new HashSet<>();
Set<String> ennmSet = new HashSet<>();
for (SysUserDataScope permission : permissions) {
String orgType = permission.getOrgType();
String orgId = permission.getOrgId();
if (orgId == null || orgId.isEmpty()) {
continue;
}
if ("HBRVCD".equals(orgType)) {
hbrvcdSet.add(orgId);
SdHbrvDic hbrv = hbrvDicMapper.selectById(orgId);
if (hbrv != null && hbrv.getHbrvnm() != null) {
hbrvnmSet.add(hbrv.getHbrvnm());
}
List<SdEngInfoBH> stationList = engInfoBHMapper.selectByHbrvcd(orgId);
if (stationList != null) {
for (SdEngInfoBH station : stationList) {
if (station.getStcd() != null) {
stcdSet.add(station.getStcd());
}
if (station.getEnnm() != null) {
ennmSet.add(station.getEnnm());
}
}
}
} else if ("STATION".equals(orgType)) {
SdEngInfoBH station = engInfoBHMapper.selectById(orgId);
if (station != null) {
if (station.getHbrvcd() != null) {
hbrvcdSet.add(station.getHbrvcd());
}
if (station.getStcd() != null) {
stcdSet.add(station.getStcd());
}
if (station.getEnnm() != null) {
ennmSet.add(station.getEnnm());
}
SdHbrvDic hbrv = hbrvDicMapper.selectById(station.getHbrvcd());
if (hbrv != null && hbrv.getHbrvnm() != null) {
hbrvnmSet.add(hbrv.getHbrvnm());
}
}
}
}
if (!hbrvcdSet.isEmpty()) {
approvalMain.setHbrvcd(String.join(",", hbrvcdSet));
}
if (!hbrvnmSet.isEmpty()) {
approvalMain.setHbrvnm(String.join(",", hbrvnmSet));
}
if (!stcdSet.isEmpty()) {
approvalMain.setStcd(String.join(",", stcdSet));
}
if (!ennmSet.isEmpty()) {
approvalMain.setEnnm(String.join(",", ennmSet));
}
}
@Override
@Transactional(rollbackFor = Exception.class)

View File

@ -185,21 +185,21 @@ public class ImportTaskServiceImpl extends ServiceImpl<ImportTaskMapper, ImportT
if (importTask.getResultJson() != null && !importTask.getResultJson().isEmpty()) {
try {
FishImportResult importResult = objectMapper.readValue(importTask.getResultJson(), FishImportResult.class);
for (FishImportResult.FishImportRow successRow : importResult.getRows()) {
if (successRow.getData()==null) {
continue;
}
String vdpth = successRow.getData().getVdpth();
if (StringUtils.hasText(vdpth)) {
List<String> fileIds = StrUtil.split(vdpth, ",");
fileIds.forEach(fileId -> attachmentUploadService.deleteFile(fileId));
}
String picpth = successRow.getData().getPicpth();
if (StringUtils.hasText(picpth)) {
List<String> fileIds = StrUtil.split(vdpth, ",");
fileIds.forEach(fileId -> attachmentUploadService.deleteFile(fileId));
}
}
// for (FishImportResult.FishImportRow successRow : importResult.getRows()) {
// if (successRow.getData()==null) {
// continue;
// }
// String vdpth = successRow.getData().getVdpth();
// if (StringUtils.hasText(vdpth)) {
// List<String> fileIds = StrUtil.split(vdpth, ",");
// fileIds.forEach(fileId -> attachmentUploadService.deleteFile(fileId));
// }
// String picpth = successRow.getData().getPicpth();
// if (StringUtils.hasText(picpth)) {
// List<String> fileIds = StrUtil.split(vdpth, ",");
// fileIds.forEach(fileId -> attachmentUploadService.deleteFile(fileId));
// }
// }
String tempDir = importResult.getTempDir();
// del 方法会递归删除目录及其所有内容
FileUtil.del(tempDir);

View File

@ -61,9 +61,8 @@ public class SdFpssBHController {
@Operation(summary = "设施下拉列表(根据电站编码筛选 + 支持名称模糊搜索 + 支持基地编码筛选)")
public ResponseResult dropdown(@RequestParam(required = false) String rstcd,
@RequestParam(required = false) String stnm,
@RequestParam(required = false) String baseId,
@RequestParam(required = false) String hbrvcd) {
return ResponseResult.successData(sdFpssBHService.selectForDropdown(rstcd, stnm, baseId,hbrvcd));
@RequestParam(required = false) String baseId) {
return ResponseResult.successData(sdFpssBHService.selectForDropdown(rstcd, stnm, baseId));
}
@Log(module = "过鱼设施管理", value = "新增过鱼设施")

View File

@ -16,13 +16,11 @@ public interface SdFpssBHMapper extends BaseMapper<SdFpssBH> {
"LEFT JOIN SD_ENGINFO_B_H E ON F.RSTCD = E.STCD " +
"WHERE 1=1 " +
"<if test='baseId != null and baseId != \"\"'> AND E.BASE_ID = #{baseId} </if>" +
"<if test='hbrvcd != null and hbrvcd != \"\"'> AND E.HBRVCD = #{hbrvcd} </if>" +
"<if test='rstcd != null and rstcd != \"\"'> AND F.RSTCD = #{rstcd} </if>" +
"<if test='stnm != null and stnm != \"\"'> AND F.STNM LIKE '%' || #{stnm} || '%' </if>" +
"ORDER BY F.ORDER_INDEX DESC" +
"</script>")
List<SdFpssBH> selectForDropdownWithBaseId(@Param("rstcd") String rstcd,
@Param("stnm") String stnm,
@Param("baseId") String baseId,
@Param("hbrvcd") String hbrvcd);
@Param("baseId") String baseId);
}

View File

@ -16,7 +16,7 @@ public interface ISdFpssBHService extends IService<SdFpssBH> {
/**
* 设施下拉列表根据电站编码筛选 + 支持名称模糊搜索 + 支持基地编码筛选
*/
List<SdFpssBH> selectForDropdown(String rstcd, String stnm, String baseId,String hbrvcd);
List<SdFpssBH> selectForDropdown(String rstcd, String stnm, String baseId);
Set<String> getUserAuthorizedStationCodes();

View File

@ -71,10 +71,8 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
String ennm = sdEngInfoBHRequest.getEnnm();
List<String> rvcds = sdEngInfoBHRequest.getRvcds();
List<String> hbrvcds = sdEngInfoBHRequest.getHbrvcds();
String hbrvcd = sdEngInfoBHRequest.getHbrvcd();
LambdaQueryWrapper<SdEngInfoBH> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StringUtils.hasText(baseId), SdEngInfoBH::getBaseId, baseId)
.eq(StringUtils.hasText(hbrvcd), SdEngInfoBH::getHbrvcd, hbrvcd)
.in(rvcds != null && !rvcds.isEmpty(), SdEngInfoBH::getRvcd, rvcds)
.in(hbrvcds != null && !hbrvcds.isEmpty(), SdEngInfoBH::getHbrvcd, hbrvcds)
.like(StringUtils.hasText(ennm), SdEngInfoBH::getEnnm, ennm)

View File

@ -64,13 +64,13 @@ public class SdFpssBHServiceImpl extends ServiceImpl<SdFpssBHMapper, SdFpssBH> i
}
@Override
public List<SdFpssBH> selectForDropdown(String rstcd, String stnm,String baseId, String hbrvcd) {
public List<SdFpssBH> selectForDropdown(String rstcd, String stnm, String baseId) {
Set<String> authorizedStations = getUserAuthorizedStationCodes();
List<SdFpssBH> result;
if (StringUtils.hasText(hbrvcd)|| StringUtils.hasText(baseId)) {
result = baseMapper.selectForDropdownWithBaseId(rstcd, stnm, baseId,hbrvcd);
if (StringUtils.hasText(baseId)) {
result = baseMapper.selectForDropdownWithBaseId(rstcd, stnm, baseId);
} else {
LambdaQueryWrapper<SdFpssBH> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StringUtils.hasText(rstcd), SdFpssBH::getRstcd, rstcd)

View File

@ -204,7 +204,7 @@ public class SmsVerifyCodeController {
selectedBasinCodes.addAll(Arrays.asList(hbrvcdCode.split(",")));
}
// Set<String> addedStationCodes = new HashSet<>();
Set<String> addedStationCodes = new HashSet<>();
for (String basinCode : selectedBasinCodes) {
if (StringUtils.isEmpty(basinCode)) {
@ -241,7 +241,7 @@ public class SmsVerifyCodeController {
scope.setStatus(1);
scope.setPermissionType("READ");
sysUserDataScopeService.addDataScope(scope);
// addedStationCodes.add(basinCode);
addedStationCodes.add(basinCode);
} else {
Set<String> stationsInBasinAndSelected = allStationCodesInBasin.stream()
.filter(selectedStationCodes::contains)
@ -255,27 +255,27 @@ public class SmsVerifyCodeController {
scope.setStatus(1);
scope.setPermissionType("READ");
sysUserDataScopeService.addDataScope(scope);
// addedStationCodes.add(stationCd);
addedStationCodes.add(stationCd);
}
}
}
// Set<String> standaloneStations = selectedStationCodes.stream()
// .filter(code -> !addedStationCodes.contains(code))
// .collect(Collectors.toSet());
//
// for (String stationCd : standaloneStations) {
// if (StringUtils.isEmpty(stationCd)) {
// continue;
// }
// SysUserDataScope scope = new SysUserDataScope();
// scope.setUserId(userId);
// scope.setOrgType("STATION");
// scope.setOrgId(stationCd);
// scope.setStatus(1);
// scope.setPermissionType("READ");
// sysUserDataScopeService.addDataScope(scope);
// }
Set<String> standaloneStations = selectedStationCodes.stream()
.filter(code -> !addedStationCodes.contains(code))
.collect(Collectors.toSet());
for (String stationCd : standaloneStations) {
if (StringUtils.isEmpty(stationCd)) {
continue;
}
SysUserDataScope scope = new SysUserDataScope();
scope.setUserId(userId);
scope.setOrgType("STATION");
scope.setOrgId(stationCd);
scope.setStatus(1);
scope.setPermissionType("READ");
sysUserDataScopeService.addDataScope(scope);
}
SysUser user = new SysUser();
user.setId(userId);
userService.updateUserRoles( user,"c13481a486c9ee559cf305284df4d207");
@ -316,12 +316,9 @@ public class SmsVerifyCodeController {
} catch (Exception e) {
return ResponseResult.error("密码解密失败");
}
String encodePassword = existUser.getPassword();
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String encryptedPassword = passwordEncoder.encode(password);
if (passwordEncoder.matches(password, encodePassword)) {
return ResponseResult.error("新密码不能与旧密码相同");
}
boolean success = userService.updatePasswordByPhone(phone, encryptedPassword);
if (success) {
return ResponseResult.success();

View File

@ -1,6 +1,6 @@
spring:
profiles:
active: prod
active: devtw
jasypt:
encryptor:

View File

@ -67,8 +67,8 @@
SELECT * FROM SYS_USER_DATA_SCOPE
WHERE USER_ID = #{userId}
AND STATUS = 1
AND (START_TIME IS NULL OR START_TIME &lt;= SYSDATE)
AND (END_TIME IS NULL OR END_TIME &gt;= SYSDATE)
-- AND (START_TIME IS NULL OR START_TIME &lt;= SYSDATE)
-- AND (END_TIME IS NULL OR END_TIME &gt;= SYSDATE)
ORDER BY CREATED_AT DESC
</select>