Commit 704d3426 authored by 赵啸非's avatar 赵啸非

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	fill-manager/src/main/java/com/mortals/xhx/base/framework/security/SecurityUtils.java
parents 0f40c1c3 a74945e2
......@@ -53,7 +53,17 @@
<artifactId>guava</artifactId>
</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>
<groupId>junit</groupId>
......@@ -70,5 +80,32 @@
<filtering>true</filtering>
</resource>
</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>
</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;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
......
......@@ -20,4 +20,10 @@ public class ApiResp<T> {
*/
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;
import cn.hutool.extra.qrcode.BufferedImageLuminanceSource;
import com.google.zxing.*;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
......
......@@ -78,10 +78,6 @@
<artifactId>poi-ooxml-schemas</artifactId>
<groupId>org.apache.poi</groupId>
</exclusion>
<exclusion>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</exclusion>
</exclusions>
</dependency>
......@@ -96,6 +92,7 @@
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
......@@ -110,6 +107,15 @@
<artifactId>spring-data-redis</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
......@@ -122,16 +128,18 @@
<version>2.3.31</version>
</dependency>
<!--Token生成与解析-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.aspose</groupId>-->
<!-- <artifactId>aspose-words</artifactId>-->
<!-- <version>20.1</version>-->
<!-- <classifier>jdk17</classifier>-->
<!-- </dependency>-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
<groupId>com.aspose.words</groupId>
<artifactId>aspose-words</artifactId>
<version>19.2</version>
<classifier>jdk16</classifier>
</dependency>
<dependency>
......@@ -140,26 +148,15 @@
<version>2.0.8</version>
</dependency>
<dependency>
<groupId>com.aspose.words</groupId>
<artifactId>aspose-words</artifactId>
<version>19.2</version>
<classifier>jdk16</classifier>
</dependency>
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.12.0</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.14</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
......@@ -169,11 +166,6 @@
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
......@@ -187,7 +179,7 @@
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<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>
</configuration>
</plugin>
......@@ -213,7 +205,7 @@
</goals>
<configuration>
<encoding>UTF-8</encoding>
<outputDirectory>${project.basedir}/dist/${project.artifactId}/bin</outputDirectory>
<outputDirectory>${project.parent.basedir}/dist/${project.parent.artifactId}/bin</outputDirectory>
<resources>
<resource>
<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;
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.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
......@@ -22,20 +25,37 @@ import com.mortals.xhx.base.system.oper.service.OperLogService;
/**
* 操作日志记录
*
* @author: zxfei
* @date: 2021/11/5 13:28
*/
@Component
public class OperlogAspect extends FileLogServiceImpl implements ILogService {
private final static Logger logger = LoggerFactory.getLogger(OperlogAspect.class);
@Slf4j
public class OperlogAspect extends FileLogServiceImpl implements ILogService {
@Autowired
private OperLogService operLogService;
@Autowired
private IMessageProduceService messageProduceService;
@Override
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);
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
......@@ -43,9 +63,11 @@ public class OperlogAspect extends FileLogServiceImpl implements ILogService {
// operLogService.insertOperLog(ip, requestUrl, null, "", loginName,
// content);
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() {
}
......@@ -55,13 +77,13 @@ public class OperlogAspect extends FileLogServiceImpl implements ILogService {
HttpServletRequest request = attributes.getRequest();
// url
logger.info("ip[{}]url[{}]", request.getRemoteAddr(), request.getRequestURL());
log.info("ip[{}]url[{}]", request.getRemoteAddr(), request.getRequestURL());
// 参数第1和第2个参数为HttpServletRequest request, HttpServletResponse
// response
if (joinPoint.getArgs().length > 2) {
logger.info("args={}", joinPoint.getArgs()[2]);
log.info("args={}", joinPoint.getArgs()[2]);
} else {
logger.info("args={}", joinPoint.getArgs());
log.info("args={}", joinPoint.getArgs());
}
}
......@@ -69,7 +91,7 @@ public class OperlogAspect extends FileLogServiceImpl implements ILogService {
@AfterReturning(returning = "object", pointcut = "accessLog()")
public void doAfterReturning(Object object) {
if (null != object) {
logger.info("response={}", object.toString());
log.info("response={}", object.toString());
}
}
}*/
}
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.JSONObject;
import lombok.extern.slf4j.Slf4j;
......@@ -27,11 +30,11 @@ import java.util.Map;
* @author: zxfei
* @date: 2022/4/20 9:24
*/
@Aspect
@Component
//@Aspect
//@Component
@Slf4j
@Order(1)
@Profile({"default", "develop", "test"})
//@Profile({"default", "develop", "test"})
public class WebLogAspect {
@Pointcut("execution(public * com.mortals..*Controller.*(..))")
public void webLog() {
......@@ -61,13 +64,19 @@ public class WebLogAspect {
public void afterReturning(Object result) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
Map<String, String> map = MDC.getCopyOfContextMap();
if (map != null&&result!=null) {
String startTime = map.getOrDefault("startTime", String.valueOf(System.currentTimeMillis()));
long takeTime = (System.currentTimeMillis() - Long.parseLong(startTime));
log.info(" \n 请求路径:{} \n 耗时:{}ms \n 请求报文:{} \n 响应报文:{}"
, request.getRequestURI(), takeTime, map.getOrDefault("req", ""), result == null ? "" : result.toString());
if (result instanceof String) {
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;
import com.mortals.framework.springcloud.config.web.BaseWebMvcConfigurer;
import com.mortals.xhx.base.framework.feign.HierarchicalContract;
import feign.Contract;
import com.mortals.xhx.base.framework.WxMessageConverter;
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.Configuration;
......@@ -14,12 +17,16 @@ import org.springframework.context.annotation.Configuration;
@Configuration
public class AccountConfig {
@Bean
public Contract feignContract() {
return new HierarchicalContract();
public BaseWebMvcConfigurer getBaseWebMvc() {
return new BaseWebMvcConfigurer(false, null);
}
@Bean
public BaseWebMvcConfigurer getBaseWebMvc(){
return new BaseWebMvcConfigurer(false,null);
public Decoder feignDecoder() {
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;
import com.mortals.framework.web.interceptor.BaseInterceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
......@@ -13,7 +12,7 @@ import javax.servlet.http.HttpServletResponse;
* @description:添加跨域响应
**/
@Component
public class CrossInterceptor extends BaseInterceptor {
public class CrossInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
......@@ -24,9 +23,4 @@ public class CrossInterceptor extends BaseInterceptor {
response.setHeader("Access-Control-Allow-Credentials", "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;
import java.io.IOException;
import java.net.URLDecoder;
import javax.sql.DataSource;
import com.mortals.framework.springcloud.config.mybatis.AbstractMybatisConfiguration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ibatis.io.VFS;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
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
//@AutoConfigureAfter(DataSourceAutoConfiguration.class)
......@@ -45,7 +35,6 @@ public class MybatisConfiguration extends AbstractMybatisConfiguration {
@Value("${mybatis.config-location}")
private String configLocation;
// 提供SqlSeesion
@Bean(name = "sqlSessionFactory")
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;
import cn.hutool.core.util.IdUtil;
import com.mortals.framework.service.IAuthTokenService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.util.ContentCachingRequestWrapper;
......@@ -27,15 +23,9 @@ import java.io.IOException;
@Slf4j
public class RequestFilter extends OncePerRequestFilter implements Filter {
@Autowired
private IAuthTokenService authTokenService;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
try {
//每个请求记录一个traceId,可以根据traceId搜索出本次请求的全部相关日志
MDC.put("traceId", IdUtil.fastSimpleUUID().substring(0,12));
setUsername(request);
request = new ContentCachingRequestWrapper(request);
filterChain.doFilter(request, response);
} catch (Exception e) {
......@@ -47,22 +37,22 @@ public class RequestFilter extends OncePerRequestFilter implements Filter {
}
private void setUsername(HttpServletRequest request) {
/*private void setUsername(HttpServletRequest request) {
//通过token解析出username
String token = authTokenService.getToken(request);
//String token = request.getHeader("token");
if (!ObjectUtils.isEmpty(token)) {
MDC.put("token",token);
// MDC.put("token", token);
// try {
// SessionUserInfo info = tokenService.getUserInfo();
// if (info != null) {
// String username = info.getUsername();
// MDC.put("username", username);
// }
// } catch (CommonJsonException e) {
// log.info("无效的token:{}", token);
// }
MDC.put("token", token);
try {
SessionUserInfo info = tokenService.getUserInfo();
if (info != null) {
String username = info.getUsername();
MDC.put("username", username);
}
} catch (CommonJsonException e) {
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.mortals.framework.ap.SysConstains;
......@@ -14,7 +14,6 @@ import io.jsonwebtoken.SignatureAlgorithm;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Primary;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
......@@ -28,7 +27,7 @@ import java.util.Map;
*
* @author zxfei
*/
@Primary
@Service
@Order(1)
@Slf4j
......@@ -55,6 +54,9 @@ public class AuthTokenServiceImpl implements IAuthTokenService {
@Value("${token.database:0}")
private Integer portalDb;
@Value("${platform.type:cloud}")
private String platFormType;//版本,默认云服务版本
protected static final Long SECOND = 1l;
protected static final Long SECOND_MINUTE = 60 * SECOND;
......@@ -85,12 +87,10 @@ public class AuthTokenServiceImpl implements IAuthTokenService {
Claims claims = parseToken(token);
String uuid = (String) claims.get(SysConstains.LOGIN_USER_KEY);
String userKey = getTokenKey(uuid);
cacheService.select(portalDb);
String userStr = cacheService.get(userKey);
cacheService.select(db);
// Rest<String> rest = userFeign.getToken(userKey);
// String userStr = rest.getData();
String userStr = "";
userStr = cacheService.get(userKey);
if (StringUtils.isNotEmpty(userStr)) {
UserEntity userEntity = JSONObject.parseObject(userStr, UserEntity.class);
userEntity.setToken(token);
......
......@@ -2,13 +2,14 @@ package com.mortals.xhx.base.framework.interceptor;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.common.Rest;
import com.mortals.framework.service.IAuthTokenService;
import com.mortals.framework.service.IUser;
import com.mortals.framework.util.AESUtil;
import com.mortals.framework.utils.ServletUtils;
import com.mortals.framework.web.interceptor.BaseInterceptor;
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.stereotype.Component;
import org.springframework.util.ObjectUtils;
......@@ -19,6 +20,9 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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
*
......@@ -40,7 +44,8 @@ public class AuthUserInterceptor extends BaseInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
if (handler instanceof HandlerMethod) {
JSONObject ret = new JSONObject();
if(handler instanceof HandlerMethod){
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
UnAuth annotation = method.getAnnotation(UnAuth.class);
......@@ -48,10 +53,9 @@ public class AuthUserInterceptor extends BaseInterceptor {
//取消校验
return true;
}
} else if (handler instanceof ResourceHttpRequestHandler) {
}else if(handler instanceof ResourceHttpRequestHandler){
return true;
}
JSONObject ret = new JSONObject();
try {
String uri = request.getServletPath();
//校验配置的请求路径是否需要检查权限
......@@ -59,23 +63,23 @@ public class AuthUserInterceptor extends BaseInterceptor {
//需要校验权限
boolean auth = this.checkAuth(request, uri, config.getSecurityKey());
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);
//loginUser.isManager()
if(ObjectUtils.isEmpty(loginUser)){
ret.put("code", 401);
ret.put("msg", "用户未登录或登录失效,请重新登录");
ServletUtils.renderString(response, JSONObject.toJSONString(ret));
if (ObjectUtils.isEmpty(loginUser)) {
ServletUtils.renderString(response, JSONObject.toJSONString(Rest.fail(ERROR_TOKEN_EXPIRED, ERROR_TOKEN_EXPIRED_CONTENT)));
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);
} else {
ret.put("code", -1);
ret.put("msg", "用户无该操作权限!");
ServletUtils.renderString(response, JSONObject.toJSONString(ret));
ServletUtils.renderString(response, JSONObject.toJSONString(Rest.fail(ERROR_USER_OPERATION, ERROR_USER_OPERATION_CONTENT)));
return false;
}
}
}
} catch (Exception e) {
......@@ -102,6 +106,4 @@ public class AuthUserInterceptor extends BaseInterceptor {
return false;
}
}
......@@ -3,7 +3,6 @@ package com.mortals.xhx.base.framework.ws.handler;
import com.alibaba.fastjson.JSON;
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.UserJoinNoticeRequest;
import com.mortals.xhx.base.framework.ws.util.WebSocketUtil;
import lombok.extern.apachecommons.CommonsLog;
import org.springframework.stereotype.Component;
......
......@@ -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.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 org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;
......
......@@ -4,7 +4,6 @@ import lombok.extern.apachecommons.CommonsLog;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;
import java.util.Map;
......@@ -17,18 +16,20 @@ import java.util.Map;
@CommonsLog
public class WebSocketShakeInterceptor extends HttpSessionHandshakeInterceptor {
@Override // 拦截 Handshake 事件
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,
WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, org.springframework.web.socket.WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
// 获得 accessToken
if (request instanceof ServletServerHttpRequest) {
ServletServerHttpRequest serverRequest = (ServletServerHttpRequest) request;
attributes.put("accessToken", serverRequest.getServletRequest().getParameter("accessToken"));
}
// 调用父方法,继续执行逻辑
return super.beforeHandshake(request, response, wsHandler, attributes);
}
public static void main(String[] args) {
WebSocketShakeInterceptor webSocketShakeInterceptor = new WebSocketShakeInterceptor();
}
......
package com.mortals.xhx.base.login.interceptor;
import com.mortals.framework.annotation.UnAuth;
import com.mortals.xhx.base.framework.config.InterceptorConfig;
import com.mortals.framework.ap.CookieService;
import com.mortals.framework.ap.SysConstains;
......@@ -13,10 +14,13 @@ import com.mortals.framework.web.interceptor.BaseInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//@Order(1)
import java.lang.reflect.Method;
@Order(1)
//@Component
public class AuthJsonInterceptor extends BaseInterceptor {
......@@ -35,6 +39,13 @@ public class AuthJsonInterceptor extends BaseInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
try {
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
UnAuth annotation = method.getAnnotation(UnAuth.class);
if (annotation != null) {
//取消校验
return true;
}
String uri = request.getServletPath();
if (config.needCheckAuth(uri)) {
boolean auth = this.checkAuth(request, uri, config.getSecurityKey());
......
......@@ -2,10 +2,12 @@ package com.mortals.xhx.base.login.web;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.ap.CookieService;
import com.mortals.framework.ap.GlobalSysInfo;
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.ITokenService;
import com.mortals.framework.service.IUser;
import com.mortals.framework.util.AESUtil;
import com.mortals.framework.util.DateUtils;
......@@ -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.valid.service.ValidCodeService;
import com.mortals.xhx.common.key.RedisKey;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......@@ -31,9 +35,13 @@ import javax.servlet.http.HttpServletResponse;
import java.util.List;
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
@Slf4j
@RequestMapping("login")
public class LoginController extends BaseCRUDJsonBodyMappingController<UserService, UserEntity, Long> {
public class LoginController extends BaseCRUDJsonBodyMappingController<UserService, UserEntity, Long> implements InitializingBean {
@Autowired
private UserService userService;
......@@ -44,19 +52,15 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
@Autowired
private MenuService menuService;
@Autowired
private ITokenService tokenService;
@Autowired
private ICacheService cacheService;
private static Log logger = LogFactory.getLog(LoginController.class);
@Autowired
private IAuthTokenService authTokenService;
@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();
String loginName = loginForm.getLoginName();
String password = loginForm.getPassword();
//String securityCode = loginForm.getSecurityCode();
String ip = super.getRequestIP(request);
if (StringUtils.isEmpty(loginName) || StringUtils.isEmpty(password)) {
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
......@@ -66,10 +70,8 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
UserEntity userEntity = null;
try {
loginForm.validate();
userEntity = userService.doLogin(loginName, password, ip);
userEntity.setLastLoginAddress(ip);
//saveCurrUser(request, response, userEntity);
recordSysLog(request, userEntity, "用户登录系统成功!");
// 返回拥有的菜单数据
Set<String> urls = resourceService.findUrlSetByUserId(userEntity.getId());
......@@ -78,23 +80,26 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
if (currUserName == null || currUserName.trim().length() == 0) {
currUserName = "管理员";
}
userEntity.setLoginTime(System.currentTimeMillis());
userEntity.setToken(IdUtil.fastSimpleUUID());
userEntity.setExpireTime(DateUtils.addCurrDate(7).getTime());
String token = authTokenService.createToken(userEntity);
JSONObject data = new JSONObject();
data.put("token", token);
data.put("currUserName", currUserName);
data.put("barList", outlookBarList);
data.put("id", userEntity.getId());
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);
ret.put(KEY_RESULT_DATA, data);
ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
ret.put(KEY_RESULT_MSG, "用户登录系统成功!");
ret.put("resources", urls);
return ret.toJSONString();
} catch (Exception e) {
log.error("login error ", e);
......@@ -109,17 +114,18 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
}
@RequestMapping("logout")
public void logout() throws Exception {
public void logout(HttpServletRequest request, HttpServletResponse response) throws Exception {
recordSysLog(request, "退出登录");
super.removeCurrUser(request);
this.deleteBlackCookie(request, response);
}
@RequestMapping("index")
public String index(HttpServletRequest request, HttpServletResponse response) throws Exception {
public String index() throws Exception {
JSONObject ret = new JSONObject();
IUser user = this.getCurUser();
if (user == null) {
return "";
return JSONObject.toJSONString(Rest.fail(ERROR_TOKEN_EXPIRED, ERROR_TOKEN_EXPIRED_CONTENT));
}
Set<String> urls = resourceService.findUrlSetByUserId(user.getId());
List<MenuEntity> outlookBarList = menuService.findTreeMenu(user, urls);
......@@ -128,6 +134,9 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
currUserName = "管理员";
}
JSONObject data = new JSONObject();
String token = authTokenService.getToken(request);
data.put("token", token);
data.put("currUserName", currUserName);
data.put("barList", outlookBarList);
data.put("id", user.getId());
......@@ -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")
public String validCode(HttpServletRequest request, HttpServletResponse response, LoginForm loginForm) {
JSONObject ret = new JSONObject();
......@@ -206,4 +235,26 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
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 {
@Override
public String toString() {
return "loginName:" + this.loginName + " password:" + this.password;
return "loginName:" + this.loginName + " password:" + this.password + " securityCode:" + this.securityCode;
}
@Override
......@@ -48,9 +48,7 @@ public class LoginForm extends BaseForm {
if (password == null || password.trim().length() == 0) {
throw new AppException("密码不能为空!");
}
// if (securityCode == null || securityCode.trim().length() == 0) {
// throw new AppException("验证码不能为空!");
// }
return super.validate();
}
}
package com.mortals.xhx.base.login.web;
import java.awt.image.BufferedImage;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mortals.framework.util.SecurityImage;
import com.mortals.framework.web.BaseCRUDJsonController;
import com.mortals.xhx.base.login.service.GifSecurityImage;
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.web.ValidCodeForm;
......@@ -13,9 +11,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.mortals.framework.util.SecurityImage;
import com.mortals.framework.web.BaseCRUDJsonController;
import com.mortals.xhx.base.login.service.GifSecurityImage;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
@RestController
@RequestMapping("securitycode")
......
......@@ -76,6 +76,9 @@ public class MenuEntity extends BaseEntityLong{
/** 创建用户名称 */
private String createUserName;
private Integer type;
private List<MenuEntity> childList = new ArrayList<MenuEntity>();
......@@ -83,6 +86,14 @@ public class MenuEntity extends BaseEntityLong{
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
/**
* 获取 菜单名称
* @return name
......@@ -410,7 +421,7 @@ public class MenuEntity extends BaseEntityLong{
this.name = null;
this.url = null;
this.parentId = null;
this.orderId = null;
this.orderId = 0;
this.status = 1;
this.linkType = 0;
this.groupId = 1;
......
......@@ -52,4 +52,12 @@ public interface MenuService extends ICRUDService<MenuEntity,Long> {
* @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
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
* 文件:MenuServiceImpl.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.menu.service.impl;
import com.mortals.framework.common.code.YesNo;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.service.IUser;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
......@@ -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.service.MenuService;
import com.mortals.xhx.common.code.YesNoEnum;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* <p>Title: 菜单信息</p>
* <p>Description: MenuServiceImpl service接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
*
* @author
* @version 1.0.0
*/
@Service("menuService")
public class MenuServiceImpl extends AbstractCRUDServiceImpl<MenuDao,MenuEntity,Long> implements MenuService {
public class MenuServiceImpl extends AbstractCRUDServiceImpl<MenuDao, MenuEntity, Long> implements MenuService {
@Override
public List<MenuEntity> findAllEnable() throws AppException {
......@@ -48,7 +52,7 @@ public class MenuServiceImpl extends AbstractCRUDServiceImpl<MenuDao,MenuEntity,
@Override
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>();
List<MenuEntity> userModuleList = this.findAllEnable();
for (MenuEntity sysModule : userModuleList) {
......@@ -111,5 +115,69 @@ public class MenuServiceImpl extends AbstractCRUDServiceImpl<MenuDao,MenuEntity,
}
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;
......@@ -13,9 +6,9 @@ import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol;
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.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.menu.model.MenuQuery;
import org.springframework.web.bind.annotation.*;
import com.mortals.framework.web.BaseCRUDJsonMappingController;
import com.mortals.xhx.base.system.menu.model.MenuEntity;
......@@ -35,73 +28,86 @@ import java.util.Map;
/**
* <p>Title: 菜单信息</p>
* <p>Description: MenuController </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
* 菜单信息
*
* @author: zxfei
* @date: 2021/11/30 10:02
*/
@RestController
@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(){
super.setFormClass(MenuForm.class);
super.setModuleDesc("菜单信息");
}
@Override
protected void doListBefore(MenuEntity query, Map<String, Object> model, Context context) throws AppException {
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"));
orderColList.add(new OrderCol("orderId"));
form.getQuery().setOrderColList(orderColList);
}
/**
* 改变状态
*/
@RequestMapping(value = "change/status")
public String changeStatus(@RequestBody MenuEntity query) {
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
protected void init(HttpServletRequest request, HttpServletResponse response, MenuForm form, 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);
super.init(request, response, form, model, context);
}
} catch (Exception e) {
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
ret.put(KEY_RESULT_MSG, super.convertException(e));
}
return ret.toJSONString();
}
/**
* 改变状态
*/
@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));
}
return ret.toJSONString();
}
/**
* 更换排序
*/
@PostMapping(value = "upOrDown")
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;
import java.util.Date;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.framework.model.BaseEntityLong;
/**
......@@ -47,7 +45,6 @@ public class OperLogEntity extends BaseEntityLong{
private String ip;
/** 操作时间 */
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date logDate;
/** 操作类型,0:新增,1:修改,2:删除 */
......
......@@ -106,7 +106,7 @@ public class OperLogServiceImpl extends AbstractCRUDServiceImpl<OperLogDao,OperL
operLogEntity.setLogDate(new Date());
operLogEntity.setPlatformMark(GlobalSysInfo.getPropertyValue(SysConstains.PROP_PLATFORM_MARK));
// operLogEntity.setOperType(operType.getValue());
//operLogEntity.setOperType(operType.getValue());
operLogEntity.setRequestUrl(requestUrl);
operLogEntity.setLoginName(loginName);
operLogEntity.setUserId(userId);
......
/**
* 文件:OperLogController.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
* 文件:OperLogController.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.oper.web;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol;
......@@ -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.service.OperLogService;
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.RestController;
import com.mortals.framework.web.BaseCRUDJsonMappingController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
......@@ -26,33 +34,36 @@ import java.util.Map;
* <p>Description: OperLogController </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
*
* @author
* @version 1.0.0
*/
@RestController
@RequestMapping("oper/log")
public class OperLogController extends BaseCRUDJsonBodyMappingController<OperLogService,OperLogEntity,Long> {
public OperLogController(){
super.setFormClass(OperLogForm.class);
super.setModuleDesc("操作日志");
}
@Override
protected void init(Map<String, Object> model, Context context) {
// 返回日志类型
this.addDict(model,"operType", OperTypeEnum.getEnumMap());
super.init(model, context);
}
@Override
protected void doListBefore(OperLogEntity query, Map<String, Object> model, Context context) throws AppException {
query.setOrderColList(new ArrayList<OrderCol>() {
{
add(new OrderCol("a.logDate", "desc"));
}
});
}
public class OperLogController extends BaseCRUDJsonBodyMappingController<OperLogService, OperLogEntity, Long> {
public OperLogController() {
super.setFormClass(OperLogForm.class);
super.setModuleDesc("操作日志");
}
@Override
protected void init(Map<String, Object> model, Context context) {
Map<String, Object> status = new HashMap<String, Object>(1);
// 返回日志类型
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>() {
{
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;
......@@ -16,6 +9,8 @@ import javax.servlet.http.HttpServletResponse;
import com.mortals.framework.common.IBaseEnum;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......@@ -29,16 +24,15 @@ import com.mortals.xhx.common.code.AuthType;
import com.mortals.xhx.common.code.SourceType;
/**
* <p>Title: 资源信息</p>
* <p>Description: ResourceController </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
* 资源信息
*
* @author: zxfei
* @date: 2022/5/7 15:27
*/
@Slf4j
@RestController
@RequestMapping("resource")
public class ResourceController extends BaseCRUDJsonMappingController<ResourceService,ResourceForm,ResourceEntity,Long> {
public class ResourceController extends BaseCRUDJsonBodyMappingController<ResourceService,ResourceEntity,Long> {
public ResourceController(){
super.setFormClass(ResourceForm.class);
......@@ -46,8 +40,7 @@ public class ResourceController extends BaseCRUDJsonMappingController<ResourceSe
}
@Override
protected void init(HttpServletRequest request, HttpServletResponse response, ResourceForm form,
Map<String, Object> model, Context context) {
protected void init(Map<String, Object> model, Context context) {
Map<String, Object> statsus = new HashMap<String, Object>();
statsus.put("authType", AuthType.getEnumMap());
statsus.put("sourceType", SourceType.getEnumMap());
......@@ -57,7 +50,6 @@ public class ResourceController extends BaseCRUDJsonMappingController<ResourceSe
statsus.put("userType", UserType.findByValue(getCurUser().getUserType()));
}
model.put(KEY_RESULT_DICT, statsus);
super.init(request, response, form, model, context);
}
/**
......
......@@ -22,7 +22,11 @@ import com.mortals.framework.model.BaseEntityLong;
*/
public class RoleEntity extends BaseEntityLong{
private static final long serialVersionUID = 1547777703344L;
/** 用户ID */
private Long userId;
/** 角色名称 */
private String name;
......
......@@ -8,13 +8,20 @@
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.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.RoleUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
/**
* <p>Title: 角色信息</p>
* <p>Description: RoleServiceImpl service接口 </p>
......@@ -25,7 +32,29 @@ import org.springframework.stereotype.Service;
*/
@Service("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;
@Service("roleUserService")
public class RoleUserServiceImpl extends AbstractCRUDServiceImpl<RoleUserDao,RoleUserEntity,Long> implements RoleUserService {
@Override
public void doDistributionUser(RoleUserQuery query) {
Long roleId = query.getRoleId();
......@@ -68,5 +69,7 @@ public class RoleUserServiceImpl extends AbstractCRUDServiceImpl<RoleUserDao,Rol
}
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;
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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......@@ -21,39 +18,38 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* <p>Title: 角色资源权限</p>
* <p>Description: RoleAuthController </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
* 角色资源权限
*
* @author: zxfei
* @date: 2022/5/7 15:19
*/
@Slf4j
@RestController
@RequestMapping("role/auth")
public class RoleAuthController extends BaseCRUDJsonMappingController<RoleAuthService,RoleAuthForm,RoleAuthEntity,Long> {
public RoleAuthController(){
super.setFormClass(RoleAuthForm.class);
super.setModuleDesc("角色资源权限");
}
/**
* 分配资源
*/
@PostMapping(value = "distributionSource")
public String distributionUser(HttpServletRequest request, HttpServletResponse response, RoleAuthForm form) {
try {
service.doDistributionSource(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();
}
}
public class RoleAuthController extends BaseCRUDJsonBodyMappingController<RoleAuthService, RoleAuthEntity, Long> {
public RoleAuthController() {
super.setFormClass(RoleAuthForm.class);
super.setModuleDesc("角色资源权限");
}
/**
* 分配资源
*/
@PostMapping(value = "distributionSource")
public String distributionUser(@RequestBody RoleAuthQuery query) {
try {
service.doDistributionSource(query);
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();
}
}
}
\ No newline at end of file
/**
* 文件:RoleController.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.role.web;
......@@ -14,11 +7,10 @@ import com.mortals.framework.common.code.UserType;
import com.mortals.framework.model.Context;
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.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import com.mortals.framework.web.BaseCRUDJsonMappingController;
import com.mortals.xhx.base.system.role.model.RoleEntity;
import com.mortals.xhx.base.system.role.model.RoleUserEntity;
......@@ -34,12 +26,10 @@ import java.util.List;
import java.util.Map;
/**
* <p>Title: 角色信息</p>
* <p>Description: RoleController </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
* 角色信息
*
* @author: zxfei
* @date: 2022/5/7 15:15
*/
@RestController
@RequestMapping("role")
......@@ -55,17 +45,24 @@ public class RoleController extends BaseCRUDJsonBodyMappingController<RoleServic
@Override
protected void init(Map<String, Object> model, Context context) {
this.addDict(model,"userType", IBaseEnum.getEnumMap(UserType.class));
this.addDict(model,"roleType", RoleType.getEnumMap());
super.init(model, context);
Map<String, Object> status = new HashMap<>();
status.put("userType", IBaseEnum.getEnumMap(UserType.class));
status.put("roleType", RoleType.getEnumMap());
model.put(KEY_RESULT_DICT, status);
}
/**
* 根据用户id获取角色名称
* @param userId
* @return
*/
@PostMapping("roleNameByUserId")
public String getRoleNameByUserId(@RequestBody RoleUserEntity query) {
public String getRoleNameByUserId(@RequestParam(value = "userId") Long userId) {
try{
JSONObject ret = new JSONObject();
RoleUserEntity roleUserEntity = new RoleUserEntity();
roleUserEntity.setUserId(query.getUserId());
roleUserEntity.setUserId(userId);
List<RoleUserEntity> find = roleUserService.find(roleUserEntity, new Context());
List<RoleEntity> model = new ArrayList<>();
if(find.size() > 0){
......
/**
* 文件:RoleUserController.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.role.web;
import com.alibaba.fastjson.JSONObject;
......@@ -15,9 +8,12 @@ import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.BaseEntityLong;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.mortals.framework.web.BaseCRUDJsonMappingController;
......@@ -38,29 +34,50 @@ import java.util.Set;
import java.util.stream.Collectors;
/**
* <p>Title: 角色用户</p>
* <p>Description: RoleUserController </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
* 角色用户
*
* @author: zxfei
* @date: 2022/5/7 15:15
*/
@RestController
@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(){
super.setFormClass(RoleUserForm.class);
super.setModuleDesc("角色用户");
}
/**
@Override
protected void init(Map<String, Object> model, Context context) {
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和名称
*
* @param IdList
* @return
*/
......@@ -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);
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);
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 = "distributionUser")
public String distributionUser(@RequestBody RoleUserQuery query) {
try {
service.doDistributionUser(query);
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")
public String distributionRole(HttpServletRequest request, HttpServletResponse response, RoleUserForm form) {
try {
service.doDistributionRole(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")
public String distributionRole(@RequestBody RoleUserQuery query) {
try {
service.doDistributionRole(query);
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();
}
}
}
\ No newline at end of file
......@@ -62,7 +62,7 @@ public class TaskServiceImpl extends AbstractCRUDServiceImpl<TaskDao, TaskEntity
private Thread thread = null;
/** 日志打印时间,key:任务ID,value:最后一次打印日志时间 */
private Map<Long, Long> printLogTime = new HashMap<Long, Long>();
private Map<Long, Long> printLogTime = new HashMap<>();
@Autowired(required=false)
private TaskService taskService;
......@@ -216,17 +216,17 @@ public class TaskServiceImpl extends AbstractCRUDServiceImpl<TaskDao, TaskEntity
}
if (interimExcuteStatus != TaskInterimExcuteStatus.UNUSE.getValue() // 启用立即执行
|| ((strategy == TaskExcuteStrategy.DAY.getValue() // 按天
|| (strategy == TaskExcuteStrategy.WEEK.getValue()
&& week == excuteDate)
// 按周
|| (strategy == TaskExcuteStrategy.MONTH.getValue()
&& (day == excuteDate
|| (excuteDate > maxDay && day == maxDay))))// 按月
&& (excuteTime == currTime
&& !lastExcuteTimeStr.equals(currDateTimeStr)) // 执行间隔最少为一天
|| (strategy == TaskExcuteStrategy.WEEK.getValue()
&& week == excuteDate)
// 按周
|| (strategy == TaskExcuteStrategy.MONTH.getValue()
&& (day == excuteDate
|| (excuteDate > maxDay && day == maxDay))))// 按月
&& (excuteTime == currTime
&& !lastExcuteTimeStr.equals(currDateTimeStr)) // 执行间隔最少为一天
) || (strategy == TaskExcuteStrategy.INTERVAL.getValue() // 按间隔时间
&& (lastExcuteTime == null || lastExcuteTime.getTime()
+ excuteDate * 1000 <= currDateTime.getTime()))) {
+ excuteDate * 1000 <= currDateTime.getTime()))) {
final boolean printLog = checkPrintLog(task);
Object excuteBean = GlobalSysInfo.getBeanByName(task.getExcuteService());
if (excuteBean == null || !(excuteBean instanceof ITaskExcuteService)) {
......@@ -261,7 +261,7 @@ public class TaskServiceImpl extends AbstractCRUDServiceImpl<TaskDao, TaskEntity
log.error("执行任务失败-->" + excuteTask, e);
}
if (strategy == TaskExcuteStrategy.INTERVAL.getValue()) {
// 按间隔时间,更新执行时间,避免一直重复执行
// 按间隔时间,更新执行时间,避免一直重复执行
excuteTask.setLastExcuteTime(currDateTime);
}
} finally {
......@@ -297,7 +297,7 @@ public class TaskServiceImpl extends AbstractCRUDServiceImpl<TaskDao, TaskEntity
executorService.shutdown();
log.info("任务执行线程退出!");
});
// thread.start();
thread.start();
}
@Override
......
/**
* 文件:TaskController.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.task.web;
......@@ -14,6 +7,8 @@ import java.util.Map;
import javax.servlet.http.HttpServletRequest;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......@@ -32,16 +27,14 @@ import com.mortals.xhx.common.code.TaskExcuteStrategyEnum;
import com.mortals.xhx.common.code.TaskInterimExcuteStatusEnum;
/**
* <p>Title: 任务信息</p>
* <p>Description: TaskController </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
* 任务信息
*
* @author: zxfei
* @date: 2022/5/7 15:39
*/
@RestController
@RequestMapping("task")
public class TaskController extends BaseCRUDJsonMappingController<TaskService, TaskForm, TaskEntity, Long> {
public class TaskController extends BaseCRUDJsonBodyMappingController<TaskService, TaskEntity, Long> {
public TaskController() {
super.setFormClass(TaskForm.class);
......@@ -50,8 +43,7 @@ public class TaskController extends BaseCRUDJsonMappingController<TaskService, T
@Override
protected void init(HttpServletRequest request, HttpServletResponse response, TaskForm form,
Map<String, Object> model, Context context) {
protected void init(Map<String, Object> model, Context context) {
Map<String, Object> status = new HashMap<String, Object>();
status.put("status", TaskExcuteStatusEnum.getEnumMap());
status.put("excuteStrategy", TaskExcuteStrategyEnum.getEnumMap());
......@@ -71,60 +63,30 @@ public class TaskController extends BaseCRUDJsonMappingController<TaskService, T
}
model.put("excuteService", serviceList);
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")
public String changeStatus(HttpServletRequest request, HttpServletResponse response, TaskForm form) {
public String changeStatus(TaskQuery query) {
JSONObject ret = new JSONObject();
Context context = getContext();
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);
if (null == entity) {
throw new AppException("任务不存在!");
}
if (null == form.getEntity().getStatus()) {
if (null == query.getStatus()) {
throw new AppException("任务状态不能为空!");
}
if (form.getEntity().getStatus() != DataSatusEnum.ENABLE.getValue()
&& form.getEntity().getStatus() != DataSatusEnum.DISENABLE.getValue()) {
if (query.getStatus() != DataSatusEnum.ENABLE.getValue()
&& query.getStatus() != DataSatusEnum.DISENABLE.getValue()) {
throw new AppException("非法任务状态!");
}
String busiDesc = DataSatusEnum.getByValue(form.getEntity().getStatus()).getDesc();
entity.setStatus(form.getEntity().getStatus());
String busiDesc = DataSatusEnum.getByValue(query.getStatus()).getDesc();
entity.setStatus(query.getStatus());
this.service.update(entity, context);
ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
ret.put(KEY_RESULT_MSG, busiDesc + "成功");
......
......@@ -52,4 +52,6 @@ public interface UploadService extends IService {
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;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.service.IUser;
import com.mortals.framework.util.StringUtils;
......@@ -15,9 +16,7 @@ import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
......@@ -49,9 +48,7 @@ public class UploadServiceImpl implements UploadService {
if (tempFile == null || tempFile.getSize() == 0) {
throw new AppException("没有要上传的文件!");
}
if(StringUtils.isEmpty(prePath)){
prePath = "file/uploadfile";
}
String fileName = tempFile.getOriginalFilename();
String extension = FilenameUtils.getExtension(fileName);
UploadFileType type = UploadFileType.getFileType(extension);
......@@ -69,14 +66,12 @@ public class UploadServiceImpl implements UploadService {
if (!pathDir.exists()) {
pathDir.mkdirs();
}
String newName = new Date().getTime() + "." + extension;
//String newName = IdUtil.fastSimpleUUID() + "." + extension;
String filePathAll = filePath + newName;
File uploadFile = new File(filePathAll);
try {
log.info("文件正在储存");
log.info("文件正在储存,filepath:"+filePathAll);
tempFile.transferTo(uploadFile);
} catch (Exception e) {
throw new AppException(e.getMessage());
......@@ -94,7 +89,7 @@ public class UploadServiceImpl implements UploadService {
@Override
public void fileDownload(String fileName, Boolean delete, HttpServletResponse response) {
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
String filePath = getFilePath(fileName);
String filePath = this.filePath + fileName;
try {
response.setContentType(MediaType.IMAGE_JPEG_VALUE);
setAttachmentResponseHeader(response, realFileName);
......@@ -107,28 +102,14 @@ public class UploadServiceImpl implements UploadService {
@Override
public void preview(String fileName, HttpServletResponse response) {
// String filePath = this.filePath+"/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);
String filePath = this.filePath+"/file/preview/" + fileName;
try {
File file = new File(filePath);
BufferedImage image = ImageIO.read(file);
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "No-cache");
response.setDateHeader("Expires", 0L);
response.setContentType("image/jpeg");
ImageIO.write(image, "JPEG", response.getOutputStream());
} catch (Exception var4) {
this.log.debug("响应图片消息异常-->" + var4.getMessage());
response.setContentType(MediaType.IMAGE_JPEG_VALUE);
setAttachmentResponseHeader(response, fileName);
FileUtil.writeToStream(filePath, response.getOutputStream());
} catch (Exception e) {
log.error("下载文件失败", e);
}
}
......@@ -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;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.web.BaseController;
import com.mortals.xhx.base.system.upload.service.UploadService;
......@@ -15,13 +16,10 @@ import java.util.HashMap;
import java.util.Map;
/**
* <p>Title: 上传文件</p>
* <p>Description: UploadfileController </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* 上传文件
*
* @author
* @version 1.0.0
* @author: zxfei
* @date: 2021/11/30 10:06
*/
@RestController
@RequestMapping("file")
......@@ -31,7 +29,8 @@ public class UploadController extends BaseController {
private UploadService uploadService;
@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<>();
String jsonStr = "";
try {
......@@ -55,7 +54,8 @@ public class UploadController extends BaseController {
@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<>();
String jsonStr = "";
try {
......@@ -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)
*
......
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.model.BaseEntityLong;
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
*/
public class UserEntity extends UserEntityExt implements IUser {
private static final long serialVersionUID = 1632643908537L;
* 用户信息业务实体对象
*
* @author zxfei
* @date 2022-07-05
*/
public class UserEntity extends UserVo implements IUser {
private static final long serialVersionUID = 1L;
/**
* 登录名
*/
* 登录名
*/
private String loginName;
/**
* 登录密码,使用md5双次加密
*/
* 登录密码,使用md5双次加密
*/
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 realName;
/**
* 用户手机号
*/
* 用户手机号
*/
private String mobile;
/**
* 用户联系电话
*/
* 用户联系电话
*/
private String phone;
/**
* 用户邮箱
*/
* 用户邮箱
*/
private String email;
/**
* QQ号码
*/
* QQ号码
*/
private String qq;
/**
* 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2
*/
* 用户类型(0.系统用户,1.普通用户,2.工作人员)
*/
private Integer userType;
/**
* 站点id
*/
private Long siteId;
/**
* 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
*/
private Integer status;
* 所属站点id,多个逗号分隔
*/
private String siteIds;
/**
* 客户ID
*/
private Long customerId;
* 所属区域code,多个逗号分隔
*/
private String areaCodes;
/**
* 创建时间
*/
private Date createTime;
/**
* 创建用户
*/
private Long createUserId;
* 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
*/
private Integer status;
/**
* 创建用户名称
*/
* 创建用户名称
*/
private String createUserName;
/**
* 最后一次登录时间
*/
* 最后一次登录时间
*/
private Date lastLoginTime;
/**
* 最后一次登录地址
*/
* 最后一次登录地址
*/
private String lastLoginAddress;
/**
* 最后修改密码时间
*/
private Date lastModPwdTime;
/**
* 最后修改密码地址
*/
private String lastModPwdAddr;
public UserEntity(){
}
public UserEntity(){}
/**
* 获取 登录名
* @return loginName
*/
public String getLoginName() {
return this.loginName;
* 获取 登录名
* @return String
*/
public String getLoginName(){
return loginName;
}
/**
* 设置 登录名
* @param loginName
*/
public void setLoginName(String loginName) {
* 设置 登录名
* @param loginName
*/
public void setLoginName(String loginName){
this.loginName = loginName;
}
/**
* 获取 登录密码,使用md5双次加密
* @return loginPwd
*/
public String getLoginPwd() {
return this.loginPwd;
* 获取 登录密码,使用md5双次加密
* @return String
*/
public String getLoginPwd(){
return loginPwd;
}
/**
* 设置 登录密码,使用md5双次加密
* @param loginPwd
*/
public void setLoginPwd(String loginPwd) {
* 设置 登录密码,使用md5双次加密
* @param loginPwd
*/
public void setLoginPwd(String loginPwd){
this.loginPwd = loginPwd;
}
/**
* 获取 最近一次使用密码,使用md5双次加密
* @return loginPwd1
*/
public String getLoginPwd1() {
return this.loginPwd1;
}
/**
* 设置 最近一次使用密码,使用md5双次加密
* @param loginPwd1
*/
public void setLoginPwd1(String loginPwd1) {
this.loginPwd1 = loginPwd1;
}
/**
* 获取 最近二次使用密码,使用md5双次加密
* @return loginPwd2
*/
public String getLoginPwd2() {
return this.loginPwd2;
* 获取 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @return String
*/
public String getLoginLimitAddress(){
return loginLimitAddress;
}
/**
* 设置 最近二次使用密码,使用md5双次加密
* @param loginPwd2
*/
public void setLoginPwd2(String loginPwd2) {
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) {
* 设置 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @param loginLimitAddress
*/
public void setLoginLimitAddress(String loginLimitAddress){
this.loginLimitAddress = loginLimitAddress;
}
/**
* 获取 用户名
* @return realName
*/
public String getRealName() {
return this.realName;
* 获取 用户名
* @return String
*/
public String getRealName(){
return realName;
}
@Override
......@@ -237,144 +145,111 @@ public class UserEntity extends UserEntityExt implements IUser {
}
/**
* 设置 用户名
* @param realName
*/
public void setRealName(String realName) {
* 设置 用户名
* @param realName
*/
public void setRealName(String realName){
this.realName = realName;
}
/**
* 获取 用户手机号
* @return mobile
*/
public String getMobile() {
return this.mobile;
* 获取 用户手机号
* @return String
*/
public String getMobile(){
return mobile;
}
/**
* 设置 用户手机号
* @param mobile
*/
public void setMobile(String mobile) {
* 设置 用户手机号
* @param mobile
*/
public void setMobile(String mobile){
this.mobile = mobile;
}
/**
* 获取 用户联系电话
* @return phone
*/
public String getPhone() {
return this.phone;
* 获取 用户联系电话
* @return String
*/
public String getPhone(){
return phone;
}
/**
* 设置 用户联系电话
* @param phone
*/
public void setPhone(String phone) {
* 设置 用户联系电话
* @param phone
*/
public void setPhone(String phone){
this.phone = phone;
}
/**
* 获取 用户邮箱
* @return email
*/
public String getEmail() {
return this.email;
* 获取 用户邮箱
* @return String
*/
public String getEmail(){
return email;
}
/**
* 设置 用户邮箱
* @param email
*/
public void setEmail(String email) {
* 设置 用户邮箱
* @param email
*/
public void setEmail(String email){
this.email = email;
}
/**
* 获取 QQ号码
* @return qq
*/
public String getQq() {
return this.qq;
* 获取 QQ号码
* @return String
*/
public String getQq(){
return qq;
}
/**
* 设置 QQ号码
* @param qq
*/
public void setQq(String qq) {
* 设置 QQ号码
* @param qq
*/
public void setQq(String qq){
this.qq = qq;
}
/**
* 获取 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2
* @return userType
*/
public Integer getUserType() {
return this.userType;
}
@Override
public String getMenuUrl() {
return null;
* 获取 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @return Integer
*/
public Integer getUserType(){
return userType;
}
/**
* 设置 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2
* @param userType
*/
public void setUserType(Integer userType) {
* 设置 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userType
*/
public void setUserType(Integer userType){
this.userType = userType;
}
/**
* 获取 站点id
* @return siteId
*/
public Long getSiteId() {
return this.siteId;
}
@Override
public String getSiteIds() {
return super.getSiteIds();
public Long getDeptId() {
return null;
}
/**
* 设置 站点id
* @param siteId
*/
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
public String getDeptName() {
return null;
}
@Override
public Long getDeptId() {
public Long getCustomerId() {
return null;
}
@Override
public String getDeptName() {
public Long getSiteId() {
return null;
}
/**
* 获取 客户ID
* @return customerId
*/
public Long getCustomerId() {
return this.customerId;
* 获取 所属站点id,多个逗号分隔
* @return String
*/
public String getSiteIds(){
return siteIds;
}
@Override
public Long getCustomerJoinId() {
return null;
......@@ -386,123 +261,96 @@ public class UserEntity extends UserEntityExt implements IUser {
}
/**
* 设置 客户ID
* @param customerId
*/
public void setCustomerId(Long customerId) {
this.customerId = customerId;
* 设置 所属站点id,多个逗号分隔
* @param siteIds
*/
public void setSiteIds(String siteIds){
this.siteIds = siteIds;
}
/**
* 获取 创建时间
* @return createTime
*/
public Date getCreateTime() {
return this.createTime;
* 获取 所属区域code,多个逗号分隔
* @return String
*/
public String getAreaCodes(){
return areaCodes;
}
/**
* 设置 创建时间
* @param createTime
*/
public void setCreateTime(Date createTime) {
this.createTime = createTime;
* 设置 所属区域code,多个逗号分隔
* @param areaCodes
*/
public void setAreaCodes(String areaCodes){
this.areaCodes = areaCodes;
}
/**
* 获取 创建用户
* @return createUserId
*/
public Long getCreateUserId() {
return this.createUserId;
* 获取 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @return Integer
*/
public Integer getStatus(){
return status;
}
/**
* 设置 创建用户
* @param createUserId
*/
public void setCreateUserId(Long createUserId) {
this.createUserId = createUserId;
* 设置 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param status
*/
public void setStatus(Integer status){
this.status = status;
}
/**
* 获取 创建用户名称
* @return createUserName
*/
public String getCreateUserName() {
return this.createUserName;
* 获取 创建用户名称
* @return String
*/
public String getCreateUserName(){
return createUserName;
}
/**
* 设置 创建用户名称
* @param createUserName
*/
public void setCreateUserName(String createUserName) {
* 设置 创建用户名称
* @param createUserName
*/
public void setCreateUserName(String createUserName){
this.createUserName = createUserName;
}
/**
* 获取 最后一次登录时间
* @return lastLoginTime
*/
public Date getLastLoginTime() {
return this.lastLoginTime;
* 获取 最后一次登录时间
* @return Date
*/
public Date getLastLoginTime(){
return lastLoginTime;
}
/**
* 设置 最后一次登录时间
* @param lastLoginTime
*/
public void setLastLoginTime(Date lastLoginTime) {
* 设置 最后一次登录时间
* @param lastLoginTime
*/
public void setLastLoginTime(Date lastLoginTime){
this.lastLoginTime = lastLoginTime;
}
/**
* 获取 最后一次登录地址
* @return lastLoginAddress
*/
public String getLastLoginAddress() {
return this.lastLoginAddress;
* 获取 最后一次登录地址
* @return String
*/
public String getLastLoginAddress(){
return lastLoginAddress;
}
/**
* 设置 最后一次登录地址
* @param lastLoginAddress
*/
public void setLastLoginAddress(String lastLoginAddress) {
* 设置 最后一次登录地址
* @param lastLoginAddress
*/
public void setLastLoginAddress(String 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
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
public boolean equals(Object obj) {
if (obj == null)
return false;
if (obj == null) return false;
if (obj instanceof UserEntity) {
UserEntity tmp = (UserEntity) obj;
if (this.getId().longValue() == tmp.getId().longValue()) {
if (this.getId() == tmp.getId()) {
return true;
}
}
......@@ -511,56 +359,54 @@ public class UserEntity extends UserEntityExt implements IUser {
public String toString(){
StringBuilder sb = new StringBuilder("");
sb
.append(",id:").append(getId())
.append(",loginName:").append(getLoginName())
.append(",loginPwd:").append(getLoginPwd())
.append(",loginPwd1:").append(getLoginPwd1())
.append(",loginPwd2:").append(getLoginPwd2())
.append(",loginPwd3:").append(getLoginPwd3())
.append(",loginLimitAddress:").append(getLoginLimitAddress())
.append(",realName:").append(getRealName())
.append(",mobile:").append(getMobile())
.append(",phone:").append(getPhone())
.append(",email:").append(getEmail())
.append(",qq:").append(getQq())
.append(",userType:").append(getUserType())
.append(",siteId:").append(getSiteId())
.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())
;
sb.append(",loginName:").append(getLoginName());
sb.append(",loginPwd:").append(getLoginPwd());
sb.append(",loginLimitAddress:").append(getLoginLimitAddress());
sb.append(",realName:").append(getRealName());
sb.append(",mobile:").append(getMobile());
sb.append(",phone:").append(getPhone());
sb.append(",email:").append(getEmail());
sb.append(",qq:").append(getQq());
sb.append(",userType:").append(getUserType());
sb.append(",siteIds:").append(getSiteIds());
sb.append(",areaCodes:").append(getAreaCodes());
sb.append(",status:").append(getStatus());
sb.append(",createUserName:").append(getCreateUserName());
sb.append(",lastLoginTime:").append(getLastLoginTime());
sb.append(",lastLoginAddress:").append(getLastLoginAddress());
return sb.toString();
}
public void initAttrValue(){
this.loginName = null;
this.loginPwd = null;
this.loginPwd1 = null;
this.loginPwd2 = null;
this.loginPwd3 = null;
this.loginLimitAddress = null;
this.realName = null;
this.mobile = null;
this.phone = null;
this.email = null;
this.qq = null;
this.userType = null;
this.siteId = null;
this.status = 1;
this.customerId = null;
this.createTime = null;
this.createUserId = null;
this.createUserName = null;
this.lastLoginTime = null;
this.lastLoginAddress = null;
this.lastModPwdTime = null;
this.lastModPwdAddr = null;
this.loginName = "";
this.loginPwd = "";
this.loginLimitAddress = "";
this.realName = "";
this.mobile = "";
this.phone = "";
this.email = "";
this.qq = "";
this.userType = null;
this.siteIds = "";
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;
import com.alibaba.fastjson.annotation.JSONField;
import com.mortals.framework.model.BaseEntityLong;
import lombok.Data;
import java.util.List;
/**
*
* Description:User
* date: 2021-9-26 16:11:48
*/
* Description:User
* date: 2021-9-26 16:11:48
*/
@Data
public class UserEntityExt extends BaseEntityLong {
/**
* 唯一标识
*/
@JSONField(serialize = false)
private String token;
/**
* 登录时间
*/
private Long loginTime;
/**
* 过期时间
*/
private Long expireTime;
private String siteName;
private List<Long> roleIds;
private String siteCode;
private String oldPassword;
private String newPassword;
private String siteIds;
/**
* 站点名称
*/
private String siteName;
private String roleIds;
/**
* 唯一标识
*/
private String token;
/**
* 菜单栏
*/
private String menuUrl;
/**
* 登录时间
*/
private Long loginTime;
/**
* 过期时间
*/
private Long expireTime;
}
\ No newline at end of file
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
*/
public class UserQuery extends UserEntity{
private static final long serialVersionUID = 1632643908887L;
* 用户信息业务查询对象
*
* @author zxfei
* @date 2022-07-06
*/
public class UserQuery extends UserEntity {
/** 开始 用户ID,主键,自增长 */
private Long idStart;
......@@ -19,25 +19,15 @@ public class UserQuery extends UserEntity{
/** 增加 用户ID,主键,自增长 */
private Long idIncrement;
/** 用户ID,主键,自增长 */
/** 用户ID,主键,自增长列表 */
private List <Long> idList;
/** 登录名 */
private List<String> loginNameList;
/** 登录密码,使用md5双次加密 */
private List<String> loginPwdList;
/** 最近一次使用密码,使用md5双次加密 */
private List<String> loginPwd1List;
/** 最近二次使用密码,使用md5双次加密 */
private List<String> loginPwd2List;
/** 最近三次使用密码,使用md5双次加密 */
private List<String> loginPwd3List;
/** 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录 */
private List<String> loginLimitAddressList;
......@@ -56,58 +46,42 @@ public class UserQuery extends UserEntity{
/** QQ号码 */
private List<String> qqList;
/** 开始 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 */
/** 开始 用户类型(0.系统用户,1.普通用户,2.工作人员) */
private Integer userTypeStart;
/** 结束 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 */
/** 结束 用户类型(0.系统用户,1.普通用户,2.工作人员) */
private Integer userTypeEnd;
/** 增加 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 */
/** 增加 用户类型(0.系统用户,1.普通用户,2.工作人员) */
private Integer userTypeIncrement;
/** 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2 */
/** 用户类型(0.系统用户,1.普通用户,2.工作人员)列表 */
private List <Integer> userTypeList;
/** 开始 站点id */
private Long siteIdStart;
/** 结束 站点id */
private Long siteIdEnd;
/** 增加 站点id */
private Long siteIdIncrement;
/** 所属站点id,多个逗号分隔 */
private List<String> siteIdsList;
/** 站点id */
private List <Long> siteIdList;
/** 所属区域code,多个逗号分隔 */
private List<String> areaCodesList;
/** 开始 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 */
/** 开始 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职) */
private Integer statusStart;
/** 结束 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 */
/** 结束 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职) */
private Integer statusEnd;
/** 增加 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 */
/** 增加 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职) */
private Integer statusIncrement;
/** 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1 */
/** 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)列表 */
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 createTimeEnd;
/** 开始 创建用户 */
private Long createUserIdStart;
......@@ -117,12 +91,12 @@ public class UserQuery extends UserEntity{
/** 增加 创建用户 */
private Long createUserIdIncrement;
/** 创建用户 */
/** 创建用户列表 */
private List <Long> createUserIdList;
/** 创建用户名称 */
private List<String> createUserNameList;
/** 开始 最后一次登录时间 */
private String lastLoginTimeStart;
......@@ -131,14 +105,6 @@ public class UserQuery extends UserEntity{
/** 最后一次登录地址 */
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) */
private List<UserQuery> orConditionList;
......@@ -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) */
private List<UserQuery> andConditionList;
public UserQuery(){
}
public UserQuery(){}
/**
* 获取 开始 用户ID,主键,自增长
* @return idStart
*/
* 获取 开始 用户ID,主键,自增长
* @return idStart
*/
public Long getIdStart(){
return this.idStart;
return this.idStart;
}
/**
* 设置 开始 用户ID,主键,自增长
* @param idStart
*/
* 设置 开始 用户ID,主键,自增长
* @param idStart
*/
public void setIdStart(Long idStart){
this.idStart = idStart;
this.idStart = idStart;
}
/**
* 获取 结束 用户ID,主键,自增长
* @return idEnd
*/
* 获取 结束 用户ID,主键,自增长
* @return $idEnd
*/
public Long getIdEnd(){
return this.idEnd;
return this.idEnd;
}
/**
* 设置 结束 用户ID,主键,自增长
* @param idEnd
*/
* 设置 结束 用户ID,主键,自增长
* @param idEnd
*/
public void setIdEnd(Long idEnd){
this.idEnd = idEnd;
this.idEnd = idEnd;
}
/**
* 获取 增加 用户ID,主键,自增长
* @return idIncrement
*/
* 获取 增加 用户ID,主键,自增长
* @return idIncrement
*/
public Long getIdIncrement(){
return this.idIncrement;
return this.idIncrement;
}
/**
* 设置 增加 用户ID,主键,自增长
* @param idIncrement
*/
* 设置 增加 用户ID,主键,自增长
* @param idIncrement
*/
public void setIdIncrement(Long idIncrement){
this.idIncrement = idIncrement;
this.idIncrement = idIncrement;
}
/**
* 获取 用户ID,主键,自增长
* @return idList
*/
* 获取 用户ID,主键,自增长
* @return idList
*/
public List<Long> getIdList(){
return this.idList;
return this.idList;
}
/**
* 设置 用户ID,主键,自增长
* @param idList
*/
* 设置 用户ID,主键,自增长
* @param idList
*/
public void setIdList(List<Long> idList){
this.idList = idList;
}
}
/**
* 获取 登录名
* @return loginNameList
*/
* 获取 登录名
* @return loginNameList
*/
public List<String> getLoginNameList(){
return this.loginNameList;
}
/**
* 设置 登录名
* @param loginNameList
*/
* 设置 登录名
* @param loginNameList
*/
public void setLoginNameList(List<String> loginNameList){
this.loginNameList = loginNameList;
}
/**
* 获取 登录密码,使用md5双次加密
* @return loginPwdList
*/
* 获取 登录密码,使用md5双次加密
* @return loginPwdList
*/
public List<String> getLoginPwdList(){
return this.loginPwdList;
}
/**
* 设置 登录密码,使用md5双次加密
* @param loginPwdList
*/
* 设置 登录密码,使用md5双次加密
* @param loginPwdList
*/
public void setLoginPwdList(List<String> loginPwdList){
this.loginPwdList = loginPwdList;
}
/**
* 获取 最近一次使用密码,使用md5双次加密
* @return loginPwd1List
*/
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
*/
* 获取 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @return loginLimitAddressList
*/
public List<String> getLoginLimitAddressList(){
return this.loginLimitAddressList;
}
/**
* 设置 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @param loginLimitAddressList
*/
* 设置 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @param loginLimitAddressList
*/
public void setLoginLimitAddressList(List<String> loginLimitAddressList){
this.loginLimitAddressList = loginLimitAddressList;
}
/**
* 获取 用户名
* @return realNameList
*/
* 获取 用户名
* @return realNameList
*/
public List<String> getRealNameList(){
return this.realNameList;
}
/**
* 设置 用户名
* @param realNameList
*/
* 设置 用户名
* @param realNameList
*/
public void setRealNameList(List<String> realNameList){
this.realNameList = realNameList;
}
/**
* 获取 用户手机号
* @return mobileList
*/
* 获取 用户手机号
* @return mobileList
*/
public List<String> getMobileList(){
return this.mobileList;
}
/**
* 设置 用户手机号
* @param mobileList
*/
* 设置 用户手机号
* @param mobileList
*/
public void setMobileList(List<String> mobileList){
this.mobileList = mobileList;
}
/**
* 获取 用户联系电话
* @return phoneList
*/
* 获取 用户联系电话
* @return phoneList
*/
public List<String> getPhoneList(){
return this.phoneList;
}
/**
* 设置 用户联系电话
* @param phoneList
*/
* 设置 用户联系电话
* @param phoneList
*/
public void setPhoneList(List<String> phoneList){
this.phoneList = phoneList;
}
/**
* 获取 用户邮箱
* @return emailList
*/
* 获取 用户邮箱
* @return emailList
*/
public List<String> getEmailList(){
return this.emailList;
}
/**
* 设置 用户邮箱
* @param emailList
*/
* 设置 用户邮箱
* @param emailList
*/
public void setEmailList(List<String> emailList){
this.emailList = emailList;
}
/**
* 获取 QQ号码
* @return qqList
*/
* 获取 QQ号码
* @return qqList
*/
public List<String> getQqList(){
return this.qqList;
}
/**
* 设置 QQ号码
* @param qqList
*/
* 设置 QQ号码
* @param qqList
*/
public void setQqList(List<String> qqList){
this.qqList = qqList;
}
/**
* 获取 开始 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2
* @return userTypeStart
*/
* 获取 开始 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @return userTypeStart
*/
public Integer getUserTypeStart(){
return this.userTypeStart;
}
/**
* 设置 开始 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2
* @param userTypeStart
*/
* 设置 开始 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userTypeStart
*/
public void setUserTypeStart(Integer userTypeStart){
this.userTypeStart = userTypeStart;
}
/**
* 获取 结束 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2
* @return userTypeEnd
*/
* 获取 结束 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @return $userTypeEnd
*/
public Integer getUserTypeEnd(){
return this.userTypeEnd;
}
/**
* 设置 结束 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2
* @param userTypeEnd
*/
* 设置 结束 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userTypeEnd
*/
public void setUserTypeEnd(Integer userTypeEnd){
this.userTypeEnd = userTypeEnd;
}
/**
* 获取 增加 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2
* @return userTypeIncrement
*/
* 获取 增加 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @return userTypeIncrement
*/
public Integer getUserTypeIncrement(){
return this.userTypeIncrement;
}
/**
* 设置 增加 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2
* @param userTypeIncrement
*/
* 设置 增加 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userTypeIncrement
*/
public void setUserTypeIncrement(Integer userTypeIncrement){
this.userTypeIncrement = userTypeIncrement;
}
/**
* 获取 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2
* @return userTypeList
*/
* 获取 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @return userTypeList
*/
public List<Integer> getUserTypeList(){
return this.userTypeList;
}
/**
* 设置 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2
* @param userTypeList
*/
* 设置 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userTypeList
*/
public void setUserTypeList(List<Integer> userTypeList){
this.userTypeList = userTypeList;
}
/**
* 获取 开始 站点id
* @return siteIdStart
*/
public Long getSiteIdStart(){
return this.siteIdStart;
}
/**
* 设置 开始 站点id
* @param siteIdStart
*/
public void setSiteIdStart(Long siteIdStart){
this.siteIdStart = siteIdStart;
* 获取 所属站点id,多个逗号分隔
* @return siteIdsList
*/
public List<String> getSiteIdsList(){
return this.siteIdsList;
}
/**
* 获取 结束 站点id
* @return siteIdEnd
*/
public Long getSiteIdEnd(){
return this.siteIdEnd;
* 设置 所属站点id,多个逗号分隔
* @param siteIdsList
*/
public void setSiteIdsList(List<String> siteIdsList){
this.siteIdsList = siteIdsList;
}
/**
* 设置 结束 站点id
* @param siteIdEnd
*/
public void setSiteIdEnd(Long siteIdEnd){
this.siteIdEnd = siteIdEnd;
* 获取 所属区域code,多个逗号分隔
* @return areaCodesList
*/
public List<String> getAreaCodesList(){
return this.areaCodesList;
}
/**
* 获取 增加 站点id
* @return siteIdIncrement
*/
public Long getSiteIdIncrement(){
return this.siteIdIncrement;
* 设置 所属区域code,多个逗号分隔
* @param areaCodesList
*/
public void setAreaCodesList(List<String> areaCodesList){
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
* @param siteIdList
*/
public void setSiteIdList(List<Long> siteIdList){
this.siteIdList = siteIdList;
}
/**
* 获取 开始 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
* @return statusStart
*/
* 获取 开始 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @return statusStart
*/
public Integer getStatusStart(){
return this.statusStart;
}
/**
* 设置 开始 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
* @param statusStart
*/
* 设置 开始 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param statusStart
*/
public void setStatusStart(Integer statusStart){
this.statusStart = statusStart;
}
/**
* 获取 结束 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
* @return statusEnd
*/
* 获取 结束 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @return $statusEnd
*/
public Integer getStatusEnd(){
return this.statusEnd;
}
/**
* 设置 结束 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
* @param statusEnd
*/
* 设置 结束 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param statusEnd
*/
public void setStatusEnd(Integer statusEnd){
this.statusEnd = statusEnd;
}
/**
* 获取 增加 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
* @return statusIncrement
*/
* 获取 增加 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @return statusIncrement
*/
public Integer getStatusIncrement(){
return this.statusIncrement;
}
/**
* 设置 增加 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
* @param statusIncrement
*/
* 设置 增加 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param statusIncrement
*/
public void setStatusIncrement(Integer statusIncrement){
this.statusIncrement = statusIncrement;
}
/**
* 获取 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
* @return statusList
*/
* 获取 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @return statusList
*/
public List<Integer> getStatusList(){
return this.statusList;
}
/**
* 设置 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
* @param statusList
*/
* 设置 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param statusList
*/
public void setStatusList(List<Integer> 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
*/
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
*/
* 获取 开始 创建时间
* @return createTimeStart
*/
public String getCreateTimeStart(){
return this.createTimeStart;
return this.createTimeStart;
}
/**
* 设置 开始 创建时间
* @param createTimeStart
*/
* 设置 开始 创建时间
* @param createTimeStart
*/
public void setCreateTimeStart(String createTimeStart){
this.createTimeStart = createTimeStart;
this.createTimeStart = createTimeStart;
}
/**
* 获取 结束 创建时间
* @return createTimeEnd
*/
* 获取 结束 创建时间
* @return createTimeEnd
*/
public String getCreateTimeEnd(){
return this.createTimeEnd;
return this.createTimeEnd;
}
/**
* 设置 结束 创建时间
* @param createTimeEnd
*/
* 设置 结束 创建时间
* @param createTimeEnd
*/
public void setCreateTimeEnd(String createTimeEnd){
this.createTimeEnd = createTimeEnd;
this.createTimeEnd = createTimeEnd;
}
/**
* 获取 开始 创建用户
* @return createUserIdStart
*/
* 获取 开始 创建用户
* @return createUserIdStart
*/
public Long getCreateUserIdStart(){
return this.createUserIdStart;
return this.createUserIdStart;
}
/**
* 设置 开始 创建用户
* @param createUserIdStart
*/
* 设置 开始 创建用户
* @param createUserIdStart
*/
public void setCreateUserIdStart(Long createUserIdStart){
this.createUserIdStart = createUserIdStart;
this.createUserIdStart = createUserIdStart;
}
/**
* 获取 结束 创建用户
* @return createUserIdEnd
*/
* 获取 结束 创建用户
* @return $createUserIdEnd
*/
public Long getCreateUserIdEnd(){
return this.createUserIdEnd;
return this.createUserIdEnd;
}
/**
* 设置 结束 创建用户
* @param createUserIdEnd
*/
* 设置 结束 创建用户
* @param createUserIdEnd
*/
public void setCreateUserIdEnd(Long createUserIdEnd){
this.createUserIdEnd = createUserIdEnd;
this.createUserIdEnd = createUserIdEnd;
}
/**
* 获取 增加 创建用户
* @return createUserIdIncrement
*/
* 获取 增加 创建用户
* @return createUserIdIncrement
*/
public Long getCreateUserIdIncrement(){
return this.createUserIdIncrement;
return this.createUserIdIncrement;
}
/**
* 设置 增加 创建用户
* @param createUserIdIncrement
*/
* 设置 增加 创建用户
* @param createUserIdIncrement
*/
public void setCreateUserIdIncrement(Long createUserIdIncrement){
this.createUserIdIncrement = createUserIdIncrement;
this.createUserIdIncrement = createUserIdIncrement;
}
/**
* 获取 创建用户
* @return createUserIdList
*/
* 获取 创建用户
* @return createUserIdList
*/
public List<Long> getCreateUserIdList(){
return this.createUserIdList;
return this.createUserIdList;
}
/**
* 设置 创建用户
* @param createUserIdList
*/
* 设置 创建用户
* @param createUserIdList
*/
public void setCreateUserIdList(List<Long> createUserIdList){
this.createUserIdList = createUserIdList;
}
}
/**
* 获取 创建用户名称
* @return createUserNameList
*/
* 获取 创建用户名称
* @return createUserNameList
*/
public List<String> getCreateUserNameList(){
return this.createUserNameList;
}
/**
* 设置 创建用户名称
* @param createUserNameList
*/
* 设置 创建用户名称
* @param createUserNameList
*/
public void setCreateUserNameList(List<String> createUserNameList){
this.createUserNameList = createUserNameList;
}
/**
* 获取 开始 最后一次登录时间
* @return lastLoginTimeStart
*/
* 获取 开始 最后一次登录时间
* @return lastLoginTimeStart
*/
public String getLastLoginTimeStart(){
return this.lastLoginTimeStart;
return this.lastLoginTimeStart;
}
/**
* 设置 开始 最后一次登录时间
* @param lastLoginTimeStart
*/
* 设置 开始 最后一次登录时间
* @param lastLoginTimeStart
*/
public void setLastLoginTimeStart(String lastLoginTimeStart){
this.lastLoginTimeStart = lastLoginTimeStart;
this.lastLoginTimeStart = lastLoginTimeStart;
}
/**
* 获取 结束 最后一次登录时间
* @return lastLoginTimeEnd
*/
* 获取 结束 最后一次登录时间
* @return lastLoginTimeEnd
*/
public String getLastLoginTimeEnd(){
return this.lastLoginTimeEnd;
return this.lastLoginTimeEnd;
}
/**
* 设置 结束 最后一次登录时间
* @param lastLoginTimeEnd
*/
* 设置 结束 最后一次登录时间
* @param lastLoginTimeEnd
*/
public void setLastLoginTimeEnd(String lastLoginTimeEnd){
this.lastLoginTimeEnd = lastLoginTimeEnd;
this.lastLoginTimeEnd = lastLoginTimeEnd;
}
/**
* 获取 最后一次登录地址
* @return lastLoginAddressList
*/
* 获取 最后一次登录地址
* @return lastLoginAddressList
*/
public List<String> getLastLoginAddressList(){
return this.lastLoginAddressList;
}
/**
* 设置 最后一次登录地址
* @param lastLoginAddressList
*/
* 设置 最后一次登录地址
* @param lastLoginAddressList
*/
public void setLastLoginAddressList(List<String> lastLoginAddressList){
this.lastLoginAddressList = lastLoginAddressList;
}
/**
* 获取 开始 最后修改密码时间
* @return lastModPwdTimeStart
*/
public String getLastModPwdTimeStart(){
return this.lastModPwdTimeStart;
}
/**
* 设置 开始 最后修改密码时间
* @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 id
*/
public UserQuery id(Long id){
setId(id);
return this;
}
/**
* 设置 最后修改密码地址
* @param lastModPwdAddrList
*/
public void setLastModPwdAddrList(List<String> lastModPwdAddrList){
this.lastModPwdAddrList = lastModPwdAddrList;
}
/**
* 设置 用户ID,主键,自增长
* @param id
*/
public UserQuery id(Long id){
setId(id);
return this;
}
/**
* 设置 开始 用户ID,主键,自增长
* @param idStart
*/
* 设置 开始 用户ID,主键,自增长
* @param idStart
*/
public UserQuery idStart(Long idStart){
this.idStart = idStart;
return this;
this.idStart = idStart;
return this;
}
/**
* 设置 结束 用户ID,主键,自增长
* @param idEnd
*/
* 设置 结束 用户ID,主键,自增长
* @param idEnd
*/
public UserQuery idEnd(Long idEnd){
this.idEnd = idEnd;
return this;
this.idEnd = idEnd;
return this;
}
/**
* 设置 增加 用户ID,主键,自增长
* @param idIncrement
*/
* 设置 增加 用户ID,主键,自增长
* @param idIncrement
*/
public UserQuery idIncrement(Long idIncrement){
this.idIncrement = idIncrement;
return this;
this.idIncrement = idIncrement;
return this;
}
/**
* 设置 用户ID,主键,自增长
* @param idList
*/
* 设置 用户ID,主键,自增长
* @param idList
*/
public UserQuery idList(List<Long> idList){
this.idList = idList;
return this;
}
/**
* 设置 登录名
* @param loginName
*/
return this;
}
/**
* 设置 登录名
* @param loginName
*/
public UserQuery loginName(String loginName){
setLoginName(loginName);
return this;
return this;
}
/**
* 设置 登录名
* @param loginNameList
*/
* 设置 登录名
* @param loginNameList
*/
public UserQuery loginNameList(List<String> loginNameList){
this.loginNameList = loginNameList;
return this;
return this;
}
/**
* 设置 登录密码,使用md5双次加密
* @param loginPwd
*/
/**
* 设置 登录密码,使用md5双次加密
* @param loginPwd
*/
public UserQuery loginPwd(String loginPwd){
setLoginPwd(loginPwd);
return this;
return this;
}
/**
* 设置 登录密码,使用md5双次加密
* @param loginPwdList
*/
* 设置 登录密码,使用md5双次加密
* @param loginPwdList
*/
public UserQuery loginPwdList(List<String> loginPwdList){
this.loginPwdList = loginPwdList;
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;
return this;
}
/**
* 设置 最近三次使用密码,使用md5双次加密
* @param loginPwd3List
*/
public UserQuery loginPwd3List(List<String> loginPwd3List){
this.loginPwd3List = loginPwd3List;
return this;
}
/**
* 设置 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @param loginLimitAddress
*/
* 设置 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @param loginLimitAddress
*/
public UserQuery loginLimitAddress(String loginLimitAddress){
setLoginLimitAddress(loginLimitAddress);
return this;
return this;
}
/**
* 设置 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @param loginLimitAddressList
*/
* 设置 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
* @param loginLimitAddressList
*/
public UserQuery loginLimitAddressList(List<String> loginLimitAddressList){
this.loginLimitAddressList = loginLimitAddressList;
return this;
return this;
}
/**
* 设置 用户名
* @param realName
*/
/**
* 设置 用户名
* @param realName
*/
public UserQuery realName(String realName){
setRealName(realName);
return this;
return this;
}
/**
* 设置 用户名
* @param realNameList
*/
* 设置 用户名
* @param realNameList
*/
public UserQuery realNameList(List<String> realNameList){
this.realNameList = realNameList;
return this;
return this;
}
/**
* 设置 用户手机号
* @param mobile
*/
/**
* 设置 用户手机号
* @param mobile
*/
public UserQuery mobile(String mobile){
setMobile(mobile);
return this;
return this;
}
/**
* 设置 用户手机号
* @param mobileList
*/
* 设置 用户手机号
* @param mobileList
*/
public UserQuery mobileList(List<String> mobileList){
this.mobileList = mobileList;
return this;
return this;
}
/**
* 设置 用户联系电话
* @param phone
*/
/**
* 设置 用户联系电话
* @param phone
*/
public UserQuery phone(String phone){
setPhone(phone);
return this;
return this;
}
/**
* 设置 用户联系电话
* @param phoneList
*/
* 设置 用户联系电话
* @param phoneList
*/
public UserQuery phoneList(List<String> phoneList){
this.phoneList = phoneList;
return this;
return this;
}
/**
* 设置 用户邮箱
* @param email
*/
/**
* 设置 用户邮箱
* @param email
*/
public UserQuery email(String email){
setEmail(email);
return this;
return this;
}
/**
* 设置 用户邮箱
* @param emailList
*/
* 设置 用户邮箱
* @param emailList
*/
public UserQuery emailList(List<String> emailList){
this.emailList = emailList;
return this;
return this;
}
/**
* 设置 QQ号码
* @param qq
*/
/**
* 设置 QQ号码
* @param qq
*/
public UserQuery qq(String qq){
setQq(qq);
return this;
return this;
}
/**
* 设置 QQ号码
* @param qqList
*/
* 设置 QQ号码
* @param qqList
*/
public UserQuery qqList(List<String> qqList){
this.qqList = qqList;
return this;
return this;
}
/**
* 设置 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2
* @param userType
*/
/**
* 设置 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userType
*/
public UserQuery userType(Integer userType){
setUserType(userType);
return this;
return this;
}
/**
* 设置 开始 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2
* @param userTypeStart
*/
* 设置 开始 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userTypeStart
*/
public UserQuery userTypeStart(Integer userTypeStart){
this.userTypeStart = userTypeStart;
return this;
return this;
}
/**
* 设置 结束 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2
* @param userTypeEnd
*/
* 设置 结束 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userTypeEnd
*/
public UserQuery userTypeEnd(Integer userTypeEnd){
this.userTypeEnd = userTypeEnd;
return this;
return this;
}
/**
* 设置 增加 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2
* @param userTypeIncrement
*/
* 设置 增加 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userTypeIncrement
*/
public UserQuery userTypeIncrement(Integer userTypeIncrement){
this.userTypeIncrement = userTypeIncrement;
return this;
return this;
}
/**
* 设置 用户类型,0:系统用户 1:普通用户 2:工作人员,默认2
* @param userTypeList
*/
* 设置 用户类型(0.系统用户,1.普通用户,2.工作人员)
* @param userTypeList
*/
public UserQuery userTypeList(List<Integer> userTypeList){
this.userTypeList = userTypeList;
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;
return this;
}
/**
* 设置 开始 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
* @param statusStart
*/
public UserQuery statusStart(Integer statusStart){
this.statusStart = statusStart;
return this;
* 设置 所属站点id,多个逗号分隔
* @param siteIds
*/
public UserQuery siteIds(String siteIds){
setSiteIds(siteIds);
return this;
}
/**
* 设置 结束 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
* @param statusEnd
*/
public UserQuery statusEnd(Integer statusEnd){
this.statusEnd = statusEnd;
return this;
* 设置 所属站点id,多个逗号分隔
* @param siteIdsList
*/
public UserQuery siteIdsList(List<String> siteIdsList){
this.siteIdsList = siteIdsList;
return this;
}
/**
* 设置 增加 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
* @param statusIncrement
*/
public UserQuery statusIncrement(Integer statusIncrement){
this.statusIncrement = statusIncrement;
return this;
* 设置 所属区域code,多个逗号分隔
* @param areaCodes
*/
public UserQuery areaCodes(String areaCodes){
setAreaCodes(areaCodes);
return this;
}
/**
* 设置 用户状态,0:停用,1:正常,2:冻结,3:销户,4:离职,默认1
* @param statusList
*/
public UserQuery statusList(List<Integer> statusList){
this.statusList = statusList;
return this;
* 设置 所属区域code,多个逗号分隔
* @param areaCodesList
*/
public UserQuery areaCodesList(List<String> areaCodesList){
this.areaCodesList = areaCodesList;
return this;
}
/**
* 设置 客户ID
* @param customerId
*/
public UserQuery customerId(Long customerId){
setCustomerId(customerId);
return this;
}
/**
* 设置 开始 客户ID
* @param customerIdStart
*/
public UserQuery customerIdStart(Long customerIdStart){
this.customerIdStart = customerIdStart;
return this;
/**
* 设置 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param status
*/
public UserQuery status(Integer status){
setStatus(status);
return this;
}
/**
* 设置 结束 客户ID
* @param customerIdEnd
*/
public UserQuery customerIdEnd(Long customerIdEnd){
this.customerIdEnd = customerIdEnd;
return this;
* 设置 开始 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param statusStart
*/
public UserQuery statusStart(Integer statusStart){
this.statusStart = statusStart;
return this;
}
/**
* 设置 增加 客户ID
* @param customerIdIncrement
*/
public UserQuery customerIdIncrement(Long customerIdIncrement){
this.customerIdIncrement = customerIdIncrement;
return this;
* 设置 结束 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param statusEnd
*/
public UserQuery statusEnd(Integer statusEnd){
this.statusEnd = statusEnd;
return this;
}
/**
* 设置 客户ID
* @param customerIdList
*/
public UserQuery customerIdList(List<Long> customerIdList){
this.customerIdList = customerIdList;
return this;
}
* 设置 增加 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param statusIncrement
*/
public UserQuery statusIncrement(Integer statusIncrement){
this.statusIncrement = statusIncrement;
return this;
}
/**
* 设置 开始 创建时间
* @param createTimeStart
*/
public UserQuery createTimeStart(String createTimeStart){
this.createTimeStart = createTimeStart;
return this;
* 设置 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
* @param statusList
*/
public UserQuery statusList(List<Integer> statusList){
this.statusList = statusList;
return this;
}
/**
* 设置 结束 创建时间
* @param createTimeEnd
*/
public UserQuery createTimeEnd(String createTimeEnd){
this.createTimeEnd = createTimeEnd;
return this;
* 设置 创建用户
* @param createUserId
*/
public UserQuery createUserId(Long createUserId){
setCreateUserId(createUserId);
return this;
}
/**
* 设置 创建用户
* @param createUserId
*/
public UserQuery createUserId(Long createUserId){
setCreateUserId(createUserId);
return this;
}
/**
* 设置 开始 创建用户
* @param createUserIdStart
*/
/**
* 设置 开始 创建用户
* @param createUserIdStart
*/
public UserQuery createUserIdStart(Long createUserIdStart){
this.createUserIdStart = createUserIdStart;
return this;
this.createUserIdStart = createUserIdStart;
return this;
}
/**
* 设置 结束 创建用户
* @param createUserIdEnd
*/
* 设置 结束 创建用户
* @param createUserIdEnd
*/
public UserQuery createUserIdEnd(Long createUserIdEnd){
this.createUserIdEnd = createUserIdEnd;
return this;
this.createUserIdEnd = createUserIdEnd;
return this;
}
/**
* 设置 增加 创建用户
* @param createUserIdIncrement
*/
* 设置 增加 创建用户
* @param createUserIdIncrement
*/
public UserQuery createUserIdIncrement(Long createUserIdIncrement){
this.createUserIdIncrement = createUserIdIncrement;
return this;
this.createUserIdIncrement = createUserIdIncrement;
return this;
}
/**
* 设置 创建用户
* @param createUserIdList
*/
* 设置 创建用户
* @param createUserIdList
*/
public UserQuery createUserIdList(List<Long> createUserIdList){
this.createUserIdList = createUserIdList;
return this;
}
/**
* 设置 创建用户名称
* @param createUserName
*/
return this;
}
/**
* 设置 创建用户名称
* @param createUserName
*/
public UserQuery createUserName(String createUserName){
setCreateUserName(createUserName);
return this;
return this;
}
/**
* 设置 创建用户名称
* @param createUserNameList
*/
* 设置 创建用户名称
* @param createUserNameList
*/
public UserQuery createUserNameList(List<String> createUserNameList){
this.createUserNameList = createUserNameList;
return this;
return this;
}
/**
* 设置 开始 最后一次登录时间
* @param lastLoginTimeStart
*/
public UserQuery lastLoginTimeStart(String lastLoginTimeStart){
this.lastLoginTimeStart = lastLoginTimeStart;
return this;
}
/**
* 设置 结束 最后一次登录时间
* @param lastLoginTimeEnd
*/
public UserQuery lastLoginTimeEnd(String lastLoginTimeEnd){
this.lastLoginTimeEnd = lastLoginTimeEnd;
return this;
}
/**
* 设置 最后一次登录地址
* @param lastLoginAddress
*/
* 设置 最后一次登录地址
* @param lastLoginAddress
*/
public UserQuery lastLoginAddress(String lastLoginAddress){
setLastLoginAddress(lastLoginAddress);
return this;
return this;
}
/**
* 设置 最后一次登录地址
* @param lastLoginAddressList
*/
* 设置 最后一次登录地址
* @param lastLoginAddressList
*/
public UserQuery lastLoginAddressList(List<String> lastLoginAddressList){
this.lastLoginAddressList = lastLoginAddressList;
return this;
return this;
}
/**
* 设置 开始 最后修改密码时间
* @param lastModPwdTimeStart
*/
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
*/
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList
*/
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)
* @param orConditionList
*/
* 设置 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @param orConditionList
*/
public void setOrConditionList(List<UserQuery> orConditionList){
this.orConditionList = orConditionList;
}
/**
* 获取 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @return andConditionList
*/
* 获取 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @return andConditionList
*/
public List<UserQuery> getAndConditionList(){
return this.andConditionList;
}
/**
* 设置 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @param andConditionList
*/
* 设置 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @param andConditionList
*/
public void setAndConditionList(List<UserQuery> 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;
import com.mortals.framework.service.ICRUDService;
import com.mortals.framework.service.IUser;
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 java.util.List;
......@@ -37,7 +38,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @return
* @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> {
* @return
* @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> {
* @param userId 密码
* @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> {
* @param user
* @return
*/
public List<MenuEntity> findOutlookBarList(IUser user);
List<MenuEntity> findOutlookBarList(IUser user);
/**
* 查询用户所有有权限的菜单ID
......@@ -72,7 +73,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @param userEntity
* @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> {
* @return
* @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> {
* @return
* @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;
/**
......@@ -111,5 +112,10 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @return
* @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;
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.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.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.model.UserEntity;
import com.mortals.xhx.base.system.user.model.UserQuery;
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.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* <p>Title: 用户信息</p>
* <p>Description: UserServiceImpl service接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
*
* @author
* @version 1.0.0
*/
......@@ -51,7 +57,9 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
@Autowired
private ResourceService resourceService;
@Autowired
private RoleUserDao roleUserDao;
private RoleService roleService;
@Autowired
private RoleUserService roleUserService;
private void doHandlerUser(UserEntity entity) throws AppException {
if (StringUtils.isNotEmpty(entity.getLoginPwd())) {
......@@ -63,55 +71,58 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
} else {
entity.setLoginPwd(null);
}
// if (entity.isSystemUser()) {
// entity.setUserType(UserType.SYSTEM.getValue());
// } else {
// entity.setUserType(UserType.CUSTOMER.getValue());
// }
}
@Override
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);
}
@Override
protected void saveAfter(UserEntity entity, Context context) throws AppException {
if(CollectionUtils.isNotEmpty(entity.getRoleIds())){
List<RoleUserEntity> roleUserEntityList = new ArrayList<>();
entity.getRoleIds().stream().forEach(item->{
RoleUserEntity roleUserEntity = new RoleUserEntity();
roleUserEntity.setUserId(entity.getId());
roleUserEntity.setRoleId(item);
roleUserEntityList.add(roleUserEntity);
});
roleUserDao.insertBatch(roleUserEntityList);
protected void updateBefore(UserEntity entity, Context context) throws AppException {
// if (entity.getId().longValue() == SysConstains.ADMIN_ID && !context.getUser().isAdmin()) {
// throw new AppException("你没有权限执行该操作");
// }
//更新不更新密码字段
entity.setLoginPwd(null);
this.doHandlerUser(entity);
//更新角色
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
protected void updateBefore(UserEntity entity, Context context) throws AppException {
if (entity.getId().longValue() == SysConstains.ADMIN_ID && !context.getUser().isAdmin()) {
throw new AppException("你没有权限执行该操作");
protected void saveAfter(UserEntity entity, Context context) throws 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
protected void updateAfter(UserEntity entity, Context context) throws AppException {
if(CollectionUtils.isNotEmpty(entity.getRoleIds())){
List<RoleUserEntity> roleUserEntityList = new ArrayList<>();
entity.getRoleIds().stream().forEach(item->{
RoleUserEntity roleUserEntity = new RoleUserEntity();
roleUserEntity.setUserId(entity.getId());
roleUserEntity.setRoleId(item);
roleUserEntityList.add(roleUserEntity);
});
RoleUserEntity condition = new RoleUserEntity();
condition.setUserId(entity.getId());
roleUserDao.delete(condition);
roleUserDao.insertBatch(roleUserEntityList);
}
protected void findAfter(UserEntity params, PageInfo pageInfo, Context context, List<UserEntity> list) throws AppException {
list.stream().peek(item -> {
RoleUserQuery roleUserQuery = new RoleUserQuery();
roleUserQuery.setUserId(item.getId());
String roleIds = roleUserService.find(roleUserQuery).stream().map(RoleUserEntity::getRoleId).map(String::valueOf).collect(Collectors.joining(","));
item.setRoleIds(roleIds);
}).count();
super.findAfter(params, pageInfo, context, list);
}
@Override
......@@ -130,23 +141,6 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
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) {
UserQuery params = new UserQuery();
params.setLoginName(loginName);
......@@ -170,11 +164,6 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
} catch (Exception 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;
}
......@@ -218,7 +207,7 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
urls.addAll(StringUtils.converStr2Set(url));
}
}
Set<Long> authIds = new HashSet<Long>();
Set<Long> authIds = new HashSet<>();
Map<Long, MenuEntity> menuMap = new HashMap<Long, MenuEntity>();
List<MenuEntity> userModuleList = this.menuService.findAllEnable();
for (MenuEntity sysModule : userModuleList) {
......@@ -226,6 +215,7 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
continue;
}
menuMap.put(sysModule.getId(), sysModule);
if (!user.isAdmin() && urls.contains(StringUtils.trim(sysModule.getUrl()))) {
authIds.add(sysModule.getId());
}
......@@ -274,7 +264,6 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
entity.initAttrValue();
entity.setLoginName(loginName);
entity.setRealName(userName);
entity.setCustomerId(customerId);
entity.setLoginPwd(password);
entity.setMobile(mobile);
entity.setUserType(UserType.CUSTOMER.getValue());
......@@ -320,14 +309,27 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
}
try {
sysUser.setLoginPwd(SecurityUtil.md5DoubleEncoding(newPwd));
sysUser.setLoginPwd3(sysUser.getLoginPwd2());
sysUser.setLoginPwd2(sysUser.getLoginPwd1());
sysUser.setLoginPwd1(sysUser.getLoginPwd());
sysUser.setLastModPwdTime(new Date());
} catch (Exception e) {
throw new AppException("密码转换异常!", e);
}
dao.update(sysUser);
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;
import java.util.HashMap;
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.alibaba.fastjson.JSONObject;
import com.mortals.framework.common.IBaseEnum;
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.model.Context;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.framework.web.BaseCRUDJsonMappingController;
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.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>
* <p>Company: </p>
* @author
* @version 1.0.0
* 用户信息
*
* @author: zxfei
* @date: 2022/5/7 15:42
*/
@RestController
@RequestMapping("user")
public class UserController extends BaseCRUDJsonBodyMappingController<UserService, UserEntity, Long> {
@Autowired
private UserService userService;
@Autowired
private RoleService roleService;
@Autowired
private RoleUserService roleUserService;
public UserController() {
super.setFormClass(UserForm.class);
......@@ -60,33 +56,57 @@ public class UserController extends BaseCRUDJsonBodyMappingController<UserServic
@Override
protected void init(Map<String, Object> model, Context context) {
this.addDict(model,"userType", IBaseEnum.getEnumMap(UserType.class));
this.addDict(model,"status", UserStatus.getEnumMap());
List<RoleEntity> roleList = roleService.find(new RoleEntity());
this.addDict(model,"roleId", roleList.stream().collect(Collectors.toMap(e->e.getId().toString(), e->e.getName())));
super.init(model, context);
this.addDict(model, "roleIds", roleService.find(new RoleQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getName())));
}
@Override
protected int editAfter(Long id, Map<String, Object> model, UserEntity entity, Context context) throws AppException {
entity.setLoginPwd(null);
entity.setLoginPwd1(null);
entity.setLoginPwd2(null);
entity.setLoginPwd3(null);
return 1;
protected void doListBefore(UserEntity query, Map<String, Object> model, Context context) throws AppException {
if (!StringUtils.isEmpty(query.getRealName())) {
query.setRealName("%".concat(query.getRealName()).concat("%"));
}
if (!StringUtils.isEmpty(query.getLoginName())) {
query.setLoginName("%".concat(query.getLoginName()).concat("%"));
}
}
@RequestMapping(value = "change/password", method = RequestMethod.POST)
public String changePassword(@RequestBody UserEntity entity) {
IUser user = this.getCurUser();
if(user == null){
return this.createFailJsonResp("请先登录");
@Override
protected int editAfter(Long id, Map<String, Object> model, UserEntity entity, Context context) throws AppException {
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();
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_MSG, "密码修改成功!");
} catch (Exception e) {
......@@ -95,4 +115,22 @@ public class UserController extends BaseCRUDJsonBodyMappingController<UserServic
}
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;
import com.alibaba.fastjson.JSONObject;
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.xhx.base.system.valid.model.ValidCodeEntity;
import com.mortals.xhx.base.system.valid.service.ValidCodeService;
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.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 {
DATE("date", "日期选择栏"),
AREA("area", "区域选择栏"),
IMAGE("@image", "图片选择"),
DYNAMIC_TABLE("dt", "动态表格");
DYNAMIC_TABLE("dt", "动态表格"),;
private String value;
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 {
columnsItem.setBorder(false);
columnsItem.setSize("medium");
columnsItem.setGutter(15);
columnsItem.setSpan(24);
columnsItem.setSpan(12);
columnsItem.setOptionType("default");
columnsItem.setDataType("static");
columnsItem.setAction("https://www.fastmock.site/mock/51715c0157535b99010bde55f2df33c8/formDesigner/api/options");
......
......@@ -45,7 +45,7 @@ public class DesignDateComponent extends DesignComponent {
columnsItem.setRequired(false);
columnsItem.setMaxLength(50);
columnsItem.setGutter(15);
columnsItem.setSpan(24);
columnsItem.setSpan(12);
columnsItem.setFormat("yyyy 年 MM 月 dd 日");
columnsItem.setValueFormat("yyyy 年 MM 月 dd 日");
......
......@@ -11,8 +11,6 @@ import com.mortals.xhx.common.pdu.gen.component.ComponentCons;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
......@@ -50,7 +48,6 @@ public class DesignDynamicTableComponent extends DesignComponent {
listItem.setShowSummary(false);
listItem.setSumText("合计");
listItem.setSummaryText("元");
listItem.setRowCount(3);
if (!ObjectUtils.isEmpty(cons.getColList())) {
//动态生成列元素
......@@ -133,12 +130,11 @@ public class DesignDynamicTableComponent extends DesignComponent {
columnsItem.setRequired(false);
columnsItem.setMaxLength(50);
columnsItem.setGutter(15);
columnsItem.setSpan(24);
columnsItem.setSpan(12);
columnsItem.setValue("");
columnsItem.setClearable(true);
columnsItem.setDisabled(false);
columnsItem.setReadonly(false);
columnsItem.setRules(Collections.emptyList());
// columnsItem.setRangeSeparator("-");
// columnsItem.setFormat("yyyy-MM-dd");
// columnsItem.setValueFormat("yyyy-MM-dd");
......
......@@ -42,7 +42,7 @@ public class DesignInputComponent extends DesignComponent {
columnsItem.setRequired(false);
columnsItem.setMaxLength(50);
columnsItem.setGutter(15);
columnsItem.setSpan(24);
columnsItem.setSpan(12);
columnsItem.setWidth("100%");
columnsItem.setClearable(true);
columnsItem.setDisabled(false);
......
......@@ -49,7 +49,7 @@ public class DesignRadioComponent extends DesignComponent {
columnsItem.setBorder(false);
columnsItem.setSize("medium");
columnsItem.setGutter(15);
columnsItem.setSpan(24);
columnsItem.setSpan(12);
columnsItem.setOptionType("default");
columnsItem.setDataType("static");
columnsItem.setAction("https://www.fastmock.site/mock/51715c0157535b99010bde55f2df33c8/formDesigner/api/options");
......
......@@ -50,7 +50,7 @@ public class DesignSelectComponent extends DesignComponent {
columnsItem.setCollapseTags(false);
columnsItem.setDisabled(false);
columnsItem.setGutter(15);
columnsItem.setSpan(24);
columnsItem.setSpan(12);
columnsItem.setDataType("static");
columnsItem.setAction("https://www.fastmock.site/mock/51715c0157535b99010bde55f2df33c8/formDesigner/api/options");
columnsItem.setClearable(false);
......
......@@ -30,7 +30,4 @@ public final class Constant {
public final static String Param_sealWay = "sealWay";
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;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.SpliteratorUtil;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import lombok.Data;
import org.springframework.util.ObjectUtils;
......
......@@ -32,4 +32,6 @@ public class ComponentCons {
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;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ReUtil;
......@@ -52,7 +51,7 @@ public class ExportDocUtil {
String xpath = "/" + paths.stream().collect(Collectors.joining("/"));
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);
}
// NodeList nodeList = ((NodeList) XmlUtil.getByXPath(xpath, document, XPathConstants.NODESET, ns));
......@@ -174,6 +173,7 @@ public class ExportDocUtil {
NodeList nodeList = element.getChildNodes();
Node childNode;
// 有可能没有子节点,做一个非空判断
if (nodeList.getLength() != 0) {
//分组子节点分组编号,且是element节点
......@@ -204,7 +204,7 @@ public class ExportDocUtil {
Pattern pattern = Pattern.compile(regEx);
List<String> allGroups = ReUtil.getAllGroups(pattern, childNode.getTextContent());
if (!ObjectUtils.isEmpty(allGroups)) {
// text = CollUtil.join(allGroups, ";");
// text = CollUtil.join(allGroups, ";");
text = Arrays.asList(childNode.getTextContent().split("\\$")).stream().map(String::trim)
.map(item -> StrUtil.subBetween(item, "{", "}"))
.filter(f -> f != null)
......@@ -295,6 +295,21 @@ public class ExportDocUtil {
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表达式
*
......@@ -410,18 +425,182 @@ public class ExportDocUtil {
//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);
} else {
String ckHeader = "□";
sb.append(ckHeader);
public static void testClearXml() {
File file = new File("E:\\评审报告(竞争性谈判).xml");
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;
//import com.aspose.words.Document;
//import com.aspose.words.ImageSaveOptions;
//import com.aspose.words.SaveFormat;
/**
* @author: zxfei
* @date: 2021/10/14 15:44
* @description:
**/
import com.aspose.words.Document;
import com.aspose.words.ImageSaveOptions;
import com.aspose.words.SaveFormat;
......@@ -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;
import com.mortals.framework.springcloud.service.IApplicationService;
/**
* 应用级服务,在应用启动、停止过程中调用
*
* 缺陷:类加载完成后就调用,会由于某些组件还未初始化而导致服务异常,
* 比如Kafka的连接以及订阅初始化比较靠后,在服务启动过程中就调用操作kafka相关API,将导致失败
* 比如开启Socket监听端口,可能端口都接收到连接请求了,但数据库连接还未初始化完成,导致请求处理失败
* 比如定时任务,任务执行时,相关缓存还未初始化,导致处理失败
*
* 应用场景:
* 1、无依赖其它模块或框架的数据初始化等操作
* @author GM
* @date 2020年7月15日
*/
@Component
public class DemoStartService implements IApplicationService {
......
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.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;
import com.mortals.framework.springcloud.service.IApplicationStartedService;
/**
* 应用级服务,在应用启动后、停止过程中调用
* 应用已经完成启动完成,才调用该服务
* 应用场景:
* 1、应用任务,应用启动后定时或间隔执行的任务
* 2、Socket服务端
* @author GM
* @date 2020年7月15日
*/
@Component
//@ConditionalOnProperty(name="com.mortal",prefix = "",havingValue = "xxx")
public class DemoStartedService implements IApplicationStartedService {
......
......@@ -305,6 +305,7 @@ public class MatterDatumServiceImpl extends AbstractCRUDServiceImpl<MatterDatumD
builder.buildGrammerRegex(RegexUtils.createGeneral("{{", "}}"));
try {
Map<String, Object> data = mapper.readValue(docFormVo.getFormContent(), Map.class);
Map<String, Object> addMap = new HashMap<>();
//遍历查看是否有图片数据,多选框
data.entrySet().stream().forEach(entry -> {
if (entry.getKey().indexOf("@image") != -1) {
......@@ -314,7 +315,7 @@ public class MatterDatumServiceImpl extends AbstractCRUDServiceImpl<MatterDatumD
try {
PictureRenderData pictureRenderData = Pictures.ofStream(new FileInputStream(imagepath), PictureType.JPEG)
.size(100, 120).create();
data.put(StrUtil.removePrefixIgnoreCase(entry.getKey(),"@"),pictureRenderData);
addMap.put(StrUtil.removePrefixIgnoreCase(entry.getKey(),"@"),pictureRenderData);
//entry.setValue(pictureRenderData);
} catch (FileNotFoundException e) {
log.error("error", e);
......@@ -350,6 +351,9 @@ public class MatterDatumServiceImpl extends AbstractCRUDServiceImpl<MatterDatumD
builder.bind(entry.getKey(), new MultipleRowTableRenderPolicy());
}
});
if(addMap.size()>0){
data.putAll(addMap);
}
//查询是否有多选框,
//获取模板文件地址
MatterDatumEntity docTemplateEntity = this.get(docFormVo.getId(),context);
......
......@@ -7,7 +7,7 @@
<parent>
<groupId>com.mortals</groupId>
<artifactId>mortals-common</artifactId>
<version>1.1.5-SNAPSHOT</version>
<version>1.1.7-SNAPSHOT</version>
</parent>
<groupId>com.mortals.xhx</groupId>
<artifactId>fill-system</artifactId>
......
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