Compare commits

...

2 Commits

Author SHA1 Message Date
YIN 41155cf9f5 三级联动反馈、线索人员核查、操作日志 2025-12-31 11:14:01 +08:00
YIN dca909ebbb 短信服务,RPA服务 2025-12-24 17:43:11 +08:00
54 changed files with 2575 additions and 161 deletions

View File

@ -92,10 +92,10 @@
<artifactId>ruoyi-web</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-job</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.dromara</groupId>-->
<!-- <artifactId>ruoyi-job</artifactId>-->
<!-- </dependency>-->
<!-- 代码生成-->
<dependency>

View File

@ -50,7 +50,7 @@ public class ShowFileController {
//源文件路径
String sourcePath = filePath;
//pdf文件路径
String pdfPath = "D:/ruoyi/uploadPath/pdf/";;
String pdfPath = "E:/uploadPath/pdf/";;
//获取文件后缀判断是否转换pdf
int index = filePath.lastIndexOf(".");
String fileType = filePath.substring(index + 1);

View File

@ -108,7 +108,7 @@ spring.data:
# 数据库索引
database: 0
# redis 密码必须配置
password: ruoyi123
# password: ruoyi123
# 连接超时时间
timeout: 10s
# 是否开启ssl

View File

@ -0,0 +1,107 @@
package org.dromara.common.core.enums;
import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.dromara.common.core.utils.StringUtils;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
*
*
* @author may
*/
@Getter
@AllArgsConstructor
public enum ReportLogTypeEnum {
/**
*
*/
CREATE("1", "新增"),
/**
*
*/
EDIT("2", "修改"),
/**
* 退
*/
BACK("3", "退回"),
/**
*
*/
SIGN("4", "签收"),
/**
*
*/
REPLY("5", "反馈"),
/**
*
*/
FORWARD("6", "转发"),
/**
*
*/
RESEND("7", "二次下发"),
/**
* 线
*/
EXAMINE_PERSON("8", "核查线索人员"),
/**
*
*/
DELETE("9", "删除");
/**
*
*/
private final String status;
/**
*
*/
private final String desc;
private static final Map<String, ReportLogTypeEnum> STATUS_MAP = Arrays.stream(ReportLogTypeEnum.values())
.collect(Collectors.toConcurrentMap(ReportLogTypeEnum::getStatus, Function.identity()));
/**
* BusinessStatusEnum
*
* @param status
* @return BusinessStatusEnum null
*/
public static ReportLogTypeEnum getByStatus(String status) {
// 使用 STATUS_MAP 获取对应的枚举,若找不到则返回 null
return STATUS_MAP.get(status);
}
/**
*
*
* @param status
* @return
*/
public static String findByStatus(String status) {
if (StringUtils.isBlank(status)) {
return StrUtil.EMPTY;
}
ReportLogTypeEnum statusEnum = STATUS_MAP.get(status);
return (statusEnum != null) ? statusEnum.getDesc() : StrUtil.EMPTY;
}
}

View File

@ -108,7 +108,7 @@ public class Helper {
Pattern p1 = null;
Pattern p2 = null;
Matcher m = null;
p1 = Pattern.compile("^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1})|(17[0-9]{1}))+\\d{8})?$");
p1 = Pattern.compile("^((1[3-9]{1})+\\d{8})?$");
p2 = Pattern.compile("^(0[0-9]{2,3}\\-)?([1-9][0-9]{6,7})$");
if("0".equals(checkType)){
System.out.println(phoneNum.length());

View File

@ -28,6 +28,13 @@
<artifactId>ruoyi-common-redis</artifactId>
</dependency>
<dependency>
<groupId>axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,54 @@
package org.dromara.common.sms.util;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import javax.xml.namespace.QName;
import java.net.URL;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.encoding.XMLType;
@Slf4j
public class SmsUtils {
/**
*
* @param phone
* @param content
* @return
*/
public static String sendSMS(String phone, String content){
return sendSingleSms("", "admin", "y4yhl9t", phone, content, "");
}
public static String sendSingleSms(String typeService, String authUserCode, String authPass, String phone, String content, String sendTime){
try {
URL url = new URL("http://10.128.1.96:8089/smsWebService/services/smsService?wsdl");
QName qname = new QName("http://webServiceInterface.shanli.cn/",
"sendSingleSMS");
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName(qname);
call.setReturnType(XMLType.XSD_STRING);
call.addParameter("authUserCode", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("authPass", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("typeService", XMLType.XSD_STRING, ParameterMode.IN);
// call.addParameter("name", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("phone", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("content", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("sendTime", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("subCode", XMLType.XSD_STRING, ParameterMode.IN);
Object[] obj = new String[]{ authUserCode, authPass, typeService, phone,
content, sendTime, "" };
log.info("发送参数: {}", JSONUtil.toJsonStr(obj));
return (String) call.invoke(obj);
} catch (Exception e) {
e.printStackTrace();
log.error("短信发送失败: {}", e.getMessage());
return null;
}
}
}

View File

@ -39,6 +39,7 @@ public class SecurityConfig {
.authorizeHttpRequests((authorize) ->
authorize.requestMatchers(
new AntPathRequestMatcher(adminContextPath + "/assets/**"),
new AntPathRequestMatcher(adminContextPath + "/rpa/**"),
new AntPathRequestMatcher(adminContextPath + "/login")
).permitAll()
.anyRequest().authenticated())

View File

@ -1,132 +0,0 @@
package org.dromara.job.snailjob;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpUtil;
import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
import com.aizuda.snailjob.client.job.core.dto.JobArgs;
import com.aizuda.snailjob.client.model.ExecuteResult;
import com.aizuda.snailjob.common.log.SnailJobLog;
import org.dromara.system.domain.SysDept;
import org.dromara.system.mapper.SysDeptMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.configurationprocessor.json.JSONException;
import org.springframework.boot.configurationprocessor.json.JSONObject;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* @author Luo.J
*/
@Component
@JobExecutor(name = "deptExtractionJobExecutor")
public class DeptExtractionJobExecutor {
@Autowired
private SysDeptMapper sysDeptMapper;
public ExecuteResult jobExecute(JobArgs jobArgs) throws JSONException {
SnailJobLog.LOCAL.info("组织机构抽取任务参数. JobParams:{}", jobArgs.getJobParams());
// SnailJobLog.REMOTE.info("组织机构抽取任务参数. JobParams:{}", jobArgs.getJobParams());
String uri = "http://53.1.230.5:8159/api/UUDB/org/list";
String sysCode = "f156334885cc4fbc853a07a5bdcd8907";
String page;
String limit;
String startTime;
String endTime;
Object jobParams = jobArgs.getJobParams();
if (ObjectUtil.isNotEmpty(jobParams)){
String[] split = jobParams.toString().split(",");
page = split[0];
limit = split[1];
startTime = split[2];
endTime = split[3];
}else {
page = "1";
limit = "1000";
startTime = DateUtil.format(DateUtil.offset(new Date(), DateField.HOUR_OF_DAY,-6),"yyyy-MM-dd HH:mm:ss");
endTime = DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss");
}
Map<String,String> paramMap = new HashMap<>();
paramMap.put("orgId","340100000000");
// paramMap.put("orgType","REAL");
paramMap.put("page",page);
paramMap.put("limit",limit);
paramMap.put("startTime",startTime);
paramMap.put("endTime",endTime);
JSONObject json = new JSONObject(paramMap);
String body = json.toString();
SnailJobLog.LOCAL.info("组织机构抽取调用第三方参数. body:{}", body);
// SnailJobLog.REMOTE.info("组织机构抽取调用第三方参数. body:{}", body);
String result = HttpUtil.createPost(uri)
.header("syscode", sysCode)
.body(body)
.execute().body();
JSONObject resultObject = new JSONObject(result);
SnailJobLog.LOCAL.info("组织机构抽取调用第三方返回结果. resultObject:{}", resultObject);
// SnailJobLog.REMOTE.info("组织机构抽取调用第三方返回结果. resultObject:{}", resultObject);
List<Map<String,Object>> data = (List<Map<String,Object>>) resultObject.get("data");
if (data.isEmpty()){
return ExecuteResult.failure("返回值为空!");
}
// data里面存放若干个组织机构的信息
for (Map<String,Object> orgInfo : data) {
String deptId = (String) orgInfo.get("id");
String parentId = (String) orgInfo.get("pid");
String path = (String) orgInfo.get("path"); // /340000000000/
String replace = path.replaceAll("/", ","); // ,340000000000,
String newStr = "0" + replace; // 0,340000000000,
String ancestors = newStr.substring(0, newStr.length() - 1); // 去掉最后一个逗号 -> 0,340100000000
String newAncestors = ancestors.replace("," + deptId,"");
String deptName = (String) orgInfo.get("orgName");
String shortName = (String) orgInfo.get("shortName");
String status = (String) orgInfo.get("status");
Integer orderNum = (Integer) orgInfo.get("orderIdInt");
String createTime = (String) orgInfo.get("createTime");
String updateTime = (String) orgInfo.get("modiTime");
String type = (String) orgInfo.get("type");
SysDept sysDept = new SysDept();
// 抽取机构数据的时候过滤掉测试数据()
if (deptName.contains("测试") || !deptId.startsWith("34") || deptId.length() < 12 || deptId.length() > 14){continue;}
// 2. 将组织机构名称格式统一(有的为合肥市公安局,有的为安徽省宿州市公安局)
if (deptName.startsWith("安徽省") && !deptId.equals("340000000000")){deptName = deptName.substring(3);}
// 将抽取到的组织机构信息放入集合中
sysDept.setDeptId((deptId));
sysDept.setParentId((parentId));
sysDept.setAncestors(newAncestors);
sysDept.setDeptName(deptName);
sysDept.setShortName(shortName);
if ("1".equals(status)){
sysDept.setStatus("0");
}else if ("0".equals(status)){
sysDept.setStatus("1");
}else {
sysDept.setStatus("1");
sysDept.setDelFlag("2");
}
sysDept.setOrderNum(orderNum);
sysDept.setRemark(type);
sysDept.setCreateTime(DateUtil.parse(createTime,"yyyy-MM-dd HH:mm:ss"));
sysDept.setUpdateTime(DateUtil.parse(updateTime,"yyyy-MM-dd HH:mm:ss"));
SysDept dept = sysDeptMapper.selectById(sysDept.getDeptId());
if (dept == null){
sysDeptMapper.insert(sysDept);
SnailJobLog.LOCAL.info("组织机构. deptId:{}抽取成功!", deptId);
// SnailJobLog.REMOTE.info("组织机构. deptId:{}抽取成功!", deptId);
}else {
sysDeptMapper.updateById(sysDept);
SnailJobLog.LOCAL.info("组织机构. deptId:{}更新成功!", deptId);
// SnailJobLog.REMOTE.info("组织机构. deptId:{}更新成功!", deptId);
}
}
// SnailJobLog.LOCAL.info("testJobExecutor. jobArgs:{}", JsonUtil.toJsonString(jobArgs));
// SnailJobLog.REMOTE.info("testJobExecutor. jobArgs:{}", JsonUtil.toJsonString(jobArgs));
return ExecuteResult.success("执行成功!");
}
}

View File

@ -8,6 +8,7 @@ import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.biz.domain.bo.BizReportReceiverBo;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.utils.Helper;
import org.dromara.common.satoken.utils.LoginHelper;
@ -144,4 +145,22 @@ public class BizReportInfoController extends BaseController {
public R<Void> back(@Validated(EditGroup.class) @RequestBody BizReportInfoBo bo) {
return toAjax(bizReportInfoService.back(bo));
}
/**
*
*/
@GetMapping("/nextQH")
public R<String> nextQH(BizReportInfoBo bo) {
return R.ok("操作成功", bizReportInfoService.nextQH(bo));
}
/**
*
*/
@Log(title = "报送信息下发", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/resend")
public R<Void> resend(@Validated(EditGroup.class) @RequestBody BizReportReceiverBo bo) {
return toAjax(bizReportInfoService.resend(bo));
}
}

View File

@ -0,0 +1,105 @@
package org.dromara.biz.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.biz.domain.vo.BizReportLogVo;
import org.dromara.biz.domain.bo.BizReportLogBo;
import org.dromara.biz.service.IBizReportLogService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
*
*
* @author ruansee
* @date 2025-12-30
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/biz/reportLog")
public class BizReportLogController extends BaseController {
private final IBizReportLogService bizReportLogService;
/**
*
*/
@SaCheckPermission("biz:reportLog:list")
@GetMapping("/list")
public TableDataInfo<BizReportLogVo> list(BizReportLogBo bo, PageQuery pageQuery) {
return bizReportLogService.queryPageList(bo, pageQuery);
}
/**
*
*/
@SaCheckPermission("biz:reportLog:export")
@Log(title = "报送操作日志", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizReportLogBo bo, HttpServletResponse response) {
List<BizReportLogVo> list = bizReportLogService.queryList(bo);
ExcelUtil.exportExcel(list, "报送操作日志", BizReportLogVo.class, response);
}
/**
*
*
* @param id
*/
@SaCheckPermission("biz:reportLog:query")
@GetMapping("/{id}")
public R<BizReportLogVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(bizReportLogService.queryById(id));
}
/**
*
*/
@SaCheckPermission("biz:reportLog:add")
@Log(title = "报送操作日志", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizReportLogBo bo) {
return toAjax(bizReportLogService.insertByBo(bo));
}
/**
*
*/
@SaCheckPermission("biz:reportLog:edit")
@Log(title = "报送操作日志", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizReportLogBo bo) {
return toAjax(bizReportLogService.updateByBo(bo));
}
/**
*
*
* @param ids
*/
@SaCheckPermission("biz:reportLog:remove")
@Log(title = "报送操作日志", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(bizReportLogService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -36,6 +36,14 @@ public class BizReportPersonController extends BaseController {
private final IBizReportPersonService bizReportPersonService;
/**
*
*/
@GetMapping("/history")
public R<List<BizReportPersonVo>> history(BizReportPersonBo bo) {
return R.ok(bizReportPersonService.queryList(bo));
}
/**
*
*/
@ -82,7 +90,7 @@ public class BizReportPersonController extends BaseController {
/**
*
*/
@SaCheckPermission("biz:reportPerson:edit")
// @SaCheckPermission("biz:reportPerson:edit")
@Log(title = "报送关联人员", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()

View File

@ -1,6 +1,8 @@
package org.dromara.biz.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.util.ObjectUtil;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
@ -23,9 +25,15 @@ import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.sms.util.SmsUtils;
import org.dromara.common.web.core.BaseController;
import org.dromara.system.domain.vo.SysOssUploadVo;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.service.ISysOssService;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@ -36,6 +44,7 @@ import java.util.List;
* @date 2025-12-15
*/
@Validated
@SaIgnore
@RequiredArgsConstructor
@RestController
@RequestMapping("/rpa")
@ -46,11 +55,39 @@ public class RPAController extends BaseController {
private final IBizIcdsBulletinService bizIcdsBulletinService;
private final IBizIcdsDailyService bizIcdsDailyService;
private final ISysOssService ossService;
/**
*
*/
@GetMapping("/smstest")
public R<Void> smstest() {
return R.ok(SmsUtils.sendSMS("18655101696", "您有一条新的报送信息待处理,请前往查看"));
}
/**
* OSS
*
* @param file
*/
@Log(title = "OSS对象存储", businessType = BusinessType.INSERT)
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<SysOssUploadVo> upload(@RequestPart("file") MultipartFile file) {
if (ObjectUtil.isNull(file)) {
return R.fail("上传文件不能为空");
}
SysOssVo oss = ossService.upload(file);
SysOssUploadVo uploadVo = new SysOssUploadVo();
uploadVo.setUrl(oss.getUrl());
uploadVo.setFileName(oss.getOriginalName());
uploadVo.setOssId(oss.getOssId().toString());
return R.ok(uploadVo);
}
/**
*
*/
@SaCheckPermission("biz:icdsDaily:list")
@GetMapping("/daily/list")
public TableDataInfo<BizIcdsDailyVo> list(BizIcdsDailyBo bo, PageQuery pageQuery) {
return bizIcdsDailyService.queryPageList(bo, pageQuery);
@ -59,7 +96,6 @@ public class RPAController extends BaseController {
/**
*
*/
@SaCheckPermission("biz:icdsBulletin:list")
@GetMapping("/bulletin/list")
public TableDataInfo<BizIcdsBulletinVo> list(BizIcdsBulletinBo bo, PageQuery pageQuery) {
return bizIcdsBulletinService.queryPageList(bo, pageQuery);

View File

@ -0,0 +1,88 @@
package org.dromara.biz.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* biz_report_log
*
* @author ruansee
* @date 2025-12-30
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_report_log")
public class BizReportLog extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId(value = "id")
private Long id;
/**
* ID
*/
private Long reportId;
/**
* 退
*/
private String type;
/**
* ID
*/
private Long userId;
/**
*
*/
private String userName;
/**
*
*/
private String policeNum;
/**
* ID
*/
private String deptId;
/**
*
*/
private String deptName;
/**
*
*/
private Date optime;
/**
* IP
*/
private String opip;
/**
* ID
*/
private String relationId;
/**
* 退
*/
private String remark;
}

View File

@ -294,6 +294,10 @@ public class BizReportPerson extends BaseEntity {
*/
private String szdlx;
/**
* ID
*/
private String szdxzqhid;
/**
*
*/
@ -399,5 +403,9 @@ public class BizReportPerson extends BaseEntity {
*/
private String sfgp;
/**
*
*/
private Integer sfhc;
}

View File

@ -84,4 +84,38 @@ public class BizReportReceiver extends BaseEntity {
*/
private Boolean isFeedback;
/**
* ID
*/
private String sendDeptId;
/**
*
*/
private String sendDeptName;
/**
*
*/
private Long isResend;
/**
*
*/
private Date resendTime;
/**
*
*/
private String resendContent;
/**
* ID
*/
private Long resendUserId;
/**
*
*/
private String resendUserName;
}

View File

@ -0,0 +1,87 @@
package org.dromara.biz.domain.bo;
import org.dromara.biz.domain.BizReportLog;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* biz_report_log
*
* @author ruansee
* @date 2025-12-30
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = BizReportLog.class, reverseConvertGenerate = false)
public class BizReportLogBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* ID
*/
private Long reportId;
/**
* 退
*/
private String type;
/**
* ID
*/
private Long userId;
/**
*
*/
private String userName;
/**
*
*/
private String policeNum;
/**
* ID
*/
private String deptId;
/**
*
*/
private String deptName;
/**
*
*/
private Date optime;
/**
* IP
*/
private String opip;
/**
* ID
*/
private String relationId;
/**
* 退
*/
private String remark;
}

View File

@ -293,6 +293,10 @@ public class BizReportPersonBo extends BaseEntity {
*/
private String szdlx;
/**
* ID
*/
private String szdxzqhid;
/**
*
*/
@ -398,5 +402,9 @@ public class BizReportPersonBo extends BaseEntity {
*/
private String sfgp;
/**
*
*/
private Integer sfhc;
}

View File

@ -83,5 +83,40 @@ public class BizReportReceiverBo extends BaseEntity {
*/
private Boolean isFeedback;
/**
* ID
*/
private String sendDeptId;
/**
*
*/
private String sendDeptName;
/**
*
*/
private Long isResend;
/**
*
*/
private Date resendTime;
/**
*
*/
private String resendContent;
/**
* ID
*/
private Long resendUserId;
/**
*
*/
private String resendUserName;
private BizReportInfoBo reportInfo;
}

View File

@ -2,12 +2,9 @@ package org.dromara.biz.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.biz.domain.BizReportFile;
import org.dromara.biz.domain.BizReportInfo;
import org.dromara.biz.domain.*;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.biz.domain.BizReportPerson;
import org.dromara.biz.domain.BizReportReceiver;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
@ -193,4 +190,9 @@ public class BizReportInfoVo implements Serializable {
* 线
*/
private List<BizReportPerson> personList;
/**
*
*/
private List<BizReportLog> logList;
}

View File

@ -0,0 +1,107 @@
package org.dromara.biz.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.biz.domain.BizReportLog;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* biz_report_log
*
* @author ruansee
* @date 2025-12-30
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = BizReportLog.class)
public class BizReportLogVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "ID")
private Long id;
/**
* ID
*/
@ExcelProperty(value = "报送信息ID")
private Long reportId;
/**
* 退
*/
@ExcelProperty(value = "操作类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "新=增、修改、退回、签收、反馈、转发、作废")
private String type;
/**
* ID
*/
@ExcelProperty(value = "操作用户ID")
private Long userId;
/**
*
*/
@ExcelProperty(value = "操作用户名称")
private String userName;
/**
*
*/
@ExcelProperty(value = "警号")
private String policeNum;
/**
* ID
*/
@ExcelProperty(value = "操作单位ID")
private String deptId;
/**
*
*/
@ExcelProperty(value = "操作单位名称")
private String deptName;
/**
*
*/
@ExcelProperty(value = "操作时间")
private Date optime;
/**
* IP
*/
@ExcelProperty(value = "操作IP")
private String opip;
/**
* ID
*/
@ExcelProperty(value = "关联ID")
private String relationId;
/**
* 退
*/
@ExcelProperty(value = "操作的简要描述,例如退回原因等")
private String remark;
}

View File

@ -354,6 +354,10 @@ public class BizReportPersonVo implements Serializable {
@ExcelProperty(value = "所在地类型")
private String szdlx;
/**
* ID
*/
private String szdxzqhid;
/**
*
*/
@ -480,5 +484,9 @@ public class BizReportPersonVo implements Serializable {
@ExcelProperty(value = "是否购票")
private String sfgp;
/**
*
*/
private Integer sfhc;
}

View File

@ -102,5 +102,45 @@ public class BizReportReceiverVo implements Serializable {
@ExcelProperty(value = "是否反馈")
private Boolean isFeedback;
/**
* ID
*/
@ExcelProperty(value = "下发单位ID")
private String sendDeptId;
/**
*
*/
@ExcelProperty(value = "下发单位名称")
private String sendDeptName;
/**
*
*/
@ExcelProperty(value = "是否下发")
private Long isResend;
/**
*
*/
@ExcelProperty(value = "下发时间")
private Date resendTime;
/**
*
*/
@ExcelProperty(value = "下发内容")
private String resendContent;
/**
* ID
*/
@ExcelProperty(value = "下发用户ID")
private Long resendUserId;
/**
*
*/
@ExcelProperty(value = "下发用户名称")
private String resendUserName;
}

View File

@ -0,0 +1,15 @@
package org.dromara.biz.mapper;
import org.dromara.biz.domain.BizReportLog;
import org.dromara.biz.domain.vo.BizReportLogVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* Mapper
*
* @author ruansee
* @date 2025-12-30
*/
public interface BizReportLogMapper extends BaseMapperPlus<BizReportLog, BizReportLogVo> {
}

View File

@ -1,5 +1,6 @@
package org.dromara.biz.service;
import org.dromara.biz.domain.bo.BizReportReceiverBo;
import org.dromara.biz.domain.vo.BizReportInfoVo;
import org.dromara.biz.domain.bo.BizReportInfoBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -73,4 +74,20 @@ public interface IBizReportInfoService {
* @return
*/
Boolean back(BizReportInfoBo bo);
/**
*
*
* @param bo
* @return
*/
public String nextQH(BizReportInfoBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean resend(BizReportReceiverBo bo);
}

View File

@ -0,0 +1,79 @@
package org.dromara.biz.service;
import jakarta.servlet.http.HttpServletRequest;
import org.dromara.biz.domain.vo.BizReportLogVo;
import org.dromara.biz.domain.bo.BizReportLogBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* Service
*
* @author ruansee
* @date 2025-12-30
*/
public interface IBizReportLogService {
/**
*
*
* @param id
* @return
*/
BizReportLogVo queryById(Long id);
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
TableDataInfo<BizReportLogVo> queryPageList(BizReportLogBo bo, PageQuery pageQuery);
/**
*
*
* @param bo
* @return
*/
List<BizReportLogVo> queryList(BizReportLogBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean insertByBo(BizReportLogBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean updateByBo(BizReportLogBo bo);
/**
*
*
* @param ids
* @param isValid
* @return
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
*
* @param reportId ID
* @param type
* @param relationId ID
* @param remark
* @return
*/
Boolean saveLog(Long reportId, String type, String relationId, String remark);
}

View File

@ -1,16 +1,16 @@
package org.dromara.biz.service.impl;
import org.dromara.biz.domain.BizReportFile;
import org.dromara.biz.domain.BizReportPerson;
import org.dromara.biz.domain.BizReportReceiver;
import org.dromara.biz.domain.*;
import org.dromara.biz.domain.bo.BizReportReceiverBo;
import org.dromara.biz.domain.vo.BizReportReceiverVo;
import org.dromara.biz.mapper.BizReportFileMapper;
import org.dromara.biz.mapper.BizReportPersonMapper;
import org.dromara.biz.mapper.BizReportReceiverMapper;
import org.dromara.biz.mapper.*;
import org.dromara.biz.service.IBizReportLogService;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.ReportInfoStatusEnum;
import org.dromara.common.core.enums.ReportLogTypeEnum;
import org.dromara.common.core.utils.Helper;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
@ -19,18 +19,18 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sms.util.SmsUtils;
import org.dromara.common.sse.dto.SseMessageDto;
import org.dromara.common.sse.utils.SseMessageUtils;
import org.dromara.system.domain.SysDept;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.mapper.SysDeptMapper;
import org.dromara.system.mapper.SysUserMapper;
import org.dromara.system.service.ISysUserService;
import org.springframework.stereotype.Service;
import org.dromara.biz.domain.bo.BizReportInfoBo;
import org.dromara.biz.domain.vo.BizReportInfoVo;
import org.dromara.biz.domain.BizReportInfo;
import org.dromara.biz.mapper.BizReportInfoMapper;
import org.dromara.biz.service.IBizReportInfoService;
import java.util.*;
@ -55,12 +55,16 @@ public class BizReportInfoServiceImpl implements IBizReportInfoService {
private final BizReportPersonMapper personMapper;
private final BizReportLogMapper logMapper;
private final SysDeptMapper deptMapper;
private final ISysUserService userService;
private final ScheduledExecutorService scheduledExecutorService;
private final IBizReportLogService logService;
/**
*
*
@ -92,6 +96,12 @@ public class BizReportInfoServiceImpl implements IBizReportInfoService {
List<BizReportPerson> persons = personMapper.selectList(lqwp);
info.setPersonList(persons);
LambdaQueryWrapper<BizReportLog> lqwl = Wrappers.lambdaQuery();
lqwl.orderByAsc(BizReportLog::getOptime);
lqwl.eq(BizReportLog::getReportId, id);
List<BizReportLog> logs = logMapper.selectList(lqwl);
info.setLogList(logs);
return info;
}
@ -191,6 +201,9 @@ public class BizReportInfoServiceImpl implements IBizReportInfoService {
if (flag) {
bo.setId(add.getId());
// 添加日志
logService.saveLog(add.getId(), ReportLogTypeEnum.CREATE.getStatus(), "", "新增记录");
// 插入接收单位表
if(bo.getReceiverDeptIds()!=null && bo.getReceiverDeptIds().length>0){
for (String deptId : bo.getReceiverDeptIds()) {
@ -198,6 +211,8 @@ public class BizReportInfoServiceImpl implements IBizReportInfoService {
receiver.setReportId(bo.getId());
receiver.setDeptId(deptId);
receiver.setDeptName(deptMapper.selectVoById(deptId).getDeptName());
receiver.setSendDeptId(user.getDeptId());
receiver.setSendDeptName(deptMapper.selectVoById(user.getDeptId()).getDeptName());
receiverMapper.insert(receiver);
}
}else{
@ -208,6 +223,8 @@ public class BizReportInfoServiceImpl implements IBizReportInfoService {
receiver.setReportId(bo.getId());
receiver.setDeptId(sjdept);
receiver.setDeptName(deptMapper.selectVoById(sjdept).getDeptName());
receiver.setSendDeptId(user.getDeptId());
receiver.setSendDeptName(deptMapper.selectVoById(user.getDeptId()).getDeptName());
bo.setReceiverDeptIds(new String[]{ sjdept });
receiverMapper.insert(receiver);
@ -247,7 +264,9 @@ public class BizReportInfoServiceImpl implements IBizReportInfoService {
if(bo.getReceiverDeptIds()!=null && bo.getReceiverDeptIds().length>0){
SysUserBo userBo = new SysUserBo();
userBo.setDeptIds(bo.getReceiverDeptIds());
List<Long> userIds = userService.selectUserIdList(userBo);
List<SysUserVo> list = userService.selectUserIdList(userBo);
List<Long> userIds = StreamUtils.toList(list, SysUserVo::getUserId);
scheduledExecutorService.schedule(() -> {
SseMessageDto dto = new SseMessageDto();
dto.setMessage("您有新的待办信息,请前往查看!");
@ -255,6 +274,13 @@ public class BizReportInfoServiceImpl implements IBizReportInfoService {
dto.setUserIds(userIds);
SseMessageUtils.publishMessage(dto);
}, 5, TimeUnit.SECONDS);
for (SysUserVo userVo : list) {
String phone = Helper.NStr(userVo.getPhonenumber());
if (Helper.validPhoneNum("0", phone)){
SmsUtils.sendSMS(phone, "您有一条新的报送信息待处理,请前往查看");
}
}
}
}
return flag;
@ -276,6 +302,9 @@ public class BizReportInfoServiceImpl implements IBizReportInfoService {
boolean flag = baseMapper.updateById(update) > 0;
if (flag){
// 添加日志
logService.saveLog(update.getId(), ReportLogTypeEnum.EDIT.getStatus(), "", "修改记录");
// 插入接收单位表
List<String> dbDeptIds = new ArrayList<>();
if (bo.getReceiverDepts()!=null) {
@ -299,6 +328,8 @@ public class BizReportInfoServiceImpl implements IBizReportInfoService {
receiver.setReportId(bo.getId());
receiver.setDeptId(deptId);
receiver.setDeptName(deptMapper.selectVoById(deptId).getDeptName());
receiver.setSendDeptId(user.getDeptId());
receiver.setSendDeptName(deptMapper.selectVoById(user.getDeptId()).getDeptName());
receiverMapper.insert(receiver);
}
}
@ -384,8 +415,98 @@ public class BizReportInfoServiceImpl implements IBizReportInfoService {
boolean flag = baseMapper.updateById(update) > 0;
if (flag){
// 添加日志
logService.saveLog(update.getId(), ReportLogTypeEnum.BACK.getStatus(), "", "退回记录");
}
return flag;
}
/**
*
*
* @param bo
* @return
*/
@Override
public String nextQH(BizReportInfoBo bo) {
LoginUser user = LoginHelper.getLoginUser();
LambdaQueryWrapper<BizReportInfo> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getCategoryId() != null, BizReportInfo::getCategoryId, bo.getCategoryId());
lqw.eq(BizReportInfo::getReportDeptId, user.getDeptId());
lqw.between(BizReportInfo::getReportTime , "", "");
int count = Helper.FInt(baseMapper.selectCount(lqw));
String result = String.format("%0" + 4 + "d", count+1);
return result;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean resend(BizReportReceiverBo bo) {
LoginUser user = LoginHelper.getLoginUser();
BizReportReceiver update = new BizReportReceiver(); // MapstructUtils.convert(bo, BizReportReceiver.class);
update.setId(bo.getId());
update.setIsResend(1L);
update.setResendTime(new Date());
update.setResendUserId(user.getUserId());
update.setResendUserName(user.getNickname());
update.setResendContent(bo.getResendContent());
boolean flag = receiverMapper.updateById(update) > 0;
if (flag){
// 添加日志
logService.saveLog(bo.getReportId(), ReportLogTypeEnum.RESEND.getStatus(), bo.getId().toString(), "二次下发");
BizReportInfo reportInfo = new BizReportInfo(); // MapstructUtils.convert(bo.getReportInfo(), BizReportInfo.class);
reportInfo.setStatus(ReportInfoStatusEnum.WAITING_SIGN.getStatus());
reportInfo.setId(bo.getReportId());
baseMapper.updateById(reportInfo);
// 插入新的接收单位表
if(bo.getReportInfo().getReceiverDeptIds()!=null && bo.getReportInfo().getReceiverDeptIds().length>0){
for (String deptId : bo.getReportInfo().getReceiverDeptIds()) {
BizReportReceiver receiver = new BizReportReceiver();
receiver.setReportId(bo.getReportId());
receiver.setDeptId(deptId);
receiver.setDeptName(deptMapper.selectVoById(deptId).getDeptName());
receiver.setSendDeptId(user.getDeptId());
receiver.setSendDeptName(deptMapper.selectVoById(user.getDeptId()).getDeptName());
receiverMapper.insert(receiver);
}
}
// 发送待办消息提醒
if(bo.getReportInfo().getReceiverDeptIds()!=null && bo.getReportInfo().getReceiverDeptIds().length>0){
SysUserBo userBo = new SysUserBo();
userBo.setDeptIds(bo.getReportInfo().getReceiverDeptIds());
List<SysUserVo> list = userService.selectUserIdList(userBo);
List<Long> userIds = StreamUtils.toList(list, SysUserVo::getUserId);
scheduledExecutorService.schedule(() -> {
SseMessageDto dto = new SseMessageDto();
dto.setMessage("您有新的待办信息,请前往查看!");
dto.setType("todo");
dto.setUserIds(userIds);
SseMessageUtils.publishMessage(dto);
}, 5, TimeUnit.SECONDS);
for (SysUserVo userVo : list) {
String phone = Helper.NStr(userVo.getPhonenumber());
if (Helper.validPhoneNum("0", phone)){
SmsUtils.sendSMS(phone, "您有一条新的报送信息待处理,请前往查看");
}
}
}
}
return flag;
}
}

View File

@ -0,0 +1,177 @@
package org.dromara.biz.service.impl;
import jakarta.servlet.http.HttpServletRequest;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.utils.Helper;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.satoken.utils.LoginHelper;
import org.springframework.stereotype.Service;
import org.dromara.biz.domain.bo.BizReportLogBo;
import org.dromara.biz.domain.vo.BizReportLogVo;
import org.dromara.biz.domain.BizReportLog;
import org.dromara.biz.mapper.BizReportLogMapper;
import org.dromara.biz.service.IBizReportLogService;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* Service
*
* @author ruansee
* @date 2025-12-30
*/
@RequiredArgsConstructor
@Service
public class BizReportLogServiceImpl implements IBizReportLogService {
private final BizReportLogMapper baseMapper;
/**
*
*
* @param id
* @return
*/
@Override
public BizReportLogVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<BizReportLogVo> queryPageList(BizReportLogBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<BizReportLog> lqw = buildQueryWrapper(bo);
Page<BizReportLogVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
*
*
* @param bo
* @return
*/
@Override
public List<BizReportLogVo> queryList(BizReportLogBo bo) {
LambdaQueryWrapper<BizReportLog> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<BizReportLog> buildQueryWrapper(BizReportLogBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<BizReportLog> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(BizReportLog::getId);
lqw.eq(bo.getReportId() != null, BizReportLog::getReportId, bo.getReportId());
lqw.eq(StringUtils.isNotBlank(bo.getType()), BizReportLog::getType, bo.getType());
lqw.eq(bo.getUserId() != null, BizReportLog::getUserId, bo.getUserId());
lqw.like(StringUtils.isNotBlank(bo.getUserName()), BizReportLog::getUserName, bo.getUserName());
lqw.eq(StringUtils.isNotBlank(bo.getPoliceNum()), BizReportLog::getPoliceNum, bo.getPoliceNum());
lqw.eq(StringUtils.isNotBlank(bo.getDeptId()), BizReportLog::getDeptId, bo.getDeptId());
lqw.like(StringUtils.isNotBlank(bo.getDeptName()), BizReportLog::getDeptName, bo.getDeptName());
lqw.eq(bo.getOptime() != null, BizReportLog::getOptime, bo.getOptime());
lqw.eq(StringUtils.isNotBlank(bo.getOpip()), BizReportLog::getOpip, bo.getOpip());
lqw.eq(StringUtils.isNotBlank(bo.getRelationId()), BizReportLog::getRelationId, bo.getRelationId());
return lqw;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean insertByBo(BizReportLogBo bo) {
BizReportLog add = MapstructUtils.convert(bo, BizReportLog.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
*
* @param reportId ID
* @param type
* @param relationId ID
* @param remark
* @return
*/
@Override
public Boolean saveLog(Long reportId, String type, String relationId, String remark) {
LoginUser user = LoginHelper.getLoginUser();
BizReportLog log = new BizReportLog();
log.setReportId(reportId);
log.setDeptId(user.getDeptId());
log.setDeptName(user.getDeptName());
// log.setOpip(Helper.getIP(request));
log.setOptime(new Date());
log.setRemark(remark);
log.setRelationId(relationId);
log.setType(type);
log.setPoliceNum(user.getUsername());
log.setUserName(user.getNickname());
log.setUserId(user.getUserId());
boolean flag = baseMapper.insert(log) > 0;
if (flag) {
}
return flag;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean updateByBo(BizReportLogBo bo) {
BizReportLog update = MapstructUtils.convert(bo, BizReportLog.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
*
*/
private void validEntityBeforeSave(BizReportLog entity){
//TODO 做一些数据校验,如唯一约束
}
/**
*
*
* @param ids
* @param isValid
* @return
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -1,5 +1,8 @@
package org.dromara.biz.service.impl;
import org.dromara.biz.service.IBizReportLogService;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.ReportLogTypeEnum;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -8,6 +11,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.satoken.utils.LoginHelper;
import org.springframework.stereotype.Service;
import org.dromara.biz.domain.bo.BizReportPersonBo;
import org.dromara.biz.domain.vo.BizReportPersonVo;
@ -15,6 +19,7 @@ import org.dromara.biz.domain.BizReportPerson;
import org.dromara.biz.mapper.BizReportPersonMapper;
import org.dromara.biz.service.IBizReportPersonService;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Collection;
@ -30,6 +35,7 @@ import java.util.Collection;
public class BizReportPersonServiceImpl implements IBizReportPersonService {
private final BizReportPersonMapper baseMapper;
private final IBizReportLogService logService;
/**
*
@ -71,7 +77,7 @@ public class BizReportPersonServiceImpl implements IBizReportPersonService {
private LambdaQueryWrapper<BizReportPerson> buildQueryWrapper(BizReportPersonBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<BizReportPerson> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(BizReportPerson::getId);
lqw.orderByDesc(BizReportPerson::getGxsj);
lqw.eq(bo.getReportId() != null, BizReportPerson::getReportId, bo.getReportId());
lqw.eq(StringUtils.isNotBlank(bo.getXm()), BizReportPerson::getXm, bo.getXm());
lqw.eq(StringUtils.isNotBlank(bo.getZjlx()), BizReportPerson::getZjlx, bo.getZjlx());
@ -146,6 +152,7 @@ public class BizReportPersonServiceImpl implements IBizReportPersonService {
lqw.eq(StringUtils.isNotBlank(bo.getFxpg()), BizReportPerson::getFxpg, bo.getFxpg());
lqw.eq(StringUtils.isNotBlank(bo.getFjxs()), BizReportPerson::getFjxs, bo.getFjxs());
lqw.eq(StringUtils.isNotBlank(bo.getSfgp()), BizReportPerson::getSfgp, bo.getSfgp());
lqw.eq(bo.getSfhc()!=null && !bo.getSfhc().toString().equals(""), BizReportPerson::getSfhc, bo.getSfhc());
return lqw;
}
@ -157,7 +164,22 @@ public class BizReportPersonServiceImpl implements IBizReportPersonService {
*/
@Override
public Boolean insertByBo(BizReportPersonBo bo) {
LoginUser user = LoginHelper.getLoginUser();
BizReportPerson add = MapstructUtils.convert(bo, BizReportPerson.class);
add.setCjsj(new Date());
add.setCjrid(user.getUserId());
add.setCjrjh(user.getUsername());
add.setCjrxm(user.getNickname());
add.setCjrjgdwdm(user.getDeptId());
add.setCjrjgdw(user.getDeptName());
add.setGxsj(new Date());
add.setGxrid(user.getUserId());
add.setGxrjh(user.getUsername());
add.setGxrxm(user.getNickname());
add.setGxrjgdwdm(user.getDeptId());
add.setGxrjgdw(user.getDeptName());
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
@ -174,9 +196,23 @@ public class BizReportPersonServiceImpl implements IBizReportPersonService {
*/
@Override
public Boolean updateByBo(BizReportPersonBo bo) {
LoginUser user = LoginHelper.getLoginUser();
BizReportPerson update = MapstructUtils.convert(bo, BizReportPerson.class);
update.setSfhc(1);
update.setGxsj(new Date());
update.setGxrid(user.getUserId());
update.setGxrjh(user.getUsername());
update.setGxrxm(user.getNickname());
update.setGxrjgdwdm(user.getDeptId());
update.setGxrjgdw(user.getDeptName());
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
boolean flag = baseMapper.updateById(update) > 0;
if (flag){
// 添加日志
logService.saveLog(bo.getReportId(), ReportLogTypeEnum.EXAMINE_PERSON.getStatus(), bo.getId().toString(), "核查线索人员");
}
return flag;
}
/**

View File

@ -3,8 +3,10 @@ package org.dromara.biz.service.impl;
import org.dromara.biz.domain.BizReportInfo;
import org.dromara.biz.domain.BizReportReply;
import org.dromara.biz.mapper.BizReportInfoMapper;
import org.dromara.biz.service.IBizReportLogService;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.ReportInfoStatusEnum;
import org.dromara.common.core.enums.ReportLogTypeEnum;
import org.dromara.common.core.utils.Helper;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
@ -40,6 +42,8 @@ public class BizReportReceiverServiceImpl implements IBizReportReceiverService {
private final BizReportReceiverMapper baseMapper;
private final BizReportInfoMapper reportInfoMapper;
private final IBizReportLogService logService;
/**
*
*
@ -93,6 +97,11 @@ public class BizReportReceiverServiceImpl implements IBizReportReceiverService {
lqw.eq(StringUtils.isNotBlank(bo.getOldUserId()), BizReportReceiver::getOldUserId, bo.getOldUserId());
lqw.eq(bo.getOldReportId() != null, BizReportReceiver::getOldReportId, bo.getOldReportId());
lqw.eq(bo.getIsFeedback() != null, BizReportReceiver::getIsFeedback, bo.getIsFeedback());
lqw.eq(bo.getIsResend() != null, BizReportReceiver::getIsResend, bo.getIsResend());
lqw.eq(bo.getResendTime() != null, BizReportReceiver::getResendTime, bo.getResendTime());
lqw.eq(StringUtils.isNotBlank(bo.getResendContent()), BizReportReceiver::getResendContent, bo.getResendContent());
lqw.eq(bo.getResendUserId() != null, BizReportReceiver::getResendUserId, bo.getResendUserId());
lqw.like(StringUtils.isNotBlank(bo.getResendUserName()), BizReportReceiver::getResendUserName, bo.getResendUserName());
return lqw;
}
@ -177,6 +186,9 @@ public class BizReportReceiverServiceImpl implements IBizReportReceiverService {
int flag = baseMapper.updateById(update);
if (flag > 0){
// 添加日志
logService.saveLog(bo.getReportId(), ReportLogTypeEnum.SIGN.getStatus(), bo.getId().toString(), "签收");
LambdaQueryWrapper<BizReportReceiver> lqw = new LambdaQueryWrapper<>();
lqw.eq(BizReportReceiver::getReportId, bo.getReportId());
lqw.eq(BizReportReceiver::getIsSign, 0);

View File

@ -6,8 +6,10 @@ import org.dromara.biz.domain.bo.BizReportReceiverBo;
import org.dromara.biz.domain.vo.BizReportReceiverVo;
import org.dromara.biz.mapper.BizReportInfoMapper;
import org.dromara.biz.mapper.BizReportReceiverMapper;
import org.dromara.biz.service.IBizReportLogService;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.ReportInfoStatusEnum;
import org.dromara.common.core.enums.ReportLogTypeEnum;
import org.dromara.common.core.utils.Helper;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
@ -42,6 +44,7 @@ public class BizReportReplyServiceImpl implements IBizReportReplyService {
private final BizReportReplyMapper baseMapper;
private final BizReportReceiverMapper receiverMapper;
private final BizReportInfoMapper reportInfoMapper;
private final IBizReportLogService logService;
/**
*
@ -109,6 +112,9 @@ public class BizReportReplyServiceImpl implements IBizReportReplyService {
if (flag) {
bo.setId(add.getId());
// 添加日志
logService.saveLog(bo.getReportId(), ReportLogTypeEnum.REPLY.getStatus(), bo.getId().toString(), "反馈");
LambdaQueryWrapper<BizReportReceiver> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(BizReportReceiver::getId);
lqw.eq(bo.getReportId() != null, BizReportReceiver::getReportId, bo.getReportId());

View File

@ -0,0 +1,113 @@
package org.dromara.system.controller.system;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.system.domain.vo.SysAreaVo;
import org.dromara.system.domain.bo.SysAreaBo;
import org.dromara.system.service.ISysAreaService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
*
*
* @author ruansee
* @date 2025-12-30
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/area")
public class SysAreaController extends BaseController {
private final ISysAreaService sysAreaService;
/**
*
*/
@GetMapping("/alllist")
public R<List<SysAreaVo>> alllist(SysAreaBo bo) {
return R.ok(sysAreaService.queryList(bo));
}
/**
*
*/
@SaCheckPermission("system:area:list")
@GetMapping("/list")
public TableDataInfo<SysAreaVo> list(SysAreaBo bo, PageQuery pageQuery) {
return sysAreaService.queryPageList(bo, pageQuery);
}
/**
*
*/
@SaCheckPermission("system:area:export")
@Log(title = "行政区划", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SysAreaBo bo, HttpServletResponse response) {
List<SysAreaVo> list = sysAreaService.queryList(bo);
ExcelUtil.exportExcel(list, "行政区划", SysAreaVo.class, response);
}
/**
*
*
* @param id
*/
@SaCheckPermission("system:area:query")
@GetMapping("/{id}")
public R<SysAreaVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable String id) {
return R.ok(sysAreaService.queryById(id));
}
/**
*
*/
@SaCheckPermission("system:area:add")
@Log(title = "行政区划", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysAreaBo bo) {
return toAjax(sysAreaService.insertByBo(bo));
}
/**
*
*/
@SaCheckPermission("system:area:edit")
@Log(title = "行政区划", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysAreaBo bo) {
return toAjax(sysAreaService.updateByBo(bo));
}
/**
*
*
* @param ids
*/
@SaCheckPermission("system:area:remove")
@Log(title = "行政区划", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable String[] ids) {
return toAjax(sysAreaService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -32,6 +32,13 @@ public class SysDeptController extends BaseController {
private final ISysDeptService deptService;
private final ISysPostService postService;
@GetMapping("/group/alllist")
public R<List<SysDeptVo>> alllist(SysDeptBo dept) {
List<SysDeptVo> depts = deptService.selectDeptList(dept);
return R.ok(depts);
}
/**
*
*/

View File

@ -64,7 +64,6 @@ public class SysDictDataController extends BaseController {
return R.ok(result);
}
/**
*
*/

View File

@ -0,0 +1,112 @@
package org.dromara.system.controller.system;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.system.domain.vo.SysDictTreeVo;
import org.dromara.system.domain.bo.SysDictTreeBo;
import org.dromara.system.service.ISysDictTreeService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
*
*
* @author ruansee
* @date 2025-12-29
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/dictTree")
public class SysDictTreeController extends BaseController {
private final ISysDictTreeService sysDictTreeService;
/**
*
*/
@GetMapping("/alllist")
public R<List<SysDictTreeVo>> list(SysDictTreeBo bo) {
return R.ok( sysDictTreeService.queryList(bo));
}
/**
*
*/
@GetMapping("/list")
public TableDataInfo<SysDictTreeVo> list(SysDictTreeBo bo, PageQuery pageQuery) {
return sysDictTreeService.queryPageList(bo, pageQuery);
}
/**
*
*/
@SaCheckPermission("system:dictTree:export")
@Log(title = "字典", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SysDictTreeBo bo, HttpServletResponse response) {
List<SysDictTreeVo> list = sysDictTreeService.queryList(bo);
ExcelUtil.exportExcel(list, "字典", SysDictTreeVo.class, response);
}
/**
*
*
* @param id
*/
@SaCheckPermission("system:dictTree:query")
@GetMapping("/{id}")
public R<SysDictTreeVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(sysDictTreeService.queryById(id));
}
/**
*
*/
@SaCheckPermission("system:dictTree:add")
@Log(title = "字典", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysDictTreeBo bo) {
return toAjax(sysDictTreeService.insertByBo(bo));
}
/**
*
*/
@SaCheckPermission("system:dictTree:edit")
@Log(title = "字典", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysDictTreeBo bo) {
return toAjax(sysDictTreeService.updateByBo(bo));
}
/**
*
*
* @param ids
*/
@SaCheckPermission("system:dictTree:remove")
@Log(title = "字典", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(sysDictTreeService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,121 @@
package org.dromara.system.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* sys_area
*
* @author ruansee
* @date 2025-12-30
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_area")
public class SysArea extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private String id;
/**
*
*/
private String name;
/**
*
*/
private String fullName;
/**
* ID
*/
private String parentId;
/**
*
*/
private String spell;
/**
* 12,3,4
*/
private Long areaType;
/**
*
*/
private Long orderNo;
/**
* 012345
*/
private Long areaLevel;
/**
*
*/
private String remark;
/**
*
*/
private String villageType;
/**
*
*/
private String nation;
/**
*
*/
private String province;
/**
*
*/
private String city;
/**
*
*/
private String county;
/**
*
*/
private String town;
/**
*
*/
private String lng;
/**
*
*/
private String lat;
/**
* 1,2
*/
private Long mapType;
/**
* 1 0
*/
private String isHaveChild;
}

View File

@ -0,0 +1,71 @@
package org.dromara.system.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* sys_dict_tree
*
* @author ruansee
* @date 2025-12-29
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_dict_tree")
public class SysDictTree extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId(value = "id")
private Long id;
/**
*
*/
private String type;
/**
* ID
*/
private Long parentId;
/**
*
*/
private String name;
/**
*
*/
private String parentName;
/**
*
*/
private String value;
/**
*
*/
private Long sort;
/**
*
*/
private String status;
/**
*
*/
private String remark;
}

View File

@ -0,0 +1,126 @@
package org.dromara.system.domain.bo;
import org.dromara.system.domain.SysArea;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* sys_area
*
* @author ruansee
* @date 2025-12-30
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysArea.class, reverseConvertGenerate = false)
public class SysAreaBo extends BaseEntity {
/**
*
*/
@NotBlank(message = "地址编码不能为空", groups = { EditGroup.class })
private String id;
/**
*
*/
@NotBlank(message = "地区名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String name;
/**
*
*/
private String fullName;
/**
* ID
*/
@NotBlank(message = "父级ID不能为空", groups = { AddGroup.class, EditGroup.class })
private String parentId;
/**
*
*/
@NotBlank(message = "首字母不能为空", groups = { AddGroup.class, EditGroup.class })
private String spell;
/**
* 12,3,4
*/
@NotNull(message = "类型1是省会2直辖市,3港澳台,4其它不能为空", groups = { AddGroup.class, EditGroup.class })
private Long areaType;
/**
*
*/
@NotNull(message = "同级下排序不能为空", groups = { AddGroup.class, EditGroup.class })
private Long orderNo;
/**
* 012345
*/
@NotNull(message = "0全国、1省、2市区、3郊县、4街道、5居委会不能为空", groups = { AddGroup.class, EditGroup.class })
private Long areaLevel;
/**
*
*/
private String remark;
/**
*
*/
private String villageType;
/**
*
*/
private String nation;
/**
*
*/
private String province;
/**
*
*/
private String city;
/**
*
*/
private String county;
/**
*
*/
private String town;
/**
*
*/
private String lng;
/**
*
*/
private String lat;
/**
* 1,2
*/
private Long mapType;
/**
* 1 0
*/
private String isHaveChild;
}

View File

@ -0,0 +1,70 @@
package org.dromara.system.domain.bo;
import org.dromara.system.domain.SysDictTree;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* sys_dict_tree
*
* @author ruansee
* @date 2025-12-29
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysDictTree.class, reverseConvertGenerate = false)
public class SysDictTreeBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "ID不能为空", groups = { EditGroup.class })
private Long id;
/**
*
*/
private String type;
/**
* ID
*/
private Long parentId;
/**
*
*/
private String name;
/**
*
*/
private String parentName;
/**
*
*/
private String value;
/**
*
*/
private Long sort;
/**
*
*/
private String status;
/**
*
*/
private String remark;
}

View File

@ -66,6 +66,10 @@ public class SysUserBo extends BaseEntity {
@Size(min = 0, max = 50, message = "邮箱长度不能超过{max}个字符")
private String email;
/**
*
*/
private String telephone;
/**
*
*/

View File

@ -0,0 +1,147 @@
package org.dromara.system.domain.vo;
import org.dromara.system.domain.SysArea;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* sys_area
*
* @author ruansee
* @date 2025-12-30
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = SysArea.class)
public class SysAreaVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "地址编码")
private String id;
/**
*
*/
@ExcelProperty(value = "地区名称")
private String name;
/**
*
*/
@ExcelProperty(value = "地区全称")
private String fullName;
/**
* ID
*/
@ExcelProperty(value = "父级ID")
private String parentId;
/**
*
*/
@ExcelProperty(value = "首字母")
private String spell;
/**
* 12,3,4
*/
@ExcelProperty(value = "类型1是省会2直辖市,3港澳台,4其它")
private Long areaType;
/**
*
*/
@ExcelProperty(value = "同级下排序")
private Long orderNo;
/**
* 012345
*/
@ExcelProperty(value = "0全国、1省、2市区、3郊县、4街道、5居委会")
private Long areaLevel;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
/**
*
*/
@ExcelProperty(value = "城乡分类代码")
private String villageType;
/**
*
*/
@ExcelProperty(value = "所属国家名")
private String nation;
/**
*
*/
@ExcelProperty(value = "所属省名称")
private String province;
/**
*
*/
@ExcelProperty(value = "所属市名称")
private String city;
/**
*
*/
@ExcelProperty(value = "所属区县名称")
private String county;
/**
*
*/
@ExcelProperty(value = "所属街道名称")
private String town;
/**
*
*/
@ExcelProperty(value = "经度")
private String lng;
/**
*
*/
@ExcelProperty(value = "纬度")
private String lat;
/**
* 1,2
*/
@ExcelProperty(value = "来源地图百度1,高德2")
private Long mapType;
/**
* 1 0
*/
@ExcelProperty(value = "是否有下级", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "1=,是=,0=,否=")
private String isHaveChild;
}

View File

@ -0,0 +1,86 @@
package org.dromara.system.domain.vo;
import org.dromara.system.domain.SysDictTree;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* sys_dict_tree
*
* @author ruansee
* @date 2025-12-29
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = SysDictTree.class)
public class SysDictTreeVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "ID")
private Long id;
/**
*
*/
@ExcelProperty(value = "类型")
private String type;
/**
* ID
*/
@ExcelProperty(value = "父ID")
private Long parentId;
/**
*
*/
@ExcelProperty(value = "名称")
private String name;
/**
*
*/
@ExcelProperty(value = "父级名称")
private String parentName;
/**
*
*/
@ExcelProperty(value = "值")
private String value;
/**
*
*/
@ExcelProperty(value = "排序")
private Long sort;
/**
*
*/
@ExcelProperty(value = "状态")
private String status;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@ -68,6 +68,10 @@ public class SysUserVo implements Serializable {
@Sensitive(strategy = SensitiveStrategy.EMAIL, perms = "system:user:edit")
private String email;
/**
*
*/
private String telephone;
/**
*
*/

View File

@ -0,0 +1,15 @@
package org.dromara.system.mapper;
import org.dromara.system.domain.SysArea;
import org.dromara.system.domain.vo.SysAreaVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* Mapper
*
* @author ruansee
* @date 2025-12-30
*/
public interface SysAreaMapper extends BaseMapperPlus<SysArea, SysAreaVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.system.mapper;
import org.dromara.system.domain.SysDictTree;
import org.dromara.system.domain.vo.SysDictTreeVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* Mapper
*
* @author ruansee
* @date 2025-12-29
*/
public interface SysDictTreeMapper extends BaseMapperPlus<SysDictTree, SysDictTreeVo> {
}

View File

@ -0,0 +1,68 @@
package org.dromara.system.service;
import org.dromara.system.domain.vo.SysAreaVo;
import org.dromara.system.domain.bo.SysAreaBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* Service
*
* @author ruansee
* @date 2025-12-30
*/
public interface ISysAreaService {
/**
*
*
* @param id
* @return
*/
SysAreaVo queryById(String id);
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
TableDataInfo<SysAreaVo> queryPageList(SysAreaBo bo, PageQuery pageQuery);
/**
*
*
* @param bo
* @return
*/
List<SysAreaVo> queryList(SysAreaBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean insertByBo(SysAreaBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean updateByBo(SysAreaBo bo);
/**
*
*
* @param ids
* @param isValid
* @return
*/
Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
}

View File

@ -0,0 +1,68 @@
package org.dromara.system.service;
import org.dromara.system.domain.vo.SysDictTreeVo;
import org.dromara.system.domain.bo.SysDictTreeBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* Service
*
* @author ruansee
* @date 2025-12-29
*/
public interface ISysDictTreeService {
/**
*
*
* @param id
* @return
*/
SysDictTreeVo queryById(Long id);
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
TableDataInfo<SysDictTreeVo> queryPageList(SysDictTreeBo bo, PageQuery pageQuery);
/**
*
*
* @param bo
* @return
*/
List<SysDictTreeVo> queryList(SysDictTreeBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean insertByBo(SysDictTreeBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean updateByBo(SysDictTreeBo bo);
/**
*
*
* @param ids
* @param isValid
* @return
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -26,7 +26,7 @@ public interface ISysUserService {
*/
List<SysUserExportVo> selectUserExportList(SysUserBo user);
List<Long> selectUserIdList(SysUserBo user);
List<SysUserVo> selectUserIdList(SysUserBo user);
/**
*

View File

@ -0,0 +1,146 @@
package org.dromara.system.service.impl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.system.domain.bo.SysAreaBo;
import org.dromara.system.domain.vo.SysAreaVo;
import org.dromara.system.domain.SysArea;
import org.dromara.system.mapper.SysAreaMapper;
import org.dromara.system.service.ISysAreaService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* Service
*
* @author ruansee
* @date 2025-12-30
*/
@RequiredArgsConstructor
@Service
public class SysAreaServiceImpl implements ISysAreaService {
private final SysAreaMapper baseMapper;
/**
*
*
* @param id
* @return
*/
@Override
public SysAreaVo queryById(String id){
return baseMapper.selectVoById(id);
}
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<SysAreaVo> queryPageList(SysAreaBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<SysArea> lqw = buildQueryWrapper(bo);
Page<SysAreaVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
*
*
* @param bo
* @return
*/
@Override
public List<SysAreaVo> queryList(SysAreaBo bo) {
LambdaQueryWrapper<SysArea> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<SysArea> buildQueryWrapper(SysAreaBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SysArea> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(SysArea::getId);
lqw.like(StringUtils.isNotBlank(bo.getName()), SysArea::getName, bo.getName());
lqw.like(StringUtils.isNotBlank(bo.getFullName()), SysArea::getFullName, bo.getFullName());
lqw.eq(StringUtils.isNotBlank(bo.getParentId()), SysArea::getParentId, bo.getParentId());
lqw.eq(StringUtils.isNotBlank(bo.getSpell()), SysArea::getSpell, bo.getSpell());
lqw.eq(bo.getAreaType() != null, SysArea::getAreaType, bo.getAreaType());
lqw.eq(bo.getOrderNo() != null, SysArea::getOrderNo, bo.getOrderNo());
lqw.eq(bo.getAreaLevel() != null, SysArea::getAreaLevel, bo.getAreaLevel());
lqw.eq(StringUtils.isNotBlank(bo.getVillageType()), SysArea::getVillageType, bo.getVillageType());
lqw.eq(StringUtils.isNotBlank(bo.getNation()), SysArea::getNation, bo.getNation());
lqw.eq(StringUtils.isNotBlank(bo.getProvince()), SysArea::getProvince, bo.getProvince());
lqw.eq(StringUtils.isNotBlank(bo.getCity()), SysArea::getCity, bo.getCity());
lqw.eq(StringUtils.isNotBlank(bo.getCounty()), SysArea::getCounty, bo.getCounty());
lqw.eq(StringUtils.isNotBlank(bo.getTown()), SysArea::getTown, bo.getTown());
lqw.eq(StringUtils.isNotBlank(bo.getLng()), SysArea::getLng, bo.getLng());
lqw.eq(StringUtils.isNotBlank(bo.getLat()), SysArea::getLat, bo.getLat());
lqw.eq(bo.getMapType() != null, SysArea::getMapType, bo.getMapType());
lqw.eq(StringUtils.isNotBlank(bo.getIsHaveChild()), SysArea::getIsHaveChild, bo.getIsHaveChild());
return lqw;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean insertByBo(SysAreaBo bo) {
SysArea add = MapstructUtils.convert(bo, SysArea.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean updateByBo(SysAreaBo bo) {
SysArea update = MapstructUtils.convert(bo, SysArea.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
*
*/
private void validEntityBeforeSave(SysArea entity){
//TODO 做一些数据校验,如唯一约束
}
/**
*
*
* @param ids
* @param isValid
* @return
*/
@Override
public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,136 @@
package org.dromara.system.service.impl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.system.domain.bo.SysDictTreeBo;
import org.dromara.system.domain.vo.SysDictTreeVo;
import org.dromara.system.domain.SysDictTree;
import org.dromara.system.mapper.SysDictTreeMapper;
import org.dromara.system.service.ISysDictTreeService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* Service
*
* @author ruansee
* @date 2025-12-29
*/
@RequiredArgsConstructor
@Service
public class SysDictTreeServiceImpl implements ISysDictTreeService {
private final SysDictTreeMapper baseMapper;
/**
*
*
* @param id
* @return
*/
@Override
public SysDictTreeVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<SysDictTreeVo> queryPageList(SysDictTreeBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<SysDictTree> lqw = buildQueryWrapper(bo);
Page<SysDictTreeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
*
*
* @param bo
* @return
*/
@Override
public List<SysDictTreeVo> queryList(SysDictTreeBo bo) {
LambdaQueryWrapper<SysDictTree> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<SysDictTree> buildQueryWrapper(SysDictTreeBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SysDictTree> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(SysDictTree::getId);
lqw.eq(StringUtils.isNotBlank(bo.getType()), SysDictTree::getType, bo.getType());
lqw.eq(bo.getParentId() != null, SysDictTree::getParentId, bo.getParentId());
lqw.like(StringUtils.isNotBlank(bo.getName()), SysDictTree::getName, bo.getName());
lqw.like(StringUtils.isNotBlank(bo.getParentName()), SysDictTree::getParentName, bo.getParentName());
lqw.eq(StringUtils.isNotBlank(bo.getValue()), SysDictTree::getValue, bo.getValue());
lqw.eq(bo.getSort() != null, SysDictTree::getSort, bo.getSort());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysDictTree::getStatus, bo.getStatus());
return lqw;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean insertByBo(SysDictTreeBo bo) {
SysDictTree add = MapstructUtils.convert(bo, SysDictTree.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean updateByBo(SysDictTreeBo bo) {
SysDictTree update = MapstructUtils.convert(bo, SysDictTree.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
*
*/
private void validEntityBeforeSave(SysDictTree entity){
//TODO 做一些数据校验,如唯一约束
}
/**
*
*
* @param ids
* @param isValid
* @return
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -81,7 +81,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
* @return
*/
@Override
public List<Long> selectUserIdList(SysUserBo user) {
public List<SysUserVo> selectUserIdList(SysUserBo user) {
QueryWrapper<SysUser> wrapper = Wrappers.query();
wrapper.eq("u.del_flag", SystemConstants.NORMAL)
.and(ObjectUtil.isNotNull(user.getDeptIds()) && user.getDeptIds().length>0 , w -> {
@ -93,7 +93,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
})
.orderByAsc("u.user_id");
List<SysUserVo> list = baseMapper.selectUserList(wrapper);
return StreamUtils.toList(list, SysUserVo::getUserId);
return list;
}
private Wrapper<SysUser> buildQueryWrapper(SysUserBo user) {

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.biz.mapper.BizReportLogMapper">
</mapper>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.system.mapper.SysAreaMapper">
</mapper>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.system.mapper.SysDictTreeMapper">
</mapper>