Commit a74945e2 authored by 廖旭伟's avatar 廖旭伟

框架版本升级到1.1.7

parent 7064a0a9
Pipeline #2285 failed with stages
...@@ -53,7 +53,17 @@ ...@@ -53,7 +53,17 @@
<artifactId>guava</artifactId> <artifactId>guava</artifactId>
</dependency> </dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.4.1</version>
</dependency>
<dependency> <dependency>
<groupId>junit</groupId> <groupId>junit</groupId>
...@@ -70,5 +80,32 @@ ...@@ -70,5 +80,32 @@
<filtering>true</filtering> <filtering>true</filtering>
</resource> </resource>
</resources> </resources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build> </build>
</project> </project>
\ No newline at end of file
package com.mortals.xhx.common.pdu.flow;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* 工作流定义前端实体类
*
* @author: finegirl
* @date: 2021/7/31 23:38
*/
@Getter
@Setter
@ApiModel("工作流定义前端实体类")
public class DefinitionVoPdu implements Serializable {
@ApiModelProperty("流程定义ID")
private String deployId;
@ApiModelProperty("状态")
private Integer state;
}
package com.mortals.xhx.common.pdu.flow;
import lombok.Builder;
import lombok.Data;
import java.io.Serializable;
@Data
@Builder
public class FlowCommentPdu implements Serializable {
/**
* 意见类别 0 正常意见 1 退回意见 2 驳回意见
*/
private String type;
/**
* 意见内容
*/
private String comment;
}
package com.mortals.xhx.common.pdu.flow;
import com.mortals.xhx.common.model.SysRole;
import com.mortals.xhx.common.model.SysUser;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 动态人员、组
*
* @author: finegirl
* @date: 2021/8/1 22:49
*/
@Data
public class FlowNextPdu implements Serializable {
private String type;
/**
* 数据类型(fixed,dynamc两种)
*/
private String dateType;
private String vars;
private String name;
private String assignee;
private List<String> candidateUsers;
private List<String> candidateGroups;
}
package com.mortals.xhx.common.pdu.flow;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* 流程定义实体类
*
* @author: finegirl
* @date: 2021/7/31 14:56
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("流程定义")
public class FlowProcDefPdu implements Serializable {
/**
* 流程id
*/
@ApiModelProperty("流程id")
private String id;
/**
* 流程名称
*/
@ApiModelProperty("流程名称")
private String name;
/**
* 流程key
*/
@ApiModelProperty("流程key")
private String key;
/**
* 流程分类
*/
@ApiModelProperty("流程分类")
private String category;
/**
* 配置表单名称
*/
@ApiModelProperty("配置表单名称")
private String formName;
/**
* 配置表单id
*/
@ApiModelProperty("配置表单id")
private Long formId;
/**
* 版本
*/
@ApiModelProperty("版本")
private int version;
/**
* 部署id
*/
@ApiModelProperty("部署ID")
private String deploymentId;
/**
* 流程定义状态: 1:激活 , 2:中止
*/
@ApiModelProperty("流程定义状态: 1:激活 , 2:中止")
private int suspensionState;
/**
* 部署时间
*/
@ApiModelProperty("部署时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date deploymentTime;
}
package com.mortals.xhx.common.pdu.flow;
import lombok.Data;
import java.io.Serializable;
/**
* 流程类
*
* @author: finegirl
* @date: 2021/7/31 21:15
*/
@Data
public class FlowSaveXmlPdu implements Serializable {
/**
* 流程名称
*/
private String name;
/**
* 流程分类
*/
private String category;
/**
* xml 文件
*/
private String xml;
}
package com.mortals.xhx.common.pdu.flow;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class FlowTaskNotifyPdu implements Serializable {
/**
* 用户审核列表(一个或者多个)
*/
private List<String> userNameList;
/**
* taskId
*/
private String taskId;
/**
* taskName
*/
private String taskName;
/**
* 租户Id
*/
private String tenantId;
}
package com.mortals.xhx.common.pdu.flow;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.xhx.feign.AttachmentEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 工作流任务
*
* @author: finegirl
* @date: 2021/7/31 23:38
*/
@Getter
@Setter
@ApiModel("工作流任务相关-返回参数")
public class FlowTaskPdu implements Serializable {
@ApiModelProperty("任务编号")
private String taskId;
@ApiModelProperty("任务名称")
private String taskName;
@ApiModelProperty("是否为子任务,0否 1是")
private Integer subTask=0;
@ApiModelProperty("父任务编号")
private String parentTaskId;
@ApiModelProperty("业务系统key")
private String businessKey;
@ApiModelProperty("任务Key")
private String taskDefKey;
@ApiModelProperty("任务执行人Id")
private String assigneeId;
@ApiModelProperty("部门名称")
private String deptName;
@ApiModelProperty("流程发起人部门名称")
private String startDeptName;
@ApiModelProperty("任务执行人名称")
private String assigneeName;
@ApiModelProperty("流程发起人Id")
private String startUserId;
@ApiModelProperty("流程发起人名称")
private String startUserName;
@ApiModelProperty("流程类型")
private String category;
@ApiModelProperty("流程变量信息")
private Object procVars;
@ApiModelProperty("局部变量信息")
private Object taskLocalVars;
@ApiModelProperty("流程部署编号")
private String deployId;
@ApiModelProperty("流程ID")
private String procDefId;
@ApiModelProperty("流程key")
private String procDefKey;
@ApiModelProperty("流程定义名称")
private String procDefName;
@ApiModelProperty("流程定义内置使用版本")
private int procDefVersion;
@ApiModelProperty("流程实例ID")
private String procInsId;
@ApiModelProperty("历史流程实例ID")
private String hisProcInsId;
@ApiModelProperty("任务耗时")
private String duration;
@ApiModelProperty("任务意见")
private FlowCommentPdu comment;
@ApiModelProperty("候选执行人")
private String candidate;
@ApiModelProperty("任务创建时间")
//@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@ApiModelProperty("任务完成时间")
//@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date finishTime;
@ApiModelProperty("流程变量信息")
private Map<String, Object> values;
@ApiModelProperty("附件信息")
private List<AttachmentEntity> attachmentList;
/**
* 用户名称
*/
private String userCode;
@ApiModelProperty("审批人")
private String assignee;
@ApiModelProperty("候选人")
private List<String> candidateUsers;
@ApiModelProperty("审批组")
private List<String> candidateGroups;
@ApiModelProperty("业务平台标识")
private String platformSn;
}
package com.mortals.xhx.common.pdu.flow;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
@Getter
@Setter
@ApiModel("工作流任务相关-返回参数")
public class FlowTaskVars implements Serializable {
@ApiModelProperty("任务Id")
private String taskId;
@ApiModelProperty("节点")
private String targetKey;
private String name;
@ApiModelProperty("审批人")
private String assignee;
@ApiModelProperty("候选人")
private List<String> candidateUsers;
@ApiModelProperty("候选人")
private String candidateUsersName;
@ApiModelProperty("候选人名")
private String candidateUsersIds;
@ApiModelProperty("审批组")
private List<String> candidateGroups;
@ApiModelProperty("审批组名")
private String candidateGroupsName;
@ApiModelProperty("审批组ids")
private String candidateGroupsids;
@ApiModelProperty("el表达式")
private String el;
@ApiModelProperty("是否多实例并行,0否1是")
private Integer multiple;
@ApiModelProperty("审核人列表")
private List<String> assigneeList;
public static void main(String[] args) {
String temp="[{\"el\":\"${assignee1}\",\"multiple\":0,\"name\":\"行政审批\",\"targetKey\":\"Activity_04yxg8r\",\"assignee\":\"finegirl\",\"assigneeName\":\"张三\"},{\"el\":\"${assignee2}\",\"multiple\":0,\"name\":\"经理审批\",\"targetKey\":\"Activity_0m7qwz2\",\"assignee\":\"zhaoxiaofei\",\"assigneeName\":\"赵啸非\"},{\"el\":\"assigneeList\",\"multiple\":1,\"name\":\"领导会签\",\"targetKey\":\"Activity_1uv5dhe\",\"assigneeList\":[\"zhang1\",\"zhangbao\"],\"assigneeName\":\"张1,张宝,\"}]\n";
List<FlowTaskVars> list = JSON.parseObject(temp, new TypeReference<List<FlowTaskVars>>() {
});
//构建提交参数
JSONObject jsonObject = new JSONObject();
for(FlowTaskVars var:list){
//判断是否并联
if(var.getMultiple()==0){
//key
String el = var.getEl();
String key = el.substring(2, el.length() - 1);
//值
String assignee = var.getAssignee();
jsonObject.put(key,assignee);
}else{
//key
String key = var.getEl();
JSONArray jsonArray = new JSONArray();
jsonArray.addAll(var.getAssigneeList());
jsonObject.put(key,jsonArray);
}
}
System.out.println(JSON.toJSONString(jsonObject));
}
}
package com.mortals.xhx.common.pdu.flow;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 工作流任务
*
* @author: finegirl
* @date: 2021/7/31 23:38
*/
@Getter
@Setter
@ApiModel("工作流任务相关-返回参数")
public class FlowTaskVoPdu implements Serializable {
@ApiModelProperty("任务Id")
private String taskId;
@ApiModelProperty("用户Id")
private String userId;
@ApiModelProperty("任务意见")
private String comment;
@ApiModelProperty("流程实例Id")
private String instanceId;
@ApiModelProperty("节点")
private String targetKey;
private String name;
@ApiModelProperty("流程变量信息")
private Map<String, Object> values;
@ApiModelProperty("审批人")
private String assignee;
@ApiModelProperty("候选人")
private List<String> candidateUsers;
@ApiModelProperty("审批组")
private List<String> candidateGroups;
@ApiModelProperty("租户Id")
private String tenantId;
@ApiModelProperty("el表达式")
private String el;
@ApiModelProperty("是否多实例并行,0否1是")
private Integer multiple;
}
package com.mortals.xhx.common.pdu.flow;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class FlowUserTaskPdu implements Serializable {
/**
* 用户id
*/
private String id;
/**
* 用户名称
*/
private String name;
/**
* 租户Id
*/
private String tenantId;
}
package com.mortals.xhx.common.pdu.flow;
import lombok.Data;
import java.io.Serializable;
/**
*
*
* @author: zxfei
* @date: 2021/8/5 13:28
*/
@Data
public class FlowViewerPdu implements Serializable {
private String key;
private boolean completed;
}
package com.mortals.xhx.common.pdu.sms;
import lombok.Data;
@Data
public class SmsSendReq {
private String mobile;
private String templeteId;
private String[] params;
}
package com.mortals.xhx.common.pdu.sms;
import lombok.Data;
@Data
public class SmsSendResp {
}
package com.mortals.xhx.feign;
import lombok.Data;
/**
* 附件实体类
*
* @author: zxfei
* @date: 2021/8/26 17:46
* @description:
**/
@Data
public class AttachmentEntity {
/**
* 附件名称
*/
protected String name;
/**
* 附件描述
*/
protected String desc;
/**
* 附件类型
*/
protected String type;
/**
* 附件下载地址
*/
protected String url;
}
package com.mortals.xhx.feign;
import com.mortals.xhx.common.code.CommentTypeEnum;
import com.mortals.xhx.common.code.ProcessStatusEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* 流程执行过程中的基本参数Req
*
* @author: zxfei
* @date: 2021/8/26 9:55
*/
@Data
public abstract class BaseTaskReq implements Serializable {
/**********************任务相关的参数**********************/
/**
* 任务id 必填
*/
@ApiModelProperty(value = "任务id", required = true)
private String taskId;
/**
* 流程实例的id
*/
@ApiModelProperty(value = "流程实例的id", required = true)
private String processInstanceId;
/**
* 节点id 选填
*/
@ApiModelProperty(value = "节点id")
private String activityId;
/**
* 节点名称 选填
*/
@ApiModelProperty(value = "节点名称")
private String activityName;
/**
* 流程实例状态 必填
*/
@ApiModelProperty(value = "流程实例状态", required = true)
private ProcessStatusEnum processStatusEnum;
/**********************审批意见的参数**********************/
/**
* 操作人code 必填
*/
@ApiModelProperty(value = "操作人code", required = true)
private String userCode;
/**
* 审批意见 必填
*/
@ApiModelProperty(value = "审批意见", required = true)
private String message;
/**
* 审批意见类型 必填
*/
@ApiModelProperty(value = "审批意见类型", required = true)
private CommentTypeEnum commentTypeEnum;
}
package com.mortals.xhx.feign.flowable;
import com.mortals.xhx.feign.IFeign;
import com.mortals.xhx.feign.req.BaseFlowReq;
import com.mortals.xhx.feign.req.BaseQuery;
import com.mortals.xhx.feign.req.DefinitionReq;
import com.mortals.xhx.feign.rsp.ApiResp;
import com.mortals.xhx.feign.rsp.DefinitionDeployRsp;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* 工作流程访问
*
* @author: zxfei
* @date: 2021/8/31 9:34
*/
@FeignClient(name = "workflow-manager",path = "/m")
public interface IApiFlowDefinitionFeign extends IFeign {
/**
* 流程部署列表查询
*
* @param req
* @return
*/
@PostMapping("/api/definition/deploy/list")
ApiResp<DefinitionDeployRsp> deploymentsList(@RequestBody BaseFlowReq<BaseQuery> req);
/**
* 激活或挂起流程定义(已经部署)
*
* @param req
* @return
*/
@PostMapping("/api/definition/deploy/updateState")
ApiResp<String> updateState(@RequestBody DefinitionReq req);
/**
* 激活或挂起流程定义(已经部署)
*
* @param req
* @return
*/
@PostMapping("/api/definition/deploy/readXml")
ApiResp<String> readXml(@RequestBody DefinitionReq req);
}
\ No newline at end of file
package com.mortals.xhx.feign.flowable;
import com.mortals.framework.exception.AppException;
import com.mortals.xhx.common.pdu.api.ApiRespPdu;
import com.mortals.xhx.common.pdu.sms.SmsSendReq;
import com.mortals.xhx.feign.IFeign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* 工作流api
*/
@FeignClient(name = "government-flowable",path = "/m")
public interface IApiFlowFeign extends IFeign {
/**
* 流程部署
*
* @param modelId 流程ID,来自 ACT_DE_MODEL
* @return
* @throws AppException
*/
@PostMapping(value = "/flowable/api/deploy")
ApiRespPdu<String> deploy(@RequestParam("modelId") String modelId) throws AppException;
/**
* 启动流程
*
* @param deployId 部署的流程 Id,来自 ACT_RE_PROCDEF
* @param userId 用户 Id
* @param dataKey 数据 Key,业务键,一般为表单数据的 ID,仅作为表单数据与流程实例关联的依据
* @return
* @throws AppException
*/
@PostMapping(value = "/flowable/api/start")
ApiRespPdu<String> start(@RequestParam(value = "deployId") String deployId, @RequestParam(value = "userId") String userId, @RequestParam(value = "dataKey") String dataKey);
/**
* 设置任务参数
*
* @param taskId 任务ID
* @param map 用户列表
* @return
*/
@RequestMapping(value = "/flowable/api/setVariables", method = RequestMethod.POST)
ApiRespPdu<String> setVariables(@RequestParam(value = "taskId") String taskId, @RequestBody Map<String, Object> map);
/**
* 设置任务参数
*
* @param taskId 任务ID
* @param key 键
* @param value 值
* @return
*/
@RequestMapping(value = "/setVariable", method = RequestMethod.POST)
ApiRespPdu<String> setVariable(@RequestParam(value = "taskId") String taskId,
@RequestParam(value = "key") String key,
@RequestParam(value = "value") Object value);
/**
* 设置任务参数,List 使用
*
* @param taskId 任务ID
* @param key 键
* @param value 值
* @return
*/
@RequestMapping(value = "/flowable/api/setListVariable", method = RequestMethod.POST)
ApiRespPdu<String> setListVariable(@RequestParam(value = "taskId") String taskId,
@RequestParam(value = "key") String key,
@RequestParam(value = "value") List<String> value);
/**
* 任务处理1
*
* @param taskId 任务 Id,来自 ACT_RU_TASK
* @return
*/
@RequestMapping(value = "/flowable/api/task", method = RequestMethod.POST)
ApiRespPdu<String> task(@RequestParam(value = "taskId") String taskId);
/**
* 任务处理
*
* @param taskId 任务 Id,来自 ACT_RU_TASK
* @param assignee 设置审核人,替换
* @param map 完成任务需要的条件参数
* @return
*/
@RequestMapping(value = "/flowable/api/taskByAssignee", method = RequestMethod.POST)
ApiRespPdu<String> taskByAssignee(@RequestParam(value = "taskId") String taskId,
@RequestParam(value = "assignee") String assignee,
@RequestBody Map<String, Object> map);
/**
* 中止流程
*
* @param processId 流程ID
* @return
*/
@RequestMapping(value = "/flowable/api/deleteProcess", method = RequestMethod.POST)
ApiRespPdu<String> deleteProcess(@RequestParam(value = "processId") String processId);
/**
* 获取正在运行的数据 Id 列表
*
* @return
*/
@RequestMapping(value = "/flowable/api/getRuntimeDataId", method = RequestMethod.POST)
ApiRespPdu<List<String>> getRuntimeDataId();
/**
* 根据用户,获取需要审核的业务键 business_key 列表
*
* @param userId 用户 Id
* @return
*/
@RequestMapping(value = "/flowable/api/getRuntimeBusinessKeyByUser", method = RequestMethod.POST)
ApiRespPdu<List<Map<String, Object>>> getRuntimeBusinessKeyByUser(@RequestParam(value = "userId") String userId);
/**
* 获取组,获取需要审核的业务键 business_key 列表
*
* @param groupIds 组 Id
* @return
*/
@RequestMapping(value = "/flowable/api/getRuntimeBusinessKeyByGroup", method = RequestMethod.POST)
ApiRespPdu<List<Map<String, Object>>> getRuntimeBusinessKeyByGroup(@RequestBody List<String> groupIds);
/**
* 获取用户审核历史
*
* @param userId 发起人 Id
* @return
*/
@RequestMapping(value = "/flowable/api/getHistoryByUser", method = RequestMethod.POST)
ApiRespPdu<List<Map<String, Object>>> getHistoryByUser(@RequestParam(value = "userId") String userId);
/**
* 通过流程实例 Id,判断流程是否结束
*
* @param processInstanceId 流程实例 Id
* @return true 结束,false 未结束
*/
@RequestMapping(value = "/flowable/api/checkProcessInstanceFinish", method = RequestMethod.POST)
ApiRespPdu<Boolean> checkProcessInstanceFinish(@RequestParam(value = "processInstanceId") String processInstanceId);
/**
* 根据任务节点获取流程实例 Id
*
* @param taskId 任务节点 Id
* @return
*/
@RequestMapping(value = "/flowable/api/getTaskInfo", method = RequestMethod.POST)
ApiRespPdu<String> getTaskInfo(@RequestParam(value = "taskId") String taskId);
/**
* 根据流程实例 ID 获取任务进度流程图
*
* @param processInstanceId 流程实例id
* @return base64图片数据
* @throws AppException
*/
@RequestMapping(value = "/flowable/api/getProcessDiagram", method = RequestMethod.POST)
String getProcessDiagram(@RequestParam("processInstanceId") String processInstanceId);
/**
* 根据任务 ID 获取任务进度流程图
*
* @param taskId 任务节点 Id
* @return
*/
@RequestMapping(value = "/flowable/api/getTaskProcessDiagram", method = RequestMethod.POST)
ApiRespPdu<String> getTaskProcessDiagram(@RequestParam(value = "taskId") String taskId);
}
package com.mortals.xhx.feign.flowable;
import com.mortals.xhx.common.pdu.api.ApiRespPdu;
import com.mortals.xhx.common.pdu.flow.FlowTaskVoPdu;
import com.mortals.xhx.common.pdu.flow.FlowViewerPdu;
import com.mortals.xhx.feign.IFeign;
import com.mortals.xhx.feign.processinstance.ProcessCommonReq;
import com.mortals.xhx.feign.processinstance.ProcessDeleteReq;
import com.mortals.xhx.feign.processinstance.ProcessStopReq;
import com.mortals.xhx.feign.processinstance.ProcessUpdateStateReq;
import com.mortals.xhx.feign.rsp.ApiResp;
import com.mortals.xhx.feign.runtime.StartProcessInstanceReq;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map;
/**
* 工作流流程实例
*
* @author: finegirl
* @date: 2021/7/31 19:52
*/
@FeignClient(name = "workflow-manager",path = "/m")
public interface IApiFlowInstanceFeign extends IFeign {
/**
* 启动流程
*
* @param req
* @return
*/
@PostMapping("/api/flow/process/start")
ApiResp<String> processStart(@RequestBody StartProcessInstanceReq req);
/**
* 激活或挂起流程实例
*
* @param req
* @return
*/
@PostMapping("/api/flow/process/updateState")
ApiResp updateState(@RequestBody ProcessUpdateStateReq req);
/**
* 终止流程
*
* @param req
* @return
*/
@PostMapping("/api/flow/process/stop")
ApiResp<String> stopProcess(@RequestBody ProcessStopReq req);
/**
* 删除流程
*
* @param req
* @return
*/
@PostMapping("/api/flow/process/delete")
ApiResp<String> deleteProcess(@RequestBody ProcessDeleteReq req);
/**
* 获取流程执行过程
*
* @param req
* @return
*/
@PostMapping("/api/flow/process/getFlowViewer")
ApiResp<List<FlowViewerPdu>> getFlowViewer(@RequestBody ProcessCommonReq req);
/**
* 根据流程实例ID 获取当前流程运行情况 返回BASE64图片
*
* @param req
* @return base64图片数据
*/
@PostMapping("/api/flow/process/getImage")
ApiResp<String> processReadImage(@RequestBody ProcessCommonReq req);
@PostMapping("/api/flow/process/getAllProcessInstanceEl")
ApiResp<List<FlowTaskVoPdu>> getAllProcessInstanceEl(@RequestBody StartProcessInstanceReq req);
}
\ No newline at end of file
package com.mortals.xhx.feign.flowable;
import com.mortals.xhx.common.pdu.flow.FlowNextPdu;
import com.mortals.xhx.common.pdu.flow.FlowUserTaskPdu;
import com.mortals.xhx.feign.IFeign;
import com.mortals.xhx.feign.req.BaseFlowReq;
import com.mortals.xhx.feign.req.BaseQuery;
import com.mortals.xhx.feign.rsp.ApiResp;
import com.mortals.xhx.feign.rsp.TaskRsp;
import com.mortals.xhx.feign.task.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.Map;
/**
* 工作流任务管理
*
* @author: finegirl
* @date: 2021/7/31 19:52
*/
@FeignClient(name = "workflow-manager",path = "/m")
public interface IApiFlowTaskFeign extends IFeign {
/**
* 我发起的流程
*
* @param req
* @return
*/
@PostMapping("/api/flow/task/myProcess")
ApiResp<TaskRsp> myProcess(@RequestBody BaseFlowReq<BaseQuery> req);
/**
* 获取待办列表
* 获取的列表需要和业务系统数据合并
*
* @param req
* @return
*/
@PostMapping("/api/flow/task/todoList")
ApiResp<TaskRsp> todoList(@RequestBody BaseFlowReq<BaseQuery> req);
/**
* 获取已办任务
* 获取的列表需要和业务系统数据合并
*
* @param req
* @return
*/
@PostMapping("/api/flow/task/finishedList")
ApiResp<TaskRsp> finishedList(@RequestBody BaseFlowReq<BaseQuery> req);
/**
* 流程历史流转记录
*
* @param req
* @return
*/
@PostMapping("/api/flow/task/flowRecord")
ApiResp<TaskRsp> flowRecord(@RequestBody BaseFlowReq<BaseQuery> req);
/**
* 获取流程变量
*
* @param req
* @return
*/
@PostMapping("/api/flow/task/processVariables")
ApiResp<Map<String, Object>> processVariables(@RequestBody CommonTaskReq req);
/**
* 设置流程变量
*
* @param req
* @return
*/
@PostMapping("/api/flow/task/setProcessVariables")
ApiResp<Map<String, Object>> setProcessVariables(@RequestBody CommonTaskReq req);
/**
* 撤回流程
*
* @param req
* @return
*/
@PostMapping("/api/flow/task/revokeProcess")
ApiResp revokeProcess(@RequestBody RevokeTaskReq req);
/**
* 取消申请
*
* @param commonTaskReq
* @return
*/
@PostMapping("/api/flow/task/stopProcess")
ApiResp stopProcess(@RequestBody CommonTaskReq commonTaskReq);
/**
* 审批任务
*
* @param req
* @return
*/
@PostMapping("/api/flow/task/complete")
ApiResp<String> complete(@RequestBody CompleteTaskReq req);
/**
* 驳回任务
*
* @param req
* @return
*/
@PostMapping("/api/flow/task/reject")
ApiResp<String> reject(@RequestBody RejectTaskReq req);
/**
* 退回任务
*
* @param req
* @return
*/
@PostMapping("/api/flow/task/return")
ApiResp<String> taskReturn(@RequestBody ReturnTaskReq req);
/**
* 删除任务
*
* @param req
* @return
*/
@PostMapping("/api/flow/task/delete")
ApiResp<String> delete(@RequestBody DeleteTaskReq req);
/**
* 委派任务
*
* @param req
* @return
*/
@PostMapping("/api/flow/task/delegate")
ApiResp<String> delegateTask(@RequestBody DelegateTaskReq req);
/**
* 转办任务
*
* @param req
* @return
*/
@PostMapping("/api/flow/task/assign")
ApiResp<String> assignTask(@RequestBody TurnTaskReq req);
/**
* 加签任务
*
* @param req
* @return
*/
@PostMapping("/api/flow/task/addSign")
ApiResp<String> addSignTask(@RequestBody AddSignTaskReq req);
/**
* 获取所有可回退的节点
*
* @param req
* @return
*/
@PostMapping("/api/flow/task/findReturnTaskList")
ApiResp<List<FlowUserTaskPdu>> findReturnTaskList(@RequestBody CommonTaskReq req);
/**
* 获取下一节点
*
* @param req
* @return
*/
@PostMapping("/api/flow/task/nextFlowNode")
ApiResp<FlowNextPdu> nextFlowNode(@RequestBody CommonTaskReq req);
}
package com.mortals.xhx.feign.processinstance;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 实例查询Query
*
* @author: zxfei
* @date: 2021/8/24 20:42
*/
@Data
public class InstanceQueryParamsReq {
/**
* 用户的工号 必填
*/
@ApiModelProperty(value = "用户的工号")
private String userCode;
/**
* 平台应用标识 必填
*/
@ApiModelProperty(value = "平台应用标识")
private String platformSn;
/**
* 开始时间
*/
@ApiModelProperty(value = "开始时间")
private String startTime;
/**
* 结束时间
*/
@ApiModelProperty(value = "结束时间")
private String endTime;
/**
* 业务系统的id
*/
@ApiModelProperty(value = "业务系统的id")
private String businessKey;
/**
* 排序字段 1 升序 0 降序
*/
@ApiModelProperty(value = "排序字段 1 升序 0 降序")
private Integer orderFlag = 0;
/**
* 流程实例ID
*/
@ApiModelProperty(value = "流程实例ID")
private String processInstanceId;
/**
* 流程定义KEY
*/
@ApiModelProperty(value = "流程定义KEY")
private String processDefinitionKey;
/**
* 流程状态
*/
@ApiModelProperty(value = "流程状态")
private String processType;
/**
* 发起人工号集合
*/
@ApiModelProperty(value = "发起人工号集合")
private String startedUserIds;
}
package com.mortals.xhx.feign.processinstance;
import lombok.Data;
/**
* 实例通用请求
* @author: zxfei
* @date: 2021/8/26 10:42
* @description:
**/
@Data
public class ProcessCommonReq {
/**
* 处理人Id
*/
private String userCode;
/**
* 流程实例id
*/
private String processInstanceId;
}
package com.mortals.xhx.feign.processinstance;
import lombok.Data;
/**
* @author: zxfei
* @date: 2021/8/26 10:42
* @description:
**/
@Data
public class ProcessDeleteReq {
/**
* 处理人Id 必填
*/
private String userCode;
/**
* 流程实例id 必填
*/
private String processInstanceId;
/**
* 删除原因 必填
*/
private String deleteReason;
}
package com.mortals.xhx.feign.processinstance;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 流程实例返回数据对象
*
* @author: zxfei
* @date: 2021/8/26 10:31
*/
@Data
@ApiModel(value = "ProcessInstanceInfo" , description = "查询流程实例返回对象")
public class ProcessInstanceInfo implements Serializable {
private static final long serialVersionUID = -5038515846218363889L;
/**
* 流程实例id
*/
private String processInstanceId;
/**
* 流程定义id
*/
private String processDefinitionId;
/**
* 流程定义的名称
*/
private String processDefinitionName;
/**
* 流程定义的key
*/
private String processDefinitionKey;
/**
* 流程定义类型
*/
private Integer processDefinitionType;
/**
* 流程定义的版本号
*/
private Integer processDefinitionVersion;
/**
* 分类编号
*/
private String categoryCode;
/**
* 部署id
*/
private String deploymentId;
/**
* 业务表单的id
*/
private String businessKey;
/**
* 办理人
*/
private String assignees;
/**
* 应用id
*/
private String appId;
/**
* 平台应用标识
*/
private String appSn;
/**
* 创建时间
*/
@JsonFormat(timezone = "GMT+8" , pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 挂起状态 1激活 2挂起 @see ProcessInstanceStatusEnum
*/
private Integer pState;
/**
* 删除标记
*/
private String reason;
/**
* 创建人的id
*/
private String startedUserId;
/**
* 创建人的名称
*/
private String startedUserName;
/**
* 创建人ids
*/
private List<String> startedUserIds;
/**
* 默认所有的
*/
private Boolean finishFlag = false;
/**
* 流程实例状态 @see {@link ProcessStatusEnum}
*/
private String processStatus;
/**
* 流程实例状态名称
*/
private String processStatusName;
/**
* 表单的名称
*/
private String formName;
/**
* 流程创建人姓名
*/
private String startPersonName;
/**
* 流程的创建时间
*/
@JsonFormat(timezone = "GMT+8" , pattern = "yyyy-MM-dd HH:mm:ss")
private Date startTime;
/**
* 结束时间
*/
@JsonFormat(timezone = "GMT+8" , pattern = "yyyy-MM-dd HH:mm:ss")
private Date endTime;
private String startTimeStr;
private String endTimeStr;
/**
* 系统名称
*/
private String appName;
/**
* 业务系统的url
*/
private String businessUrl;
/**
* 总耗时
*/
private String totalTime;
/**
* 当前办理人(当前流程是多人办理)
*/
// private List<ApproverVo> currentAssignees;
public ProcessInstanceInfo() {
}
public ProcessInstanceInfo(String processInstanceId, String businessKey, String formName, String startedUserId) {
this.processInstanceId = processInstanceId;
this.businessKey = businessKey;
this.formName = formName;
this.startedUserId = startedUserId;
}
}
package com.mortals.xhx.feign.processinstance;
import lombok.Data;
/**
* @author: zxfei
* @date: 2021/8/26 10:42
* @description:
**/
@Data
public class ProcessStopReq {
/**
* 处理人Id 必填
*/
private String userCode;
/**
* 流程实例id
*/
private String processInstanceId;
}
package com.mortals.xhx.feign.processinstance;
import lombok.Data;
/**
* @author: zxfei
* @date: 2021/8/26 10:42
* @description:
**/
@Data
public class ProcessUpdateStateReq {
/**
* 处理人Id 必填
*/
private String userCode;
/**
* 流程实例id 必填
*/
private String processInstanceId;
/**
* 激活或挂起流程实例(1:激活,2:挂起) 必填
*/
private Integer suspensionState;
}
package com.mortals.xhx.feign.req; package com.mortals.xhx.feign.req;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
......
...@@ -20,4 +20,10 @@ public class ApiResp<T> { ...@@ -20,4 +20,10 @@ public class ApiResp<T> {
*/ */
private T data; private T data;
// public boolean isSuccess() {
// if (YesNoEnum.YES.getValue() == code) {
// return true;
// }
// return false;
// }
} }
package com.mortals.xhx.feign.rsp;
import com.mortals.xhx.common.pdu.api.Page;
import lombok.Data;
import java.util.List;
/**
* 流程部署列表(业务端可发起的实例)
*
* @author: zxfei
* @date: 2021/8/24 20:51
*/
@Data
public class DefinitionDeployRsp {
private Page page;
private List<FlowProcDef> list;
}
package com.mortals.xhx.feign.rsp;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* 流程定义类
*
* @author: zxfei
* @date: 2021/8/24 22:29
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class FlowProcDef implements Serializable {
/**
* 流程定义id
*/
private String id;
/**
* 流程名称
*/
private String name;
/**
* 流程key
*/
private String key;
/**
* 流程key
*/
private String processDefinitionKey;
/**
* 流程分类
*/
private String category;
/**
* 版本
*/
private int version;
/**
* 流程部署id
*/
private String deployId;
/**
* 流程部署id
*/
private String deploymentId;
/**
* 流程定义状态: 1:激活 , 2:中止
*/
private int suspensionState;
/**
* 部署时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date deploymentTime;
}
package com.mortals.xhx.feign.rsp;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 流程启动响应类
*
* @author: zxfei
* @date: 2021/8/24 22:29
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class FlowProcStartInfo implements Serializable {
/**
* 流程实例id
*/
private String proInstanceId;
}
package com.mortals.xhx.feign.rsp;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.xhx.common.pdu.flow.FlowCommentPdu;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 工作流任务相关-返回参数
*
* @author: zxfei
* @date: 2021/8/25 11:13
*/
@Getter
@Setter
public class FlowTaskInfo implements Serializable {
/**
* 任务编号
*/
private String taskId;
/**
* 任务名称
*/
private String taskName;
/**
* 任务Key
*/
private String taskDefKey;
/**
* 任务执行人Id
*/
private String assigneeId;
/**
* 任务执行人名称
*/
private String assigneeName;
/**
* 流程发起人Id
*/
private String startUserId;
/**
* 流程发起人名称
*/
private String startUserName;
/**
* 流程类型
*/
private String category;
/**
* 流程变量信息
*/
private Object procVars;
/**
* 局部变量信息
*/
private Object taskLocalVars;
/**
* 流程部署ID
*/
private String deployId;
/**
* 流程定义ID
*/
private String procDefId;
/**
* 流程key
*/
private String procDefKey;
/**
* 流程定义名称
*/
private String procDefName;
/**
* 流程定义使用版本
*/
private int procDefVersion;
/**
* 流程实例ID
*/
private String procInsId;
/**
* 历史流程实例ID
*/
private String hisProcInsId;
/**
* 任务耗时
*/
private String duration;
/**
* 任务意见
*/
private FlowCommentPdu comment;
/**
* 候选执行人(多个人都能办理当前任务)
*/
private String candidate;
/**
* 任务创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 任务完成时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date finishTime;
/**
* 流程变量信息
*/
private Map<String, Object> values;
/**
* 用户id
*/
private String userId;
/**
* 审批人
*/
private String assignee;
/**
* 候选人
*/
private List<String> candidateUsers;
/**
* 候选审批组
*/
private List<String> candidateGroups;
/**
* 业务系统编号
*/
private String tenantId;
}
package com.mortals.xhx.feign.rsp;
import com.mortals.xhx.common.pdu.api.Page;
import com.mortals.xhx.common.pdu.flow.FlowTaskPdu;
import lombok.Data;
import java.util.List;
/**
* 流程任务详细返回
*
* @author: zxfei
* @date: 2021/8/24 20:51
*/
@Data
public class TaskRsp {
private Page page;
private List<FlowTaskPdu> list;
}
package com.mortals.xhx.feign.runtime;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.mortals.framework.util.DateUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.Map;
/**
* 启动流程参数
*
* @author: zxfei
* @date: 2021/8/26 10:45
*/
@Data
public class StartProcessInstanceReq implements Serializable {
/**
* 流程部署key 必填
*/
@ApiModelProperty(value = "流程定义key" , required = true)
private String processDefinitionKey;
/**
* 业务系统表单id 必填
*/
@ApiModelProperty(value = "业务系统唯一标识" , required = true)
private String businessKey;
/**
* 业务表单显示名称 必填(如请假单)
*/
@ApiModelProperty(value = "表单显示名称" , required = true)
private String formName;
/**
* 启动流程变量 选填
*/
@ApiModelProperty(value = "启动流程变量")
private Map<String, Object> variables;
/**
* 申请人id号 必填
*/
@ApiModelProperty(value = "申请人id号")
private String userCode;
/**
* 平台系统标识 必填
*/
@ApiModelProperty(value = "平台系统标识" , required = true)
private String platformSn;
/**
* 流程提交人工号 通常和申请人id一致即可 必填
*/
@ApiModelProperty(value = "流程提交人工号 通常和申请人id一致即可" , required = true)
private String creator;
public static void main(String[] args) {
DateTime dateTime = DateUtil.offsetMonth(new Date(), 2);
System.out.println(DateUtils.getStrDate(dateTime));
}
}
package com.mortals.xhx.feign.task;
import com.mortals.xhx.feign.BaseTaskReq;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 任务加签(审批参数)
*
* @author: zxfei
* @date: 2021/8/26 17:23
*/
@Data
@ApiModel(value = "AddSignTaskReq", description = "审批参数")
public class AddSignTaskReq extends BaseTaskReq implements Serializable {
/**
* 向前加签人员号 必填
*/
private List<String> addSignUserList;
}
package com.mortals.xhx.feign.task;
import com.mortals.xhx.feign.BaseTaskReq;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Map;
/**
* 任务参数
*
* @author: zxfei
* @date: 2021/8/26 17:23
*/
@Data
@ApiModel(value = "CommonTaskReq" , description = "任务参数")
public class CommonTaskReq extends BaseTaskReq implements Serializable {
/**
* 平台系统标识 必填
*/
@ApiModelProperty(value = "平台系统标识" , required = true)
private String platformSn;
/**
* 启动流程变量 选填
*/
@ApiModelProperty(value = "启动流程变量")
private Map<String, Object> variables;
}
package com.mortals.xhx.feign.task;
import com.alibaba.fastjson.JSON;
import com.mortals.xhx.feign.AttachmentEntity;
import com.mortals.xhx.feign.BaseTaskReq;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 任务执行(审批参数)
*
* @author: zxfei
* @date: 2021/8/26 17:23
*/
@Data
@ApiModel(value = "CompleteTask" , description = "审批参数")
public class CompleteTaskReq extends BaseTaskReq implements Serializable {
private static final long serialVersionUID = -5583096980348786337L;
/**
* 流程标题 选填 只有在重新发起的时候才会修改表单标题
*/
@ApiModelProperty(value = "流程标题")
private String formTitle;
/**
* 任务参数 选填
*/
@ApiModelProperty(value = "任务参数")
private Map<String, Object> variables;
/**
* 任务参数 附件 选填
*/
@ApiModelProperty(value = "附件参数")
private List<AttachmentEntity> attachments;
}
package com.mortals.xhx.feign.task;
import com.mortals.xhx.feign.BaseTaskReq;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.io.Serializable;
/**
* 任务委派(审批参数)
*
* @author: zxfei
* @date: 2021/8/26 17:23
*/
@Data
@ApiModel(value = "DelegateTaskReq" , description = "审批参数")
public class DelegateTaskReq extends BaseTaskReq implements Serializable {
/**
* 委派人
*/
private String delegateUserCode;
}
package com.mortals.xhx.feign.task;
import com.mortals.xhx.feign.BaseTaskReq;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.io.Serializable;
/**
* 任务删除(审批参数)
*
* @author: zxfei
* @date: 2021/8/26 17:23
*/
@Data
@ApiModel(value = "DeleteTaskReq" , description = "审批参数")
public class DeleteTaskReq extends BaseTaskReq implements Serializable {
}
package com.mortals.xhx.feign.task;
import com.mortals.xhx.feign.BaseTaskReq;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.io.Serializable;
/**
* 任务驳回(审批参数)
*
* @author: zxfei
* @date: 2021/8/26 17:23
*/
@Data
@ApiModel(value = "RejectTaskReq" , description = "审批参数")
public class RejectTaskReq extends BaseTaskReq implements Serializable {
}
package com.mortals.xhx.feign.task;
import com.mortals.xhx.feign.BaseTaskReq;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.io.Serializable;
/**
* 任务驳回(审批参数)
*
* @author: zxfei
* @date: 2021/8/26 17:23
*/
@Data
@ApiModel(value = "RejectTaskReq" , description = "审批参数")
public class ReturnTaskReq extends BaseTaskReq implements Serializable {
}
package com.mortals.xhx.feign.task;
import com.mortals.xhx.feign.BaseTaskReq;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.io.Serializable;
/**
* 任务撤回(审批参数)
*
* @author: zxfei
* @date: 2021/8/26 17:23
*/
@Data
@ApiModel(value = "RevokeTaskReq" , description = "审批参数")
public class RevokeTaskReq extends BaseTaskReq implements Serializable {
}
package com.mortals.xhx.feign.task;
import com.mortals.xhx.feign.BaseTaskReq;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.io.Serializable;
/**
* 任务转办(审批参数)
*
* @author: zxfei
* @date: 2021/8/26 17:23
*/
@Data
@ApiModel(value = "TurnTaskReq", description = "审批参数")
public class TurnTaskReq extends BaseTaskReq implements Serializable {
/**
* 被转办人工号 必填
*/
private String turnToUserId;
}
package com.mortals.xhx.utils; package com.mortals.xhx.utils;
import cn.hutool.extra.qrcode.BufferedImageLuminanceSource;
import com.google.zxing.*; import com.google.zxing.*;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.BitMatrix; import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer; import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
......
...@@ -78,10 +78,6 @@ ...@@ -78,10 +78,6 @@
<artifactId>poi-ooxml-schemas</artifactId> <artifactId>poi-ooxml-schemas</artifactId>
<groupId>org.apache.poi</groupId> <groupId>org.apache.poi</groupId>
</exclusion> </exclusion>
<exclusion>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
...@@ -96,6 +92,7 @@ ...@@ -96,6 +92,7 @@
<artifactId>druid-spring-boot-starter</artifactId> <artifactId>druid-spring-boot-starter</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.mybatis.spring.boot</groupId> <groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId> <artifactId>mybatis-spring-boot-starter</artifactId>
...@@ -110,6 +107,15 @@ ...@@ -110,6 +107,15 @@
<artifactId>spring-data-redis</artifactId> <artifactId>spring-data-redis</artifactId>
</dependency> </dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId> <artifactId>spring-boot-starter-websocket</artifactId>
...@@ -122,16 +128,18 @@ ...@@ -122,16 +128,18 @@
<version>2.3.31</version> <version>2.3.31</version>
</dependency> </dependency>
<!--Token生成与解析--> <!-- <dependency>-->
<dependency> <!-- <groupId>com.aspose</groupId>-->
<groupId>io.jsonwebtoken</groupId> <!-- <artifactId>aspose-words</artifactId>-->
<artifactId>jjwt</artifactId> <!-- <version>20.1</version>-->
</dependency> <!-- <classifier>jdk17</classifier>-->
<!-- </dependency>-->
<dependency> <dependency>
<groupId>junit</groupId> <groupId>com.aspose.words</groupId>
<artifactId>junit</artifactId> <artifactId>aspose-words</artifactId>
<scope>test</scope> <version>19.2</version>
<classifier>jdk16</classifier>
</dependency> </dependency>
<dependency> <dependency>
...@@ -140,26 +148,15 @@ ...@@ -140,26 +148,15 @@
<version>2.0.8</version> <version>2.0.8</version>
</dependency> </dependency>
<dependency>
<groupId>com.aspose.words</groupId>
<artifactId>aspose-words</artifactId>
<version>19.2</version>
<classifier>jdk16</classifier>
</dependency>
<dependency> <dependency>
<groupId>com.deepoove</groupId> <groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId> <artifactId>poi-tl</artifactId>
<version>1.12.0</version> <version>1.12.0</version>
</dependency> </dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.14</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
<resources> <resources>
<resource> <resource>
...@@ -169,11 +166,6 @@ ...@@ -169,11 +166,6 @@
</resources> </resources>
<plugins> <plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
...@@ -187,7 +179,7 @@ ...@@ -187,7 +179,7 @@
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<configuration> <configuration>
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments> <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
<outputDirectory>${project.basedir}/dist/${project.artifactId}/boot</outputDirectory> <outputDirectory>${project.parent.basedir}/dist/${project.parent.artifactId}/boot</outputDirectory>
<layout>ZIP</layout> <layout>ZIP</layout>
</configuration> </configuration>
</plugin> </plugin>
...@@ -213,7 +205,7 @@ ...@@ -213,7 +205,7 @@
</goals> </goals>
<configuration> <configuration>
<encoding>UTF-8</encoding> <encoding>UTF-8</encoding>
<outputDirectory>${project.basedir}/dist/${project.artifactId}/bin</outputDirectory> <outputDirectory>${project.parent.basedir}/dist/${project.parent.artifactId}/bin</outputDirectory>
<resources> <resources>
<resource> <resource>
<directory>src/main/bin/</directory> <directory>src/main/bin/</directory>
......
package com.mortals.xhx.base.framework;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import org.springframework.util.ObjectUtils;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author: zxfei
* @date: 2022/6/30 10:49
* @description:
**/
public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {
@Override
public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = jp.getText();
if (!ObjectUtils.isEmpty(date)) {
try {
return format.parse(date);
} catch (ParseException e) {
return null;
}
} else {
return null;
}
}
}
package com.mortals.xhx.base.framework;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import java.util.ArrayList;
import java.util.List;
/**
* @author: zxfei
* @date: 2022/6/28 15:57
* @description:
**/
// 创建一个新的转换器 解析微信的 [text/plain]
public class WxMessageConverter extends MappingJackson2HttpMessageConverter {
public WxMessageConverter() {
List<MediaType> mediaTypes = new ArrayList<>();
mediaTypes.add(MediaType.TEXT_PLAIN);
setSupportedMediaTypes(mediaTypes);
}
}
\ No newline at end of file
package com.mortals.xhx.base.framework.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ApiUserAuth {
String msg() default "";
String params() default "";
}
...@@ -4,6 +4,9 @@ import java.util.Date; ...@@ -4,6 +4,9 @@ import java.util.Date;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import com.mortals.framework.model.OperateLogPdu;
import com.mortals.framework.service.IMessageProduceService;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Aspect;
...@@ -22,20 +25,37 @@ import com.mortals.xhx.base.system.oper.service.OperLogService; ...@@ -22,20 +25,37 @@ import com.mortals.xhx.base.system.oper.service.OperLogService;
/** /**
* 操作日志记录 * 操作日志记录
*
* @author: zxfei
* @date: 2021/11/5 13:28
*/ */
@Component @Component
public class OperlogAspect extends FileLogServiceImpl implements ILogService { @Slf4j
public class OperlogAspect extends FileLogServiceImpl implements ILogService {
private final static Logger logger = LoggerFactory.getLogger(OperlogAspect.class);
@Autowired @Autowired
private OperLogService operLogService; private OperLogService operLogService;
@Autowired
private IMessageProduceService messageProduceService;
@Override @Override
public void doHandlerLog(String platformMark, Long userId, String userName, String loginName, String requestUrl, public void doHandlerLog(String platformMark, Long userId, String userName, String loginName, String requestUrl,
String content, String ip, Date logDate) { String content, String ip, Date logDate) {
super.doHandlerLog(platformMark, userId, userName, loginName, requestUrl, content, ip, logDate); super.doHandlerLog(platformMark, userId, userName, loginName, requestUrl, content, ip, logDate);
operLogService.insertOperLog(ip, requestUrl, userId, userName, loginName, content); operLogService.insertOperLog(ip, requestUrl, userId, userName, loginName, content);
OperateLogPdu operateLogPdu = new OperateLogPdu();
operateLogPdu.initAttrValue();
operateLogPdu.setIp(ip);
operateLogPdu.setRequestUrl(requestUrl);
operateLogPdu.setUserId(userId);
operateLogPdu.setUserName(userName);
operateLogPdu.setLoginName(loginName);
operateLogPdu.setPlatformMark(platformMark);
operateLogPdu.setLogDate(logDate);
operateLogPdu.setContent(content);
operateLogPdu.setOperType(1);
messageProduceService.syncOperSend(operateLogPdu);
} }
@Override @Override
...@@ -43,9 +63,11 @@ public class OperlogAspect extends FileLogServiceImpl implements ILogService { ...@@ -43,9 +63,11 @@ public class OperlogAspect extends FileLogServiceImpl implements ILogService {
// operLogService.insertOperLog(ip, requestUrl, null, "", loginName, // operLogService.insertOperLog(ip, requestUrl, null, "", loginName,
// content); // content);
this.doHandlerLog(platformMark, null, "", loginName, requestUrl, content, ip, new Date()); this.doHandlerLog(platformMark, null, "", loginName, requestUrl, content, ip, new Date());
} }
@Pointcut("execution(public * com.mortals.xhx..*Controller.*(..))") /*@Pointcut("execution(public * com.mortals.xhx..*Controller.*(..))")
public void accessLog() { public void accessLog() {
} }
...@@ -55,13 +77,13 @@ public class OperlogAspect extends FileLogServiceImpl implements ILogService { ...@@ -55,13 +77,13 @@ public class OperlogAspect extends FileLogServiceImpl implements ILogService {
HttpServletRequest request = attributes.getRequest(); HttpServletRequest request = attributes.getRequest();
// url // url
logger.info("ip[{}]url[{}]", request.getRemoteAddr(), request.getRequestURL()); log.info("ip[{}]url[{}]", request.getRemoteAddr(), request.getRequestURL());
// 参数第1和第2个参数为HttpServletRequest request, HttpServletResponse // 参数第1和第2个参数为HttpServletRequest request, HttpServletResponse
// response // response
if (joinPoint.getArgs().length > 2) { if (joinPoint.getArgs().length > 2) {
logger.info("args={}", joinPoint.getArgs()[2]); log.info("args={}", joinPoint.getArgs()[2]);
} else { } else {
logger.info("args={}", joinPoint.getArgs()); log.info("args={}", joinPoint.getArgs());
} }
} }
...@@ -69,7 +91,7 @@ public class OperlogAspect extends FileLogServiceImpl implements ILogService { ...@@ -69,7 +91,7 @@ public class OperlogAspect extends FileLogServiceImpl implements ILogService {
@AfterReturning(returning = "object", pointcut = "accessLog()") @AfterReturning(returning = "object", pointcut = "accessLog()")
public void doAfterReturning(Object object) { public void doAfterReturning(Object object) {
if (null != object) { if (null != object) {
logger.info("response={}", object.toString()); log.info("response={}", object.toString());
} }
} }*/
} }
package com.mortals.xhx.base.framework.aspect; package com.mortals.xhx.base.framework.aspect;
import cn.hutool.core.net.Ipv4Util;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -27,11 +30,11 @@ import java.util.Map; ...@@ -27,11 +30,11 @@ import java.util.Map;
* @author: zxfei * @author: zxfei
* @date: 2022/4/20 9:24 * @date: 2022/4/20 9:24
*/ */
@Aspect //@Aspect
@Component //@Component
@Slf4j @Slf4j
@Order(1) @Order(1)
@Profile({"default", "develop", "test"}) //@Profile({"default", "develop", "test"})
public class WebLogAspect { public class WebLogAspect {
@Pointcut("execution(public * com.mortals..*Controller.*(..))") @Pointcut("execution(public * com.mortals..*Controller.*(..))")
public void webLog() { public void webLog() {
...@@ -61,13 +64,19 @@ public class WebLogAspect { ...@@ -61,13 +64,19 @@ public class WebLogAspect {
public void afterReturning(Object result) { public void afterReturning(Object result) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest(); HttpServletRequest request = attributes.getRequest();
Map<String, String> map = MDC.getCopyOfContextMap(); Map<String, String> map = MDC.getCopyOfContextMap();
if (map != null&&result!=null) { if (map != null&&result!=null) {
String startTime = map.getOrDefault("startTime", String.valueOf(System.currentTimeMillis())); String startTime = map.getOrDefault("startTime", String.valueOf(System.currentTimeMillis()));
long takeTime = (System.currentTimeMillis() - Long.parseLong(startTime)); long takeTime = (System.currentTimeMillis() - Long.parseLong(startTime));
log.info(" \n 请求路径:{} \n 耗时:{}ms \n 请求报文:{} \n 响应报文:{}" if (result instanceof String) {
, request.getRequestURI(), takeTime, map.getOrDefault("req", ""), result == null ? "" : result.toString()); log.info(" \n 请求路径:{} 耗时:{}ms 客户端IP:{} \n 请求报文:{} \n 响应报文:{} "
, request.getRequestURI(), takeTime,ServletUtil.getClientIP(request), map.getOrDefault("req", ""), result);
} else {
log.info(" \n 请求路径:{} 耗时:{}ms 客户端IP:{}\n 请求报文:{} \n 响应报文:{}"
, request.getRequestURI(), takeTime,ServletUtil.getClientIP(request), map.getOrDefault("req", ""), JSON.toJSONString(result));
}
} }
} }
......
package com.mortals.xhx.base.framework.config; package com.mortals.xhx.base.framework.config;
import com.mortals.framework.springcloud.config.web.BaseWebMvcConfigurer; import com.mortals.framework.springcloud.config.web.BaseWebMvcConfigurer;
import com.mortals.xhx.base.framework.feign.HierarchicalContract; import com.mortals.xhx.base.framework.WxMessageConverter;
import feign.Contract; import feign.codec.Decoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.support.SpringDecoder;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
...@@ -14,12 +17,16 @@ import org.springframework.context.annotation.Configuration; ...@@ -14,12 +17,16 @@ import org.springframework.context.annotation.Configuration;
@Configuration @Configuration
public class AccountConfig { public class AccountConfig {
@Bean @Bean
public Contract feignContract() { public BaseWebMvcConfigurer getBaseWebMvc() {
return new HierarchicalContract(); return new BaseWebMvcConfigurer(false, null);
} }
@Bean @Bean
public BaseWebMvcConfigurer getBaseWebMvc(){ public Decoder feignDecoder() {
return new BaseWebMvcConfigurer(false,null); WxMessageConverter wxConverter = new WxMessageConverter();
ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(wxConverter);
return new SpringDecoder(objectFactory);
} }
} }
package com.mortals.xhx.base.framework.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author: zxfei
* @date: 2022/2/15 13:16
* @description:
**/
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Bean
public CorsFilter corsFilter(){
//初始化配置对象
CorsConfiguration configuration = new CorsConfiguration();
//允许跨域访问的域名
configuration.addAllowedOrigin("*");
// configuration.setAllowCredentials(true); //运行携带cookie
configuration.addAllowedMethod("*"); //代表所有请求方法
configuration.addAllowedHeader("*"); //允许携带任何头信息
//初始化cors配置源对象
UrlBasedCorsConfigurationSource configurationSource=new UrlBasedCorsConfigurationSource();
configurationSource.registerCorsConfiguration("/**",configuration);
//返回CorSfilter实例,参数
return new CorsFilter(configurationSource);
}
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowCredentials(true)
.allowedOrigins("*")
.allowedMethods(new String[] { "GET", "POST","PUT","DELETE"})
.allowedHeaders("*")
.exposedHeaders("*");
}
}
package com.mortals.xhx.base.framework.config; package com.mortals.xhx.base.framework.config;
import com.mortals.framework.web.interceptor.BaseInterceptor;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
...@@ -13,7 +12,7 @@ import javax.servlet.http.HttpServletResponse; ...@@ -13,7 +12,7 @@ import javax.servlet.http.HttpServletResponse;
* @description:添加跨域响应 * @description:添加跨域响应
**/ **/
@Component @Component
public class CrossInterceptor extends BaseInterceptor { public class CrossInterceptor extends HandlerInterceptorAdapter {
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
...@@ -24,9 +23,4 @@ public class CrossInterceptor extends BaseInterceptor { ...@@ -24,9 +23,4 @@ public class CrossInterceptor extends BaseInterceptor {
response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Credentials", "true");
return true; return true;
} }
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
super.afterCompletion(request, response, handler, ex);
}
} }
package com.mortals.xhx.base.framework.config;
import com.mortals.framework.filter.RepeatableFilter;
import com.mortals.framework.filter.XssFilter;
import com.mortals.framework.util.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import javax.servlet.DispatcherType;
import java.util.HashMap;
import java.util.Map;
/**
* Filter配置
*
* @author zxfei
*/
//@Configuration
public class FilterConfig {
@Value("${xss.enabled}")
private String enabled;
@Value("${xss.excludes}")
private String excludes;
@Value("${xss.urlPatterns}")
private String urlPatterns;
@SuppressWarnings({"rawtypes", "unchecked"})
@Bean
public FilterRegistrationBean xssFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setDispatcherTypes(DispatcherType.REQUEST);
registration.setFilter(new XssFilter());
registration.addUrlPatterns(StringUtils.split(urlPatterns, ","));
registration.setName("xssFilter");
registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE);
Map<String, String> initParameters = new HashMap<String, String>();
initParameters.put("excludes", excludes);
initParameters.put("enabled", enabled);
registration.setInitParameters(initParameters);
return registration;
}
@SuppressWarnings({"rawtypes", "unchecked"})
@Bean
public FilterRegistrationBean someFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new RepeatableFilter());
registration.addUrlPatterns("/*");
registration.setName("repeatableFilter");
registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE);
return registration;
}
}
package com.mortals.xhx.base.framework.config; package com.mortals.xhx.base.framework.config;
import java.io.IOException;
import java.net.URLDecoder;
import javax.sql.DataSource;
import com.mortals.framework.springcloud.config.mybatis.AbstractMybatisConfiguration; import com.mortals.framework.springcloud.config.mybatis.AbstractMybatisConfiguration;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.apache.ibatis.io.VFS;
import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import com.mortals.framework.springcloud.config.SpringBootVFS; import javax.sql.DataSource;
@Configuration @Configuration
//@AutoConfigureAfter(DataSourceAutoConfiguration.class) //@AutoConfigureAfter(DataSourceAutoConfiguration.class)
...@@ -45,7 +35,6 @@ public class MybatisConfiguration extends AbstractMybatisConfiguration { ...@@ -45,7 +35,6 @@ public class MybatisConfiguration extends AbstractMybatisConfiguration {
@Value("${mybatis.config-location}") @Value("${mybatis.config-location}")
private String configLocation; private String configLocation;
// 提供SqlSeesion // 提供SqlSeesion
@Bean(name = "sqlSessionFactory") @Bean(name = "sqlSessionFactory")
public SqlSessionFactory sqlSessionFactoryBean(@Qualifier("dataSource") DataSource dataSource) { public SqlSessionFactory sqlSessionFactoryBean(@Qualifier("dataSource") DataSource dataSource) {
......
package com.mortals.xhx.base.framework.config;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.client.codec.Codec;
import org.redisson.codec.JsonJacksonCodec;
import org.redisson.config.Config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* RedissonConfig配置
*
* @author: zxfei
* @date: 2022/8/8 16:02
*/
//@Configuration
//@ConfigurationProperties(prefix = "spring.redis")
@Slf4j
@Data
public class RedissonConfig {
private String host;
private int port;
private String password;
private int database;
//@Bean
public RedissonClient redissonClient() {
RedissonClient redissonClient;
Config config = new Config();
String url = "redis://" + host + ":" + port;
// 单节点配置
config.useSingleServer().setAddress(url).setDatabase(database).setPassword(password);
//使用json序列化方式
Codec codec = new JsonJacksonCodec();
config.setCodec(codec);
// 主从配置
/*config.useMasterSlaveServers()
// 设置redis主节点
.setMasterAddress("redis://192.168.1.120:6379")
// 设置redis从节点
.addSlaveAddress("redis://192.168.1.130:6379", "redis://192.168.1.140:6379");*/
// 哨兵部署方式,sentinel是采用Paxos拜占庭协议,一般sentinel至少3个节点
/*config.useSentinelServers()
.setMasterName("my-sentinel-name")
.addSentinelAddress("redis://192.168.1.120:6379")
.addSentinelAddress("redis://192.168.1.130:6379")
.addSentinelAddress("redis://192.168.1.140:6379");*/
// 集群部署方式,cluster方式至少6个节点,3主3从,3主做sharding,3从用来保证主宕机后可以高可用
/*config.useClusterServers()
// 集群状态扫描间隔时间,单位是毫秒
.setScanInterval(2000)
.addNodeAddress("redis://192.168.1.120:6379")
.addNodeAddress("redis://192.168.1.130:6379")
.addNodeAddress("redis://192.168.1.140:6379")
.addNodeAddress("redis://192.168.1.150:6379")
.addNodeAddress("redis://192.168.1.160:6379")
.addNodeAddress("redis://192.168.1.170:6379");*/
// 云托管部署方式,这种方式主要解决redis提供商为云服务的提供商的redis连接,比如亚马逊云、微软云
/*config.useReplicatedServers()
// 主节点变化扫描间隔时间
.setScanInterval(2000)
.addNodeAddress("redis://192.168.1.120:6379")
.addNodeAddress("redis://192.168.1.130:6379")
.addNodeAddress("redis://192.168.1.140:6379");*/
redissonClient = Redisson.create(config);
return redissonClient;
}
}
\ No newline at end of file
package com.mortals.xhx.base.framework.filter; package com.mortals.xhx.base.framework.filter;
import cn.hutool.core.util.IdUtil;
import com.mortals.framework.service.IAuthTokenService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.slf4j.MDC; import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.web.filter.OncePerRequestFilter; import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.util.ContentCachingRequestWrapper; import org.springframework.web.util.ContentCachingRequestWrapper;
...@@ -23,19 +19,13 @@ import java.io.IOException; ...@@ -23,19 +19,13 @@ import java.io.IOException;
* @author: zxfei * @author: zxfei
* @date: 2022/4/20 14:52 * @date: 2022/4/20 14:52
*/ */
@Component //@Component
@Slf4j @Slf4j
public class RequestFilter extends OncePerRequestFilter implements Filter { public class RequestFilter extends OncePerRequestFilter implements Filter {
@Autowired
private IAuthTokenService authTokenService;
@Override @Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
try { try {
//每个请求记录一个traceId,可以根据traceId搜索出本次请求的全部相关日志
MDC.put("traceId", IdUtil.fastSimpleUUID().substring(0,12));
setUsername(request);
request = new ContentCachingRequestWrapper(request); request = new ContentCachingRequestWrapper(request);
filterChain.doFilter(request, response); filterChain.doFilter(request, response);
} catch (Exception e) { } catch (Exception e) {
...@@ -47,22 +37,22 @@ public class RequestFilter extends OncePerRequestFilter implements Filter { ...@@ -47,22 +37,22 @@ public class RequestFilter extends OncePerRequestFilter implements Filter {
} }
private void setUsername(HttpServletRequest request) { /*private void setUsername(HttpServletRequest request) {
//通过token解析出username //通过token解析出username
String token = authTokenService.getToken(request); String token = authTokenService.getToken(request);
//String token = request.getHeader("token"); //String token = request.getHeader("token");
if (!ObjectUtils.isEmpty(token)) { if (!ObjectUtils.isEmpty(token)) {
MDC.put("token",token); MDC.put("token",token);
// MDC.put("token", token); MDC.put("token", token);
// try { try {
// SessionUserInfo info = tokenService.getUserInfo(); SessionUserInfo info = tokenService.getUserInfo();
// if (info != null) { if (info != null) {
// String username = info.getUsername(); String username = info.getUsername();
// MDC.put("username", username); MDC.put("username", username);
// } }
// } catch (CommonJsonException e) { } catch (CommonJsonException e) {
// log.info("无效的token:{}", token); log.info("无效的token:{}", token);
// } }
} }
} }*/
} }
package com.mortals.xhx.base.framework.security; package com.mortals.xhx.base.framework.interceptor;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.ap.SysConstains; import com.mortals.framework.ap.SysConstains;
...@@ -14,7 +14,6 @@ import io.jsonwebtoken.SignatureAlgorithm; ...@@ -14,7 +14,6 @@ import io.jsonwebtoken.SignatureAlgorithm;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Primary;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -28,7 +27,7 @@ import java.util.Map; ...@@ -28,7 +27,7 @@ import java.util.Map;
* *
* @author zxfei * @author zxfei
*/ */
@Primary
@Service @Service
@Order(1) @Order(1)
@Slf4j @Slf4j
...@@ -55,6 +54,9 @@ public class AuthTokenServiceImpl implements IAuthTokenService { ...@@ -55,6 +54,9 @@ public class AuthTokenServiceImpl implements IAuthTokenService {
@Value("${token.database:0}") @Value("${token.database:0}")
private Integer portalDb; private Integer portalDb;
@Value("${platform.type:cloud}")
private String platFormType;//版本,默认云服务版本
protected static final Long SECOND = 1l; protected static final Long SECOND = 1l;
protected static final Long SECOND_MINUTE = 60 * SECOND; protected static final Long SECOND_MINUTE = 60 * SECOND;
...@@ -85,12 +87,10 @@ public class AuthTokenServiceImpl implements IAuthTokenService { ...@@ -85,12 +87,10 @@ public class AuthTokenServiceImpl implements IAuthTokenService {
Claims claims = parseToken(token); Claims claims = parseToken(token);
String uuid = (String) claims.get(SysConstains.LOGIN_USER_KEY); String uuid = (String) claims.get(SysConstains.LOGIN_USER_KEY);
String userKey = getTokenKey(uuid); String userKey = getTokenKey(uuid);
cacheService.select(portalDb);
String userStr = cacheService.get(userKey);
cacheService.select(db);
// Rest<String> rest = userFeign.getToken(userKey); // Rest<String> rest = userFeign.getToken(userKey);
// String userStr = rest.getData(); // String userStr = rest.getData();
String userStr = "";
userStr = cacheService.get(userKey);
if (StringUtils.isNotEmpty(userStr)) { if (StringUtils.isNotEmpty(userStr)) {
UserEntity userEntity = JSONObject.parseObject(userStr, UserEntity.class); UserEntity userEntity = JSONObject.parseObject(userStr, UserEntity.class);
userEntity.setToken(token); userEntity.setToken(token);
......
...@@ -2,13 +2,14 @@ package com.mortals.xhx.base.framework.interceptor; ...@@ -2,13 +2,14 @@ package com.mortals.xhx.base.framework.interceptor;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.annotation.UnAuth; import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.common.Rest;
import com.mortals.framework.service.IAuthTokenService; import com.mortals.framework.service.IAuthTokenService;
import com.mortals.framework.service.IUser; import com.mortals.framework.service.IUser;
import com.mortals.framework.util.AESUtil; import com.mortals.framework.util.AESUtil;
import com.mortals.framework.utils.ServletUtils; import com.mortals.framework.utils.ServletUtils;
import com.mortals.framework.web.interceptor.BaseInterceptor; import com.mortals.framework.web.interceptor.BaseInterceptor;
import com.mortals.xhx.base.framework.config.InterceptorConfig; import com.mortals.xhx.base.framework.config.InterceptorConfig;
import com.mortals.xhx.common.key.Constant; import com.mortals.xhx.common.code.ApiRespCodeEnum;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
...@@ -19,6 +20,9 @@ import javax.servlet.http.HttpServletRequest; ...@@ -19,6 +20,9 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import static com.mortals.xhx.common.key.ErrorCode.*;
import static com.mortals.xhx.common.key.ErrorCode.ERROR_USER_OPERATION_CONTENT;
/** /**
* 用户权限验证,基于token * 用户权限验证,基于token
* *
...@@ -40,7 +44,8 @@ public class AuthUserInterceptor extends BaseInterceptor { ...@@ -40,7 +44,8 @@ public class AuthUserInterceptor extends BaseInterceptor {
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception { throws Exception {
if (handler instanceof HandlerMethod) { JSONObject ret = new JSONObject();
if(handler instanceof HandlerMethod){
HandlerMethod handlerMethod = (HandlerMethod) handler; HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod(); Method method = handlerMethod.getMethod();
UnAuth annotation = method.getAnnotation(UnAuth.class); UnAuth annotation = method.getAnnotation(UnAuth.class);
...@@ -48,10 +53,9 @@ public class AuthUserInterceptor extends BaseInterceptor { ...@@ -48,10 +53,9 @@ public class AuthUserInterceptor extends BaseInterceptor {
//取消校验 //取消校验
return true; return true;
} }
} else if (handler instanceof ResourceHttpRequestHandler) { }else if(handler instanceof ResourceHttpRequestHandler){
return true; return true;
} }
JSONObject ret = new JSONObject();
try { try {
String uri = request.getServletPath(); String uri = request.getServletPath();
//校验配置的请求路径是否需要检查权限 //校验配置的请求路径是否需要检查权限
...@@ -59,23 +63,23 @@ public class AuthUserInterceptor extends BaseInterceptor { ...@@ -59,23 +63,23 @@ public class AuthUserInterceptor extends BaseInterceptor {
//需要校验权限 //需要校验权限
boolean auth = this.checkAuth(request, uri, config.getSecurityKey()); boolean auth = this.checkAuth(request, uri, config.getSecurityKey());
if (!auth) { if (!auth) {
//校验token不正常
String token = authTokenService.getToken(request);
if(ObjectUtils.isEmpty(token)){
ServletUtils.renderString(response, JSONObject.toJSONString(Rest.fail(ERROR_TOKEN_UNAUTHORIZED, ERROR_TOKEN_UNAUTHORIZED_CONTENT)));
return false;
}
//不存在时候 如果是管理员也不做拦截 //不存在时候 如果是管理员也不做拦截
IUser loginUser = authTokenService.getLoginUser(request); IUser loginUser = authTokenService.getLoginUser(request);
//loginUser.isManager() if (ObjectUtils.isEmpty(loginUser)) {
if(ObjectUtils.isEmpty(loginUser)){ ServletUtils.renderString(response, JSONObject.toJSONString(Rest.fail(ERROR_TOKEN_EXPIRED, ERROR_TOKEN_EXPIRED_CONTENT)));
ret.put("code", 401);
ret.put("msg", "用户未登录或登录失效,请重新登录");
ServletUtils.renderString(response, JSONObject.toJSONString(ret));
return false; return false;
}else if(loginUser.isAdmin()||loginUser.getUserType()==1||loginUser.getUserType()== Constant.CUSTOMER_USER){ } else if (loginUser.isAdmin() || loginUser.getUserType() == 1) {
return super.preHandle(request, response, handler); return super.preHandle(request, response, handler);
} else { } else {
ret.put("code", -1); ServletUtils.renderString(response, JSONObject.toJSONString(Rest.fail(ERROR_USER_OPERATION, ERROR_USER_OPERATION_CONTENT)));
ret.put("msg", "用户无该操作权限!");
ServletUtils.renderString(response, JSONObject.toJSONString(ret));
return false; return false;
} }
} }
} }
} catch (Exception e) { } catch (Exception e) {
...@@ -102,6 +106,4 @@ public class AuthUserInterceptor extends BaseInterceptor { ...@@ -102,6 +106,4 @@ public class AuthUserInterceptor extends BaseInterceptor {
return false; return false;
} }
} }
...@@ -3,7 +3,6 @@ package com.mortals.xhx.base.framework.ws.handler; ...@@ -3,7 +3,6 @@ package com.mortals.xhx.base.framework.ws.handler;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.mortals.xhx.base.framework.ws.message.AuthRequest; import com.mortals.xhx.base.framework.ws.message.AuthRequest;
import com.mortals.xhx.base.framework.ws.message.AuthResponse; import com.mortals.xhx.base.framework.ws.message.AuthResponse;
import com.mortals.xhx.base.framework.ws.message.UserJoinNoticeRequest;
import com.mortals.xhx.base.framework.ws.util.WebSocketUtil; import com.mortals.xhx.base.framework.ws.util.WebSocketUtil;
import lombok.extern.apachecommons.CommonsLog; import lombok.extern.apachecommons.CommonsLog;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
......
...@@ -2,8 +2,6 @@ package com.mortals.xhx.base.framework.ws.handler; ...@@ -2,8 +2,6 @@ package com.mortals.xhx.base.framework.ws.handler;
import com.mortals.xhx.base.framework.ws.message.HeartBeatRequest; import com.mortals.xhx.base.framework.ws.message.HeartBeatRequest;
import com.mortals.xhx.base.framework.ws.message.SendResponse; import com.mortals.xhx.base.framework.ws.message.SendResponse;
import com.mortals.xhx.base.framework.ws.message.SendToOneRequest;
import com.mortals.xhx.base.framework.ws.message.SendToUserRequest;
import com.mortals.xhx.base.framework.ws.util.WebSocketUtil; import com.mortals.xhx.base.framework.ws.util.WebSocketUtil;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.WebSocketSession;
......
...@@ -4,7 +4,6 @@ import lombok.extern.apachecommons.CommonsLog; ...@@ -4,7 +4,6 @@ import lombok.extern.apachecommons.CommonsLog;
import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse; import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor; import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;
import java.util.Map; import java.util.Map;
...@@ -17,18 +16,20 @@ import java.util.Map; ...@@ -17,18 +16,20 @@ import java.util.Map;
@CommonsLog @CommonsLog
public class WebSocketShakeInterceptor extends HttpSessionHandshakeInterceptor { public class WebSocketShakeInterceptor extends HttpSessionHandshakeInterceptor {
@Override // 拦截 Handshake 事件
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, @Override
WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, org.springframework.web.socket.WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
// 获得 accessToken // 获得 accessToken
if (request instanceof ServletServerHttpRequest) { if (request instanceof ServletServerHttpRequest) {
ServletServerHttpRequest serverRequest = (ServletServerHttpRequest) request; ServletServerHttpRequest serverRequest = (ServletServerHttpRequest) request;
attributes.put("accessToken", serverRequest.getServletRequest().getParameter("accessToken")); attributes.put("accessToken", serverRequest.getServletRequest().getParameter("accessToken"));
} }
// 调用父方法,继续执行逻辑
return super.beforeHandshake(request, response, wsHandler, attributes); return super.beforeHandshake(request, response, wsHandler, attributes);
} }
public static void main(String[] args) { public static void main(String[] args) {
WebSocketShakeInterceptor webSocketShakeInterceptor = new WebSocketShakeInterceptor(); WebSocketShakeInterceptor webSocketShakeInterceptor = new WebSocketShakeInterceptor();
} }
......
package com.mortals.xhx.base.login.interceptor; package com.mortals.xhx.base.login.interceptor;
import com.mortals.framework.annotation.UnAuth;
import com.mortals.xhx.base.framework.config.InterceptorConfig; import com.mortals.xhx.base.framework.config.InterceptorConfig;
import com.mortals.framework.ap.CookieService; import com.mortals.framework.ap.CookieService;
import com.mortals.framework.ap.SysConstains; import com.mortals.framework.ap.SysConstains;
...@@ -13,10 +14,13 @@ import com.mortals.framework.web.interceptor.BaseInterceptor; ...@@ -13,10 +14,13 @@ import com.mortals.framework.web.interceptor.BaseInterceptor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
//@Order(1) import java.lang.reflect.Method;
@Order(1)
//@Component //@Component
public class AuthJsonInterceptor extends BaseInterceptor { public class AuthJsonInterceptor extends BaseInterceptor {
...@@ -35,6 +39,13 @@ public class AuthJsonInterceptor extends BaseInterceptor { ...@@ -35,6 +39,13 @@ public class AuthJsonInterceptor extends BaseInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception { throws Exception {
try { try {
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
UnAuth annotation = method.getAnnotation(UnAuth.class);
if (annotation != null) {
//取消校验
return true;
}
String uri = request.getServletPath(); String uri = request.getServletPath();
if (config.needCheckAuth(uri)) { if (config.needCheckAuth(uri)) {
boolean auth = this.checkAuth(request, uri, config.getSecurityKey()); boolean auth = this.checkAuth(request, uri, config.getSecurityKey());
......
...@@ -2,10 +2,12 @@ package com.mortals.xhx.base.login.web; ...@@ -2,10 +2,12 @@ package com.mortals.xhx.base.login.web;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.ap.CookieService;
import com.mortals.framework.ap.GlobalSysInfo; import com.mortals.framework.ap.GlobalSysInfo;
import com.mortals.framework.ap.SysConstains; import com.mortals.framework.ap.SysConstains;
import com.mortals.framework.common.Rest;
import com.mortals.framework.service.IAuthTokenService;
import com.mortals.framework.service.ICacheService; import com.mortals.framework.service.ICacheService;
import com.mortals.framework.service.ITokenService;
import com.mortals.framework.service.IUser; import com.mortals.framework.service.IUser;
import com.mortals.framework.util.AESUtil; import com.mortals.framework.util.AESUtil;
import com.mortals.framework.util.DateUtils; import com.mortals.framework.util.DateUtils;
...@@ -19,9 +21,11 @@ import com.mortals.xhx.base.system.user.model.UserEntity; ...@@ -19,9 +21,11 @@ import com.mortals.xhx.base.system.user.model.UserEntity;
import com.mortals.xhx.base.system.user.service.UserService; import com.mortals.xhx.base.system.user.service.UserService;
import com.mortals.xhx.base.system.valid.service.ValidCodeService; import com.mortals.xhx.base.system.valid.service.ValidCodeService;
import com.mortals.xhx.common.key.RedisKey; import com.mortals.xhx.common.key.RedisKey;
import org.apache.commons.logging.Log; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
...@@ -31,9 +35,13 @@ import javax.servlet.http.HttpServletResponse; ...@@ -31,9 +35,13 @@ import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import static com.mortals.xhx.common.key.ErrorCode.ERROR_TOKEN_EXPIRED;
import static com.mortals.xhx.common.key.ErrorCode.ERROR_TOKEN_EXPIRED_CONTENT;
@RestController @RestController
@Slf4j
@RequestMapping("login") @RequestMapping("login")
public class LoginController extends BaseCRUDJsonBodyMappingController<UserService, UserEntity, Long> { public class LoginController extends BaseCRUDJsonBodyMappingController<UserService, UserEntity, Long> implements InitializingBean {
@Autowired @Autowired
private UserService userService; private UserService userService;
...@@ -44,19 +52,15 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi ...@@ -44,19 +52,15 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
@Autowired @Autowired
private MenuService menuService; private MenuService menuService;
@Autowired @Autowired
private ITokenService tokenService;
@Autowired
private ICacheService cacheService; private ICacheService cacheService;
@Autowired
private static Log logger = LogFactory.getLog(LoginController.class); private IAuthTokenService authTokenService;
@RequestMapping("login") @RequestMapping("login")
public String login(HttpServletRequest request, HttpServletResponse response, @RequestBody LoginForm loginForm) throws Exception { public String login(@RequestBody LoginForm loginForm) throws Exception {
JSONObject ret = new JSONObject(); JSONObject ret = new JSONObject();
String loginName = loginForm.getLoginName(); String loginName = loginForm.getLoginName();
String password = loginForm.getPassword(); String password = loginForm.getPassword();
//String securityCode = loginForm.getSecurityCode();
String ip = super.getRequestIP(request); String ip = super.getRequestIP(request);
if (StringUtils.isEmpty(loginName) || StringUtils.isEmpty(password)) { if (StringUtils.isEmpty(loginName) || StringUtils.isEmpty(password)) {
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE); ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
...@@ -66,10 +70,8 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi ...@@ -66,10 +70,8 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
UserEntity userEntity = null; UserEntity userEntity = null;
try { try {
loginForm.validate(); loginForm.validate();
userEntity = userService.doLogin(loginName, password, ip); userEntity = userService.doLogin(loginName, password, ip);
userEntity.setLastLoginAddress(ip); userEntity.setLastLoginAddress(ip);
//saveCurrUser(request, response, userEntity);
recordSysLog(request, userEntity, "用户登录系统成功!"); recordSysLog(request, userEntity, "用户登录系统成功!");
// 返回拥有的菜单数据 // 返回拥有的菜单数据
Set<String> urls = resourceService.findUrlSetByUserId(userEntity.getId()); Set<String> urls = resourceService.findUrlSetByUserId(userEntity.getId());
...@@ -78,23 +80,26 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi ...@@ -78,23 +80,26 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
if (currUserName == null || currUserName.trim().length() == 0) { if (currUserName == null || currUserName.trim().length() == 0) {
currUserName = "管理员"; currUserName = "管理员";
} }
userEntity.setLoginTime(System.currentTimeMillis());
userEntity.setToken(IdUtil.fastSimpleUUID());
userEntity.setExpireTime(DateUtils.addCurrDate(7).getTime());
String token = authTokenService.createToken(userEntity);
JSONObject data = new JSONObject(); JSONObject data = new JSONObject();
data.put("token", token);
data.put("currUserName", currUserName); data.put("currUserName", currUserName);
data.put("barList", outlookBarList); data.put("barList", outlookBarList);
data.put("id", userEntity.getId()); data.put("id", userEntity.getId());
data.put("userType", userEntity.getUserType()); data.put("userType", userEntity.getUserType());
userEntity.setLoginTime(System.currentTimeMillis());
userEntity.setToken(IdUtil.fastSimpleUUID());
userEntity.setExpireTime(DateUtils.addCurrDate(7).getTime());
userEntity.setMenuUrl(generateMenuUrlCode(urls));
String token = authTokenService.createToken(userEntity);
data.put("token", token);
//设置token 和过期时间
//data.put("expiresTime", DateUtils.addCurrDate(7).getTime());
generateMenuUrlCode(urls);
//this.generateBlackCookie(request, response, loginName, urls); //this.generateBlackCookie(request, response, loginName, urls);
ret.put(KEY_RESULT_DATA, data); ret.put(KEY_RESULT_DATA, data);
ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS); ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
ret.put(KEY_RESULT_MSG, "用户登录系统成功!"); ret.put(KEY_RESULT_MSG, "用户登录系统成功!");
ret.put("resources", urls); ret.put("resources", urls);
return ret.toJSONString(); return ret.toJSONString();
} catch (Exception e) { } catch (Exception e) {
log.error("login error ", e); log.error("login error ", e);
...@@ -109,17 +114,18 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi ...@@ -109,17 +114,18 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
} }
@RequestMapping("logout") @RequestMapping("logout")
public void logout() throws Exception { public void logout(HttpServletRequest request, HttpServletResponse response) throws Exception {
recordSysLog(request, "退出登录"); recordSysLog(request, "退出登录");
super.removeCurrUser(request); super.removeCurrUser(request);
this.deleteBlackCookie(request, response);
} }
@RequestMapping("index") @RequestMapping("index")
public String index(HttpServletRequest request, HttpServletResponse response) throws Exception { public String index() throws Exception {
JSONObject ret = new JSONObject(); JSONObject ret = new JSONObject();
IUser user = this.getCurUser(); IUser user = this.getCurUser();
if (user == null) { if (user == null) {
return ""; return JSONObject.toJSONString(Rest.fail(ERROR_TOKEN_EXPIRED, ERROR_TOKEN_EXPIRED_CONTENT));
} }
Set<String> urls = resourceService.findUrlSetByUserId(user.getId()); Set<String> urls = resourceService.findUrlSetByUserId(user.getId());
List<MenuEntity> outlookBarList = menuService.findTreeMenu(user, urls); List<MenuEntity> outlookBarList = menuService.findTreeMenu(user, urls);
...@@ -128,6 +134,9 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi ...@@ -128,6 +134,9 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
currUserName = "管理员"; currUserName = "管理员";
} }
JSONObject data = new JSONObject(); JSONObject data = new JSONObject();
String token = authTokenService.getToken(request);
data.put("token", token);
data.put("currUserName", currUserName); data.put("currUserName", currUserName);
data.put("barList", outlookBarList); data.put("barList", outlookBarList);
data.put("id", user.getId()); data.put("id", user.getId());
...@@ -163,6 +172,26 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi ...@@ -163,6 +172,26 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
} }
} }
private String generateMenuUrlCode(Set<String> urls) {
try {
String securityKey = GlobalSysInfo.getPropertyValue(SysConstains.PROP_COOKIE_SECURITY_KEY);
StringBuilder sb = new StringBuilder();
if (urls != null && urls.size() > 0) {
for (String url : urls) {
int index = url.hashCode() & (Integer.MAX_VALUE - 1);
sb.append(index).append(",");
}
}
String menuUrl = sb.toString();
return AESUtil.encrypt(menuUrl, securityKey);
} catch (Throwable e) {
log.error("编码异常", e);
return null;
}
}
@RequestMapping("validcode") @RequestMapping("validcode")
public String validCode(HttpServletRequest request, HttpServletResponse response, LoginForm loginForm) { public String validCode(HttpServletRequest request, HttpServletResponse response, LoginForm loginForm) {
JSONObject ret = new JSONObject(); JSONObject ret = new JSONObject();
...@@ -206,4 +235,26 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi ...@@ -206,4 +235,26 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
return ret.toJSONString(); return ret.toJSONString();
} }
protected void deleteBlackCookie(HttpServletRequest request, HttpServletResponse response) {
try {
CookieService.deleteCookieForAuth(request, response);
} catch (Throwable e) {
}
}
@RequestMapping("parseToken")
public IUser parseToken() throws Exception {
IUser userEntity = authTokenService.getLoginUser(request);
if (!ObjectUtils.isEmpty(userEntity)) {
authTokenService.verifyToken(userEntity);
return userEntity;
}
return null;
}
@Override
public void afterPropertiesSet() throws Exception {
log.info("初始化加载单机版登录。。。");
}
} }
...@@ -37,7 +37,7 @@ public class LoginForm extends BaseForm { ...@@ -37,7 +37,7 @@ public class LoginForm extends BaseForm {
@Override @Override
public String toString() { public String toString() {
return "loginName:" + this.loginName + " password:" + this.password; return "loginName:" + this.loginName + " password:" + this.password + " securityCode:" + this.securityCode;
} }
@Override @Override
...@@ -48,9 +48,7 @@ public class LoginForm extends BaseForm { ...@@ -48,9 +48,7 @@ public class LoginForm extends BaseForm {
if (password == null || password.trim().length() == 0) { if (password == null || password.trim().length() == 0) {
throw new AppException("密码不能为空!"); throw new AppException("密码不能为空!");
} }
// if (securityCode == null || securityCode.trim().length() == 0) {
// throw new AppException("验证码不能为空!");
// }
return super.validate(); return super.validate();
} }
} }
package com.mortals.xhx.base.login.web; package com.mortals.xhx.base.login.web;
import java.awt.image.BufferedImage; import com.mortals.framework.util.SecurityImage;
import com.mortals.framework.web.BaseCRUDJsonController;
import javax.servlet.http.HttpServletRequest; import com.mortals.xhx.base.login.service.GifSecurityImage;
import javax.servlet.http.HttpServletResponse;
import com.mortals.xhx.base.system.valid.model.ValidCodeEntity; import com.mortals.xhx.base.system.valid.model.ValidCodeEntity;
import com.mortals.xhx.base.system.valid.service.ValidCodeService; import com.mortals.xhx.base.system.valid.service.ValidCodeService;
import com.mortals.xhx.base.system.valid.web.ValidCodeForm; import com.mortals.xhx.base.system.valid.web.ValidCodeForm;
...@@ -13,9 +11,9 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -13,9 +11,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.mortals.framework.util.SecurityImage; import javax.servlet.http.HttpServletRequest;
import com.mortals.framework.web.BaseCRUDJsonController; import javax.servlet.http.HttpServletResponse;
import com.mortals.xhx.base.login.service.GifSecurityImage; import java.awt.image.BufferedImage;
@RestController @RestController
@RequestMapping("securitycode") @RequestMapping("securitycode")
......
...@@ -76,6 +76,9 @@ public class MenuEntity extends BaseEntityLong{ ...@@ -76,6 +76,9 @@ public class MenuEntity extends BaseEntityLong{
/** 创建用户名称 */ /** 创建用户名称 */
private String createUserName; private String createUserName;
private Integer type;
private List<MenuEntity> childList = new ArrayList<MenuEntity>(); private List<MenuEntity> childList = new ArrayList<MenuEntity>();
...@@ -83,6 +86,14 @@ public class MenuEntity extends BaseEntityLong{ ...@@ -83,6 +86,14 @@ public class MenuEntity extends BaseEntityLong{
} }
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
/** /**
* 获取 菜单名称 * 获取 菜单名称
* @return name * @return name
...@@ -410,7 +421,7 @@ public class MenuEntity extends BaseEntityLong{ ...@@ -410,7 +421,7 @@ public class MenuEntity extends BaseEntityLong{
this.name = null; this.name = null;
this.url = null; this.url = null;
this.parentId = null; this.parentId = null;
this.orderId = null; this.orderId = 0;
this.status = 1; this.status = 1;
this.linkType = 0; this.linkType = 0;
this.groupId = 1; this.groupId = 1;
......
...@@ -52,4 +52,12 @@ public interface MenuService extends ICRUDService<MenuEntity,Long> { ...@@ -52,4 +52,12 @@ public interface MenuService extends ICRUDService<MenuEntity,Long> {
* @throws AppException * @throws AppException
*/ */
public List<MenuEntity> findTreeMenu() throws AppException; public List<MenuEntity> findTreeMenu() throws AppException;
/**
* 更新排列顺序
* @param id
* @param type
*/
void upOrDown(Long id, Integer type);
} }
\ No newline at end of file
/** /**
* 文件:MenuServiceImpl.java * 文件:MenuServiceImpl.java
* 版本:1.0.0 * 版本:1.0.0
* 日期: * 日期:
* Copyright &reg; * Copyright &reg;
* All right reserved. * All right reserved.
*/ */
package com.mortals.xhx.base.system.menu.service.impl; package com.mortals.xhx.base.system.menu.service.impl;
import com.mortals.framework.common.code.YesNo; import com.mortals.framework.common.code.YesNo;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol; import com.mortals.framework.model.OrderCol;
import com.mortals.framework.service.IUser; import com.mortals.framework.service.IUser;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl; import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
...@@ -19,20 +20,23 @@ import com.mortals.xhx.base.system.menu.model.MenuEntity; ...@@ -19,20 +20,23 @@ import com.mortals.xhx.base.system.menu.model.MenuEntity;
import com.mortals.xhx.base.system.menu.model.MenuQuery; import com.mortals.xhx.base.system.menu.model.MenuQuery;
import com.mortals.xhx.base.system.menu.service.MenuService; import com.mortals.xhx.base.system.menu.service.MenuService;
import com.mortals.xhx.common.code.YesNoEnum;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* <p>Title: 菜单信息</p> * <p>Title: 菜单信息</p>
* <p>Description: MenuServiceImpl service接口 </p> * <p>Description: MenuServiceImpl service接口 </p>
* <p>Copyright: Copyright &reg; </p> * <p>Copyright: Copyright &reg; </p>
* <p>Company: </p> * <p>Company: </p>
* @author *
* @author
* @version 1.0.0 * @version 1.0.0
*/ */
@Service("menuService") @Service("menuService")
public class MenuServiceImpl extends AbstractCRUDServiceImpl<MenuDao,MenuEntity,Long> implements MenuService { public class MenuServiceImpl extends AbstractCRUDServiceImpl<MenuDao, MenuEntity, Long> implements MenuService {
@Override @Override
public List<MenuEntity> findAllEnable() throws AppException { public List<MenuEntity> findAllEnable() throws AppException {
...@@ -48,7 +52,7 @@ public class MenuServiceImpl extends AbstractCRUDServiceImpl<MenuDao,MenuEntity, ...@@ -48,7 +52,7 @@ public class MenuServiceImpl extends AbstractCRUDServiceImpl<MenuDao,MenuEntity,
@Override @Override
public List<MenuEntity> findTreeMenu(IUser user, Set<String> urls) throws AppException { public List<MenuEntity> findTreeMenu(IUser user, Set<String> urls) throws AppException {
Set<Long> authIds = new HashSet<Long>(); Set<Long> authIds = new HashSet<>();
Map<Long, MenuEntity> menuMap = new HashMap<Long, MenuEntity>(); Map<Long, MenuEntity> menuMap = new HashMap<Long, MenuEntity>();
List<MenuEntity> userModuleList = this.findAllEnable(); List<MenuEntity> userModuleList = this.findAllEnable();
for (MenuEntity sysModule : userModuleList) { for (MenuEntity sysModule : userModuleList) {
...@@ -111,5 +115,69 @@ public class MenuServiceImpl extends AbstractCRUDServiceImpl<MenuDao,MenuEntity, ...@@ -111,5 +115,69 @@ public class MenuServiceImpl extends AbstractCRUDServiceImpl<MenuDao,MenuEntity,
} }
return outlookBar; return outlookBar;
} }
@Override
public void upOrDown(Long id, Integer type) {
MenuQuery query = new MenuQuery();
query.setOrderColList(Arrays.asList(new OrderCol("orderId")));
query.setOrderKind(OrderCol.ASCENDING);
//判断移动的是一级菜单还是二级菜单
MenuEntity menuEntity = this.get(id);
if (menuEntity.getParentId() == 0) {
//一级菜单
query.setParentId(0L);
} else {
//二级菜单
query.setParentId(menuEntity.getParentId());
}
List<MenuEntity> list = this.find(query);
MenuEntity preEntity = null;
MenuEntity curEntity = null;
if (type == YesNoEnum.NO.getValue()) {
//up
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id) && i > 0) {
curEntity = list.get(i);
preEntity = list.get(i - 1);
break;
}
}
} else {
//down
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id) && i + 1 < list.size()) {
curEntity = list.get(i);
preEntity = list.get(i + 1);
break;
}
}
}
if (preEntity != null && curEntity != null) {
//交换
int temp = preEntity.getOrderId();
preEntity.setOrderId(curEntity.getOrderId());
curEntity.setOrderId(temp);
this.update(preEntity);
this.update(curEntity);
}
}
@Override
protected void saveBefore(MenuEntity entity, Context context) throws AppException {
MenuQuery query = new MenuQuery();
query.setParentId(entity.getParentId());
Comparator<Integer> comparator = Comparator.comparing(Integer::intValue);
Optional<Integer> maxOptional = this.find(query).stream().map(MenuEntity::getOrderId).filter(f->f!=9999).max(comparator);
maxOptional.ifPresent(e -> {
e=e+1;
entity.setOrderId(e);
});
super.saveBefore(entity, context);
}
} }
\ No newline at end of file
/**
* 文件:MenuController.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.menu.web; package com.mortals.xhx.base.system.menu.web;
...@@ -13,9 +6,9 @@ import com.mortals.framework.exception.AppException; ...@@ -13,9 +6,9 @@ import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol; import com.mortals.framework.model.OrderCol;
import org.springframework.web.bind.annotation.PostMapping; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import org.springframework.web.bind.annotation.RequestMapping; import com.mortals.xhx.base.system.menu.model.MenuQuery;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*;
import com.mortals.framework.web.BaseCRUDJsonMappingController; import com.mortals.framework.web.BaseCRUDJsonMappingController;
import com.mortals.xhx.base.system.menu.model.MenuEntity; import com.mortals.xhx.base.system.menu.model.MenuEntity;
...@@ -35,73 +28,86 @@ import java.util.Map; ...@@ -35,73 +28,86 @@ import java.util.Map;
/** /**
* <p>Title: 菜单信息</p> * 菜单信息
* <p>Description: MenuController </p> *
* <p>Copyright: Copyright &reg; </p> * @author: zxfei
* <p>Company: </p> * @date: 2021/11/30 10:02
* @author
* @version 1.0.0
*/ */
@RestController @RestController
@RequestMapping("menu") @RequestMapping("menu")
public class MenuController extends BaseCRUDJsonMappingController<MenuService, MenuForm,MenuEntity,Long> { public class MenuController extends BaseCRUDJsonBodyMappingController<MenuService, MenuEntity, Long> {
public MenuController() {
super.setModuleDesc("菜单信息");
}
public MenuController(){ @Override
super.setFormClass(MenuForm.class); protected void doListBefore(MenuEntity query, Map<String, Object> model, Context context) throws AppException {
super.setModuleDesc("菜单信息"); List<OrderCol> orderColList = new ArrayList<OrderCol>();
} orderColList.add(new OrderCol("parentId"));
orderColList.add(new OrderCol("orderId"));
query.setOrderColList(orderColList);
}
@Override
protected void init(Map<String, Object> model, Context context) {
Map<String, Object> status = new HashMap<String, Object>();
status.put("status", DataSatus.getEnumMap(DataSatus.CLOSE.getValue(), DataSatus.DELETE.getValue(), DataSatus.OVERDUE.getValue(), DataSatus.USEOUT.getValue()));
status.put("linkType", MenuLinkType.getEnumMap());
status.put("commMenu", MenuComm.getEnumMap());
status.put("menuType", MenuType.getEnumMap());
status.put("authType", MenuAuthType.getEnumMap());
model.put(KEY_RESULT_DICT, status);
}
@Override /**
protected void doListBefore(HttpServletRequest request, HttpServletResponse response, MenuForm form, Map<String, Object> model, Context context) throws AppException { * 改变状态
List<OrderCol> orderColList = new ArrayList<OrderCol>(); */
orderColList.add(new OrderCol("parentId")); @RequestMapping(value = "change/status")
orderColList.add(new OrderCol("orderId")); public String changeStatus(@RequestBody MenuEntity query) {
form.getQuery().setOrderColList(orderColList); JSONObject ret = new JSONObject();
} Context context = getContext();
try {
MenuEntity entity = this.service.get(query.getId(), context);//.doSubmitAudit(form.getEntity(), context);
if (null == entity) {
throw new AppException("菜单不存在!");
}
if (null == entity.getStatus()) {
throw new AppException("菜单状态不能为空!");
}
if (entity.getStatus() != DataSatus.ENABLE.getValue() && entity.getStatus() != DataSatus.DISENABLE.getValue()) {
throw new AppException("非法菜单状态!");
}
String busiDesc = DataSatus.getByValue(entity.getStatus()).getDesc();
entity.setStatus(entity.getStatus());
this.service.update(entity, context);
ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
ret.put(KEY_RESULT_MSG, busiDesc + "成功");
recordSysLog(request, busiDesc + " 【成功】 [id:" + entity.getId() + "]");
@Override } catch (Exception e) {
protected void init(HttpServletRequest request, HttpServletResponse response, MenuForm form, Map<String, Object> model, ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
Context context) { ret.put(KEY_RESULT_MSG, super.convertException(e));
Map<String, Object> status = new HashMap<String, Object>(); }
status.put("status", DataSatus.getEnumMap(DataSatus.CLOSE.getValue(), DataSatus.DELETE.getValue(), DataSatus.OVERDUE.getValue(), DataSatus.USEOUT.getValue())); return ret.toJSONString();
status.put("linkType", MenuLinkType.getEnumMap()); }
status.put("commMenu", MenuComm.getEnumMap());
status.put("menuType", MenuType.getEnumMap());
status.put("authType", MenuAuthType.getEnumMap());
model.put(KEY_RESULT_DICT, status);
super.init(request, response, form, model, context);
}
/**
* 改变状态
*/
@RequestMapping(value = "change/status")
public String changeStatus(HttpServletRequest request, HttpServletResponse response, MenuForm form) {
JSONObject ret = new JSONObject();
Context context = getContext();
try {
MenuEntity entity = this.service.get(form.getEntity().getId(), context);//.doSubmitAudit(form.getEntity(), context);
if (null == entity) {
throw new AppException("菜单不存在!");
}
if (null == form.getEntity().getStatus()) {
throw new AppException("菜单状态不能为空!");
}
if (form.getEntity().getStatus() != DataSatus.ENABLE.getValue() && form.getEntity().getStatus() != DataSatus.DISENABLE.getValue()) {
throw new AppException("非法菜单状态!");
}
String busiDesc = DataSatus.getByValue(form.getEntity().getStatus()).getDesc();
entity.setStatus(form.getEntity().getStatus());
this.service.update(entity, context);
ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
ret.put(KEY_RESULT_MSG, busiDesc + "成功");
recordSysLog(request, busiDesc + " 【成功】 [id:" + entity.getId() + "]");
} catch (Exception e) { /**
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE); * 更换排序
ret.put(KEY_RESULT_MSG, super.convertException(e)); */
} @PostMapping(value = "upOrDown")
return ret.toJSONString(); public String upOrDownTopicList(@RequestBody MenuEntity query) {
} JSONObject ret = new JSONObject();
ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
try {
this.service.upOrDown(query.getId(), query.getType());
} catch (Exception e) {
log.error("更新错误", e);
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
ret.put(KEY_RESULT_MSG, e.getMessage());
}
return ret.toJSONString();
}
} }
\ No newline at end of file
...@@ -10,8 +10,6 @@ package com.mortals.xhx.base.system.oper.model; ...@@ -10,8 +10,6 @@ package com.mortals.xhx.base.system.oper.model;
import java.util.Date; import java.util.Date;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.framework.model.BaseEntityLong; import com.mortals.framework.model.BaseEntityLong;
/** /**
...@@ -47,7 +45,6 @@ public class OperLogEntity extends BaseEntityLong{ ...@@ -47,7 +45,6 @@ public class OperLogEntity extends BaseEntityLong{
private String ip; private String ip;
/** 操作时间 */ /** 操作时间 */
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date logDate; private Date logDate;
/** 操作类型,0:新增,1:修改,2:删除 */ /** 操作类型,0:新增,1:修改,2:删除 */
......
...@@ -106,7 +106,7 @@ public class OperLogServiceImpl extends AbstractCRUDServiceImpl<OperLogDao,OperL ...@@ -106,7 +106,7 @@ public class OperLogServiceImpl extends AbstractCRUDServiceImpl<OperLogDao,OperL
operLogEntity.setLogDate(new Date()); operLogEntity.setLogDate(new Date());
operLogEntity.setPlatformMark(GlobalSysInfo.getPropertyValue(SysConstains.PROP_PLATFORM_MARK)); operLogEntity.setPlatformMark(GlobalSysInfo.getPropertyValue(SysConstains.PROP_PLATFORM_MARK));
// operLogEntity.setOperType(operType.getValue()); //operLogEntity.setOperType(operType.getValue());
operLogEntity.setRequestUrl(requestUrl); operLogEntity.setRequestUrl(requestUrl);
operLogEntity.setLoginName(loginName); operLogEntity.setLoginName(loginName);
operLogEntity.setUserId(userId); operLogEntity.setUserId(userId);
......
/** /**
* 文件:OperLogController.java * 文件:OperLogController.java
* 版本:1.0.0 * 版本:1.0.0
* 日期: * 日期:
* Copyright &reg; * Copyright &reg;
* All right reserved. * All right reserved.
*/ */
package com.mortals.xhx.base.system.oper.web; package com.mortals.xhx.base.system.oper.web;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol; import com.mortals.framework.model.OrderCol;
...@@ -14,9 +16,15 @@ import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; ...@@ -14,9 +16,15 @@ import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.oper.model.OperLogEntity; import com.mortals.xhx.base.system.oper.model.OperLogEntity;
import com.mortals.xhx.base.system.oper.service.OperLogService; import com.mortals.xhx.base.system.oper.service.OperLogService;
import com.mortals.xhx.common.code.OperTypeEnum; import com.mortals.xhx.common.code.OperTypeEnum;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.mortals.framework.web.BaseCRUDJsonMappingController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -26,33 +34,36 @@ import java.util.Map; ...@@ -26,33 +34,36 @@ import java.util.Map;
* <p>Description: OperLogController </p> * <p>Description: OperLogController </p>
* <p>Copyright: Copyright &reg; </p> * <p>Copyright: Copyright &reg; </p>
* <p>Company: </p> * <p>Company: </p>
* @author *
* @author
* @version 1.0.0 * @version 1.0.0
*/ */
@RestController @RestController
@RequestMapping("oper/log") @RequestMapping("oper/log")
public class OperLogController extends BaseCRUDJsonBodyMappingController<OperLogService,OperLogEntity,Long> { public class OperLogController extends BaseCRUDJsonBodyMappingController<OperLogService, OperLogEntity, Long> {
public OperLogController(){ public OperLogController() {
super.setFormClass(OperLogForm.class); super.setFormClass(OperLogForm.class);
super.setModuleDesc("操作日志"); super.setModuleDesc("操作日志");
} }
@Override @Override
protected void init(Map<String, Object> model, Context context) { protected void init(Map<String, Object> model, Context context) {
// 返回日志类型 Map<String, Object> status = new HashMap<String, Object>(1);
this.addDict(model,"operType", OperTypeEnum.getEnumMap()); // 返回日志类型
super.init(model, context); status.put("operType", OperTypeEnum.getEnumMap());
}
model.put(KEY_RESULT_DICT, status);
@Override }
protected void doListBefore(OperLogEntity query, Map<String, Object> model, Context context) throws AppException {
query.setOrderColList(new ArrayList<OrderCol>() { @Override
{ protected void doListBefore(OperLogEntity query, Map<String, Object> model, Context context) throws AppException {
add(new OrderCol("a.logDate", "desc")); query.setOrderColList(new ArrayList<OrderCol>() {
} {
}); add(new OrderCol("a.logDate", "desc"));
} }
});
}
} }
\ No newline at end of file
/**
* 文件:ResourceController.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.resource.web; package com.mortals.xhx.base.system.resource.web;
...@@ -16,6 +9,8 @@ import javax.servlet.http.HttpServletResponse; ...@@ -16,6 +9,8 @@ import javax.servlet.http.HttpServletResponse;
import com.mortals.framework.common.IBaseEnum; import com.mortals.framework.common.IBaseEnum;
import com.mortals.framework.common.code.UserType; import com.mortals.framework.common.code.UserType;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
...@@ -29,16 +24,15 @@ import com.mortals.xhx.common.code.AuthType; ...@@ -29,16 +24,15 @@ import com.mortals.xhx.common.code.AuthType;
import com.mortals.xhx.common.code.SourceType; import com.mortals.xhx.common.code.SourceType;
/** /**
* <p>Title: 资源信息</p> * 资源信息
* <p>Description: ResourceController </p> *
* <p>Copyright: Copyright &reg; </p> * @author: zxfei
* <p>Company: </p> * @date: 2022/5/7 15:27
* @author
* @version 1.0.0
*/ */
@Slf4j
@RestController @RestController
@RequestMapping("resource") @RequestMapping("resource")
public class ResourceController extends BaseCRUDJsonMappingController<ResourceService,ResourceForm,ResourceEntity,Long> { public class ResourceController extends BaseCRUDJsonBodyMappingController<ResourceService,ResourceEntity,Long> {
public ResourceController(){ public ResourceController(){
super.setFormClass(ResourceForm.class); super.setFormClass(ResourceForm.class);
...@@ -46,8 +40,7 @@ public class ResourceController extends BaseCRUDJsonMappingController<ResourceSe ...@@ -46,8 +40,7 @@ public class ResourceController extends BaseCRUDJsonMappingController<ResourceSe
} }
@Override @Override
protected void init(HttpServletRequest request, HttpServletResponse response, ResourceForm form, protected void init(Map<String, Object> model, Context context) {
Map<String, Object> model, Context context) {
Map<String, Object> statsus = new HashMap<String, Object>(); Map<String, Object> statsus = new HashMap<String, Object>();
statsus.put("authType", AuthType.getEnumMap()); statsus.put("authType", AuthType.getEnumMap());
statsus.put("sourceType", SourceType.getEnumMap()); statsus.put("sourceType", SourceType.getEnumMap());
...@@ -57,7 +50,6 @@ public class ResourceController extends BaseCRUDJsonMappingController<ResourceSe ...@@ -57,7 +50,6 @@ public class ResourceController extends BaseCRUDJsonMappingController<ResourceSe
statsus.put("userType", UserType.findByValue(getCurUser().getUserType())); statsus.put("userType", UserType.findByValue(getCurUser().getUserType()));
} }
model.put(KEY_RESULT_DICT, statsus); model.put(KEY_RESULT_DICT, statsus);
super.init(request, response, form, model, context);
} }
/** /**
......
...@@ -22,7 +22,11 @@ import com.mortals.framework.model.BaseEntityLong; ...@@ -22,7 +22,11 @@ import com.mortals.framework.model.BaseEntityLong;
*/ */
public class RoleEntity extends BaseEntityLong{ public class RoleEntity extends BaseEntityLong{
private static final long serialVersionUID = 1547777703344L; private static final long serialVersionUID = 1547777703344L;
/** 用户ID */
private Long userId;
/** 角色名称 */ /** 角色名称 */
private String name; private String name;
......
...@@ -8,13 +8,20 @@ ...@@ -8,13 +8,20 @@
package com.mortals.xhx.base.system.role.service.impl; package com.mortals.xhx.base.system.role.service.impl;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl; import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.xhx.base.system.role.dao.RoleDao; import com.mortals.xhx.base.system.role.dao.RoleDao;
import com.mortals.xhx.base.system.role.model.RoleEntity; import com.mortals.xhx.base.system.role.model.*;
import com.mortals.xhx.base.system.role.service.RoleAuthService;
import com.mortals.xhx.base.system.role.service.RoleService; import com.mortals.xhx.base.system.role.service.RoleService;
import com.mortals.xhx.base.system.role.service.RoleUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Arrays;
/** /**
* <p>Title: 角色信息</p> * <p>Title: 角色信息</p>
* <p>Description: RoleServiceImpl service接口 </p> * <p>Description: RoleServiceImpl service接口 </p>
...@@ -25,7 +32,29 @@ import org.springframework.stereotype.Service; ...@@ -25,7 +32,29 @@ import org.springframework.stereotype.Service;
*/ */
@Service("roleService") @Service("roleService")
public class RoleServiceImpl extends AbstractCRUDServiceImpl<RoleDao,RoleEntity,Long> implements RoleService { public class RoleServiceImpl extends AbstractCRUDServiceImpl<RoleDao,RoleEntity,Long> implements RoleService {
@Autowired
private RoleAuthService roleAuthService;
@Autowired
private RoleUserService roleUserService;
@Override
protected void removeAfter(Long[] ids, Context context, int result) throws AppException {
//删除关联角色
Arrays.asList(ids).stream().peek(roleId->{
RoleAuthQuery roleAuthQuery = new RoleAuthQuery();
roleAuthQuery.setRoleId(roleId);
Long[] roleAuthIds = roleAuthService.find(roleAuthQuery).stream().map(RoleAuthEntity::getId).toArray(Long[]::new);
roleAuthService.remove(roleAuthIds,context);
RoleUserQuery roleUserQuery = new RoleUserQuery();
roleUserQuery.setRoleId(roleId);
Long[] roleUserIds = roleUserService.find(roleUserQuery).stream().map(RoleUserEntity::getId).toArray(Long[]::new);
roleUserService.remove(roleUserIds,context);
}).count();
super.removeAfter(ids, context, result);
}
} }
\ No newline at end of file
...@@ -32,6 +32,7 @@ import java.util.Map; ...@@ -32,6 +32,7 @@ import java.util.Map;
@Service("roleUserService") @Service("roleUserService")
public class RoleUserServiceImpl extends AbstractCRUDServiceImpl<RoleUserDao,RoleUserEntity,Long> implements RoleUserService { public class RoleUserServiceImpl extends AbstractCRUDServiceImpl<RoleUserDao,RoleUserEntity,Long> implements RoleUserService {
@Override @Override
public void doDistributionUser(RoleUserQuery query) { public void doDistributionUser(RoleUserQuery query) {
Long roleId = query.getRoleId(); Long roleId = query.getRoleId();
...@@ -68,5 +69,7 @@ public class RoleUserServiceImpl extends AbstractCRUDServiceImpl<RoleUserDao,Rol ...@@ -68,5 +69,7 @@ public class RoleUserServiceImpl extends AbstractCRUDServiceImpl<RoleUserDao,Rol
} }
this.dao.insertBatch(list); this.dao.insertBatch(list);
} }
} }
\ No newline at end of file
/**
* 文件:RoleAuthController.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.role.web; package com.mortals.xhx.base.system.role.web;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.role.model.RoleAuthQuery;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
...@@ -21,39 +18,38 @@ import javax.servlet.http.HttpServletRequest; ...@@ -21,39 +18,38 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
/** /**
* <p>Title: 角色资源权限</p> * 角色资源权限
* <p>Description: RoleAuthController </p> *
* <p>Copyright: Copyright &reg; </p> * @author: zxfei
* <p>Company: </p> * @date: 2022/5/7 15:19
* @author
* @version 1.0.0
*/ */
@Slf4j
@RestController @RestController
@RequestMapping("role/auth") @RequestMapping("role/auth")
public class RoleAuthController extends BaseCRUDJsonMappingController<RoleAuthService,RoleAuthForm,RoleAuthEntity,Long> { public class RoleAuthController extends BaseCRUDJsonBodyMappingController<RoleAuthService, RoleAuthEntity, Long> {
public RoleAuthController(){ public RoleAuthController() {
super.setFormClass(RoleAuthForm.class); super.setFormClass(RoleAuthForm.class);
super.setModuleDesc("角色资源权限"); super.setModuleDesc("角色资源权限");
} }
/** /**
* 分配资源 * 分配资源
*/ */
@PostMapping(value = "distributionSource") @PostMapping(value = "distributionSource")
public String distributionUser(HttpServletRequest request, HttpServletResponse response, RoleAuthForm form) { public String distributionUser(@RequestBody RoleAuthQuery query) {
try { try {
service.doDistributionSource(form.getQuery()); service.doDistributionSource(query);
JSONObject ret = new JSONObject(); JSONObject ret = new JSONObject();
ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS); ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
return ret.toJSONString(); return ret.toJSONString();
} catch (Exception e) { } catch (Exception e) {
log.error("分配角色资源错误", e); log.error("分配角色资源错误", e);
JSONObject ret = new JSONObject(); JSONObject ret = new JSONObject();
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE); ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
ret.put(KEY_RESULT_MSG, super.convertException(e)); ret.put(KEY_RESULT_MSG, super.convertException(e));
return ret.toJSONString(); return ret.toJSONString();
} }
} }
} }
\ No newline at end of file
/**
* 文件:RoleController.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.role.web; package com.mortals.xhx.base.system.role.web;
...@@ -14,11 +7,10 @@ import com.mortals.framework.common.code.UserType; ...@@ -14,11 +7,10 @@ import com.mortals.framework.common.code.UserType;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.framework.web.BasePhpCRUDJsonMappingController;
import com.mortals.xhx.base.system.role.model.RoleQuery;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.mortals.framework.web.BaseCRUDJsonMappingController; import com.mortals.framework.web.BaseCRUDJsonMappingController;
import com.mortals.xhx.base.system.role.model.RoleEntity; import com.mortals.xhx.base.system.role.model.RoleEntity;
import com.mortals.xhx.base.system.role.model.RoleUserEntity; import com.mortals.xhx.base.system.role.model.RoleUserEntity;
...@@ -34,12 +26,10 @@ import java.util.List; ...@@ -34,12 +26,10 @@ import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
* <p>Title: 角色信息</p> * 角色信息
* <p>Description: RoleController </p> *
* <p>Copyright: Copyright &reg; </p> * @author: zxfei
* <p>Company: </p> * @date: 2022/5/7 15:15
* @author
* @version 1.0.0
*/ */
@RestController @RestController
@RequestMapping("role") @RequestMapping("role")
...@@ -55,17 +45,24 @@ public class RoleController extends BaseCRUDJsonBodyMappingController<RoleServic ...@@ -55,17 +45,24 @@ public class RoleController extends BaseCRUDJsonBodyMappingController<RoleServic
@Override @Override
protected void init(Map<String, Object> model, Context context) { protected void init(Map<String, Object> model, Context context) {
this.addDict(model,"userType", IBaseEnum.getEnumMap(UserType.class)); Map<String, Object> status = new HashMap<>();
this.addDict(model,"roleType", RoleType.getEnumMap()); status.put("userType", IBaseEnum.getEnumMap(UserType.class));
super.init(model, context); status.put("roleType", RoleType.getEnumMap());
model.put(KEY_RESULT_DICT, status);
} }
/**
* 根据用户id获取角色名称
* @param userId
* @return
*/
@PostMapping("roleNameByUserId") @PostMapping("roleNameByUserId")
public String getRoleNameByUserId(@RequestBody RoleUserEntity query) { public String getRoleNameByUserId(@RequestParam(value = "userId") Long userId) {
try{ try{
JSONObject ret = new JSONObject(); JSONObject ret = new JSONObject();
RoleUserEntity roleUserEntity = new RoleUserEntity(); RoleUserEntity roleUserEntity = new RoleUserEntity();
roleUserEntity.setUserId(query.getUserId()); roleUserEntity.setUserId(userId);
List<RoleUserEntity> find = roleUserService.find(roleUserEntity, new Context()); List<RoleUserEntity> find = roleUserService.find(roleUserEntity, new Context());
List<RoleEntity> model = new ArrayList<>(); List<RoleEntity> model = new ArrayList<>();
if(find.size() > 0){ if(find.size() > 0){
......
/**
* 文件:RoleUserController.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.role.web; package com.mortals.xhx.base.system.role.web;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
...@@ -15,9 +8,12 @@ import com.mortals.framework.exception.AppException; ...@@ -15,9 +8,12 @@ import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.BaseEntityLong; import com.mortals.framework.model.BaseEntityLong;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.role.model.RoleUserQuery;
import org.apache.commons.beanutils.MethodUtils; import org.apache.commons.beanutils.MethodUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.mortals.framework.web.BaseCRUDJsonMappingController; import com.mortals.framework.web.BaseCRUDJsonMappingController;
...@@ -38,29 +34,50 @@ import java.util.Set; ...@@ -38,29 +34,50 @@ import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* <p>Title: 角色用户</p> * 角色用户
* <p>Description: RoleUserController </p> *
* <p>Copyright: Copyright &reg; </p> * @author: zxfei
* <p>Company: </p> * @date: 2022/5/7 15:15
* @author
* @version 1.0.0
*/ */
@RestController @RestController
@RequestMapping("role/user") @RequestMapping("role/user")
public class RoleUserController extends BaseCRUDJsonMappingController<RoleUserService,RoleUserForm,RoleUserEntity,Long> { public class RoleUserController extends BaseCRUDJsonBodyMappingController<RoleUserService, RoleUserEntity, Long> {
@Autowired
private RoleService roleService;
@Autowired
private UserService userService;
public RoleUserController() {
super.setFormClass(RoleUserForm.class);
super.setModuleDesc("角色用户");
}
@Autowired
private RoleService roleService;
@Autowired
private UserService userService;
public RoleUserController(){ @Override
super.setFormClass(RoleUserForm.class); protected void init(Map<String, Object> model, Context context) {
super.setModuleDesc("角色用户"); Map<String, Object> status = new HashMap<>(3);
} status.put("roleId", roleService.find(new RoleEntity(), null).stream()
.collect(Collectors.toMap(e -> e.getId().toString(), RoleEntity::getName)));
/** List<RoleUserEntity> roleUserList = (List<RoleUserEntity>) model.get(SysConstains.RESULT_KEY);
if (roleUserList != null && roleUserList.size() > 0) {
List<Long> userIdsList = roleUserList.stream().map(RoleUserEntity::getUserId).collect(Collectors.toList());
List<UserEntity> userEntityList = userService.find(getQuery(UserQuery.class,
Sets.newHashSet("id", "realName", "loginName"), userIdsList.toArray(new Long[userIdsList.size()])), null);
if (userEntityList != null) {
status.put("userReNameMap",
userEntityList.stream().collect(Collectors.toMap(e -> e.getId().toString(), UserEntity::getRealName)));
status.put("userId",
userEntityList.stream().collect(Collectors.toMap(e -> e.getId().toString(), UserEntity::getLoginName)));
}
}
model.put(KEY_RESULT_DICT, status);
}
/**
* 获取查询对象,限制查询返回的结果只包含ID和名称 * 获取查询对象,限制查询返回的结果只包含ID和名称
*
* @param IdList * @param IdList
* @return * @return
*/ */
...@@ -79,65 +96,42 @@ public class RoleUserController extends BaseCRUDJsonMappingController<RoleUserSe ...@@ -79,65 +96,42 @@ public class RoleUserController extends BaseCRUDJsonMappingController<RoleUserSe
} }
} }
@SuppressWarnings("unchecked") /**
@Override * 分配用户
protected void init(HttpServletRequest request, HttpServletResponse response, RoleUserForm form, Map<String, Object> model, Context context) { */
Map<String, Object> status = new HashMap<>(3); @PostMapping(value = "distributionUser")
status.put("roleId", roleService.find(new RoleEntity(), null).stream() public String distributionUser(@RequestBody RoleUserQuery query) {
.collect(Collectors.toMap(e -> e.getId().toString(), RoleEntity::getName))); try {
List<RoleUserEntity> roleUserList = (List<RoleUserEntity>) model.get(SysConstains.RESULT_KEY); service.doDistributionUser(query);
if(roleUserList!=null && roleUserList.size()>0) { JSONObject ret = new JSONObject();
List<Long> userIdsList = roleUserList.stream().map(RoleUserEntity::getUserId).collect(Collectors.toList()); ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
List<UserEntity> userEntityList = userService.find(getQuery(UserQuery.class, return ret.toJSONString();
Sets.newHashSet("id", "realName","loginName"), userIdsList.toArray(new Long[userIdsList.size()])), null); } catch (Exception e) {
if(userEntityList!=null) { log.error("分配用户错误", e);
status.put("userReNameMap", JSONObject ret = new JSONObject();
userEntityList.stream().collect(Collectors.toMap(e -> e.getId().toString(), UserEntity::getRealName))); ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
status.put("userId", ret.put(KEY_RESULT_MSG, super.convertException(e));
userEntityList.stream().collect(Collectors.toMap(e -> e.getId().toString(), UserEntity::getLoginName))); return ret.toJSONString();
} }
} }
model.put(KEY_RESULT_DICT, status);
super.init(request, response, form, model, context);
}
/**
* 分配用户
*/
@PostMapping(value = "distributionUser")
public String distributionUser(HttpServletRequest request, HttpServletResponse response, RoleUserForm form) {
try {
service.doDistributionUser(form.getQuery());
JSONObject ret = new JSONObject();
ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
return ret.toJSONString();
} catch (Exception e) {
log.error("分配用户错误", e);
JSONObject ret = new JSONObject();
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
ret.put(KEY_RESULT_MSG, super.convertException(e));
return ret.toJSONString();
}
}
/** /**
* 分配角色 * 分配角色
*/ */
@PostMapping(value = "distributionRole") @PostMapping(value = "distributionRole")
public String distributionRole(HttpServletRequest request, HttpServletResponse response, RoleUserForm form) { public String distributionRole(@RequestBody RoleUserQuery query) {
try { try {
service.doDistributionRole(form.getQuery()); service.doDistributionRole(query);
JSONObject ret = new JSONObject(); JSONObject ret = new JSONObject();
ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS); ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
return ret.toJSONString(); return ret.toJSONString();
} catch (Exception e) { } catch (Exception e) {
log.error("分配角色错误", e); log.error("分配角色错误", e);
JSONObject ret = new JSONObject(); JSONObject ret = new JSONObject();
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE); ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
ret.put(KEY_RESULT_MSG, super.convertException(e)); ret.put(KEY_RESULT_MSG, super.convertException(e));
return ret.toJSONString(); return ret.toJSONString();
} }
} }
} }
\ No newline at end of file
...@@ -62,7 +62,7 @@ public class TaskServiceImpl extends AbstractCRUDServiceImpl<TaskDao, TaskEntity ...@@ -62,7 +62,7 @@ public class TaskServiceImpl extends AbstractCRUDServiceImpl<TaskDao, TaskEntity
private Thread thread = null; private Thread thread = null;
/** 日志打印时间,key:任务ID,value:最后一次打印日志时间 */ /** 日志打印时间,key:任务ID,value:最后一次打印日志时间 */
private Map<Long, Long> printLogTime = new HashMap<Long, Long>(); private Map<Long, Long> printLogTime = new HashMap<>();
@Autowired(required=false) @Autowired(required=false)
private TaskService taskService; private TaskService taskService;
...@@ -216,17 +216,17 @@ public class TaskServiceImpl extends AbstractCRUDServiceImpl<TaskDao, TaskEntity ...@@ -216,17 +216,17 @@ public class TaskServiceImpl extends AbstractCRUDServiceImpl<TaskDao, TaskEntity
} }
if (interimExcuteStatus != TaskInterimExcuteStatus.UNUSE.getValue() // 启用立即执行 if (interimExcuteStatus != TaskInterimExcuteStatus.UNUSE.getValue() // 启用立即执行
|| ((strategy == TaskExcuteStrategy.DAY.getValue() // 按天 || ((strategy == TaskExcuteStrategy.DAY.getValue() // 按天
|| (strategy == TaskExcuteStrategy.WEEK.getValue() || (strategy == TaskExcuteStrategy.WEEK.getValue()
&& week == excuteDate) && week == excuteDate)
// 按周 // 按周
|| (strategy == TaskExcuteStrategy.MONTH.getValue() || (strategy == TaskExcuteStrategy.MONTH.getValue()
&& (day == excuteDate && (day == excuteDate
|| (excuteDate > maxDay && day == maxDay))))// 按月 || (excuteDate > maxDay && day == maxDay))))// 按月
&& (excuteTime == currTime && (excuteTime == currTime
&& !lastExcuteTimeStr.equals(currDateTimeStr)) // 执行间隔最少为一天 && !lastExcuteTimeStr.equals(currDateTimeStr)) // 执行间隔最少为一天
) || (strategy == TaskExcuteStrategy.INTERVAL.getValue() // 按间隔时间 ) || (strategy == TaskExcuteStrategy.INTERVAL.getValue() // 按间隔时间
&& (lastExcuteTime == null || lastExcuteTime.getTime() && (lastExcuteTime == null || lastExcuteTime.getTime()
+ excuteDate * 1000 <= currDateTime.getTime()))) { + excuteDate * 1000 <= currDateTime.getTime()))) {
final boolean printLog = checkPrintLog(task); final boolean printLog = checkPrintLog(task);
Object excuteBean = GlobalSysInfo.getBeanByName(task.getExcuteService()); Object excuteBean = GlobalSysInfo.getBeanByName(task.getExcuteService());
if (excuteBean == null || !(excuteBean instanceof ITaskExcuteService)) { if (excuteBean == null || !(excuteBean instanceof ITaskExcuteService)) {
...@@ -261,7 +261,7 @@ public class TaskServiceImpl extends AbstractCRUDServiceImpl<TaskDao, TaskEntity ...@@ -261,7 +261,7 @@ public class TaskServiceImpl extends AbstractCRUDServiceImpl<TaskDao, TaskEntity
log.error("执行任务失败-->" + excuteTask, e); log.error("执行任务失败-->" + excuteTask, e);
} }
if (strategy == TaskExcuteStrategy.INTERVAL.getValue()) { if (strategy == TaskExcuteStrategy.INTERVAL.getValue()) {
// 按间隔时间,更新执行时间,避免一直重复执行 // 按间隔时间,更新执行时间,避免一直重复执行
excuteTask.setLastExcuteTime(currDateTime); excuteTask.setLastExcuteTime(currDateTime);
} }
} finally { } finally {
...@@ -297,7 +297,7 @@ public class TaskServiceImpl extends AbstractCRUDServiceImpl<TaskDao, TaskEntity ...@@ -297,7 +297,7 @@ public class TaskServiceImpl extends AbstractCRUDServiceImpl<TaskDao, TaskEntity
executorService.shutdown(); executorService.shutdown();
log.info("任务执行线程退出!"); log.info("任务执行线程退出!");
}); });
// thread.start(); thread.start();
} }
@Override @Override
......
/**
* 文件:TaskController.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.task.web; package com.mortals.xhx.base.system.task.web;
...@@ -14,6 +7,8 @@ import java.util.Map; ...@@ -14,6 +7,8 @@ import java.util.Map;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.task.model.TaskQuery;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
...@@ -32,16 +27,14 @@ import com.mortals.xhx.common.code.TaskExcuteStrategyEnum; ...@@ -32,16 +27,14 @@ import com.mortals.xhx.common.code.TaskExcuteStrategyEnum;
import com.mortals.xhx.common.code.TaskInterimExcuteStatusEnum; import com.mortals.xhx.common.code.TaskInterimExcuteStatusEnum;
/** /**
* <p>Title: 任务信息</p> * 任务信息
* <p>Description: TaskController </p> *
* <p>Copyright: Copyright &reg; </p> * @author: zxfei
* <p>Company: </p> * @date: 2022/5/7 15:39
* @author
* @version 1.0.0
*/ */
@RestController @RestController
@RequestMapping("task") @RequestMapping("task")
public class TaskController extends BaseCRUDJsonMappingController<TaskService, TaskForm, TaskEntity, Long> { public class TaskController extends BaseCRUDJsonBodyMappingController<TaskService, TaskEntity, Long> {
public TaskController() { public TaskController() {
super.setFormClass(TaskForm.class); super.setFormClass(TaskForm.class);
...@@ -50,8 +43,7 @@ public class TaskController extends BaseCRUDJsonMappingController<TaskService, T ...@@ -50,8 +43,7 @@ public class TaskController extends BaseCRUDJsonMappingController<TaskService, T
@Override @Override
protected void init(HttpServletRequest request, HttpServletResponse response, TaskForm form, protected void init(Map<String, Object> model, Context context) {
Map<String, Object> model, Context context) {
Map<String, Object> status = new HashMap<String, Object>(); Map<String, Object> status = new HashMap<String, Object>();
status.put("status", TaskExcuteStatusEnum.getEnumMap()); status.put("status", TaskExcuteStatusEnum.getEnumMap());
status.put("excuteStrategy", TaskExcuteStrategyEnum.getEnumMap()); status.put("excuteStrategy", TaskExcuteStrategyEnum.getEnumMap());
...@@ -71,60 +63,30 @@ public class TaskController extends BaseCRUDJsonMappingController<TaskService, T ...@@ -71,60 +63,30 @@ public class TaskController extends BaseCRUDJsonMappingController<TaskService, T
} }
model.put("excuteService", serviceList); model.put("excuteService", serviceList);
model.put(KEY_RESULT_DICT, status); model.put(KEY_RESULT_DICT, status);
super.init(request, response, form, model, context);
}
/**
* @param request
* @param response
* @param form
* @param model
* @param context
* @throws AppException
* @Description: TODO
*/
@Override
protected void saveBefore(HttpServletRequest request, HttpServletResponse response, TaskForm form,
Map<String, Object> model, Context context) throws AppException {
if (null == form.getEntity().getExcuteService()) {
}
// TaskEntity condition = new TaskEntity();
// condition.setExcuteService(form.getEntity().getExcuteService());
// List<TaskEntity> datas = this.service.find(condition, context);
// if (null != datas && datas.size() > 0) {
// for (TaskEntity entity : datas) {
// if (entity.getId().longValue() != form.getEntity().getId().longValue()) {
// throw new AppException("任务已存在,请勿重复配置");
// }
// }
// }
super.saveBefore(request, response, form, model, context);
} }
/** /**
* 改变状态 * 改变状态
*/ */
@RequestMapping(value = "change/status") @RequestMapping(value = "change/status")
public String changeStatus(HttpServletRequest request, HttpServletResponse response, TaskForm form) { public String changeStatus(TaskQuery query) {
JSONObject ret = new JSONObject(); JSONObject ret = new JSONObject();
Context context = getContext(); Context context = getContext();
try { try {
TaskEntity entity = this.service.get(form.getEntity().getId(), context);// .doSubmitAudit(form.getEntity(), TaskEntity entity = this.service.get(query.getId(), context);// .doSubmitAudit(form.getEntity(),
// context); // context);
if (null == entity) { if (null == entity) {
throw new AppException("任务不存在!"); throw new AppException("任务不存在!");
} }
if (null == form.getEntity().getStatus()) { if (null == query.getStatus()) {
throw new AppException("任务状态不能为空!"); throw new AppException("任务状态不能为空!");
} }
if (form.getEntity().getStatus() != DataSatusEnum.ENABLE.getValue() if (query.getStatus() != DataSatusEnum.ENABLE.getValue()
&& form.getEntity().getStatus() != DataSatusEnum.DISENABLE.getValue()) { && query.getStatus() != DataSatusEnum.DISENABLE.getValue()) {
throw new AppException("非法任务状态!"); throw new AppException("非法任务状态!");
} }
String busiDesc = DataSatusEnum.getByValue(form.getEntity().getStatus()).getDesc(); String busiDesc = DataSatusEnum.getByValue(query.getStatus()).getDesc();
entity.setStatus(form.getEntity().getStatus()); entity.setStatus(query.getStatus());
this.service.update(entity, context); this.service.update(entity, context);
ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS); ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
ret.put(KEY_RESULT_MSG, busiDesc + "成功"); ret.put(KEY_RESULT_MSG, busiDesc + "成功");
......
...@@ -52,4 +52,6 @@ public interface UploadService extends IService { ...@@ -52,4 +52,6 @@ public interface UploadService extends IService {
void uploadDownload(String fileName, HttpServletResponse response); void uploadDownload(String fileName, HttpServletResponse response);
void deleteFile(String fileName);
} }
\ No newline at end of file
package com.mortals.xhx.base.system.upload.service.impl; package com.mortals.xhx.base.system.upload.service.impl;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.service.IUser; import com.mortals.framework.service.IUser;
import com.mortals.framework.util.StringUtils; import com.mortals.framework.util.StringUtils;
...@@ -15,9 +16,7 @@ import org.springframework.http.MediaType; ...@@ -15,9 +16,7 @@ import org.springframework.http.MediaType;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.File; import java.io.File;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import java.net.URLEncoder;
...@@ -49,9 +48,7 @@ public class UploadServiceImpl implements UploadService { ...@@ -49,9 +48,7 @@ public class UploadServiceImpl implements UploadService {
if (tempFile == null || tempFile.getSize() == 0) { if (tempFile == null || tempFile.getSize() == 0) {
throw new AppException("没有要上传的文件!"); throw new AppException("没有要上传的文件!");
} }
if(StringUtils.isEmpty(prePath)){
prePath = "file/uploadfile";
}
String fileName = tempFile.getOriginalFilename(); String fileName = tempFile.getOriginalFilename();
String extension = FilenameUtils.getExtension(fileName); String extension = FilenameUtils.getExtension(fileName);
UploadFileType type = UploadFileType.getFileType(extension); UploadFileType type = UploadFileType.getFileType(extension);
...@@ -69,14 +66,12 @@ public class UploadServiceImpl implements UploadService { ...@@ -69,14 +66,12 @@ public class UploadServiceImpl implements UploadService {
if (!pathDir.exists()) { if (!pathDir.exists()) {
pathDir.mkdirs(); pathDir.mkdirs();
} }
String newName = new Date().getTime() + "." + extension; String newName = new Date().getTime() + "." + extension;
//String newName = IdUtil.fastSimpleUUID() + "." + extension;
String filePathAll = filePath + newName; String filePathAll = filePath + newName;
File uploadFile = new File(filePathAll); File uploadFile = new File(filePathAll);
try { try {
log.info("文件正在储存"); log.info("文件正在储存,filepath:"+filePathAll);
tempFile.transferTo(uploadFile); tempFile.transferTo(uploadFile);
} catch (Exception e) { } catch (Exception e) {
throw new AppException(e.getMessage()); throw new AppException(e.getMessage());
...@@ -94,7 +89,7 @@ public class UploadServiceImpl implements UploadService { ...@@ -94,7 +89,7 @@ public class UploadServiceImpl implements UploadService {
@Override @Override
public void fileDownload(String fileName, Boolean delete, HttpServletResponse response) { public void fileDownload(String fileName, Boolean delete, HttpServletResponse response) {
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
String filePath = getFilePath(fileName); String filePath = this.filePath + fileName;
try { try {
response.setContentType(MediaType.IMAGE_JPEG_VALUE); response.setContentType(MediaType.IMAGE_JPEG_VALUE);
setAttachmentResponseHeader(response, realFileName); setAttachmentResponseHeader(response, realFileName);
...@@ -107,28 +102,14 @@ public class UploadServiceImpl implements UploadService { ...@@ -107,28 +102,14 @@ public class UploadServiceImpl implements UploadService {
@Override @Override
public void preview(String fileName, HttpServletResponse response) { public void preview(String fileName, HttpServletResponse response) {
// String filePath = this.filePath+"/preview/" + fileName; String filePath = this.filePath+"/file/preview/" + fileName;
// try {
// response.setContentType(MediaType.IMAGE_JPEG_VALUE);
// setAttachmentResponseHeader(response, fileName);
// FileUtil.writeToStream(filePath, response.getOutputStream());
// } catch (Exception e) {
// log.error("下载文件失败", e);
// }
String filePath = getFilePath(fileName);
try { try {
File file = new File(filePath); response.setContentType(MediaType.IMAGE_JPEG_VALUE);
BufferedImage image = ImageIO.read(file); setAttachmentResponseHeader(response, fileName);
response.setHeader("Pragma", "No-cache"); FileUtil.writeToStream(filePath, response.getOutputStream());
response.setHeader("Cache-Control", "No-cache"); } catch (Exception e) {
response.setDateHeader("Expires", 0L); log.error("下载文件失败", e);
response.setContentType("image/jpeg");
ImageIO.write(image, "JPEG", response.getOutputStream());
} catch (Exception var4) {
this.log.debug("响应图片消息异常-->" + var4.getMessage());
} }
} }
...@@ -179,4 +160,14 @@ public class UploadServiceImpl implements UploadService { ...@@ -179,4 +160,14 @@ public class UploadServiceImpl implements UploadService {
} }
} }
@Override
public void deleteFile(String fileName) {
String filePath = this.filePath+ fileName;
try {
FileUtil.del(filePath);
} catch (Exception e) {
log.error("下载文件失败", e);
}
}
} }
\ No newline at end of file
...@@ -2,6 +2,7 @@ package com.mortals.xhx.base.system.upload.web; ...@@ -2,6 +2,7 @@ package com.mortals.xhx.base.system.upload.web;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.web.BaseController; import com.mortals.framework.web.BaseController;
import com.mortals.xhx.base.system.upload.service.UploadService; import com.mortals.xhx.base.system.upload.service.UploadService;
...@@ -15,13 +16,10 @@ import java.util.HashMap; ...@@ -15,13 +16,10 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
/** /**
* <p>Title: 上传文件</p> * 上传文件
* <p>Description: UploadfileController </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* *
* @author * @author: zxfei
* @version 1.0.0 * @date: 2021/11/30 10:06
*/ */
@RestController @RestController
@RequestMapping("file") @RequestMapping("file")
...@@ -31,7 +29,8 @@ public class UploadController extends BaseController { ...@@ -31,7 +29,8 @@ public class UploadController extends BaseController {
private UploadService uploadService; private UploadService uploadService;
@RequestMapping(value = "upload") @RequestMapping(value = "upload")
public String doFileUpload(HttpServletRequest request, HttpServletResponse response, UploadForm form) { @UnAuth
public String doFileUpload(HttpServletRequest request, UploadForm form) {
Map<String, Object> model = new HashMap<>(); Map<String, Object> model = new HashMap<>();
String jsonStr = ""; String jsonStr = "";
try { try {
...@@ -55,7 +54,8 @@ public class UploadController extends BaseController { ...@@ -55,7 +54,8 @@ public class UploadController extends BaseController {
@RequestMapping(value = "commonupload") @RequestMapping(value = "commonupload")
public String doFileUpload(MultipartFile file, @RequestParam(value = "prePath",defaultValue = "file/uploadfile") String prePath) { @UnAuth
public String doFileUpload(MultipartFile file, @RequestParam(value = "prePath",defaultValue = "file/fileupload") String prePath) {
Map<String, Object> model = new HashMap<>(); Map<String, Object> model = new HashMap<>();
String jsonStr = ""; String jsonStr = "";
try { try {
...@@ -94,20 +94,6 @@ public class UploadController extends BaseController { ...@@ -94,20 +94,6 @@ public class UploadController extends BaseController {
} }
} }
/**
* 图片预览 (PathVariable)
*
* @param fileName 文件名称
*/
@GetMapping("preview/{prePath}/{fileName}")
public void preViewPath(@PathVariable(value="fileName") String fileName,@PathVariable(value="prePath") String prePath, HttpServletResponse response) {
try {
uploadService.preview(prePath+"/"+fileName, response);
} catch (Exception e) {
log.error("下载文件失败:", e);
}
}
/** /**
* 图片预览 (PathVariable) * 图片预览 (PathVariable)
* *
......
package com.mortals.xhx.base.system.user.model; package com.mortals.xhx.base.system.user.model;
import java.util.Date;
import java.util.Objects;
import com.mortals.framework.ap.SysConstains; import com.mortals.framework.ap.SysConstains;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.framework.service.IUser; import com.mortals.framework.service.IUser;
import com.mortals.xhx.base.system.user.model.vo.UserVo;
import java.util.Date;
/** /**
* * 用户信息业务实体对象
* Description:User *
* date: 2021-9-26 16:11:48 * @author zxfei
*/ * @date 2022-07-05
public class UserEntity extends UserEntityExt implements IUser { */
private static final long serialVersionUID = 1632643908537L;
public class UserEntity extends UserVo implements IUser {
private static final long serialVersionUID = 1L;
/** /**
* 登录名 * 登录名
*/ */
private String loginName; private String loginName;
/** /**
* 登录密码,使用md5双次加密 * 登录密码,使用md5双次加密
*/ */
private String loginPwd; private String loginPwd;
/**
* 最近一次使用密码,使用md5双次加密
*/
private String loginPwd1;
/**
* 最近二次使用密码,使用md5双次加密
*/
private String loginPwd2;
/**
* 最近三次使用密码,使用md5双次加密
*/
private String loginPwd3;
/** /**
* 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录 * 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
*/ */
private String loginLimitAddress; private String loginLimitAddress;
/** /**
* 用户名 * 用户名
*/ */
private String realName; private String realName;
/** /**
* 用户手机号 * 用户手机号
*/ */
private String mobile; private String mobile;
/** /**
* 用户联系电话 * 用户联系电话
*/ */
private String phone; private String phone;
/** /**
* 用户邮箱 * 用户邮箱
*/ */
private String email; private String email;
/** /**
* QQ号码 * QQ号码
*/ */
private String qq; private String qq;
/** /**
* 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 * 用户类型(0.系统用户,1.普通用户,2.工作人员)
*/ */
private Integer userType; private Integer userType;
/** /**
* 站点id * 所属站点id,多个逗号分隔
*/ */
private Long siteId; private String siteIds;
/**
* 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
*/
private Integer status;
/** /**
* 客户ID * 所属区域code,多个逗号分隔
*/ */
private Long customerId; private String areaCodes;
/** /**
* 创建时间 * 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
*/ */
private Date createTime; private Integer status;
/**
* 创建用户
*/
private Long createUserId;
/** /**
* 创建用户名称 * 创建用户名称
*/ */
private String createUserName; private String createUserName;
/** /**
* 最后一次登录时间 * 最后一次登录时间
*/ */
private Date lastLoginTime; private Date lastLoginTime;
/** /**
* 最后一次登录地址 * 最后一次登录地址
*/ */
private String lastLoginAddress; private String lastLoginAddress;
/**
* 最后修改密码时间
*/
private Date lastModPwdTime;
/**
* 最后修改密码地址
*/
private String lastModPwdAddr;
public UserEntity(){ public UserEntity(){}
}
/** /**
* 获取 登录名 * 获取 登录名
* @return loginName * @return String
*/ */
public String getLoginName() { public String getLoginName(){
return this.loginName; return loginName;
} }
/** /**
* 设置 登录名 * 设置 登录名
* @param loginName * @param loginName
*/ */
public void setLoginName(String loginName) { public void setLoginName(String loginName){
this.loginName = loginName; this.loginName = loginName;
} }
/** /**
* 获取 登录密码,使用md5双次加密 * 获取 登录密码,使用md5双次加密
* @return loginPwd * @return String
*/ */
public String getLoginPwd() { public String getLoginPwd(){
return this.loginPwd; return loginPwd;
} }
/** /**
* 设置 登录密码,使用md5双次加密 * 设置 登录密码,使用md5双次加密
* @param loginPwd * @param loginPwd
*/ */
public void setLoginPwd(String loginPwd) { public void setLoginPwd(String loginPwd){
this.loginPwd = loginPwd; this.loginPwd = loginPwd;
} }
/** /**
* 获取 最近一次使用密码,使用md5双次加密 * 获取 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @return loginPwd1 * @return String
*/ */
public String getLoginPwd1() { public String getLoginLimitAddress(){
return this.loginPwd1; return loginLimitAddress;
}
/**
* 设置 最近一次使用密码,使用md5双次加密
* @param loginPwd1
*/
public void setLoginPwd1(String loginPwd1) {
this.loginPwd1 = loginPwd1;
}
/**
* 获取 最近二次使用密码,使用md5双次加密
* @return loginPwd2
*/
public String getLoginPwd2() {
return this.loginPwd2;
} }
/** /**
* 设置 最近二次使用密码,使用md5双次加密 * 设置 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @param loginPwd2 * @param loginLimitAddress
*/ */
public void setLoginPwd2(String loginPwd2) { public void setLoginLimitAddress(String loginLimitAddress){
this.loginPwd2 = loginPwd2;
}
/**
* 获取 最近三次使用密码,使用md5双次加密
* @return loginPwd3
*/
public String getLoginPwd3() {
return this.loginPwd3;
}
/**
* 设置 最近三次使用密码,使用md5双次加密
* @param loginPwd3
*/
public void setLoginPwd3(String loginPwd3) {
this.loginPwd3 = loginPwd3;
}
/**
* 获取 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @return loginLimitAddress
*/
public String getLoginLimitAddress() {
return this.loginLimitAddress;
}
/**
* 设置 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @param loginLimitAddress
*/
public void setLoginLimitAddress(String loginLimitAddress) {
this.loginLimitAddress = loginLimitAddress; this.loginLimitAddress = loginLimitAddress;
} }
/** /**
* 获取 用户名 * 获取 用户名
* @return realName * @return String
*/ */
public String getRealName() { public String getRealName(){
return this.realName; return realName;
} }
@Override @Override
...@@ -237,144 +145,111 @@ public class UserEntity extends UserEntityExt implements IUser { ...@@ -237,144 +145,111 @@ public class UserEntity extends UserEntityExt implements IUser {
} }
/** /**
* 设置 用户名 * 设置 用户名
* @param realName * @param realName
*/ */
public void setRealName(String realName) { public void setRealName(String realName){
this.realName = realName; this.realName = realName;
} }
/** /**
* 获取 用户手机号 * 获取 用户手机号
* @return mobile * @return String
*/ */
public String getMobile() { public String getMobile(){
return this.mobile; return mobile;
} }
/** /**
* 设置 用户手机号 * 设置 用户手机号
* @param mobile * @param mobile
*/ */
public void setMobile(String mobile) { public void setMobile(String mobile){
this.mobile = mobile; this.mobile = mobile;
} }
/** /**
* 获取 用户联系电话 * 获取 用户联系电话
* @return phone * @return String
*/ */
public String getPhone() { public String getPhone(){
return this.phone; return phone;
} }
/** /**
* 设置 用户联系电话 * 设置 用户联系电话
* @param phone * @param phone
*/ */
public void setPhone(String phone) { public void setPhone(String phone){
this.phone = phone; this.phone = phone;
} }
/** /**
* 获取 用户邮箱 * 获取 用户邮箱
* @return email * @return String
*/ */
public String getEmail() { public String getEmail(){
return this.email; return email;
} }
/** /**
* 设置 用户邮箱 * 设置 用户邮箱
* @param email * @param email
*/ */
public void setEmail(String email) { public void setEmail(String email){
this.email = email; this.email = email;
} }
/** /**
* 获取 QQ号码 * 获取 QQ号码
* @return qq * @return String
*/ */
public String getQq() { public String getQq(){
return this.qq; return qq;
} }
/** /**
* 设置 QQ号码 * 设置 QQ号码
* @param qq * @param qq
*/ */
public void setQq(String qq) { public void setQq(String qq){
this.qq = qq; this.qq = qq;
} }
/** /**
* 获取 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 * 获取 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @return userType * @return Integer
*/ */
public Integer getUserType() { public Integer getUserType(){
return this.userType; return userType;
}
@Override
public String getMenuUrl() {
return null;
} }
/** /**
* 设置 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 * 设置 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userType * @param userType
*/ */
public void setUserType(Integer userType) { public void setUserType(Integer userType){
this.userType = userType; this.userType = userType;
} }
/**
* 获取 站点id
* @return siteId
*/
public Long getSiteId() {
return this.siteId;
}
@Override @Override
public String getSiteIds() { public Long getDeptId() {
return super.getSiteIds(); return null;
} }
/** @Override
* 设置 站点id public String getDeptName() {
* @param siteId return null;
*/
public void setSiteId(Long siteId) {
this.siteId = siteId;
}
/**
* 获取 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
* @return status
*/
public Integer getStatus() {
return this.status;
}
/**
* 设置 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
* @param status
*/
public void setStatus(Integer status) {
this.status = status;
} }
@Override @Override
public Long getDeptId() { public Long getCustomerId() {
return null; return null;
} }
@Override @Override
public String getDeptName() { public Long getSiteId() {
return null; return null;
} }
/** /**
* 获取 客户ID * 获取 所属站点id,多个逗号分隔
* @return customerId * @return String
*/ */
public Long getCustomerId() { public String getSiteIds(){
return this.customerId; return siteIds;
} }
@Override @Override
public Long getCustomerJoinId() { public Long getCustomerJoinId() {
return null; return null;
...@@ -386,123 +261,96 @@ public class UserEntity extends UserEntityExt implements IUser { ...@@ -386,123 +261,96 @@ public class UserEntity extends UserEntityExt implements IUser {
} }
/** /**
* 设置 客户ID * 设置 所属站点id,多个逗号分隔
* @param customerId * @param siteIds
*/ */
public void setCustomerId(Long customerId) { public void setSiteIds(String siteIds){
this.customerId = customerId; this.siteIds = siteIds;
} }
/** /**
* 获取 创建时间 * 获取 所属区域code,多个逗号分隔
* @return createTime * @return String
*/ */
public Date getCreateTime() { public String getAreaCodes(){
return this.createTime; return areaCodes;
} }
/** /**
* 设置 创建时间 * 设置 所属区域code,多个逗号分隔
* @param createTime * @param areaCodes
*/ */
public void setCreateTime(Date createTime) { public void setAreaCodes(String areaCodes){
this.createTime = createTime; this.areaCodes = areaCodes;
} }
/** /**
* 获取 创建用户 * 获取 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @return createUserId * @return Integer
*/ */
public Long getCreateUserId() { public Integer getStatus(){
return this.createUserId; return status;
} }
/** /**
* 设置 创建用户 * 设置 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param createUserId * @param status
*/ */
public void setCreateUserId(Long createUserId) { public void setStatus(Integer status){
this.createUserId = createUserId; this.status = status;
} }
/** /**
* 获取 创建用户名称 * 获取 创建用户名称
* @return createUserName * @return String
*/ */
public String getCreateUserName() { public String getCreateUserName(){
return this.createUserName; return createUserName;
} }
/** /**
* 设置 创建用户名称 * 设置 创建用户名称
* @param createUserName * @param createUserName
*/ */
public void setCreateUserName(String createUserName) { public void setCreateUserName(String createUserName){
this.createUserName = createUserName; this.createUserName = createUserName;
} }
/** /**
* 获取 最后一次登录时间 * 获取 最后一次登录时间
* @return lastLoginTime * @return Date
*/ */
public Date getLastLoginTime() { public Date getLastLoginTime(){
return this.lastLoginTime; return lastLoginTime;
} }
/** /**
* 设置 最后一次登录时间 * 设置 最后一次登录时间
* @param lastLoginTime * @param lastLoginTime
*/ */
public void setLastLoginTime(Date lastLoginTime) { public void setLastLoginTime(Date lastLoginTime){
this.lastLoginTime = lastLoginTime; this.lastLoginTime = lastLoginTime;
} }
/** /**
* 获取 最后一次登录地址 * 获取 最后一次登录地址
* @return lastLoginAddress * @return String
*/ */
public String getLastLoginAddress() { public String getLastLoginAddress(){
return this.lastLoginAddress; return lastLoginAddress;
} }
/** /**
* 设置 最后一次登录地址 * 设置 最后一次登录地址
* @param lastLoginAddress * @param lastLoginAddress
*/ */
public void setLastLoginAddress(String lastLoginAddress) { public void setLastLoginAddress(String lastLoginAddress){
this.lastLoginAddress = lastLoginAddress; this.lastLoginAddress = lastLoginAddress;
} }
/**
* 获取 最后修改密码时间
* @return lastModPwdTime
*/
public Date getLastModPwdTime() {
return this.lastModPwdTime;
}
/**
* 设置 最后修改密码时间
* @param lastModPwdTime
*/
public void setLastModPwdTime(Date lastModPwdTime) {
this.lastModPwdTime = lastModPwdTime;
}
/**
* 获取 最后修改密码地址
* @return lastModPwdAddr
*/
public String getLastModPwdAddr() {
return this.lastModPwdAddr;
}
/**
* 设置 最后修改密码地址
* @param lastModPwdAddr
*/
public void setLastModPwdAddr(String lastModPwdAddr) {
this.lastModPwdAddr = lastModPwdAddr;
}
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(super.hashCode(), loginName, loginPwd, loginPwd1, loginPwd2, loginPwd3, loginLimitAddress, realName, mobile, phone, email, qq, userType, status, customerId, createTime, createUserId, createUserName, lastLoginTime, lastLoginAddress, lastModPwdTime, lastModPwdAddr); return this.getId().hashCode();
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (obj == null) if (obj == null) return false;
return false;
if (obj instanceof UserEntity) { if (obj instanceof UserEntity) {
UserEntity tmp = (UserEntity) obj; UserEntity tmp = (UserEntity) obj;
if (this.getId().longValue() == tmp.getId().longValue()) { if (this.getId() == tmp.getId()) {
return true; return true;
} }
} }
...@@ -511,56 +359,54 @@ public class UserEntity extends UserEntityExt implements IUser { ...@@ -511,56 +359,54 @@ public class UserEntity extends UserEntityExt implements IUser {
public String toString(){ public String toString(){
StringBuilder sb = new StringBuilder(""); StringBuilder sb = new StringBuilder("");
sb sb.append(",loginName:").append(getLoginName());
.append(",id:").append(getId()) sb.append(",loginPwd:").append(getLoginPwd());
.append(",loginName:").append(getLoginName()) sb.append(",loginLimitAddress:").append(getLoginLimitAddress());
.append(",loginPwd:").append(getLoginPwd()) sb.append(",realName:").append(getRealName());
.append(",loginPwd1:").append(getLoginPwd1()) sb.append(",mobile:").append(getMobile());
.append(",loginPwd2:").append(getLoginPwd2()) sb.append(",phone:").append(getPhone());
.append(",loginPwd3:").append(getLoginPwd3()) sb.append(",email:").append(getEmail());
.append(",loginLimitAddress:").append(getLoginLimitAddress()) sb.append(",qq:").append(getQq());
.append(",realName:").append(getRealName()) sb.append(",userType:").append(getUserType());
.append(",mobile:").append(getMobile()) sb.append(",siteIds:").append(getSiteIds());
.append(",phone:").append(getPhone()) sb.append(",areaCodes:").append(getAreaCodes());
.append(",email:").append(getEmail()) sb.append(",status:").append(getStatus());
.append(",qq:").append(getQq()) sb.append(",createUserName:").append(getCreateUserName());
.append(",userType:").append(getUserType()) sb.append(",lastLoginTime:").append(getLastLoginTime());
.append(",siteId:").append(getSiteId()) sb.append(",lastLoginAddress:").append(getLastLoginAddress());
.append(",status:").append(getStatus())
.append(",customerId:").append(getCustomerId())
.append(",createTime:").append(getCreateTime())
.append(",createUserId:").append(getCreateUserId())
.append(",createUserName:").append(getCreateUserName())
.append(",lastLoginTime:").append(getLastLoginTime())
.append(",lastLoginAddress:").append(getLastLoginAddress())
.append(",lastModPwdTime:").append(getLastModPwdTime())
.append(",lastModPwdAddr:").append(getLastModPwdAddr())
;
return sb.toString(); return sb.toString();
} }
public void initAttrValue(){ public void initAttrValue(){
this.loginName = null;
this.loginPwd = null; this.loginName = "";
this.loginPwd1 = null;
this.loginPwd2 = null; this.loginPwd = "";
this.loginPwd3 = null;
this.loginLimitAddress = null; this.loginLimitAddress = "";
this.realName = null;
this.mobile = null; this.realName = "";
this.phone = null;
this.email = null; this.mobile = "";
this.qq = null;
this.userType = null; this.phone = "";
this.siteId = null;
this.status = 1; this.email = "";
this.customerId = null;
this.createTime = null; this.qq = "";
this.createUserId = null;
this.createUserName = null; this.userType = null;
this.lastLoginTime = null;
this.lastLoginAddress = null; this.siteIds = "";
this.lastModPwdTime = null;
this.lastModPwdAddr = null; this.areaCodes = "";
this.status = 1;
this.createUserName = "";
this.lastLoginTime = null;
this.lastLoginAddress = "";
} }
} }
\ No newline at end of file
package com.mortals.xhx.base.system.user.model; package com.mortals.xhx.base.system.user.model;
import com.alibaba.fastjson.annotation.JSONField;
import com.mortals.framework.model.BaseEntityLong; import com.mortals.framework.model.BaseEntityLong;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
/** /**
* * Description:User
* Description:User * date: 2021-9-26 16:11:48
* date: 2021-9-26 16:11:48 */
*/
@Data @Data
public class UserEntityExt extends BaseEntityLong { public class UserEntityExt extends BaseEntityLong {
/** /**
* 唯一标识 * 站点名称
*/ */
@JSONField(serialize = false) private String siteName;
private String token;
private String roleIds;
/** /**
* 登录时间 * 唯一标识
*/ */
private Long loginTime; private String token;
/**
/** * 菜单栏
* 过期时间 */
*/ private String menuUrl;
private Long expireTime;
/**
private String siteName; * 登录时间
private List<Long> roleIds; */
private String siteCode; private Long loginTime;
private String oldPassword; /**
private String newPassword; * 过期时间
private String siteIds; */
private Long expireTime;
} }
\ No newline at end of file
package com.mortals.xhx.base.system.user.model; package com.mortals.xhx.base.system.user.model;
import java.util.List;
import java.util.Date;
import java.util.Date;
import java.util.List;
/** /**
* * 用户信息业务查询对象
* Description:User *
* date: 2021-9-26 16:11:48 * @author zxfei
*/ * @date 2022-07-06
public class UserQuery extends UserEntity{ */
private static final long serialVersionUID = 1632643908887L; public class UserQuery extends UserEntity {
/** 开始 用户ID,主键,自增长 */ /** 开始 用户ID,主键,自增长 */
private Long idStart; private Long idStart;
...@@ -19,25 +19,15 @@ public class UserQuery extends UserEntity{ ...@@ -19,25 +19,15 @@ public class UserQuery extends UserEntity{
/** 增加 用户ID,主键,自增长 */ /** 增加 用户ID,主键,自增长 */
private Long idIncrement; private Long idIncrement;
/** 用户ID,主键,自增长 */ /** 用户ID,主键,自增长列表 */
private List <Long> idList; private List <Long> idList;
/** 登录名 */ /** 登录名 */
private List<String> loginNameList; private List<String> loginNameList;
/** 登录密码,使用md5双次加密 */ /** 登录密码,使用md5双次加密 */
private List<String> loginPwdList; private List<String> loginPwdList;
/** 最近一次使用密码,使用md5双次加密 */
private List<String> loginPwd1List;
/** 最近二次使用密码,使用md5双次加密 */
private List<String> loginPwd2List;
/** 最近三次使用密码,使用md5双次加密 */
private List<String> loginPwd3List;
/** 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录 */ /** 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录 */
private List<String> loginLimitAddressList; private List<String> loginLimitAddressList;
...@@ -56,58 +46,42 @@ public class UserQuery extends UserEntity{ ...@@ -56,58 +46,42 @@ public class UserQuery extends UserEntity{
/** QQ号码 */ /** QQ号码 */
private List<String> qqList; private List<String> qqList;
/** 开始 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 */ /** 开始 用户类型(0.系统用户,1.普通用户,2.工作人员) */
private Integer userTypeStart; private Integer userTypeStart;
/** 结束 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 */ /** 结束 用户类型(0.系统用户,1.普通用户,2.工作人员) */
private Integer userTypeEnd; private Integer userTypeEnd;
/** 增加 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 */ /** 增加 用户类型(0.系统用户,1.普通用户,2.工作人员) */
private Integer userTypeIncrement; private Integer userTypeIncrement;
/** 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 */ /** 用户类型(0.系统用户,1.普通用户,2.工作人员)列表 */
private List <Integer> userTypeList; private List <Integer> userTypeList;
/** 开始 站点id */
private Long siteIdStart;
/** 结束 站点id */
private Long siteIdEnd;
/** 增加 站点id */ /** 所属站点id,多个逗号分隔 */
private Long siteIdIncrement; private List<String> siteIdsList;
/** 站点id */ /** 所属区域code,多个逗号分隔 */
private List <Long> siteIdList; private List<String> areaCodesList;
/** 开始 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职) */
/** 开始 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 */
private Integer statusStart; private Integer statusStart;
/** 结束 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 */ /** 结束 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职) */
private Integer statusEnd; private Integer statusEnd;
/** 增加 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 */ /** 增加 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职) */
private Integer statusIncrement; private Integer statusIncrement;
/** 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 */ /** 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)列表 */
private List <Integer> statusList; private List <Integer> statusList;
/** 开始 客户ID */
private Long customerIdStart;
/** 结束 客户ID */
private Long customerIdEnd;
/** 增加 客户ID */
private Long customerIdIncrement;
/** 客户ID */
private List <Long> customerIdList;
/** 开始 创建时间 */ /** 开始 创建时间 */
private String createTimeStart; private String createTimeStart;
/** 结束 创建时间 */ /** 结束 创建时间 */
private String createTimeEnd; private String createTimeEnd;
/** 开始 创建用户 */ /** 开始 创建用户 */
private Long createUserIdStart; private Long createUserIdStart;
...@@ -117,12 +91,12 @@ public class UserQuery extends UserEntity{ ...@@ -117,12 +91,12 @@ public class UserQuery extends UserEntity{
/** 增加 创建用户 */ /** 增加 创建用户 */
private Long createUserIdIncrement; private Long createUserIdIncrement;
/** 创建用户 */ /** 创建用户列表 */
private List <Long> createUserIdList; private List <Long> createUserIdList;
/** 创建用户名称 */ /** 创建用户名称 */
private List<String> createUserNameList; private List<String> createUserNameList;
/** 开始 最后一次登录时间 */ /** 开始 最后一次登录时间 */
private String lastLoginTimeStart; private String lastLoginTimeStart;
...@@ -131,14 +105,6 @@ public class UserQuery extends UserEntity{ ...@@ -131,14 +105,6 @@ public class UserQuery extends UserEntity{
/** 最后一次登录地址 */ /** 最后一次登录地址 */
private List<String> lastLoginAddressList; private List<String> lastLoginAddressList;
/** 开始 最后修改密码时间 */
private String lastModPwdTimeStart;
/** 结束 最后修改密码时间 */
private String lastModPwdTimeEnd;
/** 最后修改密码地址 */
private List<String> lastModPwdAddrList;
/** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */ /** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */
private List<UserQuery> orConditionList; private List<UserQuery> orConditionList;
...@@ -146,1307 +112,946 @@ public class UserQuery extends UserEntity{ ...@@ -146,1307 +112,946 @@ public class UserQuery extends UserEntity{
/** AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4) */ /** AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4) */
private List<UserQuery> andConditionList; private List<UserQuery> andConditionList;
public UserQuery(){}
public UserQuery(){
}
/** /**
* 获取 开始 用户ID,主键,自增长 * 获取 开始 用户ID,主键,自增长
* @return idStart * @return idStart
*/ */
public Long getIdStart(){ public Long getIdStart(){
return this.idStart; return this.idStart;
} }
/** /**
* 设置 开始 用户ID,主键,自增长 * 设置 开始 用户ID,主键,自增长
* @param idStart * @param idStart
*/ */
public void setIdStart(Long idStart){ public void setIdStart(Long idStart){
this.idStart = idStart; this.idStart = idStart;
} }
/** /**
* 获取 结束 用户ID,主键,自增长 * 获取 结束 用户ID,主键,自增长
* @return idEnd * @return $idEnd
*/ */
public Long getIdEnd(){ public Long getIdEnd(){
return this.idEnd; return this.idEnd;
} }
/** /**
* 设置 结束 用户ID,主键,自增长 * 设置 结束 用户ID,主键,自增长
* @param idEnd * @param idEnd
*/ */
public void setIdEnd(Long idEnd){ public void setIdEnd(Long idEnd){
this.idEnd = idEnd; this.idEnd = idEnd;
} }
/** /**
* 获取 增加 用户ID,主键,自增长 * 获取 增加 用户ID,主键,自增长
* @return idIncrement * @return idIncrement
*/ */
public Long getIdIncrement(){ public Long getIdIncrement(){
return this.idIncrement; return this.idIncrement;
} }
/** /**
* 设置 增加 用户ID,主键,自增长 * 设置 增加 用户ID,主键,自增长
* @param idIncrement * @param idIncrement
*/ */
public void setIdIncrement(Long idIncrement){ public void setIdIncrement(Long idIncrement){
this.idIncrement = idIncrement; this.idIncrement = idIncrement;
} }
/** /**
* 获取 用户ID,主键,自增长 * 获取 用户ID,主键,自增长
* @return idList * @return idList
*/ */
public List<Long> getIdList(){ public List<Long> getIdList(){
return this.idList; return this.idList;
} }
/** /**
* 设置 用户ID,主键,自增长 * 设置 用户ID,主键,自增长
* @param idList * @param idList
*/ */
public void setIdList(List<Long> idList){ public void setIdList(List<Long> idList){
this.idList = idList; this.idList = idList;
} }
/** /**
* 获取 登录名 * 获取 登录名
* @return loginNameList * @return loginNameList
*/ */
public List<String> getLoginNameList(){ public List<String> getLoginNameList(){
return this.loginNameList; return this.loginNameList;
} }
/** /**
* 设置 登录名 * 设置 登录名
* @param loginNameList * @param loginNameList
*/ */
public void setLoginNameList(List<String> loginNameList){ public void setLoginNameList(List<String> loginNameList){
this.loginNameList = loginNameList; this.loginNameList = loginNameList;
} }
/** /**
* 获取 登录密码,使用md5双次加密 * 获取 登录密码,使用md5双次加密
* @return loginPwdList * @return loginPwdList
*/ */
public List<String> getLoginPwdList(){ public List<String> getLoginPwdList(){
return this.loginPwdList; return this.loginPwdList;
} }
/** /**
* 设置 登录密码,使用md5双次加密 * 设置 登录密码,使用md5双次加密
* @param loginPwdList * @param loginPwdList
*/ */
public void setLoginPwdList(List<String> loginPwdList){ public void setLoginPwdList(List<String> loginPwdList){
this.loginPwdList = loginPwdList; this.loginPwdList = loginPwdList;
} }
/** /**
* 获取 最近一次使用密码,使用md5双次加密 * 获取 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @return loginPwd1List * @return loginLimitAddressList
*/ */
public List<String> getLoginPwd1List(){
return this.loginPwd1List;
}
/**
* 设置 最近一次使用密码,使用md5双次加密
* @param loginPwd1List
*/
public void setLoginPwd1List(List<String> loginPwd1List){
this.loginPwd1List = loginPwd1List;
}
/**
* 获取 最近二次使用密码,使用md5双次加密
* @return loginPwd2List
*/
public List<String> getLoginPwd2List(){
return this.loginPwd2List;
}
/**
* 设置 最近二次使用密码,使用md5双次加密
* @param loginPwd2List
*/
public void setLoginPwd2List(List<String> loginPwd2List){
this.loginPwd2List = loginPwd2List;
}
/**
* 获取 最近三次使用密码,使用md5双次加密
* @return loginPwd3List
*/
public List<String> getLoginPwd3List(){
return this.loginPwd3List;
}
/**
* 设置 最近三次使用密码,使用md5双次加密
* @param loginPwd3List
*/
public void setLoginPwd3List(List<String> loginPwd3List){
this.loginPwd3List = loginPwd3List;
}
/**
* 获取 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @return loginLimitAddressList
*/
public List<String> getLoginLimitAddressList(){ public List<String> getLoginLimitAddressList(){
return this.loginLimitAddressList; return this.loginLimitAddressList;
} }
/** /**
* 设置 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录 * 设置 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @param loginLimitAddressList * @param loginLimitAddressList
*/ */
public void setLoginLimitAddressList(List<String> loginLimitAddressList){ public void setLoginLimitAddressList(List<String> loginLimitAddressList){
this.loginLimitAddressList = loginLimitAddressList; this.loginLimitAddressList = loginLimitAddressList;
} }
/** /**
* 获取 用户名 * 获取 用户名
* @return realNameList * @return realNameList
*/ */
public List<String> getRealNameList(){ public List<String> getRealNameList(){
return this.realNameList; return this.realNameList;
} }
/** /**
* 设置 用户名 * 设置 用户名
* @param realNameList * @param realNameList
*/ */
public void setRealNameList(List<String> realNameList){ public void setRealNameList(List<String> realNameList){
this.realNameList = realNameList; this.realNameList = realNameList;
} }
/** /**
* 获取 用户手机号 * 获取 用户手机号
* @return mobileList * @return mobileList
*/ */
public List<String> getMobileList(){ public List<String> getMobileList(){
return this.mobileList; return this.mobileList;
} }
/** /**
* 设置 用户手机号 * 设置 用户手机号
* @param mobileList * @param mobileList
*/ */
public void setMobileList(List<String> mobileList){ public void setMobileList(List<String> mobileList){
this.mobileList = mobileList; this.mobileList = mobileList;
} }
/** /**
* 获取 用户联系电话 * 获取 用户联系电话
* @return phoneList * @return phoneList
*/ */
public List<String> getPhoneList(){ public List<String> getPhoneList(){
return this.phoneList; return this.phoneList;
} }
/** /**
* 设置 用户联系电话 * 设置 用户联系电话
* @param phoneList * @param phoneList
*/ */
public void setPhoneList(List<String> phoneList){ public void setPhoneList(List<String> phoneList){
this.phoneList = phoneList; this.phoneList = phoneList;
} }
/** /**
* 获取 用户邮箱 * 获取 用户邮箱
* @return emailList * @return emailList
*/ */
public List<String> getEmailList(){ public List<String> getEmailList(){
return this.emailList; return this.emailList;
} }
/** /**
* 设置 用户邮箱 * 设置 用户邮箱
* @param emailList * @param emailList
*/ */
public void setEmailList(List<String> emailList){ public void setEmailList(List<String> emailList){
this.emailList = emailList; this.emailList = emailList;
} }
/** /**
* 获取 QQ号码 * 获取 QQ号码
* @return qqList * @return qqList
*/ */
public List<String> getQqList(){ public List<String> getQqList(){
return this.qqList; return this.qqList;
} }
/** /**
* 设置 QQ号码 * 设置 QQ号码
* @param qqList * @param qqList
*/ */
public void setQqList(List<String> qqList){ public void setQqList(List<String> qqList){
this.qqList = qqList; this.qqList = qqList;
} }
/** /**
* 获取 开始 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 * 获取 开始 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @return userTypeStart * @return userTypeStart
*/ */
public Integer getUserTypeStart(){ public Integer getUserTypeStart(){
return this.userTypeStart; return this.userTypeStart;
} }
/** /**
* 设置 开始 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 * 设置 开始 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userTypeStart * @param userTypeStart
*/ */
public void setUserTypeStart(Integer userTypeStart){ public void setUserTypeStart(Integer userTypeStart){
this.userTypeStart = userTypeStart; this.userTypeStart = userTypeStart;
} }
/** /**
* 获取 结束 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 * 获取 结束 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @return userTypeEnd * @return $userTypeEnd
*/ */
public Integer getUserTypeEnd(){ public Integer getUserTypeEnd(){
return this.userTypeEnd; return this.userTypeEnd;
} }
/** /**
* 设置 结束 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 * 设置 结束 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userTypeEnd * @param userTypeEnd
*/ */
public void setUserTypeEnd(Integer userTypeEnd){ public void setUserTypeEnd(Integer userTypeEnd){
this.userTypeEnd = userTypeEnd; this.userTypeEnd = userTypeEnd;
} }
/** /**
* 获取 增加 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 * 获取 增加 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @return userTypeIncrement * @return userTypeIncrement
*/ */
public Integer getUserTypeIncrement(){ public Integer getUserTypeIncrement(){
return this.userTypeIncrement; return this.userTypeIncrement;
} }
/** /**
* 设置 增加 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 * 设置 增加 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userTypeIncrement * @param userTypeIncrement
*/ */
public void setUserTypeIncrement(Integer userTypeIncrement){ public void setUserTypeIncrement(Integer userTypeIncrement){
this.userTypeIncrement = userTypeIncrement; this.userTypeIncrement = userTypeIncrement;
} }
/** /**
* 获取 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 * 获取 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @return userTypeList * @return userTypeList
*/ */
public List<Integer> getUserTypeList(){ public List<Integer> getUserTypeList(){
return this.userTypeList; return this.userTypeList;
} }
/** /**
* 设置 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 * 设置 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userTypeList * @param userTypeList
*/ */
public void setUserTypeList(List<Integer> userTypeList){ public void setUserTypeList(List<Integer> userTypeList){
this.userTypeList = userTypeList; this.userTypeList = userTypeList;
} }
/**
* 获取 开始 站点id
* @return siteIdStart
*/
public Long getSiteIdStart(){
return this.siteIdStart;
}
/** /**
* 设置 开始 站点id * 获取 所属站点id,多个逗号分隔
* @param siteIdStart * @return siteIdsList
*/ */
public void setSiteIdStart(Long siteIdStart){ public List<String> getSiteIdsList(){
this.siteIdStart = siteIdStart; return this.siteIdsList;
} }
/** /**
* 获取 结束 站点id * 设置 所属站点id,多个逗号分隔
* @return siteIdEnd * @param siteIdsList
*/ */
public Long getSiteIdEnd(){ public void setSiteIdsList(List<String> siteIdsList){
return this.siteIdEnd; this.siteIdsList = siteIdsList;
} }
/** /**
* 设置 结束 站点id * 获取 所属区域code,多个逗号分隔
* @param siteIdEnd * @return areaCodesList
*/ */
public void setSiteIdEnd(Long siteIdEnd){ public List<String> getAreaCodesList(){
this.siteIdEnd = siteIdEnd; return this.areaCodesList;
} }
/** /**
* 获取 增加 站点id * 设置 所属区域code,多个逗号分隔
* @return siteIdIncrement * @param areaCodesList
*/ */
public Long getSiteIdIncrement(){ public void setAreaCodesList(List<String> areaCodesList){
return this.siteIdIncrement; this.areaCodesList = areaCodesList;
} }
/**
* 设置 增加 站点id
* @param siteIdIncrement
*/
public void setSiteIdIncrement(Long siteIdIncrement){
this.siteIdIncrement = siteIdIncrement;
}
/**
* 获取 站点id
* @return siteIdList
*/
public List<Long> getSiteIdList(){
return this.siteIdList;
}
/** /**
* 设置 站点id * 获取 开始 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param siteIdList * @return statusStart
*/ */
public void setSiteIdList(List<Long> siteIdList){
this.siteIdList = siteIdList;
}
/**
* 获取 开始 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
* @return statusStart
*/
public Integer getStatusStart(){ public Integer getStatusStart(){
return this.statusStart; return this.statusStart;
} }
/** /**
* 设置 开始 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 * 设置 开始 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param statusStart * @param statusStart
*/ */
public void setStatusStart(Integer statusStart){ public void setStatusStart(Integer statusStart){
this.statusStart = statusStart; this.statusStart = statusStart;
} }
/** /**
* 获取 结束 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 * 获取 结束 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @return statusEnd * @return $statusEnd
*/ */
public Integer getStatusEnd(){ public Integer getStatusEnd(){
return this.statusEnd; return this.statusEnd;
} }
/** /**
* 设置 结束 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 * 设置 结束 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param statusEnd * @param statusEnd
*/ */
public void setStatusEnd(Integer statusEnd){ public void setStatusEnd(Integer statusEnd){
this.statusEnd = statusEnd; this.statusEnd = statusEnd;
} }
/** /**
* 获取 增加 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 * 获取 增加 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @return statusIncrement * @return statusIncrement
*/ */
public Integer getStatusIncrement(){ public Integer getStatusIncrement(){
return this.statusIncrement; return this.statusIncrement;
} }
/** /**
* 设置 增加 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 * 设置 增加 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param statusIncrement * @param statusIncrement
*/ */
public void setStatusIncrement(Integer statusIncrement){ public void setStatusIncrement(Integer statusIncrement){
this.statusIncrement = statusIncrement; this.statusIncrement = statusIncrement;
} }
/** /**
* 获取 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 * 获取 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @return statusList * @return statusList
*/ */
public List<Integer> getStatusList(){ public List<Integer> getStatusList(){
return this.statusList; return this.statusList;
} }
/** /**
* 设置 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 * 设置 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param statusList * @param statusList
*/ */
public void setStatusList(List<Integer> statusList){ public void setStatusList(List<Integer> statusList){
this.statusList = statusList; this.statusList = statusList;
} }
/**
* 获取 开始 客户ID
* @return customerIdStart
*/
public Long getCustomerIdStart(){
return this.customerIdStart;
}
/**
* 设置 开始 客户ID
* @param customerIdStart
*/
public void setCustomerIdStart(Long customerIdStart){
this.customerIdStart = customerIdStart;
}
/**
* 获取 结束 客户ID
* @return customerIdEnd
*/
public Long getCustomerIdEnd(){
return this.customerIdEnd;
}
/**
* 设置 结束 客户ID
* @param customerIdEnd
*/
public void setCustomerIdEnd(Long customerIdEnd){
this.customerIdEnd = customerIdEnd;
}
/** /**
* 获取 增加 客户ID * 获取 开始 创建时间
* @return customerIdIncrement * @return createTimeStart
*/ */
public Long getCustomerIdIncrement(){
return this.customerIdIncrement;
}
/**
* 设置 增加 客户ID
* @param customerIdIncrement
*/
public void setCustomerIdIncrement(Long customerIdIncrement){
this.customerIdIncrement = customerIdIncrement;
}
/**
* 获取 客户ID
* @return customerIdList
*/
public List<Long> getCustomerIdList(){
return this.customerIdList;
}
/**
* 设置 客户ID
* @param customerIdList
*/
public void setCustomerIdList(List<Long> customerIdList){
this.customerIdList = customerIdList;
}
/**
* 获取 开始 创建时间
* @return createTimeStart
*/
public String getCreateTimeStart(){ public String getCreateTimeStart(){
return this.createTimeStart; return this.createTimeStart;
} }
/** /**
* 设置 开始 创建时间 * 设置 开始 创建时间
* @param createTimeStart * @param createTimeStart
*/ */
public void setCreateTimeStart(String createTimeStart){ public void setCreateTimeStart(String createTimeStart){
this.createTimeStart = createTimeStart; this.createTimeStart = createTimeStart;
} }
/** /**
* 获取 结束 创建时间 * 获取 结束 创建时间
* @return createTimeEnd * @return createTimeEnd
*/ */
public String getCreateTimeEnd(){ public String getCreateTimeEnd(){
return this.createTimeEnd; return this.createTimeEnd;
} }
/** /**
* 设置 结束 创建时间 * 设置 结束 创建时间
* @param createTimeEnd * @param createTimeEnd
*/ */
public void setCreateTimeEnd(String createTimeEnd){ public void setCreateTimeEnd(String createTimeEnd){
this.createTimeEnd = createTimeEnd; this.createTimeEnd = createTimeEnd;
} }
/** /**
* 获取 开始 创建用户 * 获取 开始 创建用户
* @return createUserIdStart * @return createUserIdStart
*/ */
public Long getCreateUserIdStart(){ public Long getCreateUserIdStart(){
return this.createUserIdStart; return this.createUserIdStart;
} }
/** /**
* 设置 开始 创建用户 * 设置 开始 创建用户
* @param createUserIdStart * @param createUserIdStart
*/ */
public void setCreateUserIdStart(Long createUserIdStart){ public void setCreateUserIdStart(Long createUserIdStart){
this.createUserIdStart = createUserIdStart; this.createUserIdStart = createUserIdStart;
} }
/** /**
* 获取 结束 创建用户 * 获取 结束 创建用户
* @return createUserIdEnd * @return $createUserIdEnd
*/ */
public Long getCreateUserIdEnd(){ public Long getCreateUserIdEnd(){
return this.createUserIdEnd; return this.createUserIdEnd;
} }
/** /**
* 设置 结束 创建用户 * 设置 结束 创建用户
* @param createUserIdEnd * @param createUserIdEnd
*/ */
public void setCreateUserIdEnd(Long createUserIdEnd){ public void setCreateUserIdEnd(Long createUserIdEnd){
this.createUserIdEnd = createUserIdEnd; this.createUserIdEnd = createUserIdEnd;
} }
/** /**
* 获取 增加 创建用户 * 获取 增加 创建用户
* @return createUserIdIncrement * @return createUserIdIncrement
*/ */
public Long getCreateUserIdIncrement(){ public Long getCreateUserIdIncrement(){
return this.createUserIdIncrement; return this.createUserIdIncrement;
} }
/** /**
* 设置 增加 创建用户 * 设置 增加 创建用户
* @param createUserIdIncrement * @param createUserIdIncrement
*/ */
public void setCreateUserIdIncrement(Long createUserIdIncrement){ public void setCreateUserIdIncrement(Long createUserIdIncrement){
this.createUserIdIncrement = createUserIdIncrement; this.createUserIdIncrement = createUserIdIncrement;
} }
/** /**
* 获取 创建用户 * 获取 创建用户
* @return createUserIdList * @return createUserIdList
*/ */
public List<Long> getCreateUserIdList(){ public List<Long> getCreateUserIdList(){
return this.createUserIdList; return this.createUserIdList;
} }
/** /**
* 设置 创建用户 * 设置 创建用户
* @param createUserIdList * @param createUserIdList
*/ */
public void setCreateUserIdList(List<Long> createUserIdList){ public void setCreateUserIdList(List<Long> createUserIdList){
this.createUserIdList = createUserIdList; this.createUserIdList = createUserIdList;
} }
/** /**
* 获取 创建用户名称 * 获取 创建用户名称
* @return createUserNameList * @return createUserNameList
*/ */
public List<String> getCreateUserNameList(){ public List<String> getCreateUserNameList(){
return this.createUserNameList; return this.createUserNameList;
} }
/** /**
* 设置 创建用户名称 * 设置 创建用户名称
* @param createUserNameList * @param createUserNameList
*/ */
public void setCreateUserNameList(List<String> createUserNameList){ public void setCreateUserNameList(List<String> createUserNameList){
this.createUserNameList = createUserNameList; this.createUserNameList = createUserNameList;
} }
/** /**
* 获取 开始 最后一次登录时间 * 获取 开始 最后一次登录时间
* @return lastLoginTimeStart * @return lastLoginTimeStart
*/ */
public String getLastLoginTimeStart(){ public String getLastLoginTimeStart(){
return this.lastLoginTimeStart; return this.lastLoginTimeStart;
} }
/** /**
* 设置 开始 最后一次登录时间 * 设置 开始 最后一次登录时间
* @param lastLoginTimeStart * @param lastLoginTimeStart
*/ */
public void setLastLoginTimeStart(String lastLoginTimeStart){ public void setLastLoginTimeStart(String lastLoginTimeStart){
this.lastLoginTimeStart = lastLoginTimeStart; this.lastLoginTimeStart = lastLoginTimeStart;
} }
/** /**
* 获取 结束 最后一次登录时间 * 获取 结束 最后一次登录时间
* @return lastLoginTimeEnd * @return lastLoginTimeEnd
*/ */
public String getLastLoginTimeEnd(){ public String getLastLoginTimeEnd(){
return this.lastLoginTimeEnd; return this.lastLoginTimeEnd;
} }
/** /**
* 设置 结束 最后一次登录时间 * 设置 结束 最后一次登录时间
* @param lastLoginTimeEnd * @param lastLoginTimeEnd
*/ */
public void setLastLoginTimeEnd(String lastLoginTimeEnd){ public void setLastLoginTimeEnd(String lastLoginTimeEnd){
this.lastLoginTimeEnd = lastLoginTimeEnd; this.lastLoginTimeEnd = lastLoginTimeEnd;
} }
/** /**
* 获取 最后一次登录地址 * 获取 最后一次登录地址
* @return lastLoginAddressList * @return lastLoginAddressList
*/ */
public List<String> getLastLoginAddressList(){ public List<String> getLastLoginAddressList(){
return this.lastLoginAddressList; return this.lastLoginAddressList;
} }
/** /**
* 设置 最后一次登录地址 * 设置 最后一次登录地址
* @param lastLoginAddressList * @param lastLoginAddressList
*/ */
public void setLastLoginAddressList(List<String> lastLoginAddressList){ public void setLastLoginAddressList(List<String> lastLoginAddressList){
this.lastLoginAddressList = lastLoginAddressList; this.lastLoginAddressList = lastLoginAddressList;
} }
/** /**
* 获取 开始 最后修改密码时间 * 设置 用户ID,主键,自增长
* @return lastModPwdTimeStart * @param id
*/ */
public String getLastModPwdTimeStart(){ public UserQuery id(Long id){
return this.lastModPwdTimeStart; setId(id);
} return this;
/**
* 设置 开始 最后修改密码时间
* @param lastModPwdTimeStart
*/
public void setLastModPwdTimeStart(String lastModPwdTimeStart){
this.lastModPwdTimeStart = lastModPwdTimeStart;
}
/**
* 获取 结束 最后修改密码时间
* @return lastModPwdTimeEnd
*/
public String getLastModPwdTimeEnd(){
return this.lastModPwdTimeEnd;
}
/**
* 设置 结束 最后修改密码时间
* @param lastModPwdTimeEnd
*/
public void setLastModPwdTimeEnd(String lastModPwdTimeEnd){
this.lastModPwdTimeEnd = lastModPwdTimeEnd;
}
/**
* 获取 最后修改密码地址
* @return lastModPwdAddrList
*/
public List<String> getLastModPwdAddrList(){
return this.lastModPwdAddrList;
} }
/** /**
* 设置 最后修改密码地址 * 设置 开始 用户ID,主键,自增长
* @param lastModPwdAddrList * @param idStart
*/ */
public void setLastModPwdAddrList(List<String> lastModPwdAddrList){
this.lastModPwdAddrList = lastModPwdAddrList;
}
/**
* 设置 用户ID,主键,自增长
* @param id
*/
public UserQuery id(Long id){
setId(id);
return this;
}
/**
* 设置 开始 用户ID,主键,自增长
* @param idStart
*/
public UserQuery idStart(Long idStart){ public UserQuery idStart(Long idStart){
this.idStart = idStart; this.idStart = idStart;
return this; return this;
} }
/** /**
* 设置 结束 用户ID,主键,自增长 * 设置 结束 用户ID,主键,自增长
* @param idEnd * @param idEnd
*/ */
public UserQuery idEnd(Long idEnd){ public UserQuery idEnd(Long idEnd){
this.idEnd = idEnd; this.idEnd = idEnd;
return this; return this;
} }
/** /**
* 设置 增加 用户ID,主键,自增长 * 设置 增加 用户ID,主键,自增长
* @param idIncrement * @param idIncrement
*/ */
public UserQuery idIncrement(Long idIncrement){ public UserQuery idIncrement(Long idIncrement){
this.idIncrement = idIncrement; this.idIncrement = idIncrement;
return this; return this;
} }
/** /**
* 设置 用户ID,主键,自增长 * 设置 用户ID,主键,自增长
* @param idList * @param idList
*/ */
public UserQuery idList(List<Long> idList){ public UserQuery idList(List<Long> idList){
this.idList = idList; this.idList = idList;
return this; return this;
} }
/**
* 设置 登录名
* @param loginName /**
*/ * 设置 登录名
* @param loginName
*/
public UserQuery loginName(String loginName){ public UserQuery loginName(String loginName){
setLoginName(loginName); setLoginName(loginName);
return this; return this;
} }
/** /**
* 设置 登录名 * 设置 登录名
* @param loginNameList * @param loginNameList
*/ */
public UserQuery loginNameList(List<String> loginNameList){ public UserQuery loginNameList(List<String> loginNameList){
this.loginNameList = loginNameList; this.loginNameList = loginNameList;
return this; return this;
} }
/**
* 设置 登录密码,使用md5双次加密
* @param loginPwd /**
*/ * 设置 登录密码,使用md5双次加密
* @param loginPwd
*/
public UserQuery loginPwd(String loginPwd){ public UserQuery loginPwd(String loginPwd){
setLoginPwd(loginPwd); setLoginPwd(loginPwd);
return this; return this;
} }
/** /**
* 设置 登录密码,使用md5双次加密 * 设置 登录密码,使用md5双次加密
* @param loginPwdList * @param loginPwdList
*/ */
public UserQuery loginPwdList(List<String> loginPwdList){ public UserQuery loginPwdList(List<String> loginPwdList){
this.loginPwdList = loginPwdList; this.loginPwdList = loginPwdList;
return this; return this;
}
/**
* 设置 最近一次使用密码,使用md5双次加密
* @param loginPwd1
*/
public UserQuery loginPwd1(String loginPwd1){
setLoginPwd1(loginPwd1);
return this;
}
/**
* 设置 最近一次使用密码,使用md5双次加密
* @param loginPwd1List
*/
public UserQuery loginPwd1List(List<String> loginPwd1List){
this.loginPwd1List = loginPwd1List;
return this;
}
/**
* 设置 最近二次使用密码,使用md5双次加密
* @param loginPwd2
*/
public UserQuery loginPwd2(String loginPwd2){
setLoginPwd2(loginPwd2);
return this;
}
/**
* 设置 最近二次使用密码,使用md5双次加密
* @param loginPwd2List
*/
public UserQuery loginPwd2List(List<String> loginPwd2List){
this.loginPwd2List = loginPwd2List;
return this;
}
/**
* 设置 最近三次使用密码,使用md5双次加密
* @param loginPwd3
*/
public UserQuery loginPwd3(String loginPwd3){
setLoginPwd3(loginPwd3);
return this;
} }
/** /**
* 设置 最近三次使用密码,使用md5双次加密 * 设置 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @param loginPwd3List * @param loginLimitAddress
*/ */
public UserQuery loginPwd3List(List<String> loginPwd3List){
this.loginPwd3List = loginPwd3List;
return this;
}
/**
* 设置 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @param loginLimitAddress
*/
public UserQuery loginLimitAddress(String loginLimitAddress){ public UserQuery loginLimitAddress(String loginLimitAddress){
setLoginLimitAddress(loginLimitAddress); setLoginLimitAddress(loginLimitAddress);
return this; return this;
} }
/** /**
* 设置 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录 * 设置 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @param loginLimitAddressList * @param loginLimitAddressList
*/ */
public UserQuery loginLimitAddressList(List<String> loginLimitAddressList){ public UserQuery loginLimitAddressList(List<String> loginLimitAddressList){
this.loginLimitAddressList = loginLimitAddressList; this.loginLimitAddressList = loginLimitAddressList;
return this; return this;
} }
/**
* 设置 用户名
* @param realName /**
*/ * 设置 用户名
* @param realName
*/
public UserQuery realName(String realName){ public UserQuery realName(String realName){
setRealName(realName); setRealName(realName);
return this; return this;
} }
/** /**
* 设置 用户名 * 设置 用户名
* @param realNameList * @param realNameList
*/ */
public UserQuery realNameList(List<String> realNameList){ public UserQuery realNameList(List<String> realNameList){
this.realNameList = realNameList; this.realNameList = realNameList;
return this; return this;
} }
/**
* 设置 用户手机号
* @param mobile /**
*/ * 设置 用户手机号
* @param mobile
*/
public UserQuery mobile(String mobile){ public UserQuery mobile(String mobile){
setMobile(mobile); setMobile(mobile);
return this; return this;
} }
/** /**
* 设置 用户手机号 * 设置 用户手机号
* @param mobileList * @param mobileList
*/ */
public UserQuery mobileList(List<String> mobileList){ public UserQuery mobileList(List<String> mobileList){
this.mobileList = mobileList; this.mobileList = mobileList;
return this; return this;
} }
/**
* 设置 用户联系电话
* @param phone /**
*/ * 设置 用户联系电话
* @param phone
*/
public UserQuery phone(String phone){ public UserQuery phone(String phone){
setPhone(phone); setPhone(phone);
return this; return this;
} }
/** /**
* 设置 用户联系电话 * 设置 用户联系电话
* @param phoneList * @param phoneList
*/ */
public UserQuery phoneList(List<String> phoneList){ public UserQuery phoneList(List<String> phoneList){
this.phoneList = phoneList; this.phoneList = phoneList;
return this; return this;
} }
/**
* 设置 用户邮箱
* @param email /**
*/ * 设置 用户邮箱
* @param email
*/
public UserQuery email(String email){ public UserQuery email(String email){
setEmail(email); setEmail(email);
return this; return this;
} }
/** /**
* 设置 用户邮箱 * 设置 用户邮箱
* @param emailList * @param emailList
*/ */
public UserQuery emailList(List<String> emailList){ public UserQuery emailList(List<String> emailList){
this.emailList = emailList; this.emailList = emailList;
return this; return this;
} }
/**
* 设置 QQ号码
* @param qq /**
*/ * 设置 QQ号码
* @param qq
*/
public UserQuery qq(String qq){ public UserQuery qq(String qq){
setQq(qq); setQq(qq);
return this; return this;
} }
/** /**
* 设置 QQ号码 * 设置 QQ号码
* @param qqList * @param qqList
*/ */
public UserQuery qqList(List<String> qqList){ public UserQuery qqList(List<String> qqList){
this.qqList = qqList; this.qqList = qqList;
return this; return this;
} }
/** /**
* 设置 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 * 设置 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userType * @param userType
*/ */
public UserQuery userType(Integer userType){ public UserQuery userType(Integer userType){
setUserType(userType); setUserType(userType);
return this; return this;
} }
/** /**
* 设置 开始 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 * 设置 开始 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userTypeStart * @param userTypeStart
*/ */
public UserQuery userTypeStart(Integer userTypeStart){ public UserQuery userTypeStart(Integer userTypeStart){
this.userTypeStart = userTypeStart; this.userTypeStart = userTypeStart;
return this; return this;
} }
/** /**
* 设置 结束 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 * 设置 结束 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userTypeEnd * @param userTypeEnd
*/ */
public UserQuery userTypeEnd(Integer userTypeEnd){ public UserQuery userTypeEnd(Integer userTypeEnd){
this.userTypeEnd = userTypeEnd; this.userTypeEnd = userTypeEnd;
return this; return this;
} }
/** /**
* 设置 增加 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 * 设置 增加 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userTypeIncrement * @param userTypeIncrement
*/ */
public UserQuery userTypeIncrement(Integer userTypeIncrement){ public UserQuery userTypeIncrement(Integer userTypeIncrement){
this.userTypeIncrement = userTypeIncrement; this.userTypeIncrement = userTypeIncrement;
return this; return this;
} }
/** /**
* 设置 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 * 设置 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userTypeList * @param userTypeList
*/ */
public UserQuery userTypeList(List<Integer> userTypeList){ public UserQuery userTypeList(List<Integer> userTypeList){
this.userTypeList = userTypeList; this.userTypeList = userTypeList;
return this; return this;
}
/**
* 设置 站点id
* @param siteId
*/
public UserQuery siteId(Long siteId){
setSiteId(siteId);
return this;
}
/**
* 设置 开始 站点id
* @param siteIdStart
*/
public UserQuery siteIdStart(Long siteIdStart){
this.siteIdStart = siteIdStart;
return this;
}
/**
* 设置 结束 站点id
* @param siteIdEnd
*/
public UserQuery siteIdEnd(Long siteIdEnd){
this.siteIdEnd = siteIdEnd;
return this;
}
/**
* 设置 增加 站点id
* @param siteIdIncrement
*/
public UserQuery siteIdIncrement(Long siteIdIncrement){
this.siteIdIncrement = siteIdIncrement;
return this;
}
/**
* 设置 站点id
* @param siteIdList
*/
public UserQuery siteIdList(List<Long> siteIdList){
this.siteIdList = siteIdList;
return this;
}
/**
* 设置 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
* @param status
*/
public UserQuery status(Integer status){
setStatus(status);
return this;
} }
/** /**
* 设置 开始 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 * 设置 所属站点id,多个逗号分隔
* @param statusStart * @param siteIds
*/ */
public UserQuery statusStart(Integer statusStart){ public UserQuery siteIds(String siteIds){
this.statusStart = statusStart; setSiteIds(siteIds);
return this; return this;
} }
/** /**
* 设置 结束 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 * 设置 所属站点id,多个逗号分隔
* @param statusEnd * @param siteIdsList
*/ */
public UserQuery statusEnd(Integer statusEnd){ public UserQuery siteIdsList(List<String> siteIdsList){
this.statusEnd = statusEnd; this.siteIdsList = siteIdsList;
return this; return this;
} }
/** /**
* 设置 增加 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 * 设置 所属区域code,多个逗号分隔
* @param statusIncrement * @param areaCodes
*/ */
public UserQuery statusIncrement(Integer statusIncrement){ public UserQuery areaCodes(String areaCodes){
this.statusIncrement = statusIncrement; setAreaCodes(areaCodes);
return this; return this;
} }
/** /**
* 设置 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 * 设置 所属区域code,多个逗号分隔
* @param statusList * @param areaCodesList
*/ */
public UserQuery statusList(List<Integer> statusList){ public UserQuery areaCodesList(List<String> areaCodesList){
this.statusList = statusList; this.areaCodesList = areaCodesList;
return this; return this;
} }
/** /**
* 设置 客户ID * 设置 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param customerId * @param status
*/ */
public UserQuery customerId(Long customerId){ public UserQuery status(Integer status){
setCustomerId(customerId); setStatus(status);
return this; return this;
}
/**
* 设置 开始 客户ID
* @param customerIdStart
*/
public UserQuery customerIdStart(Long customerIdStart){
this.customerIdStart = customerIdStart;
return this;
} }
/** /**
* 设置 结束 客户ID * 设置 开始 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param customerIdEnd * @param statusStart
*/ */
public UserQuery customerIdEnd(Long customerIdEnd){ public UserQuery statusStart(Integer statusStart){
this.customerIdEnd = customerIdEnd; this.statusStart = statusStart;
return this; return this;
} }
/** /**
* 设置 增加 客户ID * 设置 结束 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param customerIdIncrement * @param statusEnd
*/ */
public UserQuery customerIdIncrement(Long customerIdIncrement){ public UserQuery statusEnd(Integer statusEnd){
this.customerIdIncrement = customerIdIncrement; this.statusEnd = statusEnd;
return this; return this;
} }
/** /**
* 设置 客户ID * 设置 增加 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param customerIdList * @param statusIncrement
*/ */
public UserQuery customerIdList(List<Long> customerIdList){ public UserQuery statusIncrement(Integer statusIncrement){
this.customerIdList = customerIdList; this.statusIncrement = statusIncrement;
return this; return this;
} }
/** /**
* 设置 开始 创建时间 * 设置 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param createTimeStart * @param statusList
*/ */
public UserQuery createTimeStart(String createTimeStart){ public UserQuery statusList(List<Integer> statusList){
this.createTimeStart = createTimeStart; this.statusList = statusList;
return this; return this;
} }
/** /**
* 设置 结束 创建时间 * 设置 创建用户
* @param createTimeEnd * @param createUserId
*/ */
public UserQuery createTimeEnd(String createTimeEnd){ public UserQuery createUserId(Long createUserId){
this.createTimeEnd = createTimeEnd; setCreateUserId(createUserId);
return this; return this;
} }
/** /**
* 设置 创建用户 * 设置 开始 创建用户
* @param createUserId * @param createUserIdStart
*/ */
public UserQuery createUserId(Long createUserId){
setCreateUserId(createUserId);
return this;
}
/**
* 设置 开始 创建用户
* @param createUserIdStart
*/
public UserQuery createUserIdStart(Long createUserIdStart){ public UserQuery createUserIdStart(Long createUserIdStart){
this.createUserIdStart = createUserIdStart; this.createUserIdStart = createUserIdStart;
return this; return this;
} }
/** /**
* 设置 结束 创建用户 * 设置 结束 创建用户
* @param createUserIdEnd * @param createUserIdEnd
*/ */
public UserQuery createUserIdEnd(Long createUserIdEnd){ public UserQuery createUserIdEnd(Long createUserIdEnd){
this.createUserIdEnd = createUserIdEnd; this.createUserIdEnd = createUserIdEnd;
return this; return this;
} }
/** /**
* 设置 增加 创建用户 * 设置 增加 创建用户
* @param createUserIdIncrement * @param createUserIdIncrement
*/ */
public UserQuery createUserIdIncrement(Long createUserIdIncrement){ public UserQuery createUserIdIncrement(Long createUserIdIncrement){
this.createUserIdIncrement = createUserIdIncrement; this.createUserIdIncrement = createUserIdIncrement;
return this; return this;
} }
/** /**
* 设置 创建用户 * 设置 创建用户
* @param createUserIdList * @param createUserIdList
*/ */
public UserQuery createUserIdList(List<Long> createUserIdList){ public UserQuery createUserIdList(List<Long> createUserIdList){
this.createUserIdList = createUserIdList; this.createUserIdList = createUserIdList;
return this; return this;
} }
/**
* 设置 创建用户名称
* @param createUserName /**
*/ * 设置 创建用户名称
* @param createUserName
*/
public UserQuery createUserName(String createUserName){ public UserQuery createUserName(String createUserName){
setCreateUserName(createUserName); setCreateUserName(createUserName);
return this; return this;
} }
/** /**
* 设置 创建用户名称 * 设置 创建用户名称
* @param createUserNameList * @param createUserNameList
*/ */
public UserQuery createUserNameList(List<String> createUserNameList){ public UserQuery createUserNameList(List<String> createUserNameList){
this.createUserNameList = createUserNameList; this.createUserNameList = createUserNameList;
return this; return this;
} }
/**
* 设置 开始 最后一次登录时间
* @param lastLoginTimeStart
*/
public UserQuery lastLoginTimeStart(String lastLoginTimeStart){
this.lastLoginTimeStart = lastLoginTimeStart;
return this;
}
/** /**
* 设置 结束 最后一次登录时间 * 设置 最后一次登录地址
* @param lastLoginTimeEnd * @param lastLoginAddress
*/ */
public UserQuery lastLoginTimeEnd(String lastLoginTimeEnd){
this.lastLoginTimeEnd = lastLoginTimeEnd;
return this;
}
/**
* 设置 最后一次登录地址
* @param lastLoginAddress
*/
public UserQuery lastLoginAddress(String lastLoginAddress){ public UserQuery lastLoginAddress(String lastLoginAddress){
setLastLoginAddress(lastLoginAddress); setLastLoginAddress(lastLoginAddress);
return this; return this;
} }
/** /**
* 设置 最后一次登录地址 * 设置 最后一次登录地址
* @param lastLoginAddressList * @param lastLoginAddressList
*/ */
public UserQuery lastLoginAddressList(List<String> lastLoginAddressList){ public UserQuery lastLoginAddressList(List<String> lastLoginAddressList){
this.lastLoginAddressList = lastLoginAddressList; this.lastLoginAddressList = lastLoginAddressList;
return this; return this;
} }
/** /**
* 设置 开始 最后修改密码时间 * 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @param lastModPwdTimeStart * @return orConditionList
*/ */
public UserQuery lastModPwdTimeStart(String lastModPwdTimeStart){
this.lastModPwdTimeStart = lastModPwdTimeStart;
return this;
}
/**
* 设置 结束 最后修改密码时间
* @param lastModPwdTimeEnd
*/
public UserQuery lastModPwdTimeEnd(String lastModPwdTimeEnd){
this.lastModPwdTimeEnd = lastModPwdTimeEnd;
return this;
}
/**
* 设置 最后修改密码地址
* @param lastModPwdAddr
*/
public UserQuery lastModPwdAddr(String lastModPwdAddr){
setLastModPwdAddr(lastModPwdAddr);
return this;
}
/**
* 设置 最后修改密码地址
* @param lastModPwdAddrList
*/
public UserQuery lastModPwdAddrList(List<String> lastModPwdAddrList){
this.lastModPwdAddrList = lastModPwdAddrList;
return this;
}
/**
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList
*/
public List<UserQuery> getOrConditionList(){ public List<UserQuery> getOrConditionList(){
return this.orConditionList; return this.orConditionList;
} }
/** /**
* 设置 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) * 设置 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @param orConditionList * @param orConditionList
*/ */
public void setOrConditionList(List<UserQuery> orConditionList){ public void setOrConditionList(List<UserQuery> orConditionList){
this.orConditionList = orConditionList; this.orConditionList = orConditionList;
} }
/** /**
* 获取 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4) * 获取 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @return andConditionList * @return andConditionList
*/ */
public List<UserQuery> getAndConditionList(){ public List<UserQuery> getAndConditionList(){
return this.andConditionList; return this.andConditionList;
} }
/** /**
* 设置 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4) * 设置 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @param andConditionList * @param andConditionList
*/ */
public void setAndConditionList(List<UserQuery> andConditionList){ public void setAndConditionList(List<UserQuery> andConditionList){
this.andConditionList = andConditionList; this.andConditionList = andConditionList;
} }
......
package com.mortals.xhx.base.system.user.model.vo;
import com.mortals.framework.model.BaseEntityLong;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* 用户信息业务视图对象
*
* @author zxfei
* @date 2022-07-05
*/
@Data
public class UserVo extends BaseEntityLong {
/**
* 站点名称
*/
private String siteName;
private String roleIds;
/**
* 唯一标识
*/
private String token;
/**
* 菜单栏
*/
private String menuUrl;
/**
* 登录时间
*/
private Long loginTime;
/**
* 过期时间
*/
private Long expireTime;
private Long siteId;
private Long customerId;
}
\ No newline at end of file
...@@ -13,6 +13,7 @@ import com.mortals.framework.model.Result; ...@@ -13,6 +13,7 @@ import com.mortals.framework.model.Result;
import com.mortals.framework.service.ICRUDService; import com.mortals.framework.service.ICRUDService;
import com.mortals.framework.service.IUser; import com.mortals.framework.service.IUser;
import com.mortals.xhx.base.system.menu.model.MenuEntity; import com.mortals.xhx.base.system.menu.model.MenuEntity;
import com.mortals.xhx.base.system.user.dao.UserDao;
import com.mortals.xhx.base.system.user.model.UserEntity; import com.mortals.xhx.base.system.user.model.UserEntity;
import java.util.List; import java.util.List;
...@@ -37,7 +38,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> { ...@@ -37,7 +38,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @return * @return
* @throws AppException * @throws AppException
*/ */
public UserEntity doLogin(String loginName, String password, String loginIp) throws AppException; UserEntity doLogin(String loginName, String password, String loginIp) throws AppException;
/** /**
* 校验用户名与密码是否正确 * 校验用户名与密码是否正确
...@@ -47,7 +48,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> { ...@@ -47,7 +48,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @return * @return
* @throws AppException * @throws AppException
*/ */
public UserEntity doCheckUser(String loginName, String password) throws AppException; UserEntity doCheckUser(String loginName, String password) throws AppException;
/** /**
* 检查用户是否存在 * 检查用户是否存在
...@@ -56,7 +57,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> { ...@@ -56,7 +57,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @param userId 密码 * @param userId 密码
* @return * @return
*/ */
public boolean existUser(String loginName, Long userId) throws AppException; boolean existUser(String loginName, Long userId) throws AppException;
/** /**
* 通过登录用户获取菜单功能权限 * 通过登录用户获取菜单功能权限
...@@ -64,7 +65,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> { ...@@ -64,7 +65,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @param user * @param user
* @return * @return
*/ */
public List<MenuEntity> findOutlookBarList(IUser user); List<MenuEntity> findOutlookBarList(IUser user);
/** /**
* 查询用户所有有权限的菜单ID * 查询用户所有有权限的菜单ID
...@@ -72,7 +73,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> { ...@@ -72,7 +73,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @param userEntity * @param userEntity
* @return * @return
*/ */
public Set<Long> findAllAuthIds(UserEntity userEntity) throws AppException; Set<Long> findAllAuthIds(UserEntity userEntity) throws AppException;
/** /**
* 查询用户记录 * 查询用户记录
...@@ -84,7 +85,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> { ...@@ -84,7 +85,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @return * @return
* @throws AppException * @throws AppException
*/ */
public Result<UserEntity> find(Long platformId, UserEntity params, int currPage, int prePageResult) throws AppException; Result<UserEntity> find(Long platformId, UserEntity params, int currPage, int prePageResult) throws AppException;
/** /**
* 为客户创建用户 * 为客户创建用户
...@@ -99,7 +100,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> { ...@@ -99,7 +100,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @return * @return
* @throws AppException * @throws AppException
*/ */
public UserEntity createUser(IUser currUser, Long customerId, String customerName, String loginName, String password, UserEntity createUser(IUser currUser, Long customerId, String customerName, String loginName, String password,
String userName, String mobile) throws AppException; String userName, String mobile) throws AppException;
/** /**
...@@ -111,5 +112,10 @@ public interface UserService extends ICRUDService<UserEntity,Long> { ...@@ -111,5 +112,10 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @return * @return
* @throws AppException * @throws AppException
*/ */
public boolean updateUserPwd(String loginName, String oldPwd, String newPwd) throws AppException; boolean updateUserPwd(String loginName, String oldPwd, String newPwd) throws AppException;
UserDao getUserDao();
} }
\ No newline at end of file
...@@ -22,23 +22,29 @@ import com.mortals.xhx.base.system.menu.model.MenuEntity; ...@@ -22,23 +22,29 @@ import com.mortals.xhx.base.system.menu.model.MenuEntity;
import com.mortals.xhx.base.system.menu.service.MenuService; import com.mortals.xhx.base.system.menu.service.MenuService;
import com.mortals.xhx.base.system.resource.model.ResourceEntity; import com.mortals.xhx.base.system.resource.model.ResourceEntity;
import com.mortals.xhx.base.system.resource.service.ResourceService; import com.mortals.xhx.base.system.resource.service.ResourceService;
import com.mortals.xhx.base.system.role.dao.RoleUserDao;
import com.mortals.xhx.base.system.role.model.RoleUserEntity; import com.mortals.xhx.base.system.role.model.RoleUserEntity;
import com.mortals.xhx.base.system.role.model.RoleUserQuery;
import com.mortals.xhx.base.system.role.service.RoleService;
import com.mortals.xhx.base.system.role.service.RoleUserService;
import com.mortals.xhx.base.system.user.dao.UserDao; import com.mortals.xhx.base.system.user.dao.UserDao;
import com.mortals.xhx.base.system.user.model.UserEntity; import com.mortals.xhx.base.system.user.model.UserEntity;
import com.mortals.xhx.base.system.user.model.UserQuery; import com.mortals.xhx.base.system.user.model.UserQuery;
import com.mortals.xhx.base.system.user.service.UserService; import com.mortals.xhx.base.system.user.service.UserService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* <p>Title: 用户信息</p> * <p>Title: 用户信息</p>
* <p>Description: UserServiceImpl service接口 </p> * <p>Description: UserServiceImpl service接口 </p>
* <p>Copyright: Copyright &reg; </p> * <p>Copyright: Copyright &reg; </p>
* <p>Company: </p> * <p>Company: </p>
*
* @author * @author
* @version 1.0.0 * @version 1.0.0
*/ */
...@@ -51,7 +57,9 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity ...@@ -51,7 +57,9 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
@Autowired @Autowired
private ResourceService resourceService; private ResourceService resourceService;
@Autowired @Autowired
private RoleUserDao roleUserDao; private RoleService roleService;
@Autowired
private RoleUserService roleUserService;
private void doHandlerUser(UserEntity entity) throws AppException { private void doHandlerUser(UserEntity entity) throws AppException {
if (StringUtils.isNotEmpty(entity.getLoginPwd())) { if (StringUtils.isNotEmpty(entity.getLoginPwd())) {
...@@ -63,55 +71,58 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity ...@@ -63,55 +71,58 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
} else { } else {
entity.setLoginPwd(null); entity.setLoginPwd(null);
} }
// if (entity.isSystemUser()) {
// entity.setUserType(UserType.SYSTEM.getValue());
// } else {
// entity.setUserType(UserType.CUSTOMER.getValue());
// }
} }
@Override @Override
protected void saveBefore(UserEntity entity, Context context) throws AppException { protected void saveBefore(UserEntity entity, Context context) throws AppException {
if (!ObjectUtils.isEmpty(entity.getLoginName()) && existUser(entity.getLoginName(), entity.getId())) {
throw new AppException("登录名已存在!");
}
this.doHandlerUser(entity); this.doHandlerUser(entity);
} }
@Override @Override
protected void saveAfter(UserEntity entity, Context context) throws AppException { protected void updateBefore(UserEntity entity, Context context) throws AppException {
if(CollectionUtils.isNotEmpty(entity.getRoleIds())){ // if (entity.getId().longValue() == SysConstains.ADMIN_ID && !context.getUser().isAdmin()) {
List<RoleUserEntity> roleUserEntityList = new ArrayList<>(); // throw new AppException("你没有权限执行该操作");
entity.getRoleIds().stream().forEach(item->{ // }
RoleUserEntity roleUserEntity = new RoleUserEntity();
roleUserEntity.setUserId(entity.getId()); //更新不更新密码字段
roleUserEntity.setRoleId(item); entity.setLoginPwd(null);
roleUserEntityList.add(roleUserEntity); this.doHandlerUser(entity);
}); //更新角色
roleUserDao.insertBatch(roleUserEntityList); if(entity.getId().longValue() != SysConstains.ADMIN_ID &&!ObjectUtils.isEmpty(entity.getRoleIds())){
RoleUserQuery roleUserQuery = new RoleUserQuery();
roleUserQuery.setUserId(entity.getId());
List<Long> idList = Arrays.asList(entity.getRoleIds().split(",")).stream().map(Long::parseLong).collect(Collectors.toList());
roleUserQuery.setRoleIdList(idList);
roleUserService.doDistributionRole(roleUserQuery);
} }
} }
@Override @Override
protected void updateBefore(UserEntity entity, Context context) throws AppException { protected void saveAfter(UserEntity entity, Context context) throws AppException {
if (entity.getId().longValue() == SysConstains.ADMIN_ID && !context.getUser().isAdmin()) { //更新角色
throw new AppException("你没有权限执行该操作"); if(!ObjectUtils.isEmpty(entity.getId())&&entity.getId().longValue() != SysConstains.ADMIN_ID &&!ObjectUtils.isEmpty(entity.getRoleIds())){
RoleUserQuery roleUserQuery = new RoleUserQuery();
roleUserQuery.setUserId(entity.getId());
List<Long> idList = Arrays.asList(entity.getRoleIds().split(",")).stream().map(Long::parseLong).collect(Collectors.toList());
roleUserQuery.setRoleIdList(idList);
roleUserService.doDistributionRole(roleUserQuery);
} }
this.doHandlerUser(entity); super.saveAfter(entity, context);
} }
@Override @Override
protected void updateAfter(UserEntity entity, Context context) throws AppException { protected void findAfter(UserEntity params, PageInfo pageInfo, Context context, List<UserEntity> list) throws AppException {
if(CollectionUtils.isNotEmpty(entity.getRoleIds())){ list.stream().peek(item -> {
List<RoleUserEntity> roleUserEntityList = new ArrayList<>(); RoleUserQuery roleUserQuery = new RoleUserQuery();
entity.getRoleIds().stream().forEach(item->{ roleUserQuery.setUserId(item.getId());
RoleUserEntity roleUserEntity = new RoleUserEntity(); String roleIds = roleUserService.find(roleUserQuery).stream().map(RoleUserEntity::getRoleId).map(String::valueOf).collect(Collectors.joining(","));
roleUserEntity.setUserId(entity.getId()); item.setRoleIds(roleIds);
roleUserEntity.setRoleId(item); }).count();
roleUserEntityList.add(roleUserEntity); super.findAfter(params, pageInfo, context, list);
});
RoleUserEntity condition = new RoleUserEntity();
condition.setUserId(entity.getId());
roleUserDao.delete(condition);
roleUserDao.insertBatch(roleUserEntityList);
}
} }
@Override @Override
...@@ -130,23 +141,6 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity ...@@ -130,23 +141,6 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
return super.findBefore(params, pageInfo, context); return super.findBefore(params, pageInfo, context);
} }
@Override
protected void findAfter(UserEntity params, PageInfo pageInfo, Context context, List<UserEntity> list) throws AppException {
if(CollectionUtils.isNotEmpty(list)) {
list.stream().forEach(item->{
RoleUserEntity query = new RoleUserEntity();
query.setUserId(item.getId());
List<RoleUserEntity> roleUserEntityList = roleUserDao.getList(query);
List<Long> roleIds = new ArrayList<>();
roleUserEntityList.stream().forEach(role->{
roleIds.add(role.getRoleId());
});
item.setRoleIds(roleIds);
});
//List<RoleUserEntity> roleUserEntityList =
}
}
public UserEntity findByLoginName(String loginName) { public UserEntity findByLoginName(String loginName) {
UserQuery params = new UserQuery(); UserQuery params = new UserQuery();
params.setLoginName(loginName); params.setLoginName(loginName);
...@@ -170,11 +164,6 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity ...@@ -170,11 +164,6 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
} catch (Exception e) { } catch (Exception e) {
throw new AppException("密码验认出错!", e); throw new AppException("密码验认出错!", e);
} }
UserEntity update = new UserEntity();
update.setId(sysUser.getId());
update.setLastLoginAddress(loginIp);
update.setLastLoginTime(new Date());
this.dao.update(update);
return sysUser; return sysUser;
} }
...@@ -218,7 +207,7 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity ...@@ -218,7 +207,7 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
urls.addAll(StringUtils.converStr2Set(url)); urls.addAll(StringUtils.converStr2Set(url));
} }
} }
Set<Long> authIds = new HashSet<Long>(); Set<Long> authIds = new HashSet<>();
Map<Long, MenuEntity> menuMap = new HashMap<Long, MenuEntity>(); Map<Long, MenuEntity> menuMap = new HashMap<Long, MenuEntity>();
List<MenuEntity> userModuleList = this.menuService.findAllEnable(); List<MenuEntity> userModuleList = this.menuService.findAllEnable();
for (MenuEntity sysModule : userModuleList) { for (MenuEntity sysModule : userModuleList) {
...@@ -226,6 +215,7 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity ...@@ -226,6 +215,7 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
continue; continue;
} }
menuMap.put(sysModule.getId(), sysModule); menuMap.put(sysModule.getId(), sysModule);
if (!user.isAdmin() && urls.contains(StringUtils.trim(sysModule.getUrl()))) { if (!user.isAdmin() && urls.contains(StringUtils.trim(sysModule.getUrl()))) {
authIds.add(sysModule.getId()); authIds.add(sysModule.getId());
} }
...@@ -274,7 +264,6 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity ...@@ -274,7 +264,6 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
entity.initAttrValue(); entity.initAttrValue();
entity.setLoginName(loginName); entity.setLoginName(loginName);
entity.setRealName(userName); entity.setRealName(userName);
entity.setCustomerId(customerId);
entity.setLoginPwd(password); entity.setLoginPwd(password);
entity.setMobile(mobile); entity.setMobile(mobile);
entity.setUserType(UserType.CUSTOMER.getValue()); entity.setUserType(UserType.CUSTOMER.getValue());
...@@ -320,14 +309,27 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity ...@@ -320,14 +309,27 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
} }
try { try {
sysUser.setLoginPwd(SecurityUtil.md5DoubleEncoding(newPwd)); sysUser.setLoginPwd(SecurityUtil.md5DoubleEncoding(newPwd));
sysUser.setLoginPwd3(sysUser.getLoginPwd2());
sysUser.setLoginPwd2(sysUser.getLoginPwd1());
sysUser.setLoginPwd1(sysUser.getLoginPwd());
sysUser.setLastModPwdTime(new Date());
} catch (Exception e) { } catch (Exception e) {
throw new AppException("密码转换异常!", e); throw new AppException("密码转换异常!", e);
} }
dao.update(sysUser); dao.update(sysUser);
return true; return true;
} }
@Override
public UserDao getUserDao() {
return getDao();
}
@Override
protected void removeAfter(Long[] ids, Context context, int result) throws AppException {
Arrays.asList(ids).stream().peek(userId->{
RoleUserQuery roleUserQuery = new RoleUserQuery();
roleUserQuery.setUserId(userId);
Long[] userIds = roleUserService.find(roleUserQuery).stream().map(RoleUserEntity::getId).toArray(Long[]::new);
roleUserService.remove(userIds,context);
}).count();
super.removeAfter(ids, context, result);
}
} }
\ No newline at end of file
/**
* 文件:UserController.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.user.web; package com.mortals.xhx.base.system.user.web;
import java.util.HashMap; import com.alibaba.fastjson.JSONObject;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mortals.framework.service.IUser;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.role.model.RoleEntity;
import com.mortals.xhx.base.system.role.service.RoleService;
import com.mortals.xhx.common.code.UserStatus;
import com.mortals.framework.common.IBaseEnum; import com.mortals.framework.common.IBaseEnum;
import com.mortals.framework.common.code.UserType; import com.mortals.framework.common.code.UserType;
import com.mortals.xhx.common.key.Constant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.framework.web.BaseCRUDJsonMappingController; import com.mortals.framework.web.BaseCRUDJsonMappingController;
import com.mortals.xhx.base.framework.annotation.Operlog; import com.mortals.xhx.base.framework.annotation.Operlog;
import com.mortals.xhx.base.system.role.model.RoleQuery;
import com.mortals.xhx.base.system.role.model.RoleUserEntity;
import com.mortals.xhx.base.system.role.model.RoleUserQuery;
import com.mortals.xhx.base.system.role.service.RoleService;
import com.mortals.xhx.base.system.role.service.RoleUserService;
import com.mortals.xhx.base.system.user.model.UserEntity; import com.mortals.xhx.base.system.user.model.UserEntity;
import com.mortals.xhx.base.system.user.service.UserService; import com.mortals.xhx.base.system.user.service.UserService;
import com.mortals.xhx.common.code.UserStatus;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* <p>Title: 用户信息</p> * 用户信息
* <p>Description: UserController </p> *
* <p>Copyright: Copyright &reg; </p> * @author: zxfei
* <p>Company: </p> * @date: 2022/5/7 15:42
* @author
* @version 1.0.0
*/ */
@RestController @RestController
@RequestMapping("user") @RequestMapping("user")
public class UserController extends BaseCRUDJsonBodyMappingController<UserService, UserEntity, Long> { public class UserController extends BaseCRUDJsonBodyMappingController<UserService, UserEntity, Long> {
@Autowired
private UserService userService;
@Autowired @Autowired
private RoleService roleService; private RoleService roleService;
@Autowired
private RoleUserService roleUserService;
public UserController() { public UserController() {
super.setFormClass(UserForm.class); super.setFormClass(UserForm.class);
...@@ -60,33 +56,57 @@ public class UserController extends BaseCRUDJsonBodyMappingController<UserServic ...@@ -60,33 +56,57 @@ public class UserController extends BaseCRUDJsonBodyMappingController<UserServic
@Override @Override
protected void init(Map<String, Object> model, Context context) { protected void init(Map<String, Object> model, Context context) {
this.addDict(model,"userType", IBaseEnum.getEnumMap(UserType.class)); this.addDict(model,"userType", IBaseEnum.getEnumMap(UserType.class));
this.addDict(model,"status", UserStatus.getEnumMap()); this.addDict(model,"status", UserStatus.getEnumMap());
List<RoleEntity> roleList = roleService.find(new RoleEntity()); this.addDict(model, "roleIds", roleService.find(new RoleQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getName())));
this.addDict(model,"roleId", roleList.stream().collect(Collectors.toMap(e->e.getId().toString(), e->e.getName())));
super.init(model, context);
} }
@Override @Override
protected int editAfter(Long id, Map<String, Object> model, UserEntity entity, Context context) throws AppException { protected void doListBefore(UserEntity query, Map<String, Object> model, Context context) throws AppException {
entity.setLoginPwd(null); if (!StringUtils.isEmpty(query.getRealName())) {
entity.setLoginPwd1(null); query.setRealName("%".concat(query.getRealName()).concat("%"));
entity.setLoginPwd2(null); }
entity.setLoginPwd3(null); if (!StringUtils.isEmpty(query.getLoginName())) {
return 1; query.setLoginName("%".concat(query.getLoginName()).concat("%"));
}
} }
@RequestMapping(value = "change/password", method = RequestMethod.POST)
public String changePassword(@RequestBody UserEntity entity) {
IUser user = this.getCurUser(); @Override
if(user == null){ protected int editAfter(Long id, Map<String, Object> model, UserEntity entity, Context context) throws AppException {
return this.createFailJsonResp("请先登录"); RoleUserQuery roleUserQuery = new RoleUserQuery();
roleUserQuery.setUserId(entity.getId());
String roleIds = roleUserService.find(roleUserQuery).stream().map(RoleUserEntity::getRoleId).map(String::valueOf).collect(Collectors.joining(","));
entity.setRoleIds(roleIds);
return super.editAfter(id, model, entity, context);
}
@Override
protected int saveAfter(UserEntity entity, Map<String, Object> model, Context context) throws AppException {
if (entity.getId() == getCurUser().getId()) {
// TODO: 2022/8/15 更新redis session信息
//saveCurrUserForSession(request, response, userService.get(form.getEntity().getId(), false));
} }
return super.saveAfter(entity, model, context);
}
// @Override
// protected void saveBefore(UserEntity entity, Map<String, Object> model, Context context) throws AppException {
// if (!ObjectUtils.isEmpty(entity.getLoginName()) && service.existUser(entity.getLoginName(), entity.getId())) {
// throw new AppException("登录名已存在!");
// }
// super.saveBefore(entity, model, context);
// }
@RequestMapping(value = "change/password", method = RequestMethod.POST)
@Operlog(msg = "密码修改成功!")
public String changePassword(@RequestParam String oldPwd, @RequestParam String newPwd) {
JSONObject ret = new JSONObject(); JSONObject ret = new JSONObject();
try { try {
service.updateUserPwd(super.getCurUser().getLoginName(), entity.getOldPassword(), entity.getNewPassword()); service.updateUserPwd(super.getCurUser().getLoginName(), oldPwd, newPwd);
ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS); ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
ret.put(KEY_RESULT_MSG, "密码修改成功!"); ret.put(KEY_RESULT_MSG, "密码修改成功!");
} catch (Exception e) { } catch (Exception e) {
...@@ -95,4 +115,22 @@ public class UserController extends BaseCRUDJsonBodyMappingController<UserServic ...@@ -95,4 +115,22 @@ public class UserController extends BaseCRUDJsonBodyMappingController<UserServic
} }
return ret.toJSONString(); return ret.toJSONString();
} }
public static void main(String[] args) {
String token = "eyJhbGciOiJIUzI1NiJ9.eyJsb2dpbl91c2VyX2tleSI6IjIzNGE5NDA5ZDVhOTQ3MWNhMzdkYjZkYmMwY2JjZTc5In0.MWyQW40HYDxyUz7PJRf_nRsFPWx3Hr811Ime984nixs";
String secret = "026db82420614469897fcc2dc1b4ce38";
Claims claims = Jwts.parser()
.setSigningKey(Base64.getEncoder().encodeToString(secret.getBytes()))
.parseClaimsJws(token)
.getBody();
String uuid = (String) claims.get("login_user_key");
System.out.println(uuid);
}
} }
\ No newline at end of file
/**
* 文件:ValidCodeController.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.valid.web; package com.mortals.xhx.base.system.valid.web;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.mortals.framework.web.BaseCRUDJsonMappingController; import com.mortals.framework.web.BaseCRUDJsonMappingController;
import com.mortals.xhx.base.system.valid.model.ValidCodeEntity; import com.mortals.xhx.base.system.valid.model.ValidCodeEntity;
import com.mortals.xhx.base.system.valid.service.ValidCodeService; import com.mortals.xhx.base.system.valid.service.ValidCodeService;
import com.mortals.xhx.common.code.ValidCodeType; import com.mortals.xhx.common.code.ValidCodeType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
......
package com.mortals.xhx.common.code;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author: finegirl
* @date: 2021/7/16 11:50
* @description: //TODO 请完善注释信息
**/
public enum AgentEnum {
SELF(0, "本人办理"),
OTHER(1, "代办");
private int value;
private String desc;
private AgentEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
public int getValue() {
return this.value;
}
public String getDesc() {
return this.desc;
}
public static AgentEnum getByValue(int value) {
AgentEnum[] var1 = values();
int var2 = var1.length;
for(int var3 = 0; var3 < var2; ++var3) {
AgentEnum examStatus = var1[var3];
if (examStatus.getValue() == value) {
return examStatus;
}
}
return null;
}
public static Map<String, String> getEnumMap(int... eItem) {
Map<String, String> resultMap = new LinkedHashMap();
AgentEnum[] var2 = values();
int var3 = var2.length;
for(int var4 = 0; var4 < var3; ++var4) {
AgentEnum item = var2[var4];
try {
boolean hasE = false;
int[] var7 = eItem;
int var8 = eItem.length;
for(int var9 = 0; var9 < var8; ++var9) {
int e = var7[var9];
if (item.getValue() == e) {
hasE = true;
break;
}
}
if (!hasE) {
resultMap.put(item.getValue() + "", item.getDesc());
}
} catch (Exception var11) {
}
}
return resultMap;
}
}
\ No newline at end of file
package com.mortals.xhx.common.code;
/**
* @author karlhoo
*/
public enum ApiRespCodeEnum {
/** 接收成功 */
SUCCESS(1, "接收成功"),
/** 执行失败 */
FAILED(2,"执行失败"),
;
private final Integer value;
private final String label;
ApiRespCodeEnum(Integer value, String label) {
this.value = value;
this.label = label;
}
public int getValue() {
return this.value;
}
public String getLabel() {
return this.label;
}
}
package com.mortals.xhx.common.code;
public enum AssetFlowStatusEnum {
/** 任意状态 */
Special_597("597", "任意状态"),
/** 回前状态 */
Special_598("598", "回前状态"),
/** 不变状态 */
Special_599("599", "不变状态");
private String value;
private String desc;
AssetFlowStatusEnum(String value, String desc) {
this.value = value;
this.desc = desc;
}
public String getValue() {
return this.value;
}
public String getDesc() {
return desc;
}
public static AssetFlowStatusEnum getByValue(String value) {
for (AssetFlowStatusEnum YesNoEnum : AssetFlowStatusEnum.values()) {
if (YesNoEnum.getValue() == value) {
return YesNoEnum;
}
}
return null;
}
}
package com.mortals.xhx.common.code;
import com.mortals.framework.common.IBaseEnum;
import java.util.LinkedHashMap;
import java.util.Map;
public enum BomStatusEnum implements IBaseEnum{
BOM_EDIT(401, "修订中"),
BOM_AUDIT(402, "审核中"),
BOM_PUBLISH(403, "已发布");
private int value;
private String desc;
BomStatusEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
@Override
public int getValue() {
return this.value;
}
public String getDesc() {
return desc;
}
public static BomStatusEnum getByValue(int value) {
for (BomStatusEnum YesNoEnum : BomStatusEnum.values()) {
if (YesNoEnum.getValue() == value) {
return YesNoEnum;
}
}
return null;
}
/**
* 获取Map集合
* @param eItem 不包含项
* @return
*/
public static Map<String,String> getEnumMap(int... eItem) {
Map<String,String> resultMap= new LinkedHashMap<String,String>();
for (BomStatusEnum item : BomStatusEnum.values()) {
try{
boolean hasE = false;
for (int e : eItem){
if(item.getValue()==e){
hasE = true;
break;
}
}
if(!hasE){
resultMap.put(item.getValue()+"", item.getDesc());
}
}catch(Exception ex){
}
}
return resultMap;
}
}
package com.mortals.xhx.common.code;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author: finegirl
* @date: 2021/7/16 11:50
* @description: 缓存服务方式
**/
public enum CacheServiceTypeEnum {
NORMAL_SERVICE(0, "无"),
CACHE_SERVICE(1, "静态缓存服务"),
CACHE_DYNAMIC_SERVICE(2, "动态缓存服务");
private int value;
private String desc;
private CacheServiceTypeEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
public int getValue() {
return this.value;
}
public String getDesc() {
return this.desc;
}
public static CacheServiceTypeEnum getByValue(int value) {
CacheServiceTypeEnum[] var1 = values();
int var2 = var1.length;
for(int var3 = 0; var3 < var2; ++var3) {
CacheServiceTypeEnum examStatus = var1[var3];
if (examStatus.getValue() == value) {
return examStatus;
}
}
return null;
}
public static Map<String, String> getEnumMap(int... eItem) {
Map<String, String> resultMap = new LinkedHashMap();
CacheServiceTypeEnum[] var2 = values();
int var3 = var2.length;
for(int var4 = 0; var4 < var3; ++var4) {
CacheServiceTypeEnum item = var2[var4];
try {
boolean hasE = false;
int[] var7 = eItem;
int var8 = eItem.length;
for(int var9 = 0; var9 < var8; ++var9) {
int e = var7[var9];
if (item.getValue() == e) {
hasE = true;
break;
}
}
if (!hasE) {
resultMap.put(item.getValue() + "", item.getDesc());
}
} catch (Exception var11) {
}
}
return resultMap;
}
}
\ No newline at end of file
package com.mortals.xhx.common.code;
import java.util.LinkedHashMap;
import java.util.Map;
import com.mortals.framework.common.IBaseEnum;
public enum CompareTypeEnum implements IBaseEnum {
DAY(1, "按日"),
MONTH(2, "按月");
private int value;
private String desc;
CompareTypeEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
@Override
public int getValue() {
return this.value;
}
@Override
public String getDesc() {
return this.desc;
}
public static Map<String,String> getEnumMap() {
Map<String, String> resultMap= new LinkedHashMap<String, String>();
for (CompareTypeEnum item : CompareTypeEnum.values()) {
resultMap.put(item.getValue() + "", item.getDesc());
}
return resultMap;
}
}
...@@ -18,7 +18,7 @@ public enum ComponentEnum { ...@@ -18,7 +18,7 @@ public enum ComponentEnum {
DATE("date", "日期选择栏"), DATE("date", "日期选择栏"),
AREA("area", "区域选择栏"), AREA("area", "区域选择栏"),
IMAGE("@image", "图片选择"), IMAGE("@image", "图片选择"),
DYNAMIC_TABLE("dt", "动态表格"); DYNAMIC_TABLE("dt", "动态表格"),;
private String value; private String value;
private String desc; private String desc;
......
package com.mortals.xhx.common.code;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author: finegirl
* @date: 2021/7/16 11:50
* @description: 分表方式
**/
public enum DividedTableTypeEnum {
DIVIED_NO(0, "无"),
DIVIED_BY_DAY(1, "日"),
DIVIED_BY_WEEK(2, "周"),
DIVIED_BY_MONTH(3, "月"),
DIVIED_BY_MOD(4, "HASH取余");
private int value;
private String desc;
private DividedTableTypeEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
public int getValue() {
return this.value;
}
public String getDesc() {
return this.desc;
}
public static DividedTableTypeEnum getByValue(int value) {
DividedTableTypeEnum[] var1 = values();
int var2 = var1.length;
for (int var3 = 0; var3 < var2; ++var3) {
DividedTableTypeEnum examStatus = var1[var3];
if (examStatus.getValue() == value) {
return examStatus;
}
}
return null;
}
public static Map<String, String> getEnumMap(int... eItem) {
Map<String, String> resultMap = new LinkedHashMap();
DividedTableTypeEnum[] var2 = values();
int var3 = var2.length;
for (int var4 = 0; var4 < var3; ++var4) {
DividedTableTypeEnum item = var2[var4];
try {
boolean hasE = false;
int[] var7 = eItem;
int var8 = eItem.length;
for (int var9 = 0; var9 < var8; ++var9) {
int e = var7[var9];
if (item.getValue() == e) {
hasE = true;
break;
}
}
if (!hasE) {
resultMap.put(item.getValue() + "", item.getDesc());
}
} catch (Exception var11) {
}
}
return resultMap;
}
}
\ No newline at end of file
package com.mortals.xhx.common.code;
import com.mortals.framework.common.IBaseEnum;
import java.util.LinkedHashMap;
import java.util.Map;
public enum EventFieldInputTypeEnum implements IBaseEnum{
INPUT(1, "手动输入"),
SCAN(2, "扫码输入"),
SELECT(3, "下拉选择");
private int value;
private String desc;
EventFieldInputTypeEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
@Override
public int getValue() {
return this.value;
}
public String getDesc() {
return desc;
}
public static EventFieldInputTypeEnum getByValue(int value) {
for (EventFieldInputTypeEnum YesNoEnum : EventFieldInputTypeEnum.values()) {
if (YesNoEnum.getValue() == value) {
return YesNoEnum;
}
}
return null;
}
/**
* 获取Map集合
* @param eItem 不包含项
* @return
*/
public static Map<String,String> getEnumMap(int... eItem) {
Map<String,String> resultMap= new LinkedHashMap<String,String>();
for (EventFieldInputTypeEnum item : EventFieldInputTypeEnum.values()) {
try{
boolean hasE = false;
for (int e : eItem){
if(item.getValue()==e){
hasE = true;
break;
}
}
if(!hasE){
resultMap.put(item.getValue()+"", item.getDesc());
}
}catch(Exception ex){
}
}
return resultMap;
}
}
package com.mortals.xhx.common.code;
import com.mortals.framework.common.IBaseEnum;
import java.util.LinkedHashMap;
import java.util.Map;
public enum FlowStatusEnum implements IBaseEnum{
FLOW_RUNNING(1, "进行中"),
FLOW_FINISH(2, "已完成");
private int value;
private String desc;
FlowStatusEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
@Override
public int getValue() {
return this.value;
}
public String getDesc() {
return desc;
}
public static FlowStatusEnum getByValue(int value) {
for (FlowStatusEnum YesNoEnum : FlowStatusEnum.values()) {
if (YesNoEnum.getValue() == value) {
return YesNoEnum;
}
}
return null;
}
/**
* 获取Map集合
* @param eItem 不包含项
* @return
*/
public static Map<String,String> getEnumMap(int... eItem) {
Map<String,String> resultMap= new LinkedHashMap<String,String>();
for (FlowStatusEnum item : FlowStatusEnum.values()) {
try{
boolean hasE = false;
for (int e : eItem){
if(item.getValue()==e){
hasE = true;
break;
}
}
if(!hasE){
resultMap.put(item.getValue()+"", item.getDesc());
}
}catch(Exception ex){
}
}
return resultMap;
}
}
package com.mortals.xhx.common.code;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author: finegirl
* @date: 2021/7/16 11:50
* @description: //TODO 请完善注释信息
**/
public enum GenTypeEnum {
ZIP(0, "zip压缩包"),
CUSTOM(1, "自定义路径");
private int value;
private String desc;
private GenTypeEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
public int getValue() {
return this.value;
}
public String getDesc() {
return this.desc;
}
public static GenTypeEnum getByValue(int value) {
GenTypeEnum[] var1 = values();
int var2 = var1.length;
for(int var3 = 0; var3 < var2; ++var3) {
GenTypeEnum examStatus = var1[var3];
if (examStatus.getValue() == value) {
return examStatus;
}
}
return null;
}
public static Map<String, String> getEnumMap(int... eItem) {
Map<String, String> resultMap = new LinkedHashMap();
GenTypeEnum[] var2 = values();
int var3 = var2.length;
for(int var4 = 0; var4 < var3; ++var4) {
GenTypeEnum item = var2[var4];
try {
boolean hasE = false;
int[] var7 = eItem;
int var8 = eItem.length;
for(int var9 = 0; var9 < var8; ++var9) {
int e = var7[var9];
if (item.getValue() == e) {
hasE = true;
break;
}
}
if (!hasE) {
resultMap.put(item.getValue() + "", item.getDesc());
}
} catch (Exception var11) {
}
}
return resultMap;
}
}
\ No newline at end of file
package com.mortals.xhx.common.code;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author: finegirl
* @date: 2021/7/16 11:50
* @description: //TODO 请完善注释信息
**/
public enum HtmlTypeEnum {
HTML_INPUT(1, "文本框"),
HTML_TEXTAREA(2, "文本域"),
HTML_SELECT(3, "下拉框"),
HTML_RADIO(4, "单选框"),
HTML_CHECKBOX(5, "复选框"),
HTML_DATETIME(6, "日期控件"),
HTML_IMAGE_UPLOAD(7, "图片上传控件"),
HTML_FILE_UPLOAD(8, "文件上传控件"),
HTML_EDITOR(9, "富文本控件");
private int value;
private String desc;
private HtmlTypeEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
public int getValue() {
return this.value;
}
public String getDesc() {
return this.desc;
}
public static HtmlTypeEnum getByValue(int value) {
HtmlTypeEnum[] var1 = values();
int var2 = var1.length;
for(int var3 = 0; var3 < var2; ++var3) {
HtmlTypeEnum examStatus = var1[var3];
if (examStatus.getValue() == value) {
return examStatus;
}
}
return null;
}
public static Map<String, String> getEnumMap(int... eItem) {
Map<String, String> resultMap = new LinkedHashMap();
HtmlTypeEnum[] var2 = values();
int var3 = var2.length;
for(int var4 = 0; var4 < var3; ++var4) {
HtmlTypeEnum item = var2[var4];
try {
boolean hasE = false;
int[] var7 = eItem;
int var8 = eItem.length;
for(int var9 = 0; var9 < var8; ++var9) {
int e = var7[var9];
if (item.getValue() == e) {
hasE = true;
break;
}
}
if (!hasE) {
resultMap.put(item.getValue() + "", item.getDesc());
}
} catch (Exception var11) {
}
}
return resultMap;
}
}
\ No newline at end of file
package com.mortals.xhx.common.code;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author: finegirl
* @date: 2021/7/16 11:50
* @description: //TODO 请完善注释信息
**/
public enum MannerEnum {
SELF(0, "自主取件"),
EXPRESS(1, "邮寄");
private int value;
private String desc;
private MannerEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
public int getValue() {
return this.value;
}
public String getDesc() {
return this.desc;
}
public static MannerEnum getByValue(int value) {
MannerEnum[] var1 = values();
int var2 = var1.length;
for(int var3 = 0; var3 < var2; ++var3) {
MannerEnum examStatus = var1[var3];
if (examStatus.getValue() == value) {
return examStatus;
}
}
return null;
}
public static Map<String, String> getEnumMap(int... eItem) {
Map<String, String> resultMap = new LinkedHashMap();
MannerEnum[] var2 = values();
int var3 = var2.length;
for(int var4 = 0; var4 < var3; ++var4) {
MannerEnum item = var2[var4];
try {
boolean hasE = false;
int[] var7 = eItem;
int var8 = eItem.length;
for(int var9 = 0; var9 < var8; ++var9) {
int e = var7[var9];
if (item.getValue() == e) {
hasE = true;
break;
}
}
if (!hasE) {
resultMap.put(item.getValue() + "", item.getDesc());
}
} catch (Exception var11) {
}
}
return resultMap;
}
}
\ No newline at end of file
package com.mortals.xhx.common.code;
/**
* @author karlhoo
*/
public enum OneThingRespCodeEnum {
/** 接收成功 */
SUCCESS(200, "成功"),
/** 执行失败 */
FAILED(400,"执行失败"),
;
private final Integer value;
private final String label;
OneThingRespCodeEnum(Integer value, String label) {
this.value = value;
this.label = label;
}
public int getValue() {
return this.value;
}
public String getLabel() {
return this.label;
}
}
package com.mortals.xhx.common.code;
import com.mortals.framework.common.IBaseEnum;
import java.util.LinkedHashMap;
import java.util.Map;
public enum OneThingStatusEnum implements IBaseEnum{
BOM_EDIT(401, "修订中"),
BOM_AUDIT(402, "审核中"),
BOM_PUBLISH(403, "已发布");
private int value;
private String desc;
OneThingStatusEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
@Override
public int getValue() {
return this.value;
}
public String getDesc() {
return desc;
}
public static OneThingStatusEnum getByValue(int value) {
for (OneThingStatusEnum YesNoEnum : OneThingStatusEnum.values()) {
if (YesNoEnum.getValue() == value) {
return YesNoEnum;
}
}
return null;
}
/**
* 获取Map集合
* @param eItem 不包含项
* @return
*/
public static Map<String,String> getEnumMap(int... eItem) {
Map<String,String> resultMap= new LinkedHashMap<String,String>();
for (OneThingStatusEnum item : OneThingStatusEnum.values()) {
try{
boolean hasE = false;
for (int e : eItem){
if(item.getValue()==e){
hasE = true;
break;
}
}
if(!hasE){
resultMap.put(item.getValue()+"", item.getDesc());
}
}catch(Exception ex){
}
}
return resultMap;
}
}
package com.mortals.xhx.common.code;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author: finegirl
* @date: 2021/7/16 11:50
* @description: //TODO 请完善注释信息
**/
public enum OneThingTypeEnum {
UNSUBMIT(1, "资料上传"),
SUBMIT(2, "确认提交");
private int value;
private String desc;
private OneThingTypeEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
public int getValue() {
return this.value;
}
public String getDesc() {
return this.desc;
}
public static OneThingTypeEnum getByValue(int value) {
OneThingTypeEnum[] var1 = values();
int var2 = var1.length;
for(int var3 = 0; var3 < var2; ++var3) {
OneThingTypeEnum examStatus = var1[var3];
if (examStatus.getValue() == value) {
return examStatus;
}
}
return null;
}
public static Map<String, String> getEnumMap(int... eItem) {
Map<String, String> resultMap = new LinkedHashMap();
OneThingTypeEnum[] var2 = values();
int var3 = var2.length;
for(int var4 = 0; var4 < var3; ++var4) {
OneThingTypeEnum item = var2[var4];
try {
boolean hasE = false;
int[] var7 = eItem;
int var8 = eItem.length;
for(int var9 = 0; var9 < var8; ++var9) {
int e = var7[var9];
if (item.getValue() == e) {
hasE = true;
break;
}
}
if (!hasE) {
resultMap.put(item.getValue() + "", item.getDesc());
}
} catch (Exception var11) {
}
}
return resultMap;
}
}
\ No newline at end of file
package com.mortals.xhx.common.code;
import com.mortals.framework.common.IBaseEnum;
import java.util.LinkedHashMap;
import java.util.Map;
public enum PublishStatusEnum implements IBaseEnum{
PRODUCT_PENDING(0, "待发布"),
PRODUCT_AUDITING(1, "审核中"),
PRODUCT_SUCESS(2, "审核通过"),
PRODUCT_REJECT(3, "审核拒绝");
private int value;
private String desc;
PublishStatusEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
@Override
public int getValue() {
return this.value;
}
public String getDesc() {
return desc;
}
public static PublishStatusEnum getByValue(int value) {
for (PublishStatusEnum YesNoEnum : PublishStatusEnum.values()) {
if (YesNoEnum.getValue() == value) {
return YesNoEnum;
}
}
return null;
}
/**
* 获取Map集合
* @param eItem 不包含项
* @return
*/
public static Map<String,String> getEnumMap(int... eItem) {
Map<String,String> resultMap= new LinkedHashMap<String,String>();
for (PublishStatusEnum item : PublishStatusEnum.values()) {
try{
boolean hasE = false;
for (int e : eItem){
if(item.getValue()==e){
hasE = true;
break;
}
}
if(!hasE){
resultMap.put(item.getValue()+"", item.getDesc());
}
}catch(Exception ex){
}
}
return resultMap;
}
}
package com.mortals.xhx.common.code;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author: finegirl
* @date: 2021/7/16 11:50
* @description: //TODO 请完善注释信息
**/
public enum TopicalTypeEnum {
PERSONAL(1, "个人服务"),
ENTERPRISE(2, "企业服务");
private int value;
private String desc;
private TopicalTypeEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
public int getValue() {
return this.value;
}
public String getDesc() {
return this.desc;
}
public static TopicalTypeEnum getByValue(int value) {
TopicalTypeEnum[] var1 = values();
int var2 = var1.length;
for(int var3 = 0; var3 < var2; ++var3) {
TopicalTypeEnum examStatus = var1[var3];
if (examStatus.getValue() == value) {
return examStatus;
}
}
return null;
}
public static Map<String, String> getEnumMap(int... eItem) {
Map<String, String> resultMap = new LinkedHashMap();
TopicalTypeEnum[] var2 = values();
int var3 = var2.length;
for(int var4 = 0; var4 < var3; ++var4) {
TopicalTypeEnum item = var2[var4];
try {
boolean hasE = false;
int[] var7 = eItem;
int var8 = eItem.length;
for(int var9 = 0; var9 < var8; ++var9) {
int e = var7[var9];
if (item.getValue() == e) {
hasE = true;
break;
}
}
if (!hasE) {
resultMap.put(item.getValue() + "", item.getDesc());
}
} catch (Exception var11) {
}
}
return resultMap;
}
}
\ No newline at end of file
package com.mortals.xhx.common.code;
import com.mortals.framework.common.IBaseEnum;
import java.util.LinkedHashMap;
import java.util.Map;
public enum TreeTypeEnum implements IBaseEnum{
TOPIC(0, "el-icon-folder"),
CLASSIFY (1, "el-icon-document"),
CLASSIFYOPTION(2, "el-icon-s-tools");
private int value;
private String desc;
TreeTypeEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
@Override
public int getValue() {
return this.value;
}
public String getDesc() {
return desc;
}
public static TreeTypeEnum getByValue(int value) {
for (TreeTypeEnum YesNoEnum : TreeTypeEnum.values()) {
if (YesNoEnum.getValue() == value) {
return YesNoEnum;
}
}
return null;
}
/**
* 获取Map集合
* @param eItem 不包含项
* @return
*/
public static Map<String,String> getEnumMap(int... eItem) {
Map<String,String> resultMap= new LinkedHashMap<String,String>();
for (TreeTypeEnum item : TreeTypeEnum.values()) {
try{
boolean hasE = false;
for (int e : eItem){
if(item.getValue()==e){
hasE = true;
break;
}
}
if(!hasE){
resultMap.put(item.getValue()+"", item.getDesc());
}
}catch(Exception ex){
}
}
return resultMap;
}
}
...@@ -50,7 +50,7 @@ public class DesignCheckboxComponent extends DesignComponent { ...@@ -50,7 +50,7 @@ public class DesignCheckboxComponent extends DesignComponent {
columnsItem.setBorder(false); columnsItem.setBorder(false);
columnsItem.setSize("medium"); columnsItem.setSize("medium");
columnsItem.setGutter(15); columnsItem.setGutter(15);
columnsItem.setSpan(24); columnsItem.setSpan(12);
columnsItem.setOptionType("default"); columnsItem.setOptionType("default");
columnsItem.setDataType("static"); columnsItem.setDataType("static");
columnsItem.setAction("https://www.fastmock.site/mock/51715c0157535b99010bde55f2df33c8/formDesigner/api/options"); columnsItem.setAction("https://www.fastmock.site/mock/51715c0157535b99010bde55f2df33c8/formDesigner/api/options");
......
...@@ -45,7 +45,7 @@ public class DesignDateComponent extends DesignComponent { ...@@ -45,7 +45,7 @@ public class DesignDateComponent extends DesignComponent {
columnsItem.setRequired(false); columnsItem.setRequired(false);
columnsItem.setMaxLength(50); columnsItem.setMaxLength(50);
columnsItem.setGutter(15); columnsItem.setGutter(15);
columnsItem.setSpan(24); columnsItem.setSpan(12);
columnsItem.setFormat("yyyy 年 MM 月 dd 日"); columnsItem.setFormat("yyyy 年 MM 月 dd 日");
columnsItem.setValueFormat("yyyy 年 MM 月 dd 日"); columnsItem.setValueFormat("yyyy 年 MM 月 dd 日");
......
...@@ -11,8 +11,6 @@ import com.mortals.xhx.common.pdu.gen.component.ComponentCons; ...@@ -11,8 +11,6 @@ import com.mortals.xhx.common.pdu.gen.component.ComponentCons;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -50,7 +48,6 @@ public class DesignDynamicTableComponent extends DesignComponent { ...@@ -50,7 +48,6 @@ public class DesignDynamicTableComponent extends DesignComponent {
listItem.setShowSummary(false); listItem.setShowSummary(false);
listItem.setSumText("合计"); listItem.setSumText("合计");
listItem.setSummaryText("元"); listItem.setSummaryText("元");
listItem.setRowCount(3);
if (!ObjectUtils.isEmpty(cons.getColList())) { if (!ObjectUtils.isEmpty(cons.getColList())) {
//动态生成列元素 //动态生成列元素
...@@ -133,12 +130,11 @@ public class DesignDynamicTableComponent extends DesignComponent { ...@@ -133,12 +130,11 @@ public class DesignDynamicTableComponent extends DesignComponent {
columnsItem.setRequired(false); columnsItem.setRequired(false);
columnsItem.setMaxLength(50); columnsItem.setMaxLength(50);
columnsItem.setGutter(15); columnsItem.setGutter(15);
columnsItem.setSpan(24); columnsItem.setSpan(12);
columnsItem.setValue(""); columnsItem.setValue("");
columnsItem.setClearable(true); columnsItem.setClearable(true);
columnsItem.setDisabled(false); columnsItem.setDisabled(false);
columnsItem.setReadonly(false); columnsItem.setReadonly(false);
columnsItem.setRules(Collections.emptyList());
// columnsItem.setRangeSeparator("-"); // columnsItem.setRangeSeparator("-");
// columnsItem.setFormat("yyyy-MM-dd"); // columnsItem.setFormat("yyyy-MM-dd");
// columnsItem.setValueFormat("yyyy-MM-dd"); // columnsItem.setValueFormat("yyyy-MM-dd");
......
...@@ -42,7 +42,7 @@ public class DesignInputComponent extends DesignComponent { ...@@ -42,7 +42,7 @@ public class DesignInputComponent extends DesignComponent {
columnsItem.setRequired(false); columnsItem.setRequired(false);
columnsItem.setMaxLength(50); columnsItem.setMaxLength(50);
columnsItem.setGutter(15); columnsItem.setGutter(15);
columnsItem.setSpan(24); columnsItem.setSpan(12);
columnsItem.setWidth("100%"); columnsItem.setWidth("100%");
columnsItem.setClearable(true); columnsItem.setClearable(true);
columnsItem.setDisabled(false); columnsItem.setDisabled(false);
......
...@@ -49,7 +49,7 @@ public class DesignRadioComponent extends DesignComponent { ...@@ -49,7 +49,7 @@ public class DesignRadioComponent extends DesignComponent {
columnsItem.setBorder(false); columnsItem.setBorder(false);
columnsItem.setSize("medium"); columnsItem.setSize("medium");
columnsItem.setGutter(15); columnsItem.setGutter(15);
columnsItem.setSpan(24); columnsItem.setSpan(12);
columnsItem.setOptionType("default"); columnsItem.setOptionType("default");
columnsItem.setDataType("static"); columnsItem.setDataType("static");
columnsItem.setAction("https://www.fastmock.site/mock/51715c0157535b99010bde55f2df33c8/formDesigner/api/options"); columnsItem.setAction("https://www.fastmock.site/mock/51715c0157535b99010bde55f2df33c8/formDesigner/api/options");
......
...@@ -50,7 +50,7 @@ public class DesignSelectComponent extends DesignComponent { ...@@ -50,7 +50,7 @@ public class DesignSelectComponent extends DesignComponent {
columnsItem.setCollapseTags(false); columnsItem.setCollapseTags(false);
columnsItem.setDisabled(false); columnsItem.setDisabled(false);
columnsItem.setGutter(15); columnsItem.setGutter(15);
columnsItem.setSpan(24); columnsItem.setSpan(12);
columnsItem.setDataType("static"); columnsItem.setDataType("static");
columnsItem.setAction("https://www.fastmock.site/mock/51715c0157535b99010bde55f2df33c8/formDesigner/api/options"); columnsItem.setAction("https://www.fastmock.site/mock/51715c0157535b99010bde55f2df33c8/formDesigner/api/options");
columnsItem.setClearable(false); columnsItem.setClearable(false);
......
...@@ -30,7 +30,4 @@ public final class Constant { ...@@ -30,7 +30,4 @@ public final class Constant {
public final static String Param_sealWay = "sealWay"; public final static String Param_sealWay = "sealWay";
public final static String Param_typeOptions = "typeOptions"; public final static String Param_typeOptions = "typeOptions";
/** 登录用户类型为客户 */
public final static int CUSTOMER_USER = 99;
} }
package com.mortals.xhx.common.key;
/**
* 错误码
*
* @author: zxfei
* @date: 2022/5/12 14:56
*/
public interface ErrorCode {
public static final int STATUS_MS_EXCEPTION = 500;
public static final int STATUS_VALIDATE_EXCEPTION = 420;
public static final int STATUS_UNCHECKED_EXCEPTION = 605;
public static final int STATUS_TOKEN_NULL_EXCEPTION = 604;
public static final int STATUS_CODE_SUCCESS = 0;
public static final int STATUS_CODE_WARN = 1;
public static final int STATUS_CODE_ERROR = 2;
public static final int STATUS_CODE_INFO = 3;
public static final int STATUS_CODE_TOKEN_EXPIRED = 4;
public static final int STATUS_CODE_FATAL = 5;
public static final int STATUS_CODE_TRADE_PWD_NOT_SET = 6;
public static final int STATUS_ACCOUNT_LOCKED = 7;
public static final int STATUS_TRADE_PWD_OVER_THREE_TIME = 8;
public static final int STATUS_TRADE_PWD_ERROR = 9;
public static final int STATUS_EMPTY_PWD_ERROR = 10;
public static final int STATUS_TEL_NOT_RGI_ERROR = 11;
public static final int STATUS_TEL_ALREADY_REGI = 12;
public static final int STATUS_SAFETY_RISK = 13;
public static final int STATUS_LOGIN_CODE = 15;
public static final int BOOK_FAKUAN_CODE = 16;
public static final String ERROR_TRADE_PWD_OVER_THREE_TIME = "支付密码错误,请15分钟后再试";
public static final String ERROR_TRADE_PWD_ERROR = "支付密码错误,请重试";
public static final String ERROR_EMPTY_PWD_ERROR = "请设置登录密码";
public static final String ERROR_TEL_NOT_RGI = "该号码未注册";
public static final String ERROR_USERNAME_OR_PASSWORD = "用户名或者密码错误";
public static final String ERROR_TRADE_PWD = "交易密码错误";
public static final String ERROR_FORBIDDEN_OPER = "非法操作";
public static final String ERROR_TRADE_PWD_NOT_SET = "非法操作";
public static final String ERROR_NOT_REAL_NAME_AUTH = "您未实名认证,禁止该操作";
public static final String ERROR_INTERNAL_SERVER_ERROR = "服务器内部错误";
public static final String ERROR_UNAUTHORIZED = "token不正确或已过期";
public static final String ERROR_TOKEN_IS_NULL = "token不能为空";
public static final String ERROR_MISS_SERVLET = "服务不存在";
public static final String ERROR_CAPTCHA_OFTEN = "验证码已发送";
public static final String ERROR_CAPTCHA_WRONG = "验证码错误";
public static final String ERROR_TEL_ALREADY_REGI = "该手机号已被注册";
public static final String ERROR_CODE_DUPLICATE_KEY = "重复添加信息(含部分)";
public static final String ERROR_NOT_EXITS = "对应记录不存在";
public static final String ERROR_STATUS_CATEGORY = "状态错误";
public static final String ERROR_FRIEND_SHIP_ALREADY = "已经是你好友";
public static final String ERROR_FRIEND_SHIP_WAIT = "已向改好友发出邀请,等待接受";
public static final String ERROR_CODE_ACCOUNT_LOCKED = "账号被锁定,请联系客服";
public static final String WARN_ARGUMENT = "参数错误";
public static final String ERROR_USERNAME_EXIST = "该号码已被注册";
public static final String ERROR_SAFETY_RISK = "不在常用设备上登录";
public static final String INFO_TEL_BIND = "手机号码已经被绑定";
public static final String INFO_TEL_FORMAT_WRONG = "手机号码格式不正确";
public static final String ERROR_NOT_FOUND = "404 not found";
public static final String DISABLED="该账号已被封禁,如有疑问请联系平台";
public static final String DATENULL="缺少参数";
public static final String ERRDATE="无效参数";
public static final String ERRSTAE="状态异常";
public static final String EXTDATE="参数异常";
public static final String NUMEXE="账号异常";
public static final String CAPDON="资产已被冻结,如有疑问请联系平台";
public static final String CONOTS="操作失败";
public static final String OK="成功!";
public static final String TOKENX="身份验证失败,请重新登录";
public static final String CAPNOT="充值余额不足请充值";
public static final String SYSNOT="系统繁忙,请稍后再试...";
public static final String NOWER="没有权限";
public static final String PAGEDATA="分页参数不能为空";
public static final String CARADD_MEMBERS="该司机已有绑定车辆,不能绑定多个";
public static final int DEVICE_CODE_IS_EMPTY = 1001;
public static final String DEVICE_CODE_IS_EMPTY_CONTENT = "当前设备编码为空!";
public static final int DEVICE_CODE_IS_EXIST = 1002;
public static final String DEVICE_CODE_IS_EXIST_CONTENT = "当前设备编码已存在!";
public static final int PRODUCT_IS_EMPTY = 1003;
public static final String PRODUCT_IS_EMPTY_CONTENT = "所属产品编码不存在!";
public static final int DEVICE_UNACTIVE = 1004;
public static final String DEVICE_UNACTIVE_CONTENT = "当前设备未激活,请在后台配置后再激活!";
public static final int PLATFORM_IS_EMPTY = 1005;
public static final String PLATFORM_IS_EMPTY_CONTENT = "当前设备编码不存在!";
public static final int PLATFORM_UNEXIST = 1006;
public static final String PLATFORM_UNEXIST_CONTENT = "当前设备所属产品平台未配置,请在后台配置后再激活!";
public static final int SITEID_IS_EMPTY = 1007;
public static final String SITEID_IS_EMPTY_CONTENT = "站点ID为空!";
public static final int DEVICE_CONFIG_IS_EMPTY = 1008;
public static final String DEVICE_CONFIG_IS_EMPTY_CONTENT = "设备创建,请完善设备配置信息!";
public static final int DEVICE_NOT_EXIST = 1009;
public static final String DEVICE_NOT_EXIST_CONTENT = "当前设备不存在!";
public static final int TOKEN_AUTH_FAIL = 1010;
public static final String TOKEN_AUTH_FAIL_CONTENT = "token认证失败!";
public static final int DEVICE_VERSION_UNEXIST = 1011;
public static final String DEVICE_VERSION_UNEXIST_CONTENT = "未找到设备版本信息!";
public static final int ERROR_TOKEN_EXPIRED = 9001;
public static final String ERROR_TOKEN_EXPIRED_CONTENT = "用户登录过期,请重新登录!";
public static final int ERROR_TOKEN_UNAUTHORIZED = 9002;
public static final String ERROR_TOKEN_UNAUTHORIZED_CONTENT = "token不正确或已过期";
public static final int ERROR_USER_OPERATION = 9009;
public static final String ERROR_USER_OPERATION_CONTENT = "用户无该操作权限!";
}
package com.mortals.xhx.common.pdu; package com.mortals.xhx.common.pdu;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.SpliteratorUtil;
import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import lombok.Data; import lombok.Data;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
......
...@@ -32,4 +32,6 @@ public class ComponentCons { ...@@ -32,4 +32,6 @@ public class ComponentCons {
private String uploadFileUrl; private String uploadFileUrl;
} }
package com.mortals.xhx.common.pdu.test;
import com.alibaba.fastjson.annotation.JSONField;
public class ChildrenItem{
@JSONField(name="show-text")
private Boolean showText;
@JSONField(name="show-score")
private Boolean showScore;
@JSONField(name="__config__")
private Config config;
@JSONField(name="max")
private Integer max;
@JSONField(name="allow-half")
private Boolean allowHalf;
@JSONField(name="__vModel__")
private String vModel;
@JSONField(name="style")
private Style style;
@JSONField(name="disabled")
private Boolean disabled;
}
\ No newline at end of file
package com.mortals.xhx.common.pdu.test;
import com.alibaba.fastjson.annotation.JSONField;
import java.util.List;
public class Config{
@JSONField(name="layout")
private String layout;
@JSONField(name="tagIcon")
private String tagIcon;
@JSONField(name="changeTag")
private Boolean changeTag;
@JSONField(name="document")
private String document;
@JSONField(name="labelWidth")
private Object labelWidth;
@JSONField(name="label")
private String label;
@JSONField(name="tag")
private String tag;
@JSONField(name="showLabel")
private Boolean showLabel;
@JSONField(name="span")
private Integer span;
@JSONField(name="renderKey")
private Long renderKey;
@JSONField(name="formId")
private Integer formId;
@JSONField(name="gutter")
private Integer gutter;
@JSONField(name="layoutTree")
private Boolean layoutTree;
@JSONField(name="children")
private List<ChildrenItem> children;
@JSONField(name="componentName")
private String componentName;
@JSONField(name="defaultValue")
private Integer defaultValue;
@JSONField(name="required")
private Boolean required;
@JSONField(name="regList")
private List<Object> regList;
}
\ No newline at end of file
package com.mortals.xhx.common.pdu.test;
import com.alibaba.fastjson.annotation.JSONField;
public class FieldsItem{
@JSONField(name="__config__")
private Config config;
@JSONField(name="round")
private Boolean round;
@JSONField(name="size")
private String size;
@JSONField(name="plain")
private Boolean plain;
@JSONField(name="icon")
private String icon;
@JSONField(name="disabled")
private Boolean disabled;
@JSONField(name="type")
private String type;
@JSONField(name="circle")
private Boolean circle;
@JSONField(name="__slot__")
private Slot slot;
@JSONField(name="on")
private On on;
@JSONField(name="justify")
private String justify;
@JSONField(name="align")
private String align;
@JSONField(name="clearable")
private Boolean clearable;
@JSONField(name="range-separator")
private String rangeSeparator;
@JSONField(name="readonly")
private Boolean readonly;
@JSONField(name="start-placeholder")
private String startPlaceholder;
@JSONField(name="format")
private String format;
@JSONField(name="value-format")
private String valueFormat;
@JSONField(name="__vModel__")
private String vModel;
@JSONField(name="style")
private Style style;
@JSONField(name="end-placeholder")
private String endPlaceholder;
@JSONField(name="maxlength")
private Integer maxlength;
@JSONField(name="placeholder")
private String placeholder;
@JSONField(name="show-word-limit")
private Boolean showWordLimit;
@JSONField(name="prefix-icon")
private String prefixIcon;
@JSONField(name="suffix-icon")
private String suffixIcon;
}
\ No newline at end of file
package com.mortals.xhx.common.pdu.test;
import com.alibaba.fastjson.annotation.JSONField;
public class Methods{
}
\ No newline at end of file
package com.mortals.xhx.common.pdu.test;
import com.alibaba.fastjson.annotation.JSONField;
public class On{
@JSONField(name="click")
private String click;
}
\ No newline at end of file
package com.mortals.xhx.common.pdu.test;
import com.alibaba.fastjson.annotation.JSONField;
public class RegListItem{
@JSONField(name="pattern")
private String pattern;
@JSONField(name="message")
private String message;
}
\ No newline at end of file
package com.mortals.xhx.common.pdu.test;
import java.util.List;
import com.alibaba.fastjson.annotation.JSONField;
public class Response{
@JSONField(name="formBtns")
private Boolean formBtns;
@JSONField(name="labelWidth")
private Integer labelWidth;
@JSONField(name="formRef")
private String formRef;
@JSONField(name="gutter")
private Integer gutter;
@JSONField(name="size")
private String size;
@JSONField(name="formRules")
private String formRules;
@JSONField(name="labelPosition")
private String labelPosition;
@JSONField(name="unFocusedComponentBorder")
private Boolean unFocusedComponentBorder;
@JSONField(name="disabled")
private Boolean disabled;
@JSONField(name="formModel")
private String formModel;
@JSONField(name="fields")
private List<FieldsItem> fields;
@JSONField(name="__methods__")
private Methods methods;
@JSONField(name="span")
private Integer span;
}
\ No newline at end of file
package com.mortals.xhx.common.pdu.test;
import com.alibaba.fastjson.annotation.JSONField;
public class Slot{
@JSONField(name="default")
private String jsonMemberDefault;
@JSONField(name="prepend")
private String prepend;
@JSONField(name="append")
private String append;
}
\ No newline at end of file
package com.mortals.xhx.common.pdu.test;
import com.alibaba.fastjson.annotation.JSONField;
public class Style{
}
\ No newline at end of file
package com.mortals.xhx.common.utils; package com.mortals.xhx.common.utils;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.ReUtil;
...@@ -52,7 +51,7 @@ public class ExportDocUtil { ...@@ -52,7 +51,7 @@ public class ExportDocUtil {
String xpath = "/" + paths.stream().collect(Collectors.joining("/")); String xpath = "/" + paths.stream().collect(Collectors.joining("/"));
Node node = ((Node) XmlUtil.getByXPath(xpath, document, XPathConstants.NODE, ns)); Node node = ((Node) XmlUtil.getByXPath(xpath, document, XPathConstants.NODE, ns));
if (!ObjectUtils.isEmpty(node) &&sourceEl.equals(node.getTextContent())) { if (!ObjectUtils.isEmpty(node) && sourceEl.equals(node.getTextContent())) {
node.setTextContent(targetEl); node.setTextContent(targetEl);
} }
// NodeList nodeList = ((NodeList) XmlUtil.getByXPath(xpath, document, XPathConstants.NODESET, ns)); // NodeList nodeList = ((NodeList) XmlUtil.getByXPath(xpath, document, XPathConstants.NODESET, ns));
...@@ -174,6 +173,7 @@ public class ExportDocUtil { ...@@ -174,6 +173,7 @@ public class ExportDocUtil {
NodeList nodeList = element.getChildNodes(); NodeList nodeList = element.getChildNodes();
Node childNode; Node childNode;
// 有可能没有子节点,做一个非空判断 // 有可能没有子节点,做一个非空判断
if (nodeList.getLength() != 0) { if (nodeList.getLength() != 0) {
//分组子节点分组编号,且是element节点 //分组子节点分组编号,且是element节点
...@@ -204,7 +204,7 @@ public class ExportDocUtil { ...@@ -204,7 +204,7 @@ public class ExportDocUtil {
Pattern pattern = Pattern.compile(regEx); Pattern pattern = Pattern.compile(regEx);
List<String> allGroups = ReUtil.getAllGroups(pattern, childNode.getTextContent()); List<String> allGroups = ReUtil.getAllGroups(pattern, childNode.getTextContent());
if (!ObjectUtils.isEmpty(allGroups)) { if (!ObjectUtils.isEmpty(allGroups)) {
// text = CollUtil.join(allGroups, ";"); // text = CollUtil.join(allGroups, ";");
text = Arrays.asList(childNode.getTextContent().split("\\$")).stream().map(String::trim) text = Arrays.asList(childNode.getTextContent().split("\\$")).stream().map(String::trim)
.map(item -> StrUtil.subBetween(item, "{", "}")) .map(item -> StrUtil.subBetween(item, "{", "}"))
.filter(f -> f != null) .filter(f -> f != null)
...@@ -295,6 +295,21 @@ public class ExportDocUtil { ...@@ -295,6 +295,21 @@ public class ExportDocUtil {
return sb.toString(); return sb.toString();
} }
public static String createCheckBoxStrOther(Boolean checked, String label) {
StringBuilder sb = new StringBuilder();
if (checked) {
String ckHeader = "☑";
sb.append(ckHeader);
} else {
String ckHeader = "□";
sb.append(ckHeader);
}
sb.append(label);
return sb.toString();
}
/** /**
* 校验并更新文档中的非法el表达式 * 校验并更新文档中的非法el表达式
* *
...@@ -410,18 +425,182 @@ public class ExportDocUtil { ...@@ -410,18 +425,182 @@ public class ExportDocUtil {
//log.info("deletePathList:" + JSON.toJSONString(deletePathList)); //log.info("deletePathList:" + JSON.toJSONString(deletePathList));
} }
public static String createCheckBoxStrOther(Boolean checked, String label) {
StringBuilder sb = new StringBuilder();
if (checked) {
String ckHeader = "☑";
sb.append(ckHeader); public static void testClearXml() {
} else { File file = new File("E:\\评审报告(竞争性谈判).xml");
String ckHeader = "□";
sb.append(ckHeader); Document document = XmlUtil.readXML(file);
List<NodeEntity> list = new ArrayList<>();
ExportDocUtil.parseXMLFile(list, "E:\\评审报告(竞争性谈判).xml");
ExportDocUtil.checkAndUpdateExpressionByDocument(document, list);
XmlUtil.toFile(document, "E:\\评审报告(竞争性谈判)修正.xml");
}
@SneakyThrows
public static void main(String[] args) {
//测试清洗数据
ExportDocUtil.testClearXml();
//解析xml文档,修改非法的$表达式为合法
/*
File file = new File("E:\\pic\\doc\\建设工程消防验收备案表(模板)修正.xml");
Document document = XmlUtil.readXML(file);
List<NodeEntity> list = new ArrayList<>();
ExportDocUtil.parseXMLFile(list, "E:\\pic\\doc\\建设工程消防验收备案表(模板)修正.xml");
//查找${col 节点
NodeEntity colNode = null;
for (NodeEntity node : list) {
if (!ObjectUtils.isEmpty(node.getContent())&&node.getContent().startsWith("${col.")) {
colNode = node;
break;
}
} }
sb.append(label);
return sb.toString();
log.info("colNode:" + JSON.toJSONString(colNode));
*/
//System.out.println(XmlUtil.format(document));
// Map root = new HashMap();
// root.put(
// "doc",
// freemarker.ext.dom.NodeModel.parse(new File("the/path/of/the.xml")));
//
//
// String ckStr=" <#list><w:r>\n" +
// "\t\t\t\t\t\t\t\t\t\t<w:rPr>\n" +
// "\t\t\t\t\t\t\t\t\t\t\t<w:rFonts w:ascii=\"宋体\" w:h-ansi=\"宋体\"/>\n" +
// "\t\t\t\t\t\t\t\t\t\t\t<wx:font wx:val=\"宋体\"/>\n" +
// "\t\t\t\t\t\t\t\t\t\t</w:rPr>\n" +
// "\t\t\t\t\t\t\t\t\t\t<w:sym w:font=\"Wingdings 2\" w:char=\"0052\"/>\n" +
// "\t\t\t\t\t\t\t\t\t</w:r></#list>";
//
// XmlUtil.parseXml(ckStr);
//<#list columns as column>
// Document xml = XmlUtil.createXml();
// Element element = xml.createElement("#list");
// xml.appendChild(element);
// Element elementPr = xml.createElement("w:rPr");
// element.appendChild(elementPr);
//
// Element elementFonts = xml.createElement("w:rFonts");
// elementFonts.setAttribute("w:ascii","宋体");
// elementFonts.setAttribute("w:h-ansi","宋体");
// elementPr.appendChild(elementFonts);
// Element elementFont = xml.createElement("wx:font");
// elementFont.setAttribute("wx:val","宋体");
// elementPr.appendChild(elementFont);
// System.out.println(ExportDocUtil.getStringFromDocument(xml));
// System.out.println(XmlUtil.format(xml));
// System.out.println(XmlUtil.toStr(element,"utf-8",true,false));
// String imagepath="E:\\pic\\1.png";
//
// BufferedImage image = ImgUtil.read(imagepath);
//
// String png = ImgUtil.toBase64(image, "png");
//
// System.out.println(png);
//
// String path = "E:\\新建文件夹\\测试.doc";
//
//// String path = "E:\\pic\\doc\\附件1-四川省危险废物经营许可证申请表(补办)空白.xml";
////
// List<Map<String, String>> list = new ArrayList<>();
//
// ExportDocUtil.parseXMLFile(list, path);
//
// //查找w:binData的节点路径
//
// //1.
// String id = "";
// List<String> paths = new ArrayList<>();
// for (Map<String, String> map : list) {
// if ("w:binData".equals(map.get("TagName"))) {
// System.out.println("id:" + map.get("id"));
// System.out.println("parentId:" + map.get("parentId"));
// id = map.get("parentId");
// paths.add(map.get("TagName"));
// break;
// }
// }
// ExportDocUtil.getPath(paths, list, id);
// System.out.println(JSON.toJSONString(paths));
// Document document = XmlUtil.readXML(new File(path));
// NamespaceContext ns = ExportDocUtil.buildNsByDocument(document);
// paths = CollUtil.reverse(paths);
//
// String xpath = "/" + paths.stream().collect(Collectors.joining("/"));
//
// System.out.println("xpath:" + xpath);
//
// Node byXPath = (Node) XmlUtil.getByXPath(xpath, document, XPathConstants.NODE, ns);
// byXPath.setTextContent("${image1}");
//
// System.out.println(XmlUtil.toStr(document));
//System.out.println("xPath"+byXPath.setTextContent(););
// xpath="//*[name()='wordml://02000001.jpg']";
// document.getElementById()
//List<Element> nodeList = document.selectNodes(xpath).selectNodes("//w:tbl//w:tr//w:tc//w:p//w:r//w:t");
//DefaultNamespaceContext defaultNamespaceContext = DefaultNamespaceContext.create(document);
//通过dom xpath 获取节点值 并修改
//Element elementByXPath = XmlUtil.getRootElement(document).getElementsByTagName(document., "w:binData");
//System.out.println("xpath element:"+elementByXPath.getTextContent());
//System.out.println(JSON.toJSONString(list));
// File file = new File("E:\\pic\\doc\\doc.xml");
//
// Document document = XmlUtil.readXML(file);
//
// Element element = document.getDocumentElement();
//
// // 第一次调用,就是第一级,parent_id 就给空
// ExportDocUtil.parseElement(list,element,"");
//
// NodeList childNodes = document.getChildNodes();
// System.out.println("size:"+childNodes.getLength());
// for(int i=0;i<childNodes.getLength();i++){
// Node item = childNodes.item(i);
//
// if(!"".equals(item.getTextContent().trim())){
// //System.out.println(item.getNodeValue());
//
// System.out.println(item.getTextContent().trim());
// }
// }
} }
} }
package com.mortals.xhx.common.utils; package com.mortals.xhx.common.utils;
//import com.aspose.words.Document; /**
//import com.aspose.words.ImageSaveOptions; * @author: zxfei
//import com.aspose.words.SaveFormat; * @date: 2021/10/14 15:44
* @description:
**/
import com.aspose.words.Document; import com.aspose.words.Document;
import com.aspose.words.ImageSaveOptions; import com.aspose.words.ImageSaveOptions;
import com.aspose.words.SaveFormat; import com.aspose.words.SaveFormat;
...@@ -216,5 +219,13 @@ public class WordUtil { ...@@ -216,5 +219,13 @@ public class WordUtil {
} }
public static void main(String[] args) {
String docPath = "E:\\pic\\doc\\附件1-四川省危险废物经营许可证申请表(补办)空白.docx";
String pdfPath = "E:\\pic\\pdf\\附件1-四川省危险废物经营许可证申请表(补办)空白.jpg";
WordUtil.convertWordToJPEG(docPath, pdfPath);
}
} }
...@@ -6,7 +6,19 @@ import org.springframework.stereotype.Component; ...@@ -6,7 +6,19 @@ import org.springframework.stereotype.Component;
import com.mortals.framework.springcloud.service.IApplicationService; import com.mortals.framework.springcloud.service.IApplicationService;
/**
* 应用级服务,在应用启动、停止过程中调用
*
* 缺陷:类加载完成后就调用,会由于某些组件还未初始化而导致服务异常,
* 比如Kafka的连接以及订阅初始化比较靠后,在服务启动过程中就调用操作kafka相关API,将导致失败
* 比如开启Socket监听端口,可能端口都接收到连接请求了,但数据库连接还未初始化完成,导致请求处理失败
* 比如定时任务,任务执行时,相关缓存还未初始化,导致处理失败
*
* 应用场景:
* 1、无依赖其它模块或框架的数据初始化等操作
* @author GM
* @date 2020年7月15日
*/
@Component @Component
public class DemoStartService implements IApplicationService { public class DemoStartService implements IApplicationService {
......
package com.mortals.xhx.daemon.applicationservice; package com.mortals.xhx.daemon.applicationservice;
import com.mortals.framework.springcloud.service.IApplicationStartedService; import com.mortals.framework.springcloud.config.web.BaseWebMvcConfigurer;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.mortals.framework.springcloud.service.IApplicationStartedService;
/**
* 应用级服务,在应用启动后、停止过程中调用
* 应用已经完成启动完成,才调用该服务
* 应用场景:
* 1、应用任务,应用启动后定时或间隔执行的任务
* 2、Socket服务端
* @author GM
* @date 2020年7月15日
*/
@Component @Component
//@ConditionalOnProperty(name="com.mortal",prefix = "",havingValue = "xxx") //@ConditionalOnProperty(name="com.mortal",prefix = "",havingValue = "xxx")
public class DemoStartedService implements IApplicationStartedService { public class DemoStartedService implements IApplicationStartedService {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment