From b20a3ef10363e20c111ad2fa81f1871345d9ff71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 20 Dec 2023 21:00:48 +0800 Subject: [PATCH 01/64] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/elog/annotation/Elog.java | 23 + .../elog/annotation/ElogDetailField.java | 14 + .../elog/annotation/ElogDetailTable.java | 13 + .../salary/elog/annotation/ElogField.java | 23 + .../elog/annotation/ElogPrimaryKey.java | 9 + .../salary/elog/annotation/ElogTable.java | 16 + .../salary/elog/annotation/LoggerTarget.java | 24 ++ .../elog/annotation/handle/ElogHandler.java | 177 ++++++++ .../annotation/handle/ElogTableScanner.java | 172 ++++++++ .../handle/LoggerTargetHandler.java | 40 ++ .../engine/salary/elog/dto/CancelContext.java | 25 ++ .../engine/salary/elog/dto/DateTypeEnum.java | 16 + .../engine/salary/elog/dto/LoggerContext.java | 408 ++++++++++++++++++ .../salary/elog/dto/LoggerDetailContext.java | 102 +++++ .../engine/salary/elog/dto/RedoContext.java | 24 ++ .../salary/elog/dto/TableChangeBean.java | 53 +++ .../salary/elog/dto/TableColumnBean.java | 155 +++++++ .../engine/salary/elog/util/ElogUtils.java | 50 +++ .../salary/elog/util/LoggerTemplate.java | 164 +++++++ .../elog/util/LoggerTemplateBuilder.java | 21 + 20 files changed, 1529 insertions(+) create mode 100644 src/com/engine/salary/elog/annotation/Elog.java create mode 100644 src/com/engine/salary/elog/annotation/ElogDetailField.java create mode 100644 src/com/engine/salary/elog/annotation/ElogDetailTable.java create mode 100644 src/com/engine/salary/elog/annotation/ElogField.java create mode 100644 src/com/engine/salary/elog/annotation/ElogPrimaryKey.java create mode 100644 src/com/engine/salary/elog/annotation/ElogTable.java create mode 100644 src/com/engine/salary/elog/annotation/LoggerTarget.java create mode 100644 src/com/engine/salary/elog/annotation/handle/ElogHandler.java create mode 100644 src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java create mode 100644 src/com/engine/salary/elog/annotation/handle/LoggerTargetHandler.java create mode 100644 src/com/engine/salary/elog/dto/CancelContext.java create mode 100644 src/com/engine/salary/elog/dto/DateTypeEnum.java create mode 100644 src/com/engine/salary/elog/dto/LoggerContext.java create mode 100644 src/com/engine/salary/elog/dto/LoggerDetailContext.java create mode 100644 src/com/engine/salary/elog/dto/RedoContext.java create mode 100644 src/com/engine/salary/elog/dto/TableChangeBean.java create mode 100644 src/com/engine/salary/elog/dto/TableColumnBean.java create mode 100644 src/com/engine/salary/elog/util/ElogUtils.java create mode 100644 src/com/engine/salary/elog/util/LoggerTemplate.java create mode 100644 src/com/engine/salary/elog/util/LoggerTemplateBuilder.java diff --git a/src/com/engine/salary/elog/annotation/Elog.java b/src/com/engine/salary/elog/annotation/Elog.java new file mode 100644 index 000000000..7e00ca25e --- /dev/null +++ b/src/com/engine/salary/elog/annotation/Elog.java @@ -0,0 +1,23 @@ +package com.engine.salary.elog.annotation; + +import java.lang.annotation.*; + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface Elog { + + String module(); + + String function(); + + String operateType(); + + String operateTypeName(); + + String sql() default ""; + + boolean isLocal() default true; + + String infoMethod() default ""; +} diff --git a/src/com/engine/salary/elog/annotation/ElogDetailField.java b/src/com/engine/salary/elog/annotation/ElogDetailField.java new file mode 100644 index 000000000..129c57da8 --- /dev/null +++ b/src/com/engine/salary/elog/annotation/ElogDetailField.java @@ -0,0 +1,14 @@ +package com.engine.salary.elog.annotation; + +import java.lang.annotation.*; + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +public @interface ElogDetailField { + + String fieldType() default "varchar"; + String length() default "50"; + String fieldName(); + String desc() default "自定义字段"; +} diff --git a/src/com/engine/salary/elog/annotation/ElogDetailTable.java b/src/com/engine/salary/elog/annotation/ElogDetailTable.java new file mode 100644 index 000000000..d5054b7c1 --- /dev/null +++ b/src/com/engine/salary/elog/annotation/ElogDetailTable.java @@ -0,0 +1,13 @@ +package com.engine.salary.elog.annotation; + +import java.lang.annotation.*; + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE}) +public @interface ElogDetailTable { + + String module(); + + String function() default "common"; +} diff --git a/src/com/engine/salary/elog/annotation/ElogField.java b/src/com/engine/salary/elog/annotation/ElogField.java new file mode 100644 index 000000000..3b5df99c2 --- /dev/null +++ b/src/com/engine/salary/elog/annotation/ElogField.java @@ -0,0 +1,23 @@ +package com.engine.salary.elog.annotation; + +import com.engine.salary.elog.dto.DateTypeEnum; + +import java.lang.annotation.*; + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +public @interface ElogField { + + DateTypeEnum dataType() default DateTypeEnum.VARCHAR; + + int length() default 50; + + String comment() default "自定义字段"; + + String defaultValue() default ""; + + boolean isNull() default true; + + boolean isKey() default false; +} diff --git a/src/com/engine/salary/elog/annotation/ElogPrimaryKey.java b/src/com/engine/salary/elog/annotation/ElogPrimaryKey.java new file mode 100644 index 000000000..291f82562 --- /dev/null +++ b/src/com/engine/salary/elog/annotation/ElogPrimaryKey.java @@ -0,0 +1,9 @@ +package com.engine.salary.elog.annotation; + +import java.lang.annotation.*; + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.PARAMETER}) +public @interface ElogPrimaryKey { +} diff --git a/src/com/engine/salary/elog/annotation/ElogTable.java b/src/com/engine/salary/elog/annotation/ElogTable.java new file mode 100644 index 000000000..28f5f853b --- /dev/null +++ b/src/com/engine/salary/elog/annotation/ElogTable.java @@ -0,0 +1,16 @@ +package com.engine.salary.elog.annotation; + +import org.springframework.stereotype.Component; + +import java.lang.annotation.*; + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE}) +@Component +public @interface ElogTable { + + String module(); + + String function() default "common"; +} diff --git a/src/com/engine/salary/elog/annotation/LoggerTarget.java b/src/com/engine/salary/elog/annotation/LoggerTarget.java new file mode 100644 index 000000000..c1e337ca3 --- /dev/null +++ b/src/com/engine/salary/elog/annotation/LoggerTarget.java @@ -0,0 +1,24 @@ +package com.engine.salary.elog.annotation; + +import org.springframework.core.annotation.AliasFor; + +import java.lang.annotation.*; + +/** + * @ClassName: LoggerTarget + * @Description 日志构造器-自定义注解 + * @Author tanghj + * @Date 2021/2/10 14:18 + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE}) +public @interface LoggerTarget { + @AliasFor("module") + String value() default ""; + + @AliasFor("value") + String module() default ""; + + String function() default "common"; +} diff --git a/src/com/engine/salary/elog/annotation/handle/ElogHandler.java b/src/com/engine/salary/elog/annotation/handle/ElogHandler.java new file mode 100644 index 000000000..815191606 --- /dev/null +++ b/src/com/engine/salary/elog/annotation/handle/ElogHandler.java @@ -0,0 +1,177 @@ +package com.engine.salary.elog.annotation.handle; + +import com.weaver.common.async.producer.client.AsyncClient; +import com.weaver.common.distribution.genid.IdGenerator; +import com.weaver.common.elog.annotation.Elog; +import com.weaver.common.elog.annotation.ElogPrimaryKey; +import com.weaver.common.elog.dao.QueryCurretValusMapper; +import com.weaver.common.elog.dto.LoggerContext; +import com.weaver.common.elog.util.LoggerTemplate; +import org.apache.commons.lang3.StringUtils; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.ReflectionUtils; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; +import java.util.Date; +import java.util.List; +import java.util.Map; + + +/** + * @ClassName: LoggerTargetHandler + * @Description 从Spring扫描到的类中获取到Elog自定义注解类设置function属性 + * @Author tanghj + * @Date 2021/2/10 14:18 + */ +@Aspect +@Component +public class ElogHandler { + + @Autowired + ApplicationContext applicationContext; + + @Autowired + protected AsyncClient asyncClient; + + @Autowired + QueryCurretValusMapper queryCurretValusMapper; + + /** + * 切面写入日志 + */ + @Pointcut("@annotation(com.weaver.common.elog.annotation.Elog)" ) + public void writeLog(){} + @Around("writeLog()") + public Object writeLog(ProceedingJoinPoint pjp){ + Object[] args = pjp.getArgs(); + Signature signature = pjp.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + Method method = methodSignature.getMethod(); + + Elog elog = method.getAnnotation(Elog.class); + String moduleName = elog.module(); + String funtionName = elog.function(); + String operateType = elog.operateType(); + String operateTypeName = elog.operateTypeName(); + boolean isLocal = elog.isLocal(); + Annotation[][] annos = method.getParameterAnnotations(); + + Object id = null; + int keyPosition = -1; + int index = 0; + + Class idClass = null; + // 获取主键id注解 + for(Annotation[] anno : annos) { + if(anno.length > 0) { + for(Annotation annotation : anno) { + if(annotation instanceof ElogPrimaryKey) { + idClass = method.getParameters()[index].getType(); + id = args[index]; + if(StringUtils.isEmpty(id+"")) { + id = idClass.cast(IdGenerator.generate() + ""); + } + keyPosition = index; + break; + } + } + } + index ++; + } + + LoggerContext loggerContext = null; + // 获取日志实体类 + for(Object arg: args) { + if(arg instanceof LoggerContext) { + loggerContext = (LoggerContext) arg; + break; + } + } + + if(loggerContext == null) { + loggerContext = new LoggerContext(); + } + + // 日志实体类的初始化 + // loggerContext.setOperateType("UPDATE"); + loggerContext.setFunctionName(funtionName); + loggerContext.setModuleName(moduleName); + loggerContext.setOperateType(operateType); + loggerContext.setOperateTypeName(operateTypeName); + loggerContext.setDate(new Date()); + loggerContext.setDevice("IOS"); + + String sql = elog.sql(); + String infoMethod = elog.infoMethod(); + + boolean isSql = false; + boolean isMethod = false; + Object currentClass = null; + Method infoMtd = null; + if(StringUtils.isNotEmpty(id+"")) { + if(StringUtils.isNotEmpty(sql)) { + isSql = true; + Map oldValue = queryCurretValusMapper.queryValues(String.format(sql, id)); + loggerContext.setOldValues(oldValue); + } else if(StringUtils.isNotEmpty(infoMethod)){ + isMethod = true; + currentClass = applicationContext.getBean(pjp.getTarget().getClass()); + // 获取方法 + infoMtd = ReflectionUtils.findMethod(pjp.getTarget().getClass(),infoMethod, idClass); + + // todo 为空的情况加异常提醒 + // 反射执行方法 + Object res= ReflectionUtils.invokeMethod(infoMtd,currentClass, id); + if(res != null) { + if(res instanceof List) { + loggerContext.setOldValueList((List) res); + } else { + loggerContext.setOldValues(res); + } + + } + } + } + + LoggerTemplate loggerTemplate = new LoggerTemplate(); + loggerTemplate.setFunction(funtionName); + loggerTemplate.setModule(moduleName); + loggerTemplate.setAsyncClient(asyncClient); + + Object result = null; + try { + args[keyPosition] = id; + result = pjp.proceed(args); + } catch (Throwable throwable) { + throwable.printStackTrace(); + } + if(isSql) { + Map oldValue = queryCurretValusMapper.queryValues(String.format(sql, id)); + loggerContext.setNewValues(oldValue); + } else if(isMethod) { + Object res= ReflectionUtils.invokeMethod(infoMtd,currentClass, id); + if(res != null) { + if(res instanceof List) { + loggerContext.setNewValueList((List) res); + } else { + loggerContext.setNewValues(res); + } + } + } + if(isLocal) + loggerTemplate.write(loggerContext); + else + loggerTemplate.write(loggerContext,false); + return result; + + } +} diff --git a/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java b/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java new file mode 100644 index 000000000..2be2f35b6 --- /dev/null +++ b/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java @@ -0,0 +1,172 @@ +package com.engine.salary.elog.annotation.handle; + +import com.engine.salary.elog.annotation.ElogField; +import com.engine.salary.elog.annotation.ElogTable; +import com.engine.salary.elog.dto.TableColumnBean; +import com.engine.salary.elog.util.ElogUtils; +import com.weaver.common.elog.dao.TableCheckerMapper; +import com.weaver.common.elog.dto.DateTypeEnum; +import lombok.extern.slf4j.Slf4j; +import org.reflections.Reflections; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.aop.support.AopUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; + +import javax.annotation.Resource; +import java.lang.reflect.Field; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @ClassName: ElogTableScanner + * @Description 日志操作表扫描 + * @Author tanghj + * @Date 2021/3/12 13:31 + */ +@Slf4j +public class ElogTableScanner { + private Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Resource + private ApplicationContext applicationContext; + + @Autowired + private TableCheckerMapper tableCheckerMapper; + + @Override + public void run(String... args) throws Exception { + + // todo 需要考虑集群下,控制一台机器来跑 + scanElogTable(); + + } + + private void scanElogTable() { + // todo 是否还需要扫描Elog(因为可能不需要本地存储) ELogDetailTable, + Map tableBeans = this.applicationContext.getBeansWithAnnotation(ElogTable.class); + Reflections reflections = new Reflections("com.example.controller"); + Set> restController = reflections.getTypesAnnotatedWith(RestController.class); + + List baseColumns = new ArrayList<>(); + + Map> tableColumns = elogTableHandle(tableBeans,baseColumns); + + for(String tableName : tableColumns.keySet()) { + + // todo 需要处理明细表,如果没有直接初始化原始明细表,如果有加上自定义的 + List columns = tableColumns.get(tableName); + if(columns == null) { + columns = baseColumns; + } else { + columns.addAll(baseColumns); + } + tableCheck(tableName, columns); + } + + } + + private Map> elogTableHandle(Map tableBeans, List baseColumns) { + + + Map> tableMap = new HashMap<>(); + + + for (Map.Entry entry : tableBeans.entrySet()) {//遍历每个controller层 + + List list = new ArrayList<>(); + System.out.println(entry.getKey());//demo1Controller + Object value = entry.getValue(); + Class aClass = AopUtils.getTargetClass(value);//获取class + + ElogTable elogTable = aClass.getAnnotation(ElogTable.class); + + List fields = Arrays.asList(aClass.getDeclaredFields());//获取方法 + for (Field f : fields) { + + ElogField field = f.getAnnotation(ElogField.class); + if(field == null) { + continue; + } + + TableColumnBean tableColumnBean = new TableColumnBean(); + + tableColumnBean.setColumnName(f.getName()); + tableColumnBean.setColumnComment(field.comment()); + tableColumnBean.setColumnDefault(field.defaultValue()); + tableColumnBean.setFieldLength(field.length()); + tableColumnBean.setDataType(field.dataType()); + tableColumnBean.setNullable(field.isNull()); + list.add(tableColumnBean); + } + if(!ElogUtils.BASE_TABLE.equals(elogTable.module())) { + + tableMap.put(ElogUtils.getTableName(elogTable.module(), elogTable.function()), list); + } else { + baseColumns.addAll(list); + } + } + + return tableMap; + } + + private void tableCheck(String tableName, List columns) { + + List oldColumns = tableCheckerMapper.getTableStructure(tableName); + + // 表不存在 + if(oldColumns == null || oldColumns.size() == 0) { + createTable(tableName,columns ); + } else { + Map newcolMap = new HashMap<>(); + Map oldcolMap = new HashMap<>(); + + columns.stream().forEach(tableColumnBean -> newcolMap.put(tableColumnBean.getColumnName().toLowerCase(), tableColumnBean)); + oldColumns.stream().forEach(tableColumnBean -> { + tableColumnBean.setDataType(ElogUtils.getEnumFromString(DateTypeEnum.class, tableColumnBean.getDataTypeStr())); + tableColumnBean.setNullable("YES".equalsIgnoreCase(tableColumnBean.getIsNullableStr())); + oldcolMap.put(tableColumnBean.getColumnName().toLowerCase(), tableColumnBean); + }); + // 只增加或者修改,不删除字段 + for(String key : newcolMap.keySet()) { + if(oldcolMap.containsKey(key)) { + // 字段变动则修改 + if(!(newcolMap.get(key).toSql()).equals(oldcolMap.get(key).toSql())) + this.modifyColumn(tableName, newcolMap.get(key)); + } else { + this.addColumn(tableName, newcolMap.get(key)); + } + } + } + + } + + private void createTable(String tableName, List columns) { + StringBuilder sb = new StringBuilder("create table ").append(tableName).append(" ( "); + sb.append(columns.stream().map( bean -> bean.toSql()).collect(Collectors.joining(","))); + sb.append(")"); + logger.info("创建sql:{}",sb.toString()); + tableCheckerMapper.createElogTable(sb.toString()); + } + + private void addColumn(String tableName, TableColumnBean tableColumnBean) { + StringBuilder sb = new StringBuilder("alter table ") + .append(tableName).append(" ") + .append(" add ") + .append(" column ") + .append(tableColumnBean.toSql()); + logger.info("新增字段sql:{}",sb.toString()); + tableCheckerMapper.createElogTable(sb.toString()); + } + + private void modifyColumn(String tableName, TableColumnBean tableColumnBean) { + StringBuilder sb = new StringBuilder("alter table ") + .append(tableName).append(" ") + .append(" modify ") + .append(" column ") + .append(tableColumnBean.toSql()); + logger.info("修改字段sql:{}",sb.toString()); + tableCheckerMapper.createElogTable(sb.toString()); + } +} diff --git a/src/com/engine/salary/elog/annotation/handle/LoggerTargetHandler.java b/src/com/engine/salary/elog/annotation/handle/LoggerTargetHandler.java new file mode 100644 index 000000000..4a5c44d7b --- /dev/null +++ b/src/com/engine/salary/elog/annotation/handle/LoggerTargetHandler.java @@ -0,0 +1,40 @@ +package com.engine.salary.elog.annotation.handle; + +import com.weaver.common.elog.annotation.LoggerTarget; +import com.weaver.common.elog.util.LoggerTemplate; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; + +import java.util.Map; + + +/** + * @ClassName: LoggerTargetHandler + * @Description 从Spring扫描到的类中获取到LoggerTarget自定义注解类设置function属性 + * @Author tanghj + * @Date 2021/2/10 14:18 + */ + +@Component +public class LoggerTargetHandler implements CommandLineRunner { + + @Autowired + ApplicationContext applicationContext; + + @Override + public void run(String... args) throws Exception { + Map loggtemplateMap = applicationContext.getBeansWithAnnotation(LoggerTarget.class); + + for(Object obj : loggtemplateMap.values()) { + if(obj instanceof LoggerTemplate) { + LoggerTarget loggerTarget = obj.getClass().getAnnotation(LoggerTarget.class); + ((LoggerTemplate) obj).setFunction(loggerTarget.function()); + ((LoggerTemplate) obj).setModule(StringUtils.isNotEmpty(loggerTarget.value()) ? loggerTarget.value() : loggerTarget.module()); + } + + } + } +} diff --git a/src/com/engine/salary/elog/dto/CancelContext.java b/src/com/engine/salary/elog/dto/CancelContext.java new file mode 100644 index 000000000..1c9771b69 --- /dev/null +++ b/src/com/engine/salary/elog/dto/CancelContext.java @@ -0,0 +1,25 @@ +package com.engine.salary.elog.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @ClassName: CancelContext + * @Description 撤销实体类 + * @Author tanghj + * @Date 2021/2/10 14:18 + */ +@ApiModel("撤销实体类") +public class CancelContext { + + @ApiModelProperty("撤销参数") + private T cancleParams; + + public T getCancleParams() { + return cancleParams; + } + + public void setCancleParams(T cancleParams) { + this.cancleParams = cancleParams; + } +} diff --git a/src/com/engine/salary/elog/dto/DateTypeEnum.java b/src/com/engine/salary/elog/dto/DateTypeEnum.java new file mode 100644 index 000000000..9833cfa86 --- /dev/null +++ b/src/com/engine/salary/elog/dto/DateTypeEnum.java @@ -0,0 +1,16 @@ +package com.engine.salary.elog.dto; + +public enum DateTypeEnum { + VARCHAR, + BIGINT, + INT, + DATETIME, + TEXT, + LONGTEXT, + DOUBLE, + DECIMAL, + TINYINT, + FLOAT; + + +} diff --git a/src/com/engine/salary/elog/dto/LoggerContext.java b/src/com/engine/salary/elog/dto/LoggerContext.java new file mode 100644 index 000000000..248ce45d8 --- /dev/null +++ b/src/com/engine/salary/elog/dto/LoggerContext.java @@ -0,0 +1,408 @@ +package com.engine.salary.elog.dto; + +import com.engine.salary.elog.annotation.ElogField; +import com.engine.salary.elog.annotation.ElogTable; +import com.engine.salary.elog.util.ElogUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * @ClassName: LoggerContext + * @Description 日志实体类。支持通过泛型扩展日志字段 + * @Author tanghj + * @Date 2021/2/10 14:18 + */ +@ElogTable(module = ElogUtils.BASE_TABLE) +@ApiModel("日志实体类") +public class LoggerContext { + @ElogField(comment = "ID", dataType = DateTypeEnum.VARCHAR, isKey = true, isNull = false) + @ApiModelProperty("日志ID") + private long id; + + @ElogField(dataType = DateTypeEnum.VARCHAR, length = 36,comment = "日志UUID") + @ApiModelProperty("日志UUID") + private String uuid; + + @ApiModelProperty("自定义日志字段信息") + private T customInfo; + @ElogField(dataType = DateTypeEnum.DATETIME,comment = "操作时间") + @ApiModelProperty("操作时间") + private Date date; + + @ElogField(dataType = DateTypeEnum.VARCHAR,length = 50,comment = "终端信息") + @ApiModelProperty("终端信息") + private String device; + + @ElogField(dataType = DateTypeEnum.VARCHAR,length = 50,comment = "操作人") + @ApiModelProperty("操作人") + private String operator; + + @ElogField(dataType = DateTypeEnum.VARCHAR,length = 100,comment = "操作人姓名") + @ApiModelProperty("操作人姓名") + private String operatorName; + + @ElogField(dataType = DateTypeEnum.VARCHAR,length = 10,comment = "租户id") + @ApiModelProperty("租户id") + private String tenant_key; + + /** + * 要操作的对象在表中的主键值 + */ + @ElogField(dataType = DateTypeEnum.VARCHAR,length = 50,comment = "操作目标id") + @ApiModelProperty("操作目标id") + private String targetId; + + @ElogField(dataType = DateTypeEnum.TEXT ,comment = "操作目标名称") + @ApiModelProperty("操作目标名称(用于显示)") + private String targetName; + + @ElogField(dataType = DateTypeEnum.VARCHAR, length = 100,comment = "模块") + @ApiModelProperty("目标对象类型(大分类,模块,服务)") + private String moduleName;// 模块 + + /** + * 目标对象类型(小分类,模块/服务下的子功能。子项目) + * 数据存储是以模块名_子项目名作为最基本的存储单元 + * 如果是子项目下的子项目 命名为:子项目名_子项目名_子项目名(全部小写) + */ + @ElogField(dataType = DateTypeEnum.VARCHAR, length = 100,comment = "服务(方法)") + @ApiModelProperty("目标对象类型(小分类,模块/服务下的子功能。子项目)") + private String functionName; + + @ElogField(dataType = DateTypeEnum.VARCHAR, length = 100,comment = "访问接口名") + @ApiModelProperty("访问接口名") + private String interfaceName; + + @ElogField(dataType = DateTypeEnum.VARCHAR, length = 50,comment = "操作类型") + @ApiModelProperty("操作类型(增删改查等)") + private String operateType; + + @ElogField(dataType = DateTypeEnum.TEXT,comment = "操作类型") + @ApiModelProperty("操作类型名称") + private String operateTypeName; + + /** + * 每个TableChangeBean 为一张表,支持记录多张表的前后值 + */ + @ApiModelProperty("修改前、后的值") + private List changeValues;// 操作表名,[字段名,值] + + @ElogField(dataType = DateTypeEnum.TEXT,comment = "操作类型") + @ApiModelProperty("操作详细说明") + private String operatedesc; + + @ApiModelProperty("涉及的相关参数") + private Map params; + + /*@ApiModelProperty("主日志") + private String mainId;//当作为主表,belongMainId不赋值 + + @ApiModelProperty("从表日志") + private String belongMainId;*/ + + @ElogField(dataType = DateTypeEnum.VARCHAR, length = 50,comment = "操作IP") + @ApiModelProperty("操作IP") + private String clientIp; + + @ElogField(dataType = DateTypeEnum.VARCHAR, length = 50,comment = "分组") + @ApiModelProperty("分组") + private String groupId; + + /*@ApiModelProperty("是否明显表") + private boolean isDetail;*/ + + @ElogField(dataType = DateTypeEnum.TEXT, comment = "分组标题") + @ApiModelProperty("分组标题") + private int groupNameLabel; + + @ApiModelProperty("重做业务接口") + private String redoService; + + @ElogField(dataType = DateTypeEnum.LONGTEXT, comment = "重做参数") + @ApiModelProperty("重做参数") + private RedoContext redoContext; + + @ElogField(dataType = DateTypeEnum.VARCHAR, length = 200, comment = "撤销业务接口") + @ApiModelProperty("撤销业务接口") + private String cancelService; + + @ElogField(dataType = DateTypeEnum.LONGTEXT, comment = "撤销参数") + @ApiModelProperty("撤销参数") + private CancelContext cancelContext; + + @ApiModelProperty("日志明细列表(值变化列表-自动赋值、或者自定义字段)") + private List detailContexts; + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public T getCustomInfo() { + return customInfo; + } + + public void setCustomInfo(T customInfo) { + this.customInfo = customInfo; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public String getDevice() { + return device; + } + + public void setDevice(String device) { + this.device = device; + } + + public String getOperator() { + return operator; + } + + public void setOperator(String operator) { + this.operator = operator; + } + + public String getTenant_key() { + return tenant_key; + } + + public void setTenant_key(String tenant_key) { + this.tenant_key = tenant_key; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getTargetName() { + return targetName; + } + + public void setTargetName(String targetName) { + this.targetName = targetName; + } + + public String getModuleName() { + return moduleName; + } + + public void setModuleName(String moduleName) { + this.moduleName = moduleName; + } + + public String getFunctionName() { + return functionName; + } + + public void setFunctionName(String functionName) { + this.functionName = functionName; + } + + public String getInterfaceName() { + return interfaceName; + } + + public void setInterfaceName(String interfaceName) { + this.interfaceName = interfaceName; + } + + public String getOperateType() { + return operateType; + } + + public void setOperateType(String operateType) { + this.operateType = operateType; + } + + public List getChangeValues() { + return changeValues; + } + + public void setChangeValues(List changeValues) { + this.changeValues = changeValues; + } + + public String getOperatedesc() { + return operatedesc; + } + + public void setOperatedesc(String operatedesc) { + this.operatedesc = operatedesc; + } + + public Map getParams() { + return params; + } + + public void setParams(Map params) { + this.params = params; + } + + /*public String getMainId() { + return mainId; + } + + public void setMainId(String mainId) { + this.mainId = mainId; + } + + public String getBelongMainId() { + return belongMainId; + } + + public void setBelongMainId(String belongMainId) { + this.belongMainId = belongMainId; + }*/ + + public String getClientIp() { + return clientIp; + } + + public void setClientIp(String clientIp) { + this.clientIp = clientIp; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + +/* public boolean isDetail() { + return isDetail; + } + + public void setDetail(boolean detail) { + isDetail = detail; + }*/ + + public int getGroupNameLabel() { + return groupNameLabel; + } + + public void setGroupNameLabel(int groupNameLabel) { + this.groupNameLabel = groupNameLabel; + } + + public String getRedoService() { + return redoService; + } + + public void setRedoService(String redoService) { + this.redoService = redoService; + } + + public RedoContext getRedoContext() { + return redoContext; + } + + public void setRedoContext(RedoContext redoContext) { + this.redoContext = redoContext; + } + + public CancelContext getCancelContext() { + return cancelContext; + } + + public void setCancelContext(CancelContext cancelContext) { + this.cancelContext = cancelContext; + } + + public String getCancelService() { + return cancelService; + } + public void setCancelService(String cancelService) { + this.cancelService = cancelService; + } + + public List getDetailContexts() { + return detailContexts; + } + + public void setDetailContexts(List detailContexts) { + this.detailContexts = detailContexts; + } + + public String getOperatorName() { + return operatorName; + } + + public void setOperatorName(String operatorName) { + this.operatorName = operatorName; + } + + public void setOldValues(Object object) { + TableChangeBean bean = new TableChangeBean(); + bean.setOldValue(object); + getChangeList().add(bean); + } + + public void setOldValueList(List list) { + if(list != null) + list.stream().forEach(obj -> setOldValues(obj)); + } + + public void setNewValueList(List list) { + if(list != null) + list.stream().forEach(obj -> setNewValues(obj)); + } + + public void setNewValues(Object object) { + List list = getChangeList(); + + boolean handled = false; + for(TableChangeBean bean : list) { + if(bean.getNewValue() == null) { + bean.setNewValue(object); + handled = true; + break; + } + } + if(!handled) { + TableChangeBean bean = new TableChangeBean(); + bean.setOldValue(object); + list.add(bean); + } + } + + public List getChangeList() { + + if(this.changeValues == null) { + this.changeValues = new ArrayList<>(); + } + + return this.changeValues; + + } + + public String getOperateTypeName() { + return operateTypeName; + } + + public void setOperateTypeName(String operateTypeName) { + this.operateTypeName = operateTypeName; + } +} + diff --git a/src/com/engine/salary/elog/dto/LoggerDetailContext.java b/src/com/engine/salary/elog/dto/LoggerDetailContext.java new file mode 100644 index 000000000..8dd6ec7d9 --- /dev/null +++ b/src/com/engine/salary/elog/dto/LoggerDetailContext.java @@ -0,0 +1,102 @@ +package com.engine.salary.elog.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @ClassName: ValueChangeBean + * @Description 值变化实体类(自动将表字段值变更类转换为该类) + * @Author tanghj + * @Date 2021/3/9 11:06 + */ +@ApiModel("值变化实体类") +public class LoggerDetailContext { + + @ApiModelProperty("同一个bean转换的数据,uuid相同,作为区分标识") + private String uuid; + + @ApiModelProperty("表名") + private String tableName; + + @ApiModelProperty("字段名") + private String fieldName; + + @ApiModelProperty("更新后的值") + private String newValue; + + @ApiModelProperty("更新前的值") + private String oldValue; + + @ApiModelProperty("字段描述") + private String fieldDesc; + + @ApiModelProperty("字段展示顺序") + private int showorder; + + @ApiModelProperty("自定义字段") + private T customDetailInfo; + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public String getFieldName() { + return fieldName; + } + + public void setFieldName(String fieldName) { + this.fieldName = fieldName; + } + + public String getNewValue() { + return newValue; + } + + public void setNewValue(String newValue) { + this.newValue = newValue; + } + + public String getOldValue() { + return oldValue; + } + + public void setOldValue(String oldValue) { + this.oldValue = oldValue; + } + + public String getFieldDesc() { + return fieldDesc; + } + + public void setFieldDesc(String fieldDesc) { + this.fieldDesc = fieldDesc; + } + + public int getShoworder() { + return showorder; + } + + public void setShoworder(int showorder) { + this.showorder = showorder; + } + + public T getCustomDetailInfo() { + return customDetailInfo; + } + + public void setCustomDetailInfo(T customDetailInfo) { + this.customDetailInfo = customDetailInfo; + } +} diff --git a/src/com/engine/salary/elog/dto/RedoContext.java b/src/com/engine/salary/elog/dto/RedoContext.java new file mode 100644 index 000000000..749643aed --- /dev/null +++ b/src/com/engine/salary/elog/dto/RedoContext.java @@ -0,0 +1,24 @@ +package com.engine.salary.elog.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @ClassName: RedoContext + * @Description 重做实体类 + * @Author tanghj + * @Date 2021/2/10 14:18 + */ +@ApiModel("重做实体类") +public class RedoContext { + @ApiModelProperty("重做参数") + private T redoParams; + + public T getRedoParams() { + return redoParams; + } + + public void setRedoParams(T redoParams) { + this.redoParams = redoParams; + } +} diff --git a/src/com/engine/salary/elog/dto/TableChangeBean.java b/src/com/engine/salary/elog/dto/TableChangeBean.java new file mode 100644 index 000000000..86cfdb0c3 --- /dev/null +++ b/src/com/engine/salary/elog/dto/TableChangeBean.java @@ -0,0 +1,53 @@ +package com.engine.salary.elog.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @ClassName: TableChangeBean + * @Description 表更新前后值类 + * @Author tanghj + * @Date 2021/3/8 15:58 + */ +@ApiModel("表更新前后值类") +public class TableChangeBean { + + @ApiModelProperty("表名") + private String tableName; + + /** + * 泛型必须是具体的实体类 + */ + @ApiModelProperty("更新前的值") + private T oldValue; + + /** + * 泛型必须是具体的实体类 + */ + @ApiModelProperty("更新后的值") + private T newValue; + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public T getOldValue() { + return oldValue; + } + + public void setOldValue(T oldValue) { + this.oldValue = oldValue; + } + + public T getNewValue() { + return newValue; + } + + public void setNewValue(T newValue) { + this.newValue = newValue; + } +} diff --git a/src/com/engine/salary/elog/dto/TableColumnBean.java b/src/com/engine/salary/elog/dto/TableColumnBean.java new file mode 100644 index 000000000..e4c635cd0 --- /dev/null +++ b/src/com/engine/salary/elog/dto/TableColumnBean.java @@ -0,0 +1,155 @@ +package com.engine.salary.elog.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @ClassName: TableColumnBean + * @Description 表字段类 + * @Author tanghj + * @Date 2021/3/12 11:44 + */ +@ApiModel("表字段类") +public class TableColumnBean { + + @ApiModelProperty("列名") + private String columnName; + + /** + * varchar(20) + */ + @ApiModelProperty("数据类型") + private String columnType; + + @ApiModelProperty("字段类型-字符串") + private String dataTypeStr; + + @ApiModelProperty("字段类型") + private DateTypeEnum dataType; + + @ApiModelProperty("长度") + private long fieldLength; + + @ApiModelProperty("是否为空") + private boolean isNullable; + + @ApiModelProperty("是否为空-字符串") + private String isNullableStr; + + @ApiModelProperty("默认值") + private Object columnDefault; + + @ApiModelProperty("备注") + private String columnComment; + + public String getColumnName() { + return columnName; + } + + public void setColumnName(String columnName) { + this.columnName = columnName; + } + + public String getColumnType() { + return columnType; + } + + public void setColumnType(String columnType) { + this.columnType = columnType; + } + + public DateTypeEnum getDataType() { + return dataType; + } + + public void setDataType(DateTypeEnum dataType) { + this.dataType = dataType; + } + + public long getFieldLength() { + return fieldLength; + } + + public void setFieldLength(long fieldLength) { + this.fieldLength = fieldLength; + } + + public boolean isNullable() { + return isNullable; + } + + public void setNullable(boolean nullable) { + isNullable = nullable; + } + + public Object getColumnDefault() { + return columnDefault; + } + + public void setColumnDefault(Object columnDefault) { + this.columnDefault = columnDefault; + } + + public String getColumnComment() { + return columnComment; + } + + public void setColumnComment(String columnComment) { + this.columnComment = columnComment; + } + + public String getDataTypeStr() { + return dataTypeStr; + } + + public void setDataTypeStr(String dataTypeStr) { + this.dataTypeStr = dataTypeStr; + } + + public String getIsNullableStr() { + return isNullableStr; + } + + public void setIsNullableStr(String isNullableStr) { + this.isNullableStr = isNullableStr; + } + + public boolean equals(TableColumnBean tableColumnBean) { + + return this.toSql().equals(tableColumnBean.toSql()); + } + + public String toSql() { + + StringBuilder sb = new StringBuilder(this.columnName.toLowerCase()).append(" "); + + if (this.dataType == null) { + return "类型为空"; + } + switch (this.dataType) { + case BIGINT: + case INT: + case TEXT: + case LONGTEXT: + case DATETIME: + case FLOAT: + case TINYINT: + case DOUBLE: + sb.append(this.dataType.name().toLowerCase()).append(" "); + break; + case VARCHAR: + sb.append(this.dataType.name().toLowerCase()).append("(").append(this.fieldLength).append(") "); + break; + case DECIMAL: + long length = (this.fieldLength < 0 || this.fieldLength > 38) ? 0 : this.fieldLength; + sb.append(this.dataType.name().toLowerCase()).append("(").append(38 - length).append(",").append(length).append(") "); + break; + default: + sb.append("varchar").append("(").append(10).append(") "); + } + + sb.append("comment ").append("'").append(this.columnComment).append("' "); + + return sb.toString(); + } +} diff --git a/src/com/engine/salary/elog/util/ElogUtils.java b/src/com/engine/salary/elog/util/ElogUtils.java new file mode 100644 index 000000000..d2203f7ab --- /dev/null +++ b/src/com/engine/salary/elog/util/ElogUtils.java @@ -0,0 +1,50 @@ +package com.engine.salary.elog.util; + +import com.engine.salary.elog.dto.DateTypeEnum; + +/** + * @ClassName: ElogUtils + * @Description TODO + * @Author tanghj + * @Date 2021/3/12 14:17 + */ +public class ElogUtils { + + private static final String TABLE_SPACER = "_"; + private static final String TABLE_SUFFIX = "logs"; + private static final String DETAIL_TABLE_SUFFIX = "detail"; + public static final String BASE_TABLE = "BASE_ELOG_TABLE"; + + + public static String getTableName(String module, String function) { + return getTableName(module, function, false); + } + + public static String getTableName(String module, String function, boolean isDetail){ + + return module + TABLE_SPACER + function + TABLE_SUFFIX + (isDetail ? DETAIL_TABLE_SUFFIX : ""); + } + + /** + * String 转枚举 + * @param c + * @param string + * @param + * @return + */ + public static > T getEnumFromString(Class c, String string) { + if (c != null && string != null) { + try { + return Enum.valueOf(c, string.trim().toUpperCase()); + } catch (IllegalArgumentException ex) { + } + } + return null; + } + + public static void main(String[] args) { + System.out.println(DateTypeEnum.BIGINT.name()); + DateTypeEnum columnTypeEnum = getEnumFromString(DateTypeEnum.class, "varchar"); + System.out.println(columnTypeEnum.equals(DateTypeEnum.VARCHAR)); + } +} diff --git a/src/com/engine/salary/elog/util/LoggerTemplate.java b/src/com/engine/salary/elog/util/LoggerTemplate.java new file mode 100644 index 000000000..1041e9375 --- /dev/null +++ b/src/com/engine/salary/elog/util/LoggerTemplate.java @@ -0,0 +1,164 @@ +package com.engine.salary.elog.util; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.async.bean.AsyncBean; +import com.weaver.common.async.producer.client.AsyncClient; +import com.weaver.common.elog.dto.LoggerContext; +import com.weaver.common.elog.dto.LoggerDetailContext; +import com.weaver.common.elog.dto.TableChangeBean; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.springframework.beans.factory.annotation.Autowired; + +import java.lang.reflect.Field; +import java.util.*; + +/** + * @ClassName: LoggerTemplate + * @Description 日志基本功能类 + * @Author tanghj + * @Date 2021/2/10 14:18 + */ +public class LoggerTemplate { + protected String function = "common"; + + protected String module; + + protected String logCenterQueue = "Elog_cneterlogQueue"; + + protected String localQueue; + + @Autowired + protected AsyncClient asyncClient; + /** + * 写入日志消息队列 + * @param context 日志实体 + */ + public void write(LoggerContext context){ + this.write(context, true); + } + + /** + * 写入日志消息队列 + * @param context 日志实体 + * @param isLocal true 存储本地, false不存储本地 + */ + public void write(LoggerContext context, boolean isLocal){ + AsyncBean asyncBean = new AsyncBean<>(); + handleContext(context); + asyncBean.setMessage(context); + asyncBean.setQueue(logCenterQueue); + asyncClient.send(asyncBean); + if(isLocal) { + asyncBean.setQueue(localQueue); + asyncClient.send(asyncBean); + } + } + + private void handleContext(LoggerContext context) { + context.setModuleName(module); + context.setFunctionName(function); + + List changeBeans = context.getChangeValues(); + + List valueChangeList = new ArrayList<>(); + int showOrder = 0; + if(changeBeans != null) + for(TableChangeBean changeBean : changeBeans) { + if(changeBean != null && (changeBean.getNewValue() != null || changeBean.getOldValue() != null)) { + ApiModel apiModel = null; + JSONObject newJo = new JSONObject(); + JSONObject oldJo = new JSONObject(); + JSONObject valueChange = JSONObject.parseObject(JSONObject.toJSONString(changeBean)); + if(changeBean.getNewValue() != null) { + apiModel = changeBean.getNewValue().getClass().getAnnotation(ApiModel.class); + newJo = valueChange.getJSONObject("newValue"); + } else { + apiModel = changeBean.getOldValue().getClass().getAnnotation(ApiModel.class); + } + if(changeBean.getOldValue() != null) { + oldJo = valueChange.getJSONObject("oldValue"); + } + if(apiModel != null) { + Field[] fields = changeBean.getNewValue().getClass().getDeclaredFields(); + for(Field field : fields) { + ApiModelProperty apiModelProperty = field.getAnnotation(ApiModelProperty.class); + LoggerDetailContext valueChangeBean = new LoggerDetailContext(); + valueChangeBean.setTableName(changeBean.getTableName()); + valueChangeBean.setFieldName(field.getName()); + valueChangeBean.setFieldDesc(apiModelProperty.value()); + valueChangeBean.setNewValue(newJo.getString(field.getName())); + valueChangeBean.setOldValue(oldJo.getString(field.getName())); + valueChangeBean.setShoworder(showOrder++); + valueChangeList.add(valueChangeBean); + } + } else { + Set keys = new HashSet<>(); + for(String key : newJo.keySet()) { + keys.add(key); + LoggerDetailContext valueChangeBean = new LoggerDetailContext(); + valueChangeBean.setTableName(changeBean.getTableName()); + valueChangeBean.setFieldName(key); + valueChangeBean.setFieldDesc(key); + valueChangeBean.setNewValue(newJo.getString(key)); + valueChangeBean.setOldValue(oldJo.getString(key)); + valueChangeBean.setShoworder(showOrder++); + valueChangeList.add(valueChangeBean); + } + for(String key : oldJo.keySet()) { + if(keys.contains(key)) + continue; + keys.add(key); + LoggerDetailContext valueChangeBean = new LoggerDetailContext(); + valueChangeBean.setTableName(changeBean.getTableName()); + valueChangeBean.setFieldName(key); + valueChangeBean.setFieldDesc(key); + valueChangeBean.setNewValue(newJo.getString(key)); + valueChangeBean.setOldValue(oldJo.getString(key)); + valueChangeBean.setShoworder(showOrder++); + valueChangeList.add(valueChangeBean); + } + } + } + } + + if(valueChangeList.size() > 0) + context.setDetailContexts(valueChangeList); + } + + public String getFunction() { + return function; + } + + public void setFunction(String function) { + this.function = function; + } + + public String getModule() { + return module; + } + + /** + * 获取日志实体类 + * @return + */ + public LoggerContext getContext() { + + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUuid(UUID.randomUUID().toString().replace("-","")); + loggerContext.setModuleName(this.module); + loggerContext.setFunctionName(this.function); + + return loggerContext; + + } + + public void setModule(String module) { + this.localQueue = module + "LocalQueue"; + this.module = module; + } + + public void setAsyncClient(AsyncClient asyncClient) { + this.asyncClient = asyncClient; + } +} diff --git a/src/com/engine/salary/elog/util/LoggerTemplateBuilder.java b/src/com/engine/salary/elog/util/LoggerTemplateBuilder.java new file mode 100644 index 000000000..14ae29945 --- /dev/null +++ b/src/com/engine/salary/elog/util/LoggerTemplateBuilder.java @@ -0,0 +1,21 @@ +package com.engine.salary.elog.util; + +/** + * @ClassName: LoggerTemplateBuilder + * @Description 日志基本类构造器 + * @Author tanghj + * @Date 2021/2/10 14:18 + */ +public class LoggerTemplateBuilder { + + public static LoggerTemplate build(String module){ + return build(module, "common"); + } + public static LoggerTemplate build(String module, String function){ + LoggerTemplate loggerTemplate = new LoggerTemplate(); + loggerTemplate.setFunction(function); + loggerTemplate.setModule(module); + + return loggerTemplate; + } +} From 83a41da11d5c5708c9c57f666797efcedfb8a494 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 21 Dec 2023 14:30:21 +0800 Subject: [PATCH 02/64] =?UTF-8?q?=E6=97=A5=E5=BF=97=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/elog/annotation/ElogTable.java | 2 +- .../salary/elog/annotation/LoggerTarget.java | 6 +- .../elog/annotation/handle/ElogHandler.java | 354 +++++++++--------- .../annotation/handle/ElogTableScanner.java | 46 +-- .../handle/LoggerTargetHandler.java | 78 ++-- .../elog/async/LoggerMessageListener.java | 31 ++ .../engine/salary/elog/config/ELogCache.java | 25 ++ .../salary/elog/config/ELogTableChecker.java | 44 +++ .../service/ApplicationContextProvider.java | 67 ++++ .../salary/elog/service/LocalElogService.java | 74 ++++ .../salary/elog/util/LoggerTemplate.java | 142 ++++--- .../formlua/entity/parameter/ExcelFuncs.java | 2 +- .../entity/parameter/FuncDescUtil.java | 2 +- .../mapper/elog/LocalElogDaoMapper.java | 36 ++ .../salary/mapper/elog/LocalElogDaoMapper.xml | 41 ++ .../mapper/elog/QueryCurretValusMapper.java | 8 + .../mapper/elog/QueryCurretValusMapper.xml | 9 + .../mapper/elog/TableCheckerMapper.java | 20 + .../salary/mapper/elog/TableCheckerMapper.xml | 79 ++++ 19 files changed, 735 insertions(+), 331 deletions(-) create mode 100644 src/com/engine/salary/elog/async/LoggerMessageListener.java create mode 100644 src/com/engine/salary/elog/config/ELogCache.java create mode 100644 src/com/engine/salary/elog/config/ELogTableChecker.java create mode 100644 src/com/engine/salary/elog/service/ApplicationContextProvider.java create mode 100644 src/com/engine/salary/elog/service/LocalElogService.java create mode 100644 src/com/engine/salary/mapper/elog/LocalElogDaoMapper.java create mode 100644 src/com/engine/salary/mapper/elog/LocalElogDaoMapper.xml create mode 100644 src/com/engine/salary/mapper/elog/QueryCurretValusMapper.java create mode 100644 src/com/engine/salary/mapper/elog/QueryCurretValusMapper.xml create mode 100644 src/com/engine/salary/mapper/elog/TableCheckerMapper.java create mode 100644 src/com/engine/salary/mapper/elog/TableCheckerMapper.xml diff --git a/src/com/engine/salary/elog/annotation/ElogTable.java b/src/com/engine/salary/elog/annotation/ElogTable.java index 28f5f853b..a236b5b6e 100644 --- a/src/com/engine/salary/elog/annotation/ElogTable.java +++ b/src/com/engine/salary/elog/annotation/ElogTable.java @@ -7,7 +7,7 @@ import java.lang.annotation.*; @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) -@Component + public @interface ElogTable { String module(); diff --git a/src/com/engine/salary/elog/annotation/LoggerTarget.java b/src/com/engine/salary/elog/annotation/LoggerTarget.java index c1e337ca3..701d4f8e6 100644 --- a/src/com/engine/salary/elog/annotation/LoggerTarget.java +++ b/src/com/engine/salary/elog/annotation/LoggerTarget.java @@ -1,7 +1,5 @@ package com.engine.salary.elog.annotation; -import org.springframework.core.annotation.AliasFor; - import java.lang.annotation.*; /** @@ -14,10 +12,10 @@ import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) public @interface LoggerTarget { - @AliasFor("module") +// @AliasFor("module") String value() default ""; - @AliasFor("value") +// @AliasFor("value") String module() default ""; String function() default "common"; diff --git a/src/com/engine/salary/elog/annotation/handle/ElogHandler.java b/src/com/engine/salary/elog/annotation/handle/ElogHandler.java index 815191606..7cb1dda25 100644 --- a/src/com/engine/salary/elog/annotation/handle/ElogHandler.java +++ b/src/com/engine/salary/elog/annotation/handle/ElogHandler.java @@ -1,177 +1,177 @@ -package com.engine.salary.elog.annotation.handle; - -import com.weaver.common.async.producer.client.AsyncClient; -import com.weaver.common.distribution.genid.IdGenerator; -import com.weaver.common.elog.annotation.Elog; -import com.weaver.common.elog.annotation.ElogPrimaryKey; -import com.weaver.common.elog.dao.QueryCurretValusMapper; -import com.weaver.common.elog.dto.LoggerContext; -import com.weaver.common.elog.util.LoggerTemplate; -import org.apache.commons.lang3.StringUtils; -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.Signature; -import org.aspectj.lang.annotation.Around; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Pointcut; -import org.aspectj.lang.reflect.MethodSignature; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.stereotype.Component; -import org.springframework.util.ReflectionUtils; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; -import java.util.Date; -import java.util.List; -import java.util.Map; - - -/** - * @ClassName: LoggerTargetHandler - * @Description 从Spring扫描到的类中获取到Elog自定义注解类设置function属性 - * @Author tanghj - * @Date 2021/2/10 14:18 - */ -@Aspect -@Component -public class ElogHandler { - - @Autowired - ApplicationContext applicationContext; - - @Autowired - protected AsyncClient asyncClient; - - @Autowired - QueryCurretValusMapper queryCurretValusMapper; - - /** - * 切面写入日志 - */ - @Pointcut("@annotation(com.weaver.common.elog.annotation.Elog)" ) - public void writeLog(){} - @Around("writeLog()") - public Object writeLog(ProceedingJoinPoint pjp){ - Object[] args = pjp.getArgs(); - Signature signature = pjp.getSignature(); - MethodSignature methodSignature = (MethodSignature) signature; - Method method = methodSignature.getMethod(); - - Elog elog = method.getAnnotation(Elog.class); - String moduleName = elog.module(); - String funtionName = elog.function(); - String operateType = elog.operateType(); - String operateTypeName = elog.operateTypeName(); - boolean isLocal = elog.isLocal(); - Annotation[][] annos = method.getParameterAnnotations(); - - Object id = null; - int keyPosition = -1; - int index = 0; - - Class idClass = null; - // 获取主键id注解 - for(Annotation[] anno : annos) { - if(anno.length > 0) { - for(Annotation annotation : anno) { - if(annotation instanceof ElogPrimaryKey) { - idClass = method.getParameters()[index].getType(); - id = args[index]; - if(StringUtils.isEmpty(id+"")) { - id = idClass.cast(IdGenerator.generate() + ""); - } - keyPosition = index; - break; - } - } - } - index ++; - } - - LoggerContext loggerContext = null; - // 获取日志实体类 - for(Object arg: args) { - if(arg instanceof LoggerContext) { - loggerContext = (LoggerContext) arg; - break; - } - } - - if(loggerContext == null) { - loggerContext = new LoggerContext(); - } - - // 日志实体类的初始化 - // loggerContext.setOperateType("UPDATE"); - loggerContext.setFunctionName(funtionName); - loggerContext.setModuleName(moduleName); - loggerContext.setOperateType(operateType); - loggerContext.setOperateTypeName(operateTypeName); - loggerContext.setDate(new Date()); - loggerContext.setDevice("IOS"); - - String sql = elog.sql(); - String infoMethod = elog.infoMethod(); - - boolean isSql = false; - boolean isMethod = false; - Object currentClass = null; - Method infoMtd = null; - if(StringUtils.isNotEmpty(id+"")) { - if(StringUtils.isNotEmpty(sql)) { - isSql = true; - Map oldValue = queryCurretValusMapper.queryValues(String.format(sql, id)); - loggerContext.setOldValues(oldValue); - } else if(StringUtils.isNotEmpty(infoMethod)){ - isMethod = true; - currentClass = applicationContext.getBean(pjp.getTarget().getClass()); - // 获取方法 - infoMtd = ReflectionUtils.findMethod(pjp.getTarget().getClass(),infoMethod, idClass); - - // todo 为空的情况加异常提醒 - // 反射执行方法 - Object res= ReflectionUtils.invokeMethod(infoMtd,currentClass, id); - if(res != null) { - if(res instanceof List) { - loggerContext.setOldValueList((List) res); - } else { - loggerContext.setOldValues(res); - } - - } - } - } - - LoggerTemplate loggerTemplate = new LoggerTemplate(); - loggerTemplate.setFunction(funtionName); - loggerTemplate.setModule(moduleName); - loggerTemplate.setAsyncClient(asyncClient); - - Object result = null; - try { - args[keyPosition] = id; - result = pjp.proceed(args); - } catch (Throwable throwable) { - throwable.printStackTrace(); - } - if(isSql) { - Map oldValue = queryCurretValusMapper.queryValues(String.format(sql, id)); - loggerContext.setNewValues(oldValue); - } else if(isMethod) { - Object res= ReflectionUtils.invokeMethod(infoMtd,currentClass, id); - if(res != null) { - if(res instanceof List) { - loggerContext.setNewValueList((List) res); - } else { - loggerContext.setNewValues(res); - } - } - } - if(isLocal) - loggerTemplate.write(loggerContext); - else - loggerTemplate.write(loggerContext,false); - return result; - - } -} +//package com.engine.salary.elog.annotation.handle; +// +//import com.weaver.common.async.producer.client.AsyncClient; +//import com.weaver.common.distribution.genid.IdGenerator; +//import com.weaver.common.elog.annotation.Elog; +//import com.weaver.common.elog.annotation.ElogPrimaryKey; +//import com.weaver.common.elog.dao.QueryCurretValusMapper; +//import com.weaver.common.elog.dto.LoggerContext; +//import com.weaver.common.elog.util.LoggerTemplate; +//import org.apache.commons.lang3.StringUtils; +//import org.aspectj.lang.ProceedingJoinPoint; +//import org.aspectj.lang.Signature; +//import org.aspectj.lang.annotation.Around; +//import org.aspectj.lang.annotation.Aspect; +//import org.aspectj.lang.annotation.Pointcut; +//import org.aspectj.lang.reflect.MethodSignature; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.context.ApplicationContext; +//import org.springframework.stereotype.Component; +//import org.springframework.util.ReflectionUtils; +// +//import java.lang.annotation.Annotation; +//import java.lang.reflect.Method; +//import java.util.Date; +//import java.util.List; +//import java.util.Map; +// +// +///** +// * @ClassName: LoggerTargetHandler +// * @Description 从Spring扫描到的类中获取到Elog自定义注解类设置function属性 +// * @Author tanghj +// * @Date 2021/2/10 14:18 +// */ +//@Aspect +// +//public class ElogHandler { +// +// @Autowired +// ApplicationContext applicationContext; +// +// @Autowired +// protected AsyncClient asyncClient; +// +// @Autowired +// QueryCurretValusMapper queryCurretValusMapper; +// +// /** +// * 切面写入日志 +// */ +// @Pointcut("@annotation(com.weaver.common.elog.annotation.Elog)" ) +// public void writeLog(){} +// @Around("writeLog()") +// public Object writeLog(ProceedingJoinPoint pjp){ +// Object[] args = pjp.getArgs(); +// Signature signature = pjp.getSignature(); +// MethodSignature methodSignature = (MethodSignature) signature; +// Method method = methodSignature.getMethod(); +// +// Elog elog = method.getAnnotation(Elog.class); +// String moduleName = elog.module(); +// String funtionName = elog.function(); +// String operateType = elog.operateType(); +// String operateTypeName = elog.operateTypeName(); +// boolean isLocal = elog.isLocal(); +// Annotation[][] annos = method.getParameterAnnotations(); +// +// Object id = null; +// int keyPosition = -1; +// int index = 0; +// +// Class idClass = null; +// // 获取主键id注解 +// for(Annotation[] anno : annos) { +// if(anno.length > 0) { +// for(Annotation annotation : anno) { +// if(annotation instanceof ElogPrimaryKey) { +// idClass = method.getParameters()[index].getType(); +// id = args[index]; +// if(StringUtils.isEmpty(id+"")) { +// id = idClass.cast(IdGenerator.generate() + ""); +// } +// keyPosition = index; +// break; +// } +// } +// } +// index ++; +// } +// +// LoggerContext loggerContext = null; +// // 获取日志实体类 +// for(Object arg: args) { +// if(arg instanceof LoggerContext) { +// loggerContext = (LoggerContext) arg; +// break; +// } +// } +// +// if(loggerContext == null) { +// loggerContext = new LoggerContext(); +// } +// +// // 日志实体类的初始化 +// // loggerContext.setOperateType("UPDATE"); +// loggerContext.setFunctionName(funtionName); +// loggerContext.setModuleName(moduleName); +// loggerContext.setOperateType(operateType); +// loggerContext.setOperateTypeName(operateTypeName); +// loggerContext.setDate(new Date()); +// loggerContext.setDevice("IOS"); +// +// String sql = elog.sql(); +// String infoMethod = elog.infoMethod(); +// +// boolean isSql = false; +// boolean isMethod = false; +// Object currentClass = null; +// Method infoMtd = null; +// if(StringUtils.isNotEmpty(id+"")) { +// if(StringUtils.isNotEmpty(sql)) { +// isSql = true; +// Map oldValue = queryCurretValusMapper.queryValues(String.format(sql, id)); +// loggerContext.setOldValues(oldValue); +// } else if(StringUtils.isNotEmpty(infoMethod)){ +// isMethod = true; +// currentClass = applicationContext.getBean(pjp.getTarget().getClass()); +// // 获取方法 +// infoMtd = ReflectionUtils.findMethod(pjp.getTarget().getClass(),infoMethod, idClass); +// +// // todo 为空的情况加异常提醒 +// // 反射执行方法 +// Object res= ReflectionUtils.invokeMethod(infoMtd,currentClass, id); +// if(res != null) { +// if(res instanceof List) { +// loggerContext.setOldValueList((List) res); +// } else { +// loggerContext.setOldValues(res); +// } +// +// } +// } +// } +// +// LoggerTemplate loggerTemplate = new LoggerTemplate(); +// loggerTemplate.setFunction(funtionName); +// loggerTemplate.setModule(moduleName); +// loggerTemplate.setAsyncClient(asyncClient); +// +// Object result = null; +// try { +// args[keyPosition] = id; +// result = pjp.proceed(args); +// } catch (Throwable throwable) { +// throwable.printStackTrace(); +// } +// if(isSql) { +// Map oldValue = queryCurretValusMapper.queryValues(String.format(sql, id)); +// loggerContext.setNewValues(oldValue); +// } else if(isMethod) { +// Object res= ReflectionUtils.invokeMethod(infoMtd,currentClass, id); +// if(res != null) { +// if(res instanceof List) { +// loggerContext.setNewValueList((List) res); +// } else { +// loggerContext.setNewValues(res); +// } +// } +// } +// if(isLocal) +// loggerTemplate.write(loggerContext); +// else +// loggerTemplate.write(loggerContext,false); +// return result; +// +// } +//} diff --git a/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java b/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java index 2be2f35b6..be8abc439 100644 --- a/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java +++ b/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java @@ -2,19 +2,14 @@ package com.engine.salary.elog.annotation.handle; import com.engine.salary.elog.annotation.ElogField; import com.engine.salary.elog.annotation.ElogTable; +import com.engine.salary.elog.dto.DateTypeEnum; import com.engine.salary.elog.dto.TableColumnBean; import com.engine.salary.elog.util.ElogUtils; -import com.weaver.common.elog.dao.TableCheckerMapper; -import com.weaver.common.elog.dto.DateTypeEnum; import lombok.extern.slf4j.Slf4j; import org.reflections.Reflections; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.aop.support.AopUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import javax.annotation.Resource; import java.lang.reflect.Field; import java.util.*; import java.util.stream.Collectors; @@ -29,14 +24,10 @@ import java.util.stream.Collectors; public class ElogTableScanner { private Logger logger = LoggerFactory.getLogger(this.getClass()); - @Resource - private ApplicationContext applicationContext; +// private TableCheckerMapper tableCheckerMapper; - @Autowired - private TableCheckerMapper tableCheckerMapper; - - @Override - public void run(String... args) throws Exception { +// @Override + public void run() throws Exception { // todo 需要考虑集群下,控制一台机器来跑 scanElogTable(); @@ -45,9 +36,10 @@ public class ElogTableScanner { private void scanElogTable() { // todo 是否还需要扫描Elog(因为可能不需要本地存储) ELogDetailTable, - Map tableBeans = this.applicationContext.getBeansWithAnnotation(ElogTable.class); - Reflections reflections = new Reflections("com.example.controller"); - Set> restController = reflections.getTypesAnnotatedWith(RestController.class); +// Map tableBeans = this.applicationContext.getBeansWithAnnotation(ElogTable.class); + Reflections reflections = new Reflections("com.engine.salary.elog"); + Set> tableBeans = reflections.getTypesAnnotatedWith(ElogTable.class); + List baseColumns = new ArrayList<>(); @@ -67,18 +59,11 @@ public class ElogTableScanner { } - private Map> elogTableHandle(Map tableBeans, List baseColumns) { - - + private Map> elogTableHandle(Set> tableBeans, List baseColumns) { Map> tableMap = new HashMap<>(); - - - for (Map.Entry entry : tableBeans.entrySet()) {//遍历每个controller层 + for (Class aClass :tableBeans) {//遍历每个controller层 List list = new ArrayList<>(); - System.out.println(entry.getKey());//demo1Controller - Object value = entry.getValue(); - Class aClass = AopUtils.getTargetClass(value);//获取class ElogTable elogTable = aClass.getAnnotation(ElogTable.class); @@ -101,7 +86,6 @@ public class ElogTableScanner { list.add(tableColumnBean); } if(!ElogUtils.BASE_TABLE.equals(elogTable.module())) { - tableMap.put(ElogUtils.getTableName(elogTable.module(), elogTable.function()), list); } else { baseColumns.addAll(list); @@ -112,8 +96,8 @@ public class ElogTableScanner { } private void tableCheck(String tableName, List columns) { - - List oldColumns = tableCheckerMapper.getTableStructure(tableName); + List oldColumns = new ArrayList<>(); +// List oldColumns = tableCheckerMapper.getTableStructure(tableName); // 表不存在 if(oldColumns == null || oldColumns.size() == 0) { @@ -147,7 +131,7 @@ public class ElogTableScanner { sb.append(columns.stream().map( bean -> bean.toSql()).collect(Collectors.joining(","))); sb.append(")"); logger.info("创建sql:{}",sb.toString()); - tableCheckerMapper.createElogTable(sb.toString()); +// tableCheckerMapper.createElogTable(sb.toString()); } private void addColumn(String tableName, TableColumnBean tableColumnBean) { @@ -157,7 +141,7 @@ public class ElogTableScanner { .append(" column ") .append(tableColumnBean.toSql()); logger.info("新增字段sql:{}",sb.toString()); - tableCheckerMapper.createElogTable(sb.toString()); +// tableCheckerMapper.createElogTable(sb.toString()); } private void modifyColumn(String tableName, TableColumnBean tableColumnBean) { @@ -167,6 +151,6 @@ public class ElogTableScanner { .append(" column ") .append(tableColumnBean.toSql()); logger.info("修改字段sql:{}",sb.toString()); - tableCheckerMapper.createElogTable(sb.toString()); +// tableCheckerMapper.createElogTable(sb.toString()); } } diff --git a/src/com/engine/salary/elog/annotation/handle/LoggerTargetHandler.java b/src/com/engine/salary/elog/annotation/handle/LoggerTargetHandler.java index 4a5c44d7b..b1934e4d3 100644 --- a/src/com/engine/salary/elog/annotation/handle/LoggerTargetHandler.java +++ b/src/com/engine/salary/elog/annotation/handle/LoggerTargetHandler.java @@ -1,40 +1,38 @@ -package com.engine.salary.elog.annotation.handle; - -import com.weaver.common.elog.annotation.LoggerTarget; -import com.weaver.common.elog.util.LoggerTemplate; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.CommandLineRunner; -import org.springframework.context.ApplicationContext; -import org.springframework.stereotype.Component; - -import java.util.Map; - - -/** - * @ClassName: LoggerTargetHandler - * @Description 从Spring扫描到的类中获取到LoggerTarget自定义注解类设置function属性 - * @Author tanghj - * @Date 2021/2/10 14:18 - */ - -@Component -public class LoggerTargetHandler implements CommandLineRunner { - - @Autowired - ApplicationContext applicationContext; - - @Override - public void run(String... args) throws Exception { - Map loggtemplateMap = applicationContext.getBeansWithAnnotation(LoggerTarget.class); - - for(Object obj : loggtemplateMap.values()) { - if(obj instanceof LoggerTemplate) { - LoggerTarget loggerTarget = obj.getClass().getAnnotation(LoggerTarget.class); - ((LoggerTemplate) obj).setFunction(loggerTarget.function()); - ((LoggerTemplate) obj).setModule(StringUtils.isNotEmpty(loggerTarget.value()) ? loggerTarget.value() : loggerTarget.module()); - } - - } - } -} +//package com.engine.salary.elog.annotation.handle; +// +//import com.weaver.common.elog.annotation.LoggerTarget; +//import com.weaver.common.elog.util.LoggerTemplate; +//import org.apache.commons.lang3.StringUtils; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.boot.CommandLineRunner; +//import org.springframework.context.ApplicationContext; +//import org.springframework.stereotype.Component; +// +//import java.util.Map; +// +// +///** +// * @ClassName: LoggerTargetHandler +// * @Description 从Spring扫描到的类中获取到LoggerTarget自定义注解类设置function属性 +// * @Author tanghj +// * @Date 2021/2/10 14:18 +// */ +// +//public class LoggerTargetHandler { +// +// ApplicationContext applicationContext; +// +// @Override +// public void run(String... args) throws Exception { +// Map loggtemplateMap = applicationContext.getBeansWithAnnotation(LoggerTarget.class); +// +// for(Object obj : loggtemplateMap.values()) { +// if(obj instanceof LoggerTemplate) { +// LoggerTarget loggerTarget = obj.getClass().getAnnotation(LoggerTarget.class); +// ((LoggerTemplate) obj).setFunction(loggerTarget.function()); +// ((LoggerTemplate) obj).setModule(StringUtils.isNotEmpty(loggerTarget.value()) ? loggerTarget.value() : loggerTarget.module()); +// } +// +// } +// } +//} diff --git a/src/com/engine/salary/elog/async/LoggerMessageListener.java b/src/com/engine/salary/elog/async/LoggerMessageListener.java new file mode 100644 index 000000000..45f2e1b90 --- /dev/null +++ b/src/com/engine/salary/elog/async/LoggerMessageListener.java @@ -0,0 +1,31 @@ +package com.engine.salary.elog.async; + +import com.alibaba.fastjson.JSON; +import com.engine.salary.elog.config.ELogTableChecker; +import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.elog.service.LocalElogService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * @ClassName: LoggerMessageListener + * @Description 本地日志存储消息队列监听类 + * @Author tanghj + * @Date 2021/2/10 14:18 + */ +public class LoggerMessageListener { + + private final Log logger = LogFactory.getLog(getClass()); + + // @Autowired + LocalElogService localElogService = new LocalElogService(); + // @Autowired + private ELogTableChecker eLogTableChecker = new ELogTableChecker(); + + public String receive(LoggerContext messageBean) { + logger.info("日志SDK消费到消息" + JSON.toJSONString(messageBean)); + eLogTableChecker.check(messageBean); + localElogService.insertLocalElog(messageBean); + return ""; + } +} diff --git a/src/com/engine/salary/elog/config/ELogCache.java b/src/com/engine/salary/elog/config/ELogCache.java new file mode 100644 index 000000000..d5de0885a --- /dev/null +++ b/src/com/engine/salary/elog/config/ELogCache.java @@ -0,0 +1,25 @@ +package com.engine.salary.elog.config; + +import com.engine.salary.mapper.elog.TableCheckerMapper; +import com.engine.salary.util.db.MapperProxyFactory; + +import java.util.HashMap; +import java.util.Map; + +public class ELogCache { + + private Map tableCache = new HashMap<>(); + + private TableCheckerMapper getTableCheckerMapper() { + return MapperProxyFactory.getProxy(TableCheckerMapper.class); + } + + public Long getVersion(String mainTable) { + Long version = tableCache.get(mainTable); + if (version == null) { + version = getTableCheckerMapper().getVersion(mainTable); + tableCache.put(mainTable, version); + } + return version; + } +} diff --git a/src/com/engine/salary/elog/config/ELogTableChecker.java b/src/com/engine/salary/elog/config/ELogTableChecker.java new file mode 100644 index 000000000..0fee08932 --- /dev/null +++ b/src/com/engine/salary/elog/config/ELogTableChecker.java @@ -0,0 +1,44 @@ +package com.engine.salary.elog.config; + +import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.mapper.elog.TableCheckerMapper; +import com.engine.salary.util.db.MapperProxyFactory; +import dm.jdbc.util.IdGenerator; + + +public class ELogTableChecker { + private static final long version = 0; + private ELogCache eLogCache = new ELogCache(); + + private TableCheckerMapper getTableCheckerMapper() { + return MapperProxyFactory.getProxy(TableCheckerMapper.class); + } + + public void check(LoggerContext loggerContext) { + String module = loggerContext.getModuleName(); + String function = loggerContext.getFunctionName(); + String mainTable = String.format("%s_%slogs", module, function); + Long v = eLogCache.getVersion(mainTable); + boolean noTable = v == null; + if (noTable) { + this.initTable(mainTable); + v = version; + } else { + this.checkVersion(mainTable, v); + } + + } + + private void checkVersion(String mainTable, Long v) { + if (v == version) { + return; + } + } + + + private void initTable(String mainTable) { + getTableCheckerMapper().recordVersion(IdGenerator.generate(), mainTable, version); + getTableCheckerMapper().createMainTable(mainTable); + getTableCheckerMapper().createDetailTable(mainTable + "_detail"); + } +} diff --git a/src/com/engine/salary/elog/service/ApplicationContextProvider.java b/src/com/engine/salary/elog/service/ApplicationContextProvider.java new file mode 100644 index 000000000..d1bc541d4 --- /dev/null +++ b/src/com/engine/salary/elog/service/ApplicationContextProvider.java @@ -0,0 +1,67 @@ +//package com.engine.salary.elog.service; +// +//import org.springframework.beans.BeansException; +//import org.springframework.context.ApplicationContext; +//import org.springframework.context.ApplicationContextAware; +//import org.springframework.stereotype.Component; +// +///** +// * 获取Spring上下文 +// * +// * @author tanghj +// * @date on 2020-10-19 +// */ +// +//public class ApplicationContextProvider implements ApplicationContextAware { +// /** +// * 上下文对象实例 +// */ +// private static ApplicationContext applicationContext; +// +// @Override +// public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { +// this.applicationContext = applicationContext; +// } +// +// /** +// * 获取applicationContext +// * +// * @return +// */ +// public static ApplicationContext getApplicationContext() { +// return applicationContext; +// } +// +// /** +// * 通过name获取 Bean. +// * +// * @param name +// * @return +// */ +// public static Object getBean(String name) { +// return getApplicationContext().getBean(name); +// } +// +// /** +// * 通过class获取Bean. +// * +// * @param clazz +// * @param +// * @return +// */ +// public static T getBean(Class clazz) { +// return getApplicationContext().getBean(clazz); +// } +// +// /** +// * 通过name,以及Clazz返回指定的Bean +// * +// * @param name +// * @param clazz +// * @param +// * @return +// */ +// public static T getBean(String name, Class clazz) { +// return getApplicationContext().getBean(name, clazz); +// } +//} diff --git a/src/com/engine/salary/elog/service/LocalElogService.java b/src/com/engine/salary/elog/service/LocalElogService.java new file mode 100644 index 000000000..a9a368533 --- /dev/null +++ b/src/com/engine/salary/elog/service/LocalElogService.java @@ -0,0 +1,74 @@ +package com.engine.salary.elog.service; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.elog.dto.LoggerDetailContext; +import com.engine.salary.mapper.elog.LocalElogDaoMapper; +import com.engine.salary.util.db.MapperProxyFactory; +import org.apache.commons.lang3.StringUtils; + +import java.util.Set; +import java.util.UUID; + +/** + * @ClassName: LocalElogService + * @Description TODO + * @Author tanghj + * @Date 2021/2/24 11:03 + */ +public class LocalElogService { + + private LocalElogDaoMapper getLocalElogDaoMapper() { + return MapperProxyFactory.getProxy(LocalElogDaoMapper.class); + } + + public int insertLocalElog(LoggerContext context) { + if (StringUtils.isEmpty(context.getUuid())) { + context.setUuid(UUID.randomUUID().toString().replace("-", "")); + } + + String cusColumns = ""; + String cusValus = ""; + if (context.getCustomInfo() != null) { + JSONObject custom = JSONObject.parseObject(JSON.toJSONString(context.getCustomInfo())); + + for (String key : (Set) custom.keySet()) { + cusColumns = cusColumns + ", " + key; + cusValus = cusValus + ",'" + custom.getString(key) + "'"; + } + + } + + String params = context.getParams() == null ? null : JSONObject.toJSONString(context.getParams()); + + String tableName = context.getModuleName() + "_" + context.getFunctionName() + "logs"; + + getLocalElogDaoMapper().insertElogContext(context, params, cusColumns, cusValus, tableName); + if (context.getDetailContexts() != null) { + String detailTableName = context.getModuleName() + "_" + context.getFunctionName() + "logs_detail"; + for (LoggerDetailContext detailContext : context.getDetailContexts()) { + insertElogDetail(detailContext, context.getUuid(), detailTableName); + } + + } + + return 1; + } + + private int insertElogDetail(LoggerDetailContext loggerDetailContext, String mainId, String detailTableName) { + String cusColumns = ""; + String cusValus = ""; + if (loggerDetailContext.getCustomDetailInfo() != null) { + JSONObject custom = JSONObject.parseObject(JSON.toJSONString(loggerDetailContext.getCustomDetailInfo())); + + for (String key : (Set) custom.keySet()) { + cusColumns = cusColumns + ", " + key; + cusValus = cusValus + ",'" + custom.getString(key) + "'"; + } + } + getLocalElogDaoMapper().insertElogDetail(loggerDetailContext, mainId, cusColumns, cusValus, detailTableName); + return 1; + } + +} diff --git a/src/com/engine/salary/elog/util/LoggerTemplate.java b/src/com/engine/salary/elog/util/LoggerTemplate.java index 1041e9375..6dc03b33c 100644 --- a/src/com/engine/salary/elog/util/LoggerTemplate.java +++ b/src/com/engine/salary/elog/util/LoggerTemplate.java @@ -1,14 +1,12 @@ package com.engine.salary.elog.util; import com.alibaba.fastjson.JSONObject; -import com.weaver.common.async.bean.AsyncBean; -import com.weaver.common.async.producer.client.AsyncClient; -import com.weaver.common.elog.dto.LoggerContext; -import com.weaver.common.elog.dto.LoggerDetailContext; -import com.weaver.common.elog.dto.TableChangeBean; +import com.engine.salary.elog.async.LoggerMessageListener; +import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.elog.dto.LoggerDetailContext; +import com.engine.salary.elog.dto.TableChangeBean; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import org.springframework.beans.factory.annotation.Autowired; import java.lang.reflect.Field; import java.util.*; @@ -28,30 +26,25 @@ public class LoggerTemplate { protected String localQueue; - @Autowired - protected AsyncClient asyncClient; /** * 写入日志消息队列 + * * @param context 日志实体 */ - public void write(LoggerContext context){ + public void write(LoggerContext context) { this.write(context, true); } /** * 写入日志消息队列 + * * @param context 日志实体 * @param isLocal true 存储本地, false不存储本地 */ - public void write(LoggerContext context, boolean isLocal){ - AsyncBean asyncBean = new AsyncBean<>(); + public void write(LoggerContext context, boolean isLocal) { handleContext(context); - asyncBean.setMessage(context); - asyncBean.setQueue(logCenterQueue); - asyncClient.send(asyncBean); - if(isLocal) { - asyncBean.setQueue(localQueue); - asyncClient.send(asyncBean); + if (isLocal) { + new LoggerMessageListener().receive(context); } } @@ -63,66 +56,66 @@ public class LoggerTemplate { List valueChangeList = new ArrayList<>(); int showOrder = 0; - if(changeBeans != null) - for(TableChangeBean changeBean : changeBeans) { - if(changeBean != null && (changeBean.getNewValue() != null || changeBean.getOldValue() != null)) { - ApiModel apiModel = null; - JSONObject newJo = new JSONObject(); - JSONObject oldJo = new JSONObject(); - JSONObject valueChange = JSONObject.parseObject(JSONObject.toJSONString(changeBean)); - if(changeBean.getNewValue() != null) { - apiModel = changeBean.getNewValue().getClass().getAnnotation(ApiModel.class); - newJo = valueChange.getJSONObject("newValue"); - } else { - apiModel = changeBean.getOldValue().getClass().getAnnotation(ApiModel.class); - } - if(changeBean.getOldValue() != null) { - oldJo = valueChange.getJSONObject("oldValue"); - } - if(apiModel != null) { - Field[] fields = changeBean.getNewValue().getClass().getDeclaredFields(); - for(Field field : fields) { - ApiModelProperty apiModelProperty = field.getAnnotation(ApiModelProperty.class); - LoggerDetailContext valueChangeBean = new LoggerDetailContext(); - valueChangeBean.setTableName(changeBean.getTableName()); - valueChangeBean.setFieldName(field.getName()); - valueChangeBean.setFieldDesc(apiModelProperty.value()); - valueChangeBean.setNewValue(newJo.getString(field.getName())); - valueChangeBean.setOldValue(oldJo.getString(field.getName())); - valueChangeBean.setShoworder(showOrder++); - valueChangeList.add(valueChangeBean); + if (changeBeans != null) + for (TableChangeBean changeBean : changeBeans) { + if (changeBean != null && (changeBean.getNewValue() != null || changeBean.getOldValue() != null)) { + ApiModel apiModel = null; + JSONObject newJo = new JSONObject(); + JSONObject oldJo = new JSONObject(); + JSONObject valueChange = JSONObject.parseObject(JSONObject.toJSONString(changeBean)); + if (changeBean.getNewValue() != null) { + apiModel = changeBean.getNewValue().getClass().getAnnotation(ApiModel.class); + newJo = valueChange.getJSONObject("newValue"); + } else { + apiModel = changeBean.getOldValue().getClass().getAnnotation(ApiModel.class); } - } else { - Set keys = new HashSet<>(); - for(String key : newJo.keySet()) { - keys.add(key); - LoggerDetailContext valueChangeBean = new LoggerDetailContext(); - valueChangeBean.setTableName(changeBean.getTableName()); - valueChangeBean.setFieldName(key); - valueChangeBean.setFieldDesc(key); - valueChangeBean.setNewValue(newJo.getString(key)); - valueChangeBean.setOldValue(oldJo.getString(key)); - valueChangeBean.setShoworder(showOrder++); - valueChangeList.add(valueChangeBean); + if (changeBean.getOldValue() != null) { + oldJo = valueChange.getJSONObject("oldValue"); } - for(String key : oldJo.keySet()) { - if(keys.contains(key)) - continue; - keys.add(key); - LoggerDetailContext valueChangeBean = new LoggerDetailContext(); - valueChangeBean.setTableName(changeBean.getTableName()); - valueChangeBean.setFieldName(key); - valueChangeBean.setFieldDesc(key); - valueChangeBean.setNewValue(newJo.getString(key)); - valueChangeBean.setOldValue(oldJo.getString(key)); - valueChangeBean.setShoworder(showOrder++); - valueChangeList.add(valueChangeBean); + if (apiModel != null) { + Field[] fields = changeBean.getNewValue().getClass().getDeclaredFields(); + for (Field field : fields) { + ApiModelProperty apiModelProperty = field.getAnnotation(ApiModelProperty.class); + LoggerDetailContext valueChangeBean = new LoggerDetailContext(); + valueChangeBean.setTableName(changeBean.getTableName()); + valueChangeBean.setFieldName(field.getName()); + valueChangeBean.setFieldDesc(apiModelProperty.value()); + valueChangeBean.setNewValue(newJo.getString(field.getName())); + valueChangeBean.setOldValue(oldJo.getString(field.getName())); + valueChangeBean.setShoworder(showOrder++); + valueChangeList.add(valueChangeBean); + } + } else { + Set keys = new HashSet<>(); + for (String key : (Set) newJo.keySet()) { + keys.add(key); + LoggerDetailContext valueChangeBean = new LoggerDetailContext(); + valueChangeBean.setTableName(changeBean.getTableName()); + valueChangeBean.setFieldName(key); + valueChangeBean.setFieldDesc(key); + valueChangeBean.setNewValue(newJo.getString(key)); + valueChangeBean.setOldValue(oldJo.getString(key)); + valueChangeBean.setShoworder(showOrder++); + valueChangeList.add(valueChangeBean); + } + for (String key : (Set)oldJo.keySet()) { + if (keys.contains(key)) + continue; + keys.add(key); + LoggerDetailContext valueChangeBean = new LoggerDetailContext(); + valueChangeBean.setTableName(changeBean.getTableName()); + valueChangeBean.setFieldName(key); + valueChangeBean.setFieldDesc(key); + valueChangeBean.setNewValue(newJo.getString(key)); + valueChangeBean.setOldValue(oldJo.getString(key)); + valueChangeBean.setShoworder(showOrder++); + valueChangeList.add(valueChangeBean); + } } } } - } - if(valueChangeList.size() > 0) + if (valueChangeList.size() > 0) context.setDetailContexts(valueChangeList); } @@ -140,12 +133,13 @@ public class LoggerTemplate { /** * 获取日志实体类 + * * @return */ public LoggerContext getContext() { LoggerContext loggerContext = new LoggerContext(); - loggerContext.setUuid(UUID.randomUUID().toString().replace("-","")); + loggerContext.setUuid(UUID.randomUUID().toString().replace("-", "")); loggerContext.setModuleName(this.module); loggerContext.setFunctionName(this.function); @@ -157,8 +151,4 @@ public class LoggerTemplate { this.localQueue = module + "LocalQueue"; this.module = module; } - - public void setAsyncClient(AsyncClient asyncClient) { - this.asyncClient = asyncClient; - } } diff --git a/src/com/engine/salary/formlua/entity/parameter/ExcelFuncs.java b/src/com/engine/salary/formlua/entity/parameter/ExcelFuncs.java index 437d8376e..6ba9cb7bd 100644 --- a/src/com/engine/salary/formlua/entity/parameter/ExcelFuncs.java +++ b/src/com/engine/salary/formlua/entity/parameter/ExcelFuncs.java @@ -12,7 +12,7 @@ import java.util.LinkedList; import java.util.List; -@Component + public class ExcelFuncs { protected final Logger logger = LoggerFactory.getLogger(getClass()); final static private String ALLFORM="all"; diff --git a/src/com/engine/salary/formlua/entity/parameter/FuncDescUtil.java b/src/com/engine/salary/formlua/entity/parameter/FuncDescUtil.java index d4e5fcee3..666135c26 100644 --- a/src/com/engine/salary/formlua/entity/parameter/FuncDescUtil.java +++ b/src/com/engine/salary/formlua/entity/parameter/FuncDescUtil.java @@ -9,7 +9,7 @@ import java.util.HashMap; import java.util.Map; -@Component + public class FuncDescUtil { protected final Logger logger = LoggerFactory.getLogger(FuncDescUtil.class); Map funcMap = new HashMap(); diff --git a/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.java b/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.java new file mode 100644 index 000000000..56dddcd45 --- /dev/null +++ b/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.java @@ -0,0 +1,36 @@ +package com.engine.salary.mapper.elog; + +import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.elog.dto.LoggerDetailContext; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @ClassName: LocalElogDao + * @Description 本地操作日志持久层 + * @Author tanghj + * @Date 2021/2/24 9:35 + */ +public interface LocalElogDaoMapper { + + int insertElogContext(@Param(value = "logContent") LoggerContext loggerContext, + @Param(value = "params") String params, + @Param(value = "cusColumns") String cusColumns, + @Param(value = "cusValus") String cusValus, + @Param(value = "tableName") String tableName); + + List> queryElogList(@Param(value = "logContent") LoggerContext loggerContext, + @Param("limit") String limit, + @Param(value = "tableName") String tableName); + + Map elogCount(@Param(value = "logContent") LoggerContext loggerContext, + @Param(value = "tableName") String tableName); + + int insertElogDetail(@Param(value = "detailContext") LoggerDetailContext loggerDetailContext, + @Param(value = "mainid") String mainid, + @Param(value = "cusColumns") String cusColumns, + @Param(value = "cusValus") String cusValus, + @Param(value = "detailTableName") String tableName); +} diff --git a/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.xml b/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.xml new file mode 100644 index 000000000..7349e7026 --- /dev/null +++ b/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.xml @@ -0,0 +1,41 @@ + + + + + + insert into ${tableName} (uuid, date, tenant_key, modulename, functionName, + operator, operatorname, targetid, targetname, interfacename, operatetype, operatedesc, + params, clientIp, groupnamelabel, redoservice, redocontext, cancelservice, cancelcontext, device, groupid + ${cusColumns}) + values + (#{logContent.uuid}, #{logContent.date}, + #{logContent.tenant_key}, #{logContent.moduleName}, #{logContent.functionName}, #{logContent.operator}, #{logContent.operatorName}, #{logContent.targetId} + , #{logContent.targetName}, #{logContent.interfaceName}, #{logContent.operateType}, #{logContent.operatedesc}, + #{params}, #{logContent.clientIp}, #{logContent.groupNameLabel}, #{logContent.redoService}, + #{logContent.redoContext}, #{logContent.cancelService}, #{logContent.cancelContext}, #{logContent.device}, #{logContent.groupId} + ${cusValus}) + + + + + + + + insert into ${detailTableName} (mainid, uuid, tablename, fieldname, newvalue, oldvalue, + fielddesc, showorder + ${cusColumns}) + values( + #{mainid}, #{detailContext.uuid}, #{detailContext.tableName}, #{detailContext.fieldName}, #{detailContext.newValue}, + #{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder} + ${cusValus} + ) + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/elog/QueryCurretValusMapper.java b/src/com/engine/salary/mapper/elog/QueryCurretValusMapper.java new file mode 100644 index 000000000..0a8e14928 --- /dev/null +++ b/src/com/engine/salary/mapper/elog/QueryCurretValusMapper.java @@ -0,0 +1,8 @@ +package com.engine.salary.mapper.elog; + +import java.util.Map; + +public interface QueryCurretValusMapper { + + Map queryValues(String sql); +} diff --git a/src/com/engine/salary/mapper/elog/QueryCurretValusMapper.xml b/src/com/engine/salary/mapper/elog/QueryCurretValusMapper.xml new file mode 100644 index 000000000..c3d7a16d1 --- /dev/null +++ b/src/com/engine/salary/mapper/elog/QueryCurretValusMapper.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/elog/TableCheckerMapper.java b/src/com/engine/salary/mapper/elog/TableCheckerMapper.java new file mode 100644 index 000000000..5270ed5fe --- /dev/null +++ b/src/com/engine/salary/mapper/elog/TableCheckerMapper.java @@ -0,0 +1,20 @@ +package com.engine.salary.mapper.elog; + +import com.engine.salary.elog.dto.TableColumnBean; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface TableCheckerMapper { + Long getVersion(@Param("mainTable") String mainTable); + + void recordVersion(@Param("id") long id, @Param("mainTable") String mainTable, @Param("version") long version); + + void createMainTable(@Param("mainTable") String mainTable); + + void createDetailTable(@Param("detailTable") String detailTable); + + List getTableStructure(@Param("tableName") String tableName); + + void createElogTable(@Param("createElogSql") String createElogSql); +} diff --git a/src/com/engine/salary/mapper/elog/TableCheckerMapper.xml b/src/com/engine/salary/mapper/elog/TableCheckerMapper.xml new file mode 100644 index 000000000..a9e4436d3 --- /dev/null +++ b/src/com/engine/salary/mapper/elog/TableCheckerMapper.xml @@ -0,0 +1,79 @@ + + + + + insert into elog_version (id, maintable, version) + values (#{id}, #{mainTable}, #{version}); + + + + create table ${mainTable} + ( + id bigint comment 'ID', + create_time datetime, + update_time datetime, + creator bigint, + delete_type int, + tenant_key varchar(10), + uuid char(36), + date datetime, + operator varchar(50), + operatorName varchar(50), + targetId varchar(50), + targetName varchar(1000), + module varchar(100), + `function` varchar(100), + interfaceName varchar(100), + operateType varchar(50), + desc varchar(1000), + params longtext, + clientIp varchar(50), + device varchar(200), + groupNameLabel varchar(500), + redoService varchar(200), + redoContext longtext, + cancelService varchar(200), + cancelContext longtext + ) + + + create table ${detailTable} + ( + id bigint comment 'ID', + create_time datetime, + update_time datetime, + creator bigint, + delete_type int, + tenant_key varchar(10), + uuid varchar(36), + tableName varchar(200), + fieldName char(200), + newValue longtext, + oldValue longtext, + fieldDesc varchar(200), + showorder int default 0 + ) + + + + + + + ${createElogSql} + + \ No newline at end of file From 7e980db4b3d0171461c09e5f88a88156482f4ecd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 21 Dec 2023 20:25:00 +0800 Subject: [PATCH 03/64] =?UTF-8?q?=E6=97=A5=E5=BF=97=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/config/SalaryElogConfig.java | 418 ++++++++++ .../salary/config/SalaryPermissionConfig.java | 194 +++++ .../salary/elog/annotation/ElogField.java | 4 +- .../salary/elog/annotation/ElogTransform.java | 28 + .../annotation/handle/ElogTableScanner.java | 4 +- .../elog/async/LoggerMessageListener.java | 21 +- .../engine/salary/elog/config/ELogCache.java | 6 +- .../salary/elog/config/ELogTableChecker.java | 6 +- .../{DateTypeEnum.java => DataTypeEnum.java} | 2 +- .../engine/salary/elog/dto/LoggerContext.java | 583 ++++++++++++-- .../salary/elog/dto/LoggerDetailContext.java | 230 +++++- .../salary/elog/dto/TableChangeBean.java | 102 ++- .../salary/elog/dto/TableColumnBean.java | 6 +- .../engine/salary/elog/enums/ElogConsts.java | 22 + .../salary/elog/enums/FromTerminalType.java | 48 ++ .../engine/salary/elog/enums/LinkType.java | 173 ++++ .../salary/elog/enums/OperateAuditType.java | 14 + .../service/ApplicationContextProvider.java | 67 -- .../elog/service/ILocalElogService.java | 13 + .../salary/elog/service/LocalElogService.java | 74 -- .../elog/service/impl/LocalElogService.java | 435 ++++++++++ .../elog/threadlocal/ElogThreadLocal.java | 75 ++ .../engine/salary/elog/util/ElogUtils.java | 755 +++++++++++++++++- .../salary/elog/util/LoggerTemplate.java | 511 +++++++++++- ...apper.java => ElogTableCheckerMapper.java} | 12 +- .../mapper/elog/ElogTableCheckerMapper.xml | 451 +++++++++++ .../mapper/elog/LocalElogAopDaoMapper.java | 45 ++ .../mapper/elog/LocalElogAopDaoMapper.xml | 150 ++++ .../salary/mapper/elog/TableCheckerMapper.xml | 79 -- .../service/impl/SalaryItemServiceImpl.java | 42 +- 30 files changed, 4220 insertions(+), 350 deletions(-) create mode 100644 src/com/engine/salary/config/SalaryElogConfig.java create mode 100644 src/com/engine/salary/config/SalaryPermissionConfig.java create mode 100644 src/com/engine/salary/elog/annotation/ElogTransform.java rename src/com/engine/salary/elog/dto/{DateTypeEnum.java => DataTypeEnum.java} (85%) create mode 100644 src/com/engine/salary/elog/enums/ElogConsts.java create mode 100644 src/com/engine/salary/elog/enums/FromTerminalType.java create mode 100644 src/com/engine/salary/elog/enums/LinkType.java create mode 100644 src/com/engine/salary/elog/enums/OperateAuditType.java delete mode 100644 src/com/engine/salary/elog/service/ApplicationContextProvider.java create mode 100644 src/com/engine/salary/elog/service/ILocalElogService.java delete mode 100644 src/com/engine/salary/elog/service/LocalElogService.java create mode 100644 src/com/engine/salary/elog/service/impl/LocalElogService.java create mode 100644 src/com/engine/salary/elog/threadlocal/ElogThreadLocal.java rename src/com/engine/salary/mapper/elog/{TableCheckerMapper.java => ElogTableCheckerMapper.java} (60%) create mode 100644 src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml create mode 100644 src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.java create mode 100644 src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.xml delete mode 100644 src/com/engine/salary/mapper/elog/TableCheckerMapper.xml diff --git a/src/com/engine/salary/config/SalaryElogConfig.java b/src/com/engine/salary/config/SalaryElogConfig.java new file mode 100644 index 000000000..006e75a94 --- /dev/null +++ b/src/com/engine/salary/config/SalaryElogConfig.java @@ -0,0 +1,418 @@ +package com.engine.salary.config; + +import com.engine.salary.elog.util.LoggerTemplate; +import com.engine.salary.elog.util.LoggerTemplateBuilder; + +/** + * @description: elog日志 + * @author: xiajun + * @modified By: xiajun + * @date: Created in 10/22/21 10:27 AM + * @version:v1.0 + */ +public class SalaryElogConfig { + +// /** +// * 个税税率表 +// * +// * @return +// */ +// @Bean("taxRateLoggerTemplate") +// public LoggerTemplate taxRateLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "taxrate"); +// } + + /** + * 薪资项目 + * + * @return + */ + public static LoggerTemplate salaryItemLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "adc"); + } + +// /** +// * 个税扣缴义务人 +// * +// * @return +// */ +// @Bean("taxAgentLoggerTemplate") +// public LoggerTemplate taxAgentLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "taxagent"); +// } +// +// @Bean("siCategoryLoggerTemplate") +// public LoggerTemplate siCategoryLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "siCategory"); +// } +// +// @Bean("siSchemeLoggerTemplate") +// public LoggerTemplate siSchemeLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "siScheme"); +// } +// +// @Bean("totalSchemeLoggerTemplate") +// public LoggerTemplate totalSchemeLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "totalScheme"); +// } +// +// /** +// * 累计情况 +// * +// * @return +// */ +// @Bean("addUpSituationLoggerTemplate") +// public LoggerTemplate addUpSituationLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "addupsituation"); +// } +// +// /** +// * 累计专项附加扣除 +// * +// * @return +// */ +// @Bean("addUpDeductionLoggerTemplate") +// public LoggerTemplate addUpDeductionLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "addupdeduction"); +// } +// +// /** +// * 其他免税扣除 +// * +// * @return +// */ +// @Bean("otherDeductionLoggerTemplate") +// public LoggerTemplate otherDeductionLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "otherdeduction"); +// } +// +// /** +// * 减税 +// * +// * @return +// */ +// @Bean("derateDeductionLoggerTemplate") +// public LoggerTemplate derateDeductionLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "deratededuction"); +// } +// +// /** +// * 税延养老保险 +// * +// * @return +// */ +// @Bean("endowmentInsuranceLoggerTemplate") +// public LoggerTemplate endowmentInsuranceLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "endowmentinsurance"); +// } +// +// /** +// * 税延养老保险 +// * +// * @return +// */ +// @Bean("freeIncomeLoggerTemplate") +// public LoggerTemplate freeIncomeLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "freeincome"); +// } +// +// /** +// * 捐赠免税 +// * +// * @return +// */ +// @Bean("grantDonationLoggerTemplate") +// public LoggerTemplate grantDonationLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "grantdonation"); +// } +// +// /** +// * 捐赠免税 +// * +// * @return +// */ +// @Bean("healthInsuranceLoggerTemplate") +// public LoggerTemplate healthInsuranceLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "healthinsurance"); +// } +// +// /** +// * 其他免税扣除 +// * +// * @return +// */ +// @Bean("otherDerateDeductionLoggerTemplate") +// public LoggerTemplate otherDerateDeductionLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "otherderatededuction"); +// } +// +// /** +// * 考勤引用 +// * +// * @return +// */ +// @Bean("attendQuoteLoggerTemplate") +// public LoggerTemplate attendQuoteLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "attendquote"); +// } +// +// /** +// * 考勤引用字段管理 +// * +// * @return +// */ +// @Bean("attendQuoteFieldLoggerTemplate") +// public LoggerTemplate attendQuoteFieldLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "attendfield"); +// } +// +// /** +// * 考勤引用字段设置 +// * +// * @return +// */ +// @Bean("attendQuoteFieldSettingLoggerTemplate") +// public LoggerTemplate attendQuoteFieldSettingLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "attendfieldset"); +// } +// +// /** +// * 薪资账套 +// * +// * @return +// */ +// @Bean("salarySobLoggerTemplate") +// public LoggerTemplate salarySobLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "salarysob"); +// } +// +// /** +// * 薪资核算 +// * +// * @return +// */ +// @Bean("salaryAcctRecordLoggerTemplate") +// public LoggerTemplate salaryAcctRecordLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "acctrecord"); +// } +// +// /** +// * 个税申报表 +// * +// * @return +// */ +// @Bean("taxDeclarationLoggerTemplate") +// public LoggerTemplate taxDeclarationLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "taxdecla"); +// } +// +// /** +// * 福利档案 +// * +// * @return +// */ +// @Bean("siArchivesLoggerTemplate") +// public LoggerTemplate siArchivesLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "siarchives"); +// } +// +// /** +// * 社保规则 +// */ +// @Bean("archiveRuleLoggerTemplate") +// public LoggerTemplate archiveRuleLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "archiverule"); +// } +// +// /** +// * 代缴机构 +// * +// * @return +// */ +// @Bean("paymentAgencyLoggerTemplate") +// public LoggerTemplate paymentAgencyLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "paymentagency"); +// } +// +// /** +// * 福利核算 +// * +// * @return +// */ +// @Bean("siAccountLoggerTemplate") +// public LoggerTemplate siAccountLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "siaccount"); +// } +// +// /** +// * 工资单模板 +// * +// * @return +// */ +// @Bean("salaryTemplateLoggerTemplate") +// public LoggerTemplate salaryTemplateLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "salarytemplate"); +// } +// +// /** +// * 工资单发放 +// * +// * @return +// */ +// @Bean("salarySendLoggerTemplate") +// public LoggerTemplate salarySendLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "salarysend"); +// } +// +// /** +// * 外部人员 +// * +// * @return +// */ +// @Bean("extEmployeeLoggerTemplate") +// public LoggerTemplate extEmployeeLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "extemployee"); +// } +// +// /** +// * 薪资档案 +// * +// * @return +// */ +// @Bean("salaryArchiveLoggerTemplate") +// public LoggerTemplate salaryArchiveLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "salaryarchive"); +// } +// +// /** +// * 薪资档案-字段 +// * +// * @return +// */ +// @Bean("salaryArchiveFieldLoggerTemplate") +// public LoggerTemplate salaryArchiveFieldLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "salarcfield"); +// } +// +// /** +// * 薪资档案-薪资项目调整 +// * +// * @return +// */ +// @Bean("salaryArchiveItemAdjustLoggerTemplate") +// public LoggerTemplate salaryArchiveItemAdjustLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "salarcitemadj"); +// } +// +// /** +// * 薪资档案-批量调薪 +// * +// * @return +// */ +// @Bean("salaryArchiveBatchAdjustLoggerTemplate") +// public LoggerTemplate salaryArchiveBatchAdjustLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "salarcbatadj"); +// } +// +// /** +// * 自定义业务数据设置 +// * +// * @return +// */ +// @Bean("customDataSetLoggerTemplate") +// public LoggerTemplate customDataSetLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "customdataset"); +// } +// +// /** +// * 自定义业务数据 +// * +// * @return +// */ +// @Bean("customDataLoggerTemplate") +// public LoggerTemplate customDataLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "customdata"); +// } +// +// +// /** +// * 人员报送 +// * +// * @return +// */ +// @Bean("employeeDeclareLoggerTemplate") +// public LoggerTemplate employeeDeclareLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "empdeclare"); +// } +// +// /** +// * 单位扣款账号 +// * +// * @return +// */ +// @Bean("withholdAccountLoggerTemplate") +// public LoggerTemplate withholdAccountLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "whaccount"); +// } +// +// /** +// * 银行报盘 +// * +// * @return +// */ +// @Bean("bankOfferLoggerTemplate") +// public LoggerTemplate bankOfferLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "bankoffer"); +// } +// +// /** +// * 银行报盘模板 +// * +// * @return +// */ +// @Bean("bankOfferTemplateLoggerTemplate") +// public LoggerTemplate bankOfferTemplateLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "botemplate"); +// } +// +// /** +// * 薪酬体系标准(岗薪制) +// * +// * @return +// */ +// @Bean("postSalaryLoggerTemplate") +// public LoggerTemplate postSalaryLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "postsalary"); +// } +// +// /** +// * 银行报盘模板 +// * +// * @return +// */ +// @Bean("taxFreeDetailLoggerTemplate") +// public LoggerTemplate taxFreeDetailLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "taxfreedetail"); +// } +// +// /** +// * 最优年终奖计税方案 +// * +// * @return +// */ +// @Bean("annualBonusPlanLoggerTemplate") +// public LoggerTemplate annualBonusPlanLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "annualplan"); +// } +// +// /** +// * 最优年终奖计税方案-累计情况 +// * 最优年终奖计税方案-优化方案详情 +// * +// * @return +// */ +// @Bean("annualBonusLoggerTemplate") +// public LoggerTemplate annualBonusLoggerTemplate() { +// return LoggerTemplateBuilder.build("hrsa", "annualbonus"); +// } +} diff --git a/src/com/engine/salary/config/SalaryPermissionConfig.java b/src/com/engine/salary/config/SalaryPermissionConfig.java new file mode 100644 index 000000000..7703e9267 --- /dev/null +++ b/src/com/engine/salary/config/SalaryPermissionConfig.java @@ -0,0 +1,194 @@ +//package com.engine.salary.config; +// +//import com.weaver.common.component.permission.container.FrontDataContainer; +//import com.weaver.common.mybatis.permission.config.PermissionConfig; +//import com.weaver.common.mybatis.permission.container.PermissionDataContainer; +//import com.weaver.common.mybatis.permission.model.PermissionModuleSourceBean; +//import com.weaver.common.mybatis.permission.model.PermissionModuleTargetBean; +//import com.weaver.common.mybatis.permission.service.PermissionModuleSourceService; +//import com.weaver.common.mybatis.permission.service.PermissionModuleTargetService; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.context.annotation.Configuration; +// +//import javax.annotation.PostConstruct; +// +///** +// * @description: 数据权限配置 +// * @author: xiajun +// * @modified By: xiajun +// * @date: Created in 2023/6/7 10:28 +// * @version:v1.0 +// */ +//@Configuration +//public class SalaryPermissionConfig { +// +// @Autowired +// private PermissionConfig permissionConfig; +// @Autowired +// private PermissionModuleSourceService permissionModuleSourceService; +// @Autowired +// private PermissionModuleTargetService permissionModuleTargetService; +// +// public static final String TABLE_NAME = "hrsa"; +// public static final String PERMISSION_ID = "salary_standard_share"; +// +// /** +// * 初始化模块支持的权限类型 +// */ +// @PostConstruct +// public void init() { +// +// // 初始化权限字典数据 +// permissionConfig.initPermissionData(); +// +// // 给permissionId指定sourceType 类型 ,可以是多个 +// PermissionModuleSourceBean permissionModuleSourceBean = new PermissionModuleSourceBean(); +// permissionModuleSourceBean.setPermissionId(PERMISSION_ID); +// permissionModuleSourceBean.setSourceType(1); // 指定资源 +// permissionModuleSourceService.addBySql(permissionModuleSourceBean); +// +// // 给permissionId指定targetType 类型 ,可以是多个 +// PermissionModuleTargetBean resourceTarget = new PermissionModuleTargetBean(); +// resourceTarget.setPermissionId(PERMISSION_ID); +// resourceTarget.setTargetType(1); // 人力资源 +// permissionModuleTargetService.addBySql(resourceTarget); +// +// PermissionModuleTargetBean departmentTarget = new PermissionModuleTargetBean(); +// departmentTarget.setPermissionId(PERMISSION_ID); +// departmentTarget.setTargetType(2); // 部门+安全级别 +// permissionModuleTargetService.addBySql(departmentTarget); +// +// PermissionModuleTargetBean departmentTarget2 = new PermissionModuleTargetBean(); +// departmentTarget2.setPermissionId(PERMISSION_ID); +// departmentTarget2.setTargetType(2001); // 部门+包含兼职部门 +// permissionModuleTargetService.addBySql(departmentTarget2); +// +// PermissionModuleTargetBean departmentTarget3 = new PermissionModuleTargetBean(); +// departmentTarget3.setPermissionId(PERMISSION_ID); +// departmentTarget3.setTargetType(3); // 部门+所有下级部门+安全级别 +// permissionModuleTargetService.addBySql(departmentTarget3); +// +// PermissionModuleTargetBean departmentTarget4 = new PermissionModuleTargetBean(); +// departmentTarget4.setPermissionId(PERMISSION_ID); +// departmentTarget4.setTargetType(3001); // 部门+所有下级部门+包含兼职部门 +// permissionModuleTargetService.addBySql(departmentTarget4); +// +// PermissionModuleTargetBean departmentTarget5 = new PermissionModuleTargetBean(); +// departmentTarget5.setPermissionId(PERMISSION_ID); +// departmentTarget5.setTargetType(3002); // 部门+所有下级部门+包含兼职部门+安全级别 +// permissionModuleTargetService.addBySql(departmentTarget5); +// +// PermissionModuleTargetBean departmentTarget6 = new PermissionModuleTargetBean(); +// departmentTarget6.setPermissionId(PERMISSION_ID); +// departmentTarget6.setTargetType(2002); // 部门+包含兼职部门+安全级别 +// permissionModuleTargetService.addBySql(departmentTarget6); +// +// PermissionModuleTargetBean branchTarget = new PermissionModuleTargetBean(); +// branchTarget.setPermissionId(PERMISSION_ID); +// branchTarget.setTargetType(5); // 分部+安全级别 +// permissionModuleTargetService.addBySql(branchTarget); +// +// PermissionModuleTargetBean branchTarget501 = new PermissionModuleTargetBean(); +// branchTarget501.setPermissionId(PERMISSION_ID); +// branchTarget501.setTargetType(501); // 分部+安全级别 +// permissionModuleTargetService.addBySql(branchTarget501); +// +// PermissionModuleTargetBean branchTarget502 = new PermissionModuleTargetBean(); +// branchTarget502.setPermissionId(PERMISSION_ID); +// branchTarget502.setTargetType(502); // 分部+安全级别+兼职 +// permissionModuleTargetService.addBySql(branchTarget502); +// +// PermissionModuleTargetBean branchTarget2 = new PermissionModuleTargetBean(); +// branchTarget2.setPermissionId(PERMISSION_ID); +// branchTarget2.setTargetType(6); // 分部+所有下级分部+安全级别 +// permissionModuleTargetService.addBySql(branchTarget2); +// +// PermissionModuleTargetBean roleTarget = new PermissionModuleTargetBean(); +// roleTarget.setPermissionId(PERMISSION_ID); +// roleTarget.setTargetType(10); // 角色+角色级别+安全级别 +// permissionModuleTargetService.addBySql(roleTarget); +// +// PermissionModuleTargetBean allPeopleTarget = new PermissionModuleTargetBean(); +// allPeopleTarget.setPermissionId(PERMISSION_ID); +// allPeopleTarget.setTargetType(11); // 所有人+安全级别 +// permissionModuleTargetService.addBySql(allPeopleTarget); +// +// PermissionModuleTargetBean positionTarget = new PermissionModuleTargetBean(); +// positionTarget.setPermissionId(PERMISSION_ID); +// positionTarget.setTargetType(12); // 岗位+指定部门 +// permissionModuleTargetService.addBySql(positionTarget); +// +// PermissionModuleTargetBean positionTarget12001 = new PermissionModuleTargetBean(); +// positionTarget12001.setPermissionId(PERMISSION_ID); +// positionTarget12001.setTargetType(12001); // 岗位+指定部门+安全级别 +// permissionModuleTargetService.addBySql(positionTarget12001); +// +// PermissionModuleTargetBean positionTarget12111 = new PermissionModuleTargetBean(); +// positionTarget12111.setPermissionId(PERMISSION_ID); +// positionTarget12111.setTargetType(12111); // 岗位+指定部门+包含兼职岗位 +// permissionModuleTargetService.addBySql(positionTarget12111); +// +// PermissionModuleTargetBean positionTarget12112 = new PermissionModuleTargetBean(); +// positionTarget12112.setPermissionId(PERMISSION_ID); +// positionTarget12112.setTargetType(12112); // 岗位+指定部门+包含兼职岗位+安全级别 +// permissionModuleTargetService.addBySql(positionTarget12112); +// +// PermissionModuleTargetBean positionTarget1201 = new PermissionModuleTargetBean(); +// positionTarget1201.setPermissionId(PERMISSION_ID); +// positionTarget1201.setTargetType(1201); // 兼职岗位+安全级别 +// permissionModuleTargetService.addBySql(positionTarget1201); +// +// PermissionModuleTargetBean positionTarget2 = new PermissionModuleTargetBean(); +// positionTarget2.setPermissionId(PERMISSION_ID); +// positionTarget2.setTargetType(13); // 岗位+指定分部 +// permissionModuleTargetService.addBySql(positionTarget2); +// +// PermissionModuleTargetBean positionTarget13001 = new PermissionModuleTargetBean(); +// positionTarget13001.setPermissionId(PERMISSION_ID); +// positionTarget13001.setTargetType(13001); // 岗位+指定分部+安全级别 +// permissionModuleTargetService.addBySql(positionTarget13001); +// +// PermissionModuleTargetBean positionTarget13110 = new PermissionModuleTargetBean(); +// positionTarget13110.setPermissionId(PERMISSION_ID); +// positionTarget13110.setTargetType(13110); // 岗位+指定分部+包含兼职岗位 + 安全级别 +// permissionModuleTargetService.addBySql(positionTarget13110); +// +// PermissionModuleTargetBean positionTarget1311 = new PermissionModuleTargetBean(); +// positionTarget1311.setPermissionId(PERMISSION_ID); +// positionTarget1311.setTargetType(1311); // 岗位+总部 +// permissionModuleTargetService.addBySql(positionTarget1311); +// +// PermissionModuleTargetBean positionTarget1312 = new PermissionModuleTargetBean(); +// positionTarget1312.setPermissionId(PERMISSION_ID); +// positionTarget1312.setTargetType(1312); // 岗位+总部+安全级别 +// permissionModuleTargetService.addBySql(positionTarget1312); +// +// PermissionModuleTargetBean positionTarget13111 = new PermissionModuleTargetBean(); +// positionTarget13111.setPermissionId(PERMISSION_ID); +// positionTarget13111.setTargetType(13111); // 岗位+总部+包含兼职岗位 +// permissionModuleTargetService.addBySql(positionTarget13111); +// +// PermissionModuleTargetBean positionTarget13112 = new PermissionModuleTargetBean(); +// positionTarget13112.setPermissionId(PERMISSION_ID); +// positionTarget13112.setTargetType(13112); // 岗位+总部+包含兼职岗位+安全级别 +// permissionModuleTargetService.addBySql(positionTarget13112); +// +// PermissionModuleTargetBean groupTarget = new PermissionModuleTargetBean(); +// groupTarget.setPermissionId(PERMISSION_ID); +// groupTarget.setTargetType(14); // 群组+安全级别 +// permissionModuleTargetService.addBySql(groupTarget); +// +// PermissionModuleTargetBean groupTarget2 = new PermissionModuleTargetBean(); +// groupTarget2.setPermissionId(PERMISSION_ID); +// groupTarget2.setTargetType(1411); // 群组 +// permissionModuleTargetService.addBySql(groupTarget2); +// +// // 创建权限表 +// // 一般模块要创建固定的权限表,类似流程模块可以调用这个接口,其他环境一般没有建表权限,以脚本的形式提供 +// // databaseService.createPermissionTable(TABLE_NAME,PERMISSION_ID); +// +// // 初始化permissionId和权限表的关系 +// FrontDataContainer.permissionFrontDataMap.put(PERMISSION_ID, TABLE_NAME); +// PermissionDataContainer.permissionDataContainer.put(PERMISSION_ID, TABLE_NAME); +// } +//} diff --git a/src/com/engine/salary/elog/annotation/ElogField.java b/src/com/engine/salary/elog/annotation/ElogField.java index 3b5df99c2..557a14f3c 100644 --- a/src/com/engine/salary/elog/annotation/ElogField.java +++ b/src/com/engine/salary/elog/annotation/ElogField.java @@ -1,6 +1,6 @@ package com.engine.salary.elog.annotation; -import com.engine.salary.elog.dto.DateTypeEnum; +import com.engine.salary.elog.dto.DataTypeEnum; import java.lang.annotation.*; @@ -9,7 +9,7 @@ import java.lang.annotation.*; @Target({ElementType.FIELD}) public @interface ElogField { - DateTypeEnum dataType() default DateTypeEnum.VARCHAR; + DataTypeEnum dataType() default DataTypeEnum.VARCHAR; int length() default 50; diff --git a/src/com/engine/salary/elog/annotation/ElogTransform.java b/src/com/engine/salary/elog/annotation/ElogTransform.java new file mode 100644 index 000000000..b876b18b2 --- /dev/null +++ b/src/com/engine/salary/elog/annotation/ElogTransform.java @@ -0,0 +1,28 @@ +package com.engine.salary.elog.annotation; + +import java.lang.annotation.*; + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD, ElementType.TYPE}) +public @interface ElogTransform { + + String tablename() default ""; + + String name(); + + int labelId() default -1; + + String type() default ""; + + String valuesKVPairs() default ""; + + boolean ignore() default false; + + boolean analyticSubclass() default false; + + boolean analyticList() default false; + + Class analyticListClass() default void.class; + +} diff --git a/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java b/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java index be8abc439..4e75cf8bb 100644 --- a/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java +++ b/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java @@ -2,7 +2,7 @@ package com.engine.salary.elog.annotation.handle; import com.engine.salary.elog.annotation.ElogField; import com.engine.salary.elog.annotation.ElogTable; -import com.engine.salary.elog.dto.DateTypeEnum; +import com.engine.salary.elog.dto.DataTypeEnum; import com.engine.salary.elog.dto.TableColumnBean; import com.engine.salary.elog.util.ElogUtils; import lombok.extern.slf4j.Slf4j; @@ -108,7 +108,7 @@ public class ElogTableScanner { columns.stream().forEach(tableColumnBean -> newcolMap.put(tableColumnBean.getColumnName().toLowerCase(), tableColumnBean)); oldColumns.stream().forEach(tableColumnBean -> { - tableColumnBean.setDataType(ElogUtils.getEnumFromString(DateTypeEnum.class, tableColumnBean.getDataTypeStr())); + tableColumnBean.setDataType(ElogUtils.getEnumFromString(DataTypeEnum.class, tableColumnBean.getDataTypeStr())); tableColumnBean.setNullable("YES".equalsIgnoreCase(tableColumnBean.getIsNullableStr())); oldcolMap.put(tableColumnBean.getColumnName().toLowerCase(), tableColumnBean); }); diff --git a/src/com/engine/salary/elog/async/LoggerMessageListener.java b/src/com/engine/salary/elog/async/LoggerMessageListener.java index 45f2e1b90..6687a0603 100644 --- a/src/com/engine/salary/elog/async/LoggerMessageListener.java +++ b/src/com/engine/salary/elog/async/LoggerMessageListener.java @@ -1,11 +1,10 @@ package com.engine.salary.elog.async; -import com.alibaba.fastjson.JSON; import com.engine.salary.elog.config.ELogTableChecker; import com.engine.salary.elog.dto.LoggerContext; -import com.engine.salary.elog.service.LocalElogService; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import com.engine.salary.elog.service.impl.LocalElogService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @ClassName: LoggerMessageListener @@ -15,17 +14,17 @@ import org.apache.commons.logging.LogFactory; */ public class LoggerMessageListener { - private final Log logger = LogFactory.getLog(getClass()); + private final Logger logger = LoggerFactory.getLogger(getClass()); - // @Autowired LocalElogService localElogService = new LocalElogService(); - // @Autowired - private ELogTableChecker eLogTableChecker = new ELogTableChecker(); - public String receive(LoggerContext messageBean) { - logger.info("日志SDK消费到消息" + JSON.toJSONString(messageBean)); - eLogTableChecker.check(messageBean); + public String receiveold(LoggerContext messageBean) { + + new ELogTableChecker().check(messageBean); localElogService.insertLocalElog(messageBean); + return ""; } + + } diff --git a/src/com/engine/salary/elog/config/ELogCache.java b/src/com/engine/salary/elog/config/ELogCache.java index d5de0885a..841bddf18 100644 --- a/src/com/engine/salary/elog/config/ELogCache.java +++ b/src/com/engine/salary/elog/config/ELogCache.java @@ -1,6 +1,6 @@ package com.engine.salary.elog.config; -import com.engine.salary.mapper.elog.TableCheckerMapper; +import com.engine.salary.mapper.elog.ElogTableCheckerMapper; import com.engine.salary.util.db.MapperProxyFactory; import java.util.HashMap; @@ -10,8 +10,8 @@ public class ELogCache { private Map tableCache = new HashMap<>(); - private TableCheckerMapper getTableCheckerMapper() { - return MapperProxyFactory.getProxy(TableCheckerMapper.class); + private ElogTableCheckerMapper getTableCheckerMapper() { + return MapperProxyFactory.getProxy(ElogTableCheckerMapper.class); } public Long getVersion(String mainTable) { diff --git a/src/com/engine/salary/elog/config/ELogTableChecker.java b/src/com/engine/salary/elog/config/ELogTableChecker.java index 0fee08932..acbb1dc89 100644 --- a/src/com/engine/salary/elog/config/ELogTableChecker.java +++ b/src/com/engine/salary/elog/config/ELogTableChecker.java @@ -1,7 +1,7 @@ package com.engine.salary.elog.config; import com.engine.salary.elog.dto.LoggerContext; -import com.engine.salary.mapper.elog.TableCheckerMapper; +import com.engine.salary.mapper.elog.ElogTableCheckerMapper; import com.engine.salary.util.db.MapperProxyFactory; import dm.jdbc.util.IdGenerator; @@ -10,8 +10,8 @@ public class ELogTableChecker { private static final long version = 0; private ELogCache eLogCache = new ELogCache(); - private TableCheckerMapper getTableCheckerMapper() { - return MapperProxyFactory.getProxy(TableCheckerMapper.class); + private ElogTableCheckerMapper getTableCheckerMapper() { + return MapperProxyFactory.getProxy(ElogTableCheckerMapper.class); } public void check(LoggerContext loggerContext) { diff --git a/src/com/engine/salary/elog/dto/DateTypeEnum.java b/src/com/engine/salary/elog/dto/DataTypeEnum.java similarity index 85% rename from src/com/engine/salary/elog/dto/DateTypeEnum.java rename to src/com/engine/salary/elog/dto/DataTypeEnum.java index 9833cfa86..4b46cdd33 100644 --- a/src/com/engine/salary/elog/dto/DateTypeEnum.java +++ b/src/com/engine/salary/elog/dto/DataTypeEnum.java @@ -1,6 +1,6 @@ package com.engine.salary.elog.dto; -public enum DateTypeEnum { +public enum DataTypeEnum { VARCHAR, BIGINT, INT, diff --git a/src/com/engine/salary/elog/dto/LoggerContext.java b/src/com/engine/salary/elog/dto/LoggerContext.java index 248ce45d8..8c4b3aa0e 100644 --- a/src/com/engine/salary/elog/dto/LoggerContext.java +++ b/src/com/engine/salary/elog/dto/LoggerContext.java @@ -1,11 +1,14 @@ package com.engine.salary.elog.dto; +import com.alibaba.fastjson.annotation.JSONField; import com.engine.salary.elog.annotation.ElogField; import com.engine.salary.elog.annotation.ElogTable; -import com.engine.salary.elog.util.ElogUtils; +import com.engine.salary.elog.enums.ElogConsts; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.StringUtils; +import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -17,51 +20,55 @@ import java.util.Map; * @Author tanghj * @Date 2021/2/10 14:18 */ -@ElogTable(module = ElogUtils.BASE_TABLE) +@ElogTable(module = ElogConsts.BASE_TABLE) @ApiModel("日志实体类") -public class LoggerContext { - @ElogField(comment = "ID", dataType = DateTypeEnum.VARCHAR, isKey = true, isNull = false) +public class LoggerContext implements Serializable { + + private static final long serialVersionUID = 15869325700230992L; + + @ElogField(comment = "ID", dataType = DataTypeEnum.BIGINT, isKey = true) @ApiModelProperty("日志ID") private long id; - @ElogField(dataType = DateTypeEnum.VARCHAR, length = 36,comment = "日志UUID") + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 36, comment = "日志UUID") @ApiModelProperty("日志UUID") - private String uuid; + private String uuid = ""; @ApiModelProperty("自定义日志字段信息") private T customInfo; - @ElogField(dataType = DateTypeEnum.DATETIME,comment = "操作时间") + @ElogField(dataType = DataTypeEnum.DATETIME, comment = "操作时间") @ApiModelProperty("操作时间") - private Date date; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date date = new Date(); - @ElogField(dataType = DateTypeEnum.VARCHAR,length = 50,comment = "终端信息") + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 500, comment = "终端信息") @ApiModelProperty("终端信息") - private String device; + private String device = ""; - @ElogField(dataType = DateTypeEnum.VARCHAR,length = 50,comment = "操作人") + @ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "-1", comment = "操作人") @ApiModelProperty("操作人") - private String operator; + private String operator = ""; - @ElogField(dataType = DateTypeEnum.VARCHAR,length = 100,comment = "操作人姓名") + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, comment = "操作人姓名") @ApiModelProperty("操作人姓名") - private String operatorName; + private String operatorName = ""; - @ElogField(dataType = DateTypeEnum.VARCHAR,length = 10,comment = "租户id") + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 10, comment = "租户id") @ApiModelProperty("租户id") - private String tenant_key; + private String tenant_key = ""; /** - * 要操作的对象在表中的主键值 + * 要操作的对象在表中的主键值 */ - @ElogField(dataType = DateTypeEnum.VARCHAR,length = 50,comment = "操作目标id") + @ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "-1", comment = "操作目标id") @ApiModelProperty("操作目标id") - private String targetId; + private String targetId = ""; - @ElogField(dataType = DateTypeEnum.TEXT ,comment = "操作目标名称") + @ElogField(dataType = DataTypeEnum.TEXT, comment = "操作目标名称") @ApiModelProperty("操作目标名称(用于显示)") - private String targetName; + private String targetName = ""; - @ElogField(dataType = DateTypeEnum.VARCHAR, length = 100,comment = "模块") + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, comment = "模块") @ApiModelProperty("目标对象类型(大分类,模块,服务)") private String moduleName;// 模块 @@ -70,21 +77,29 @@ public class LoggerContext { * 数据存储是以模块名_子项目名作为最基本的存储单元 * 如果是子项目下的子项目 命名为:子项目名_子项目名_子项目名(全部小写) */ - @ElogField(dataType = DateTypeEnum.VARCHAR, length = 100,comment = "服务(方法)") + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, comment = "服务(方法)") @ApiModelProperty("目标对象类型(小分类,模块/服务下的子功能。子项目)") private String functionName; - @ElogField(dataType = DateTypeEnum.VARCHAR, length = 100,comment = "访问接口名") + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, comment = "访问接口名") @ApiModelProperty("访问接口名") - private String interfaceName; + private String interfaceName = ""; - @ElogField(dataType = DateTypeEnum.VARCHAR, length = 50,comment = "操作类型") + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 200, comment = "请求全路径") + @ApiModelProperty("请求全路径") + private String requestUrl = ""; + + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 200, comment = "请求地址") + @ApiModelProperty("请求地址") + private String requestUri = ""; + + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 50, comment = "操作类型") @ApiModelProperty("操作类型(增删改查等)") - private String operateType; + private String operateType = ""; - @ElogField(dataType = DateTypeEnum.TEXT,comment = "操作类型") + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, comment = "操作类型名称") @ApiModelProperty("操作类型名称") - private String operateTypeName; + private String operateTypeName = ""; /** * 每个TableChangeBean 为一张表,支持记录多张表的前后值 @@ -92,52 +107,202 @@ public class LoggerContext { @ApiModelProperty("修改前、后的值") private List changeValues;// 操作表名,[字段名,值] - @ElogField(dataType = DateTypeEnum.TEXT,comment = "操作类型") + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 3000, comment = "操作详细说明") @ApiModelProperty("操作详细说明") - private String operatedesc; + private String operatedesc = ""; + @ElogField(dataType = DataTypeEnum.LONGTEXT, comment = "涉及的相关参数") @ApiModelProperty("涉及的相关参数") private Map params; - /*@ApiModelProperty("主日志") - private String mainId;//当作为主表,belongMainId不赋值 + @ApiModelProperty("涉及的相关参数-转string存储") + private String paramsStr; - @ApiModelProperty("从表日志") - private String belongMainId;*/ + /** + * 当作为主表,belongMainId不赋值 + */ + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 36, comment = "所属主表uuid") + @ApiModelProperty("所属主表uuid") + private String belongMainId = ""; - @ElogField(dataType = DateTypeEnum.VARCHAR, length = 50,comment = "操作IP") + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 50, comment = "操作IP") @ApiModelProperty("操作IP") - private String clientIp; + private String clientIp = ""; - @ElogField(dataType = DateTypeEnum.VARCHAR, length = 50,comment = "分组") + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 50, comment = "分组") @ApiModelProperty("分组") - private String groupId; + private String groupId = ""; /*@ApiModelProperty("是否明显表") private boolean isDetail;*/ - @ElogField(dataType = DateTypeEnum.TEXT, comment = "分组标题") + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 1000, comment = "分组标题") @ApiModelProperty("分组标题") - private int groupNameLabel; + private String groupNameLabel = ""; + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 200, comment = "重做业务接口") @ApiModelProperty("重做业务接口") - private String redoService; + private String redoService = ""; - @ElogField(dataType = DateTypeEnum.LONGTEXT, comment = "重做参数") + @ElogField(dataType = DataTypeEnum.LONGTEXT, comment = "重做参数") @ApiModelProperty("重做参数") private RedoContext redoContext; - @ElogField(dataType = DateTypeEnum.VARCHAR, length = 200, comment = "撤销业务接口") - @ApiModelProperty("撤销业务接口") - private String cancelService; + @ApiModelProperty("重做参数-转String存储") + private String redoContextStr; - @ElogField(dataType = DateTypeEnum.LONGTEXT, comment = "撤销参数") + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 200, comment = "撤销业务接口") + @ApiModelProperty("撤销业务接口") + private String cancelService = ""; + + @ElogField(dataType = DataTypeEnum.LONGTEXT, comment = "撤销参数") @ApiModelProperty("撤销参数") private CancelContext cancelContext; + @ApiModelProperty("撤销参数-转String存储") + private String cancelContextStr; + @ApiModelProperty("日志明细列表(值变化列表-自动赋值、或者自定义字段)") private List detailContexts; + @ElogField(dataType = DataTypeEnum.DATETIME, defaultValue = "CURRENT_TIMESTAMP", comment = "创建时间") + @ApiModelProperty("创建时间") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date create_time; + + @ElogField(dataType = DataTypeEnum.DATETIME, defaultValue = "CURRENT_TIMESTAMP", comment = "修改时间") + @ApiModelProperty("修改时间") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date update_time; + + @ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "-1", comment = "创建人id") + @ApiModelProperty("创建人id") + private long creator; + + @ElogField(dataType = DataTypeEnum.INT, defaultValue = "0", comment = "是否删除") + @ApiModelProperty("是否删除") + private int delete_type; + + @ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "0", comment = "总运行时长") + @ApiModelProperty("总运行时长") + private long totalRunTime; + + @ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "0", comment = "主方法运行时长") + @ApiModelProperty("主方法运行时长") + private long mainRunTime; + + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, defaultValue = "", comment = "运行结果标识") + @ApiModelProperty("运行结果标识") + private String result = ""; + + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, defaultValue = "", comment = "来自pc web") + @ApiModelProperty("来自终端") + private String fromTerminal = ""; + + @ElogField(dataType = DataTypeEnum.TEXT, comment = "运行结果描述") + @ApiModelProperty("运行结果描述") + private String resultDesc = ""; + + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 3000, comment = "原先内容") + @ApiModelProperty("原先内容(et用)") + private String old_content = ""; + + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 20, comment = "链接类型") + @ApiModelProperty("链接类型(et用)") + private String link_type = ""; + + @ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "0", comment = "链接id") + @ApiModelProperty("链接id(et用)") + private long link_id; + + @ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "0", comment = "原先链接id") + @ApiModelProperty("原先链接id(et用)") + private long old_link_id; + + /** + * 开发可以自由传中间临时参数,不会入库 + */ + @ApiModelProperty("临时参数") + private Object tempParams; + + /** + * 是否忽略该日志,不进行数据记录 + */ + @ApiModelProperty("是否忽略该日志,不进行数据记录") + private boolean logIgnore; + + /** + * 审计操作类型 + */ + @ApiModelProperty("审计操作类型") + protected String operateAuditType; + + /** + * 操作人账号 + */ + @ApiModelProperty("操作人账号") + protected String operateAccount; + + @ApiModelProperty("操作人id(兼容数据库用)") + protected long logOperator; + + @ApiModelProperty("操作人id(兼容数据库用)") + protected long logTargetid; + + @ApiModelProperty("ES存储大字段功能标识") + protected Boolean esFunction; + + @ApiModelProperty("params参数是否忽略记录") + private Boolean paramsIgnore = Boolean.FALSE; + + @ApiModelProperty("params请求体keys") + private List paramsBodyKeys; + + @ApiModelProperty("日志弱控记录") + private Boolean weakElogReocrd = Boolean.FALSE; + + private List clobFieldList; + + public List getClobFieldList() { + return clobFieldList; + } + + public void setClobFieldList(List clobFieldList) { + this.clobFieldList = clobFieldList; + } + + public Boolean getWeakElogReocrd() { + return weakElogReocrd; + } + + public void setWeakElogReocrd(Boolean weakElogReocrd) { + this.weakElogReocrd = weakElogReocrd; + } + + public Boolean getParamsIgnore() { + return paramsIgnore; + } + + public void setParamsIgnore(Boolean paramsIgnore) { + this.paramsIgnore = paramsIgnore; + } + + public List getParamsBodyKeys() { + return paramsBodyKeys; + } + + public void setParamsBodyKeys(List paramsBodyKeys) { + this.paramsBodyKeys = paramsBodyKeys; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + public String getUuid() { return uuid; } @@ -298,11 +463,11 @@ public class LoggerContext { isDetail = detail; }*/ - public int getGroupNameLabel() { + public String getGroupNameLabel() { return groupNameLabel; } - public void setGroupNameLabel(int groupNameLabel) { + public void setGroupNameLabel(String groupNameLabel) { this.groupNameLabel = groupNameLabel; } @@ -333,6 +498,7 @@ public class LoggerContext { public String getCancelService() { return cancelService; } + public void setCancelService(String cancelService) { this.cancelService = cancelService; } @@ -345,6 +511,24 @@ public class LoggerContext { this.detailContexts = detailContexts; } + public void addDetailContext(LoggerDetailContext loggerDetailContext) { + if (this.detailContexts != null) { + this.detailContexts.add(loggerDetailContext); + } else { + this.detailContexts = new ArrayList<>(); + this.detailContexts.add(loggerDetailContext); + } + } + + public void addDetailContext(List list) { + if (this.detailContexts != null) { + this.detailContexts.addAll(list); + } else { + this.detailContexts = new ArrayList<>(); + this.detailContexts.addAll(list); + } + } + public String getOperatorName() { return operatorName; } @@ -360,12 +544,12 @@ public class LoggerContext { } public void setOldValueList(List list) { - if(list != null) + if (list != null) list.stream().forEach(obj -> setOldValues(obj)); } public void setNewValueList(List list) { - if(list != null) + if (list != null) list.stream().forEach(obj -> setNewValues(obj)); } @@ -373,23 +557,97 @@ public class LoggerContext { List list = getChangeList(); boolean handled = false; - for(TableChangeBean bean : list) { - if(bean.getNewValue() == null) { + for (TableChangeBean bean : list) { + if (bean.getNewValue() == null) { bean.setNewValue(object); handled = true; break; } } - if(!handled) { + if (!handled) { TableChangeBean bean = new TableChangeBean(); - bean.setOldValue(object); + bean.setNewValue(object); + list.add(bean); + } + } + + public void setOldValues(Object object, String tableName, String dataId, String belongDataid) { + setOldValues(object, tableName, dataId, belongDataid, false); + } + + public void setOldValues(Object object, String tableName, String dataId, String belongDataid, boolean isDetail) { + TableChangeBean bean = new TableChangeBean(); + if (StringUtils.isNotEmpty(tableName)) + bean.setTableName(tableName); + if (StringUtils.isNotEmpty(dataId)) + bean.setDataid(dataId); + if (StringUtils.isNotEmpty(belongDataid)) + bean.setBelongDataid(belongDataid); + if (isDetail) + bean.setIsDetail(1); + bean.setOldValue(object); + getChangeList().add(bean); + } + + public void setOldValueList(List list, String tableName, String dataId, String belongDataid) { + setOldValueList(list, tableName, dataId, belongDataid, false); + } + + public void setNewValueList(List list, String tableName, String dataId, String belongDataid) { + setNewValueList(list, tableName, dataId, belongDataid, false); + } + + public void setOldValueList(List list, String tableName, String dataId, String belongDataid, boolean isDetail) { + if (list != null) + list.stream().forEach(obj -> setOldValues(obj, tableName, dataId, belongDataid, isDetail)); + } + + public void setNewValueList(List list, String tableName, String dataId, String belongDataid, boolean isDetail) { + if (list != null) + list.stream().forEach(obj -> setNewValues(obj, tableName, dataId, belongDataid, isDetail)); + } + + public void setNewValues(Object object, String tableName, String dataId, String belongDataid) { + setNewValues(object, tableName, dataId, belongDataid, false); + } + + public void setNewValues(Object object, String tableName, String dataId, String belongDataid, boolean isDetail) { + List list = getChangeList(); + + boolean handled = false; + for (TableChangeBean bean : list) { + if (bean.getNewValue() == null) { + bean.setNewValue(object); + if (StringUtils.isNotEmpty(tableName)) + bean.setTableName(tableName); + if (StringUtils.isNotEmpty(dataId)) + bean.setDataid(dataId); + if (StringUtils.isNotEmpty(belongDataid)) + bean.setBelongDataid(belongDataid); + if (isDetail) + bean.setIsDetail(1); + handled = true; + break; + } + } + if (!handled) { + TableChangeBean bean = new TableChangeBean(); + if (StringUtils.isNotEmpty(tableName)) + bean.setTableName(tableName); + if (StringUtils.isNotEmpty(dataId)) + bean.setDataid(dataId); + if (StringUtils.isNotEmpty(belongDataid)) + bean.setBelongDataid(belongDataid); + if (isDetail) + bean.setIsDetail(1); + bean.setNewValue(object); list.add(bean); } } public List getChangeList() { - if(this.changeValues == null) { + if (this.changeValues == null) { this.changeValues = new ArrayList<>(); } @@ -397,6 +655,10 @@ public class LoggerContext { } + public Object getParam(String id) { + return this.params.get(id); + } + public String getOperateTypeName() { return operateTypeName; } @@ -404,5 +666,214 @@ public class LoggerContext { public void setOperateTypeName(String operateTypeName) { this.operateTypeName = operateTypeName; } + + public String getParamsStr() { + return paramsStr; + } + + public void setParamsStr(String paramsStr) { + this.paramsStr = paramsStr; + } + + public String getRedoContextStr() { + return redoContextStr; + } + + public void setRedoContextStr(String redoContextStr) { + this.redoContextStr = redoContextStr; + } + + public String getCancelContextStr() { + return cancelContextStr; + } + + public void setCancelContextStr(String cancelContextStr) { + this.cancelContextStr = cancelContextStr; + } + + public String getBelongMainId() { + return belongMainId; + } + + public void setBelongMainId(String belongMainId) { + this.belongMainId = belongMainId; + } + + public String getRequestUrl() { + return requestUrl; + } + + public void setRequestUrl(String requestUrl) { + this.requestUrl = requestUrl; + } + + public String getRequestUri() { + return requestUri; + } + + public void setRequestUri(String requestUri) { + this.requestUri = requestUri; + } + + public Date getCreate_time() { + return create_time; + } + + public void setCreate_time(Date create_time) { + this.create_time = create_time; + } + + public Date getUpdate_time() { + return update_time; + } + + public void setUpdate_time(Date update_time) { + this.update_time = update_time; + } + + public long getCreator() { + return creator; + } + + public void setCreator(long creator) { + this.creator = creator; + } + + public int getDelete_type() { + return delete_type; + } + + public void setDelete_type(int delete_type) { + this.delete_type = delete_type; + } + + public long getTotalRunTime() { + return totalRunTime; + } + + public void setTotalRunTime(long totalRunTime) { + this.totalRunTime = totalRunTime; + } + + public long getMainRunTime() { + return mainRunTime; + } + + public void setMainRunTime(long mainRunTime) { + this.mainRunTime = mainRunTime; + } + + public Object getTempParams() { + return tempParams; + } + + public void setTempParams(Object tempParams) { + this.tempParams = tempParams; + } + + public String getResult() { + return result; + } + + public void setResult(String result) { + this.result = result; + } + + public String getFromTerminal() { + return fromTerminal; + } + + public void setFromTerminal(String fromTerminal) { + this.fromTerminal = fromTerminal; + } + + public String getResultDesc() { + return resultDesc; + } + + public void setResultDesc(String resultDesc) { + this.resultDesc = resultDesc; + } + + public String getOld_content() { + return old_content; + } + + public void setOld_content(String old_content) { + this.old_content = old_content; + } + + public String getLink_type() { + return link_type; + } + + public void setLink_type(String link_type) { + this.link_type = link_type; + } + + public long getLink_id() { + return link_id; + } + + public void setLink_id(long link_id) { + this.link_id = link_id; + } + + public long getOld_link_id() { + return old_link_id; + } + + public void setOld_link_id(long old_link_id) { + this.old_link_id = old_link_id; + } + + public String getOperateAuditType() { + return operateAuditType; + } + + public void setOperateAuditType(String operateAuditType) { + this.operateAuditType = operateAuditType; + } + + public String getOperateAccount() { + return operateAccount; + } + + public void setOperateAccount(String operateAccount) { + this.operateAccount = operateAccount; + } + + public long getLogOperator() { + return logOperator; + } + + public void setLogOperator(long logOperator) { + this.logOperator = logOperator; + } + + public long getLogTargetid() { + return logTargetid; + } + + public void setLogTargetid(long logTargetid) { + this.logTargetid = logTargetid; + } + + public boolean getLogIgnore() { + return logIgnore; + } + + public void setLogIgnore(boolean logIgnore) { + this.logIgnore = logIgnore; + } + + public Boolean getEsFunction() { + return esFunction; + } + + public void setEsFunction(Boolean esFunction) { + this.esFunction = esFunction; + } + } diff --git a/src/com/engine/salary/elog/dto/LoggerDetailContext.java b/src/com/engine/salary/elog/dto/LoggerDetailContext.java index 8dd6ec7d9..7bb64e1ff 100644 --- a/src/com/engine/salary/elog/dto/LoggerDetailContext.java +++ b/src/com/engine/salary/elog/dto/LoggerDetailContext.java @@ -1,41 +1,148 @@ package com.engine.salary.elog.dto; +import com.engine.salary.elog.annotation.ElogDetailTable; +import com.engine.salary.elog.annotation.ElogField; +import com.engine.salary.elog.enums.ElogConsts; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Date; + /** * @ClassName: ValueChangeBean * @Description 值变化实体类(自动将表字段值变更类转换为该类) * @Author tanghj * @Date 2021/3/9 11:06 */ +@ElogDetailTable(module = ElogConsts.BASE_TABLE) @ApiModel("值变化实体类") -public class LoggerDetailContext { +public class LoggerDetailContext implements Serializable { + private static final long serialVersionUID = 15869325700230992L; + + @ElogField(comment = "ID", dataType = DataTypeEnum.BIGINT, isKey = true) + @ApiModelProperty("ID") + private long id; + + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 36,comment = "日志UUID") @ApiModelProperty("同一个bean转换的数据,uuid相同,作为区分标识") - private String uuid; + private String uuid = ""; + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 36,comment = "主表id") + @ApiModelProperty("主表id") + private String mainid = ""; + + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 50,comment = "数据id") + @ApiModelProperty("数据id") + private String dataid = ""; + + /** + * 当作为主表,belongDataId不赋值 + */ + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 50,comment = "主表数据id") + @ApiModelProperty("主表数据id") + private String belongDataid = ""; + + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 200,comment = "表名") @ApiModelProperty("表名") - private String tableName; + private String tableName =""; + @ElogField(dataType = DataTypeEnum.VARCHAR, defaultValue = "-1", length = 50,comment = "表名labelid") + @ApiModelProperty("表名labelid") + private String tableNameLabelId = "-1"; + @ElogField(dataType = DataTypeEnum.VARCHAR, defaultValue="",isNull = false,length = 50,comment = "对应数据库的表") + @ApiModelProperty("对应数据库的表") + private String tableNameDesc = ""; + + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 200,comment = "字段名") @ApiModelProperty("字段名") - private String fieldName; + private String fieldName =""; + @ElogField(dataType = DataTypeEnum.VARCHAR, defaultValue = "-1", length = 50,comment = "字段名labelid") + @ApiModelProperty("字段名labelid") + private String fieldNameLabelId = "-1"; + + @ElogField(dataType = DataTypeEnum.LONGTEXT,comment = "更新后的值") @ApiModelProperty("更新后的值") - private String newValue; + private String newValue = ""; + @ElogField(dataType = DataTypeEnum.LONGTEXT,comment = "更新前的值") @ApiModelProperty("更新前的值") - private String oldValue; + private String oldValue = ""; + @ElogField(dataType = DataTypeEnum.LONGTEXT,comment = "更新后的显示值") + @ApiModelProperty("更新后的显示值") + private String newRealValue = ""; + + @ElogField(dataType = DataTypeEnum.LONGTEXT,comment = "更新前的显示值") + @ApiModelProperty("更新前的显示值") + private String oldRealValue = ""; + + @ElogField(dataType = DataTypeEnum.VARCHAR, length = 200, comment = "字段名") @ApiModelProperty("字段描述") - private String fieldDesc; + private String fieldDesc = ""; + @ElogField(dataType = DataTypeEnum.INT, comment = "字段名") @ApiModelProperty("字段展示顺序") - private int showorder; + private int showorder = 0; @ApiModelProperty("自定义字段") private T customDetailInfo; + @ElogField(dataType = DataTypeEnum.DATETIME, defaultValue = "CURRENT_TIMESTAMP", comment = "创建时间") + @ApiModelProperty("创建时间") + private Date create_time; + + @ElogField(dataType = DataTypeEnum.DATETIME, defaultValue = "CURRENT_TIMESTAMP", comment = "修改时间") + @ApiModelProperty("修改时间") + private Date update_time; + + @ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "-1", comment = "创建人id") + @ApiModelProperty("创建人id") + private long creator; + + @ElogField(dataType = DataTypeEnum.INT, defaultValue = "0" , comment = "是否删除") + @ApiModelProperty("是否删除") + private int delete_type; + + @ElogField(dataType = DataTypeEnum.VARCHAR,length = 10,comment = "租户id") + @ApiModelProperty("租户id") + private String tenant_key = ""; + + @ElogField(dataType = DataTypeEnum.INT, defaultValue = "0" , comment = "是否明细字段") + @ApiModelProperty("是否明细字段") + private int isDetail = 0; + + + private String cusValus; + + public String getCusValus() { + return cusValus; + } + + public void setCusValus(String cusValus) { + this.cusValus = cusValus; + } + + + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getMainid() { + return mainid; + } + + public void setMainid(String mainid) { + this.mainid = mainid; + } + public String getUuid() { return uuid; } @@ -99,4 +206,111 @@ public class LoggerDetailContext { public void setCustomDetailInfo(T customDetailInfo) { this.customDetailInfo = customDetailInfo; } + + public String getDataid() { + return dataid; + } + + public void setDataid(String dataid) { + this.dataid = dataid; + } + + public String getBelongDataid() { + return belongDataid; + } + + public void setBelongDataid(String belongDataid) { + this.belongDataid = belongDataid; + } + + public Date getCreate_time() { + return create_time; + } + + public void setCreate_time(Date create_time) { + this.create_time = create_time; + } + + public Date getUpdate_time() { + return update_time; + } + + public void setUpdate_time(Date update_time) { + this.update_time = update_time; + } + + public long getCreator() { + return creator; + } + + public void setCreator(long creator) { + this.creator = creator; + } + + public int getDelete_type() { + return delete_type; + } + + public void setDelete_type(int delete_type) { + this.delete_type = delete_type; + } + + public String getTenant_key() { + return tenant_key; + } + + public void setTenant_key(String tenant_key) { + this.tenant_key = tenant_key; + } + + public int getIsDetail() { + return isDetail; + } + + public void setIsDetail(int isDetail) { + this.isDetail = isDetail; + } + + public String getNewRealValue() { + return newRealValue; + } + + public void setNewRealValue(String newRealValue) { + this.newRealValue = newRealValue; + } + + public String getOldRealValue() { + return oldRealValue; + } + + public void setOldRealValue(String oldRealValue) { + this.oldRealValue = oldRealValue; + } + + public String getTableNameLabelId() { + return tableNameLabelId; + } + + public void setTableNameLabelId(String tableNameLabelId) { + this.tableNameLabelId = tableNameLabelId; + } + + public String getFieldNameLabelId() { + return fieldNameLabelId; + } + + public void setFieldNameLabelId(String fieldNameLabelId) { + this.fieldNameLabelId = fieldNameLabelId; + } + + public String getTableNameDesc() { + return tableNameDesc; + } + + public void setTableNameDesc(String tableNameDesc) { + this.tableNameDesc = tableNameDesc; + } + + + } diff --git a/src/com/engine/salary/elog/dto/TableChangeBean.java b/src/com/engine/salary/elog/dto/TableChangeBean.java index 86cfdb0c3..463d9dd73 100644 --- a/src/com/engine/salary/elog/dto/TableChangeBean.java +++ b/src/com/engine/salary/elog/dto/TableChangeBean.java @@ -3,6 +3,8 @@ package com.engine.salary.elog.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; + /** * @ClassName: TableChangeBean * @Description 表更新前后值类 @@ -10,11 +12,22 @@ import io.swagger.annotations.ApiModelProperty; * @Date 2021/3/8 15:58 */ @ApiModel("表更新前后值类") -public class TableChangeBean { +public class TableChangeBean implements Serializable { + + private static final long serialVersionUID = 15869325700230992L; @ApiModelProperty("表名") private String tableName; + @ApiModelProperty("数据id") + private String dataid; + + @ApiModelProperty("所属主表数据id") + private String belongDataid; + + @ApiModelProperty("是否为明细表(0,否;1,是)") + private int isDetail = 0; + /** * 泛型必须是具体的实体类 */ @@ -27,6 +40,29 @@ public class TableChangeBean { @ApiModelProperty("更新后的值") private T newValue; + /** + * 泛型必须是具体的实体类 + */ + @ApiModelProperty("更新前显示的值") + private T oldRealValue; + + /** + * 泛型必须是具体的实体类 + */ + @ApiModelProperty("更新后显示的值") + private T newRealValue; + + + @ApiModelProperty("字段对应的labelid") + private String fieldNameLabelId; + + @ApiModelProperty("表对应的labelid") + private String tableNameLabelId; + + @ApiModelProperty("对应数据库的表") + private String tableNameDesc; + + public String getTableName() { return tableName; } @@ -50,4 +86,68 @@ public class TableChangeBean { public void setNewValue(T newValue) { this.newValue = newValue; } + + public String getDataid() { + return dataid; + } + + public void setDataid(String dataid) { + this.dataid = dataid; + } + + public String getBelongDataid() { + return belongDataid; + } + + public void setBelongDataid(String belongDataid) { + this.belongDataid = belongDataid; + } + + public int getIsDetail() { + return isDetail; + } + + public void setIsDetail(int isDetail) { + this.isDetail = isDetail; + } + + public T getOldRealValue() { + return oldRealValue; + } + + public void setOldRealValue(T oldRealValue) { + this.oldRealValue = oldRealValue; + } + + public T getNewRealValue() { + return newRealValue; + } + + public String getFieldNameLabelId() { + return fieldNameLabelId; + } + + public void setFieldNameLabelId(String fieldNameLabelId) { + this.fieldNameLabelId = fieldNameLabelId; + } + + public String getTableNameLabelId() { + return tableNameLabelId; + } + + public void setTableNameLabelId(String tableNameLabelId) { + this.tableNameLabelId = tableNameLabelId; + } + + public String getTableNameDesc() { + return tableNameDesc; + } + + public void setTableNameDesc(String tableNameDesc) { + this.tableNameDesc = tableNameDesc; + } + + public void setNewRealValue(T newRealValue) { + this.newRealValue = newRealValue; + } } diff --git a/src/com/engine/salary/elog/dto/TableColumnBean.java b/src/com/engine/salary/elog/dto/TableColumnBean.java index e4c635cd0..cf8609c61 100644 --- a/src/com/engine/salary/elog/dto/TableColumnBean.java +++ b/src/com/engine/salary/elog/dto/TableColumnBean.java @@ -25,7 +25,7 @@ public class TableColumnBean { private String dataTypeStr; @ApiModelProperty("字段类型") - private DateTypeEnum dataType; + private DataTypeEnum dataType; @ApiModelProperty("长度") private long fieldLength; @@ -58,11 +58,11 @@ public class TableColumnBean { this.columnType = columnType; } - public DateTypeEnum getDataType() { + public DataTypeEnum getDataType() { return dataType; } - public void setDataType(DateTypeEnum dataType) { + public void setDataType(DataTypeEnum dataType) { this.dataType = dataType; } diff --git a/src/com/engine/salary/elog/enums/ElogConsts.java b/src/com/engine/salary/elog/enums/ElogConsts.java new file mode 100644 index 000000000..a895b95b8 --- /dev/null +++ b/src/com/engine/salary/elog/enums/ElogConsts.java @@ -0,0 +1,22 @@ +package com.engine.salary.elog.enums; + +/** + * @date: 2022/3/30 20:32 + * @author: deli.xu + * @description: 日志常量 + */ +public class ElogConsts { + + public static final String ORACLE = "oracle"; + public static final String SQLSERVER = "sqlserver"; + public static final String MYSQL = "mysql"; + public static final String POSTGRESQL = "postgresql"; + + public static final String BASE_TABLE = "BASE_ELOG_TABLE"; + + public static final String TABLE_SPACER = "_"; + public static final String TABLE_SUFFIX = "logs"; + public static final String DETAIL_TABLE_SUFFIX = "_detail"; + + public static final String ES = "ES"; +} diff --git a/src/com/engine/salary/elog/enums/FromTerminalType.java b/src/com/engine/salary/elog/enums/FromTerminalType.java new file mode 100644 index 000000000..d637bb0f9 --- /dev/null +++ b/src/com/engine/salary/elog/enums/FromTerminalType.java @@ -0,0 +1,48 @@ +package com.engine.salary.elog.enums; + +/** + * @ClassName: FromTerminalType + * @Description TODO + * @Author tanghj + * @Date 2021/6/8 11:35 + */ +public enum FromTerminalType { + PC("pc","来自 pc web"), + ANDROID("android","来自 安卓"), + IOS("ios","来自 iphone"), + IPHONE("iphone","来自 iphone"), + PC_CLIENT("pc_client","来自 windows客户端"), + MAC_CLIENT("mac_client","来自 mac客户端"), + H5("H5","来自 手机H5"), + MOBILEWEB("mobileWeb","来自 手机H5"), + MICO_MSG("mico_msg","来自 微信"), + WECHAT("wechat","来自 企业微信"), + APP_H5("app_h5","来自 app_h5"), + BROWSER("browser", "来自 网页"), + MOBILE("mobile","来自 移动端"); + + private String code; + private String face; + + FromTerminalType(String code, String face) { + this.code = code; + this.face = face; + } + + public String getCode() { + return code; + } + + public String getFace() { + return face; + } + + public static FromTerminalType fromString(String name) { + try { + FromTerminalType type = FromTerminalType.valueOf(name); + return type; + } catch (Exception e) { + return null; + } + } +} diff --git a/src/com/engine/salary/elog/enums/LinkType.java b/src/com/engine/salary/elog/enums/LinkType.java new file mode 100644 index 000000000..ff78362f0 --- /dev/null +++ b/src/com/engine/salary/elog/enums/LinkType.java @@ -0,0 +1,173 @@ +package com.engine.salary.elog.enums; + +/** + * @date: 2022/5/13 21:13 + * @author: deli.xu + * @description: 链接类型 用之前老eteams-base-bean + */ + +/** + * 链接类型 + * + * @author gk + */ +public enum LinkType { + + // 主线 + mainline("项目"), + + blog("工作日报"), + + workreport("计划报告"), + + clue("线索"), + + crmcontact("联系人-用于全局搜索"), + + marketactivity("活动"), + + crmSummary("报表"), + + statisticalReport("统计报表"), + + attend("出勤"), + + singalForm("表单应用"), + + biaoge("表格"), + + // 标签 + tag("标签"), + + // 表单标签 + formtag("表单标签"), + + // 附件 + attachment("附件"), + + // 用户 + user("用户"), + + // 任务 + task("任务"), + + // 子任务 + subtask("子任务"), + + // 文档 + document("文档"), + + // 文件夹 + folder("文件夹"), + + // 客户 + customer("客户"), + + // 联系人 + contact("联系人"), + + // 销售商机 + saleChance("销售商机"), + + // 产品 + production("产品"), + + // 合同 + contract("合同"), + + // 竞争对手 + competitor("竞争对手"), + + // 公告 + placard("公告"), + + // 审批 + workflow("审批"), + + // 部门 + department("部门"), + + // 岗位 + position("岗位"), + + // 日程 + calendar("日程"), + + // 群组 + group("群组"), + + // 合同 + hrcontract("人事合同"), + + //人事管理 + hr("人事"), + + //KPI + kpi("绩效考核"),kpiFlow("绩效考核流程"), + + // 全部 + all("所有人"), + + formdatareport("数据上报"), + + form("表单"), + + userSetting("不可见成员"), + + sms("短信"), + + wechatEnterprise("企业微信"), + + wechatService("微信服务号"), + + salarybill("工资单"), + + staffPosition("员工位置")/*定制化模块*/, + + app("应用")/*自定义应用*/, + + email("邮件"), + + workTrends("工作动态"), + + tenantLogo("个性化定制"), + + module("模块"), + + orderform("订单"), + + price("价格"), + + capital("资金"), + + quote("报价"), + + room("会议室管理"), + + //模板任务 + mtTask("模板任务"), + + watchMe("关注我的"), + // crm + crm("CRM"), + + // 空 + blank(""), + + role("角色"), + + externalUser("外部联系人"), + + subcompany("分部"); + + private String displayName; + + LinkType(String displayName) { + this.displayName = displayName; + } + + public String getDisplayName() { + return displayName; + } + +} diff --git a/src/com/engine/salary/elog/enums/OperateAuditType.java b/src/com/engine/salary/elog/enums/OperateAuditType.java new file mode 100644 index 000000000..5d3850c38 --- /dev/null +++ b/src/com/engine/salary/elog/enums/OperateAuditType.java @@ -0,0 +1,14 @@ +package com.engine.salary.elog.enums; + +public class OperateAuditType { + //自动 + public static final String AUTO = "AUTO"; + //信息 + public static final String INFO = "INFO"; + //错误 + public static final String ERROR = "ERROR"; + //警告 + public static final String WARNING = "WARNING"; + //重大事件 + public static final String EVENT = "EVENT"; +} \ No newline at end of file diff --git a/src/com/engine/salary/elog/service/ApplicationContextProvider.java b/src/com/engine/salary/elog/service/ApplicationContextProvider.java deleted file mode 100644 index d1bc541d4..000000000 --- a/src/com/engine/salary/elog/service/ApplicationContextProvider.java +++ /dev/null @@ -1,67 +0,0 @@ -//package com.engine.salary.elog.service; -// -//import org.springframework.beans.BeansException; -//import org.springframework.context.ApplicationContext; -//import org.springframework.context.ApplicationContextAware; -//import org.springframework.stereotype.Component; -// -///** -// * 获取Spring上下文 -// * -// * @author tanghj -// * @date on 2020-10-19 -// */ -// -//public class ApplicationContextProvider implements ApplicationContextAware { -// /** -// * 上下文对象实例 -// */ -// private static ApplicationContext applicationContext; -// -// @Override -// public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { -// this.applicationContext = applicationContext; -// } -// -// /** -// * 获取applicationContext -// * -// * @return -// */ -// public static ApplicationContext getApplicationContext() { -// return applicationContext; -// } -// -// /** -// * 通过name获取 Bean. -// * -// * @param name -// * @return -// */ -// public static Object getBean(String name) { -// return getApplicationContext().getBean(name); -// } -// -// /** -// * 通过class获取Bean. -// * -// * @param clazz -// * @param -// * @return -// */ -// public static T getBean(Class clazz) { -// return getApplicationContext().getBean(clazz); -// } -// -// /** -// * 通过name,以及Clazz返回指定的Bean -// * -// * @param name -// * @param clazz -// * @param -// * @return -// */ -// public static T getBean(String name, Class clazz) { -// return getApplicationContext().getBean(name, clazz); -// } -//} diff --git a/src/com/engine/salary/elog/service/ILocalElogService.java b/src/com/engine/salary/elog/service/ILocalElogService.java new file mode 100644 index 000000000..9d721b69c --- /dev/null +++ b/src/com/engine/salary/elog/service/ILocalElogService.java @@ -0,0 +1,13 @@ +package com.engine.salary.elog.service; + +import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.elog.dto.LoggerDetailContext; + +public interface ILocalElogService { + + int insertLocalElog(LoggerContext context); + + int insertElogDetail(LoggerDetailContext loggerDetailContext, String mainId, String detailTableName); + +// void rollBackElog(LoggerContext context); +} diff --git a/src/com/engine/salary/elog/service/LocalElogService.java b/src/com/engine/salary/elog/service/LocalElogService.java deleted file mode 100644 index a9a368533..000000000 --- a/src/com/engine/salary/elog/service/LocalElogService.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.engine.salary.elog.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.engine.salary.elog.dto.LoggerContext; -import com.engine.salary.elog.dto.LoggerDetailContext; -import com.engine.salary.mapper.elog.LocalElogDaoMapper; -import com.engine.salary.util.db.MapperProxyFactory; -import org.apache.commons.lang3.StringUtils; - -import java.util.Set; -import java.util.UUID; - -/** - * @ClassName: LocalElogService - * @Description TODO - * @Author tanghj - * @Date 2021/2/24 11:03 - */ -public class LocalElogService { - - private LocalElogDaoMapper getLocalElogDaoMapper() { - return MapperProxyFactory.getProxy(LocalElogDaoMapper.class); - } - - public int insertLocalElog(LoggerContext context) { - if (StringUtils.isEmpty(context.getUuid())) { - context.setUuid(UUID.randomUUID().toString().replace("-", "")); - } - - String cusColumns = ""; - String cusValus = ""; - if (context.getCustomInfo() != null) { - JSONObject custom = JSONObject.parseObject(JSON.toJSONString(context.getCustomInfo())); - - for (String key : (Set) custom.keySet()) { - cusColumns = cusColumns + ", " + key; - cusValus = cusValus + ",'" + custom.getString(key) + "'"; - } - - } - - String params = context.getParams() == null ? null : JSONObject.toJSONString(context.getParams()); - - String tableName = context.getModuleName() + "_" + context.getFunctionName() + "logs"; - - getLocalElogDaoMapper().insertElogContext(context, params, cusColumns, cusValus, tableName); - if (context.getDetailContexts() != null) { - String detailTableName = context.getModuleName() + "_" + context.getFunctionName() + "logs_detail"; - for (LoggerDetailContext detailContext : context.getDetailContexts()) { - insertElogDetail(detailContext, context.getUuid(), detailTableName); - } - - } - - return 1; - } - - private int insertElogDetail(LoggerDetailContext loggerDetailContext, String mainId, String detailTableName) { - String cusColumns = ""; - String cusValus = ""; - if (loggerDetailContext.getCustomDetailInfo() != null) { - JSONObject custom = JSONObject.parseObject(JSON.toJSONString(loggerDetailContext.getCustomDetailInfo())); - - for (String key : (Set) custom.keySet()) { - cusColumns = cusColumns + ", " + key; - cusValus = cusValus + ",'" + custom.getString(key) + "'"; - } - } - getLocalElogDaoMapper().insertElogDetail(loggerDetailContext, mainId, cusColumns, cusValus, detailTableName); - return 1; - } - -} diff --git a/src/com/engine/salary/elog/service/impl/LocalElogService.java b/src/com/engine/salary/elog/service/impl/LocalElogService.java new file mode 100644 index 000000000..d12163a29 --- /dev/null +++ b/src/com/engine/salary/elog/service/impl/LocalElogService.java @@ -0,0 +1,435 @@ +package com.engine.salary.elog.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.elog.dto.LoggerDetailContext; +import com.engine.salary.elog.enums.ElogConsts; +import com.engine.salary.elog.service.ILocalElogService; +import com.engine.salary.elog.util.ElogUtils; +import com.engine.salary.mapper.elog.LocalElogAopDaoMapper; +import com.engine.salary.util.db.MapperProxyFactory; +import dm.jdbc.util.IdGenerator; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.CollectionUtils; +import weaver.conn.RecordSet; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +/** + * @ClassName: LocalElogService + * @Description 日志本地持久化 + * @Author tanghj + * @Date 2021/2/24 11:03 + */ +public class LocalElogService implements ILocalElogService { + + private static final Logger logger = LoggerFactory.getLogger(LocalElogService.class); + + private LocalElogAopDaoMapper getLocalElogAopDaoMapper() { + return MapperProxyFactory.getProxy(LocalElogAopDaoMapper.class); + } + +// private RestHighLevelClient client; +// +// private LazyRollBack lazyRollBack; + + //数据库类型 + private static final String databaseId = new RecordSet().getDBType(); + + /** + * @param context + * @param + * @return + */ + @Override + public int insertLocalElog(LoggerContext context) { +// logger.error("接收到的数据,context:{}",JSONObject.toJSONString(context)); +// logger.info("接收到数据的时间:log_date:{}",context.getDate()); + if (StringUtils.isEmpty(context.getUuid())) { + context.setUuid(UUID.randomUUID().toString().replace("-", "")); + } + + String cusColumns = ""; + String cusValus = ""; + if (context.getCustomInfo() != null) { + JSONObject custom = JSONObject.parseObject(JSON.toJSONString(context.getCustomInfo())); + List clobFieldList = context.getClobFieldList(); + for (String key : (Set) custom.keySet()) { + cusColumns = cusColumns + ", " + key; + String keystr = custom.getString(key); + //如果keystr包含单引号,将单引号去掉 + if (StringUtils.isNotEmpty(keystr) && keystr.contains("'")) { + keystr = keystr.replace("'", "''"); + } + //如果是Oracle数据库 + if (ElogConsts.ORACLE.equals(databaseId)) { + //clob字段集合不为空且包含此字段 + if (!CollectionUtils.isEmpty(clobFieldList) && clobFieldList.contains(key)) { + String clobColumnStr = ElogUtils.handleClobColumn(keystr); + cusValus = cusValus + ",TO_CLOB( " + clobColumnStr + " )"; + } else if (checkStrIsDate(keystr)) { + //并且字符串为时间类型格式 则进行特殊处理 + cusValus = cusValus + ",TO_DATE('" + keystr + "', 'SYYYY-MM-DD HH24:MI:SS')"; + } else { + cusValus = cusValus + ",'" + keystr + "'"; + } + } else { + cusValus = cusValus + ",'" + keystr + "'"; + } + } + + } + + normalizationContext(context); + + String tableName = context.getModuleName() + "_" + context.getFunctionName() + "logs"; + //context.setId(IdGenerator.generate()); + Integer id = getLocalElogAopDaoMapper().queryElogContextById(context.getId(), tableName); + if (id != null) { + return 1; + } +// logger.info("插入前的数据:context:{}",JSONObject.toJSONString(context)); + int count = getLocalElogAopDaoMapper().insertElogContext(context, cusColumns, cusValus, tableName); + if (context.getDetailContexts() != null) { + String detailTableName = context.getModuleName() + "_" + context.getFunctionName() + "logs_detail"; + insertBatchDetailPrepared(detailTableName, context); + + } + return count; + } + + /** + * 预编译 + * + * @param detailTableName + * @param context + */ + private void insertBatchDetailPrepared(String detailTableName, LoggerContext context) { + // 用mapper + //分两种 有无自定义字段 + List detailContexts = context.getDetailContexts(); + Boolean hasCustonInfo = false; + String cusColumns = ""; + if (Objects.nonNull(detailContexts.get(0).getCustomDetailInfo())) { + hasCustonInfo = true; + //有自定义明细字段 + JSONObject custom = JSONObject.parseObject(JSON.toJSONString(detailContexts.get(0).getCustomDetailInfo())); + for (String key : (Set) custom.keySet()) { + cusColumns = cusColumns + ", " + key; + } + + } + for (LoggerDetailContext detailContext : detailContexts) { + if (StringUtils.isNotEmpty(detailContext.getNewValue())) { + String str = detailContext.getNewValue().replaceAll("[\\x{1F600}-\\x{1F64F}\\x{1F300}-\\x{1F5FF}]", ""); + detailContext.setNewValue(str); + } + if (StringUtils.isNotEmpty(detailContext.getOldValue())) { + String str = detailContext.getOldValue().replaceAll("[\\x{1F600}-\\x{1F64F}\\x{1F300}-\\x{1F5FF}]", ""); + detailContext.setOldValue(str); + } + if (StringUtils.isNotEmpty(detailContext.getNewRealValue())) { + String str = detailContext.getNewRealValue().replaceAll("[\\x{1F600}-\\x{1F64F}\\x{1F300}-\\x{1F5FF}]", ""); + detailContext.setNewRealValue(str); + } + if (StringUtils.isNotEmpty(detailContext.getOldRealValue())) { + String str = detailContext.getOldRealValue().replaceAll("[\\x{1F600}-\\x{1F64F}\\x{1F300}-\\x{1F5FF}]", ""); + detailContext.setOldRealValue(str); + } + + + detailContext.setTenant_key(context.getTenant_key()); + detailContext.setCreate_time(new Date()); + detailContext.setUpdate_time(new Date()); + detailContext.setCreator(context.getLogOperator()); + detailContext.setId(IdGenerator.generate()); + if (hasCustonInfo) { + String cusValus = ""; + //如果有明细 + JSONObject custom = JSONObject.parseObject(JSON.toJSONString(detailContext.getCustomDetailInfo())); + for (String key : (Set) custom.keySet()) { + String keystr = custom.getString(key); + //如果keystr包含单引号,将单引号去掉 + if (StringUtils.isNotEmpty(keystr) && keystr.contains("'")) { + keystr = keystr.replace("'", "''"); + } + cusValus = cusValus + ",'" + keystr + "'"; + } + detailContext.setCusValus(cusValus); + } + } + + + if (hasCustonInfo) { + getLocalElogAopDaoMapper().insertElogDetailPreparedHasCustonInfo(detailTableName, detailContexts, context.getUuid(), cusColumns); + } else { + getLocalElogAopDaoMapper().insertElogDetailPrepared(detailTableName, detailContexts, context.getUuid()); + } + } + + + private void normalizationContext(LoggerContext context) { + String params = ""; + if (StringUtils.isNotEmpty(context.getParamsStr())) { + params = context.getParamsStr(); + } else if (context.getParams() != null) { + params = ElogUtils.compress(JSONObject.toJSONString(context.getParams())); + } + + context.setParamsStr(params); + if (StringUtils.isBlank(context.getCancelContextStr())) { + context.setCancelContextStr(context.getCancelContext() == null ? "" : JSONObject.toJSONString(context.getCancelContext())); + } + if (StringUtils.isBlank(context.getRedoContextStr())) { + context.setRedoContextStr(context.getRedoContext() == null ? "" : JSONObject.toJSONString(context.getRedoContext())); + } + + if (StringUtils.isEmpty(context.getOperatedesc())) { + context.setOperatedesc(""); + } else { + //todo 兼容emojo特殊字符 没有时间 先暴力替换 + String str = context.getOperatedesc().replaceAll("[\\x{1F600}-\\x{1F64F}\\x{1F300}-\\x{1F5FF}]", ""); + context.setOperatedesc(str); + } + + if (Objects.isNull(context.getDate())) { + context.setDate(new Date()); + } + + if (StringUtils.isEmpty(context.getOperator())) { + context.setLogOperator(-1l); + } else { + context.setLogOperator(Long.parseLong(context.getOperator())); + } + if (StringUtils.isEmpty(context.getTargetId())) { + context.setLogTargetid(-1l); + } else { + context.setLogTargetid(Long.parseLong(context.getTargetId())); + } + if (StringUtils.isEmpty(context.getClientIp())) { + context.setClientIp("127.0.0.1"); + } + if (Objects.isNull(context.getCreate_time())) { + context.setCreate_time(new Date()); + } + if (Objects.isNull(context.getUpdate_time())) { + context.setUpdate_time(new Date()); + } + if (Objects.isNull(context.getDelete_type())) { + context.setDelete_type(0); + } + } + + private void insertBatchDetailSql(String detailTableName, LoggerContext context) { + String standardField = "id, mainid, uuid, tablename, fieldname, newvalue, oldvalue, fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue, oldRealValue,tableNameDesc, tableNameLabelId,fieldNameLabelId, create_time, update_time"; + + Boolean hasCustonInfo = false; + StringBuilder sb = new StringBuilder(); + sb.append("INSERT INTO ").append(detailTableName).append("(").append(standardField); + //List collect = detailContexts.stream().filter(s -> Objects.nonNull(s.getCustomDetailInfo())).collect(Collectors.toList()); + List detailContexts = context.getDetailContexts(); + if (Objects.nonNull(detailContexts.get(0).getCustomDetailInfo())) { + hasCustonInfo = true; + //有自定义明细字段 + String cusColumns = ""; + JSONObject custom = JSONObject.parseObject(JSON.toJSONString(detailContexts.get(0).getCustomDetailInfo())); + for (String key : (Set) custom.keySet()) { + cusColumns = cusColumns + ", " + key; + } + sb.append(cusColumns); + } + sb.append(")"); + if ("oracle".equalsIgnoreCase(databaseId)) { + sb.append(" ").append(String.join(" UNION ALL ", getBatchInsertValue(context, hasCustonInfo, true))); + } else { + sb.append(" VALUES ").append(String.join(",", getBatchInsertValue(context, hasCustonInfo, false))); + } + + try { + getLocalElogAopDaoMapper().batchInsertDetail(sb.toString()); + } catch (Exception e) { + logger.error("明细批量添加sql是:{},批量插入明细失败,{}", sb.toString(), e.getMessage(), e); + } + + + } + + + private List getBatchInsertValue(LoggerContext context, boolean hasCustomInfo, boolean isOracle) { + + LocalDateTime localDateTime = LocalDateTime.now(); + String nowDate = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + + List detailContexts = context.getDetailContexts(); + List batchValue = new ArrayList<>(); + for (LoggerDetailContext detailContext : detailContexts) { + detailContext.setTenant_key(context.getTenant_key()); + detailContext.setCreator(context.getLogOperator()); + detailContext.setId(IdGenerator.generate()); + + StringBuilder sb = new StringBuilder(); + sb.append(isOracle ? " SELECT " : " ( "); + sb.append(detailContext.getId()) + .append(",'").append(context.getUuid()).append("'") + .append(",'").append(detailContext.getUuid()).append("'") + .append(",'").append(detailContext.getTableName()).append("'") + .append(",'").append(detailContext.getFieldName()).append("'") + .append(",'").append(transferString(detailContext.getNewValue())).append("'") + .append(",'").append(transferString(detailContext.getOldValue())).append("'") + .append(",'").append(detailContext.getFieldDesc()).append("'") + .append(",'").append(detailContext.getShoworder()).append("'") + .append(",'").append(detailContext.getDataid()).append("'") + .append(",'").append(detailContext.getBelongDataid()).append("'") + .append(",'").append(detailContext.getIsDetail()).append("'") + .append(",'").append(detailContext.getTenant_key()).append("'") + .append(",'").append(detailContext.getCreator()).append("'") + .append(",'").append(transferString(detailContext.getNewRealValue())).append("'") + .append(",'").append(transferString(detailContext.getOldRealValue())).append("'") + .append(",'").append(detailContext.getTableNameDesc()).append("'") + .append(",'").append(detailContext.getTableNameLabelId()).append("'") + .append(",'").append(detailContext.getFieldNameLabelId()).append("'") + .append(",").append(handleValue(nowDate, databaseId)) + .append(",").append(handleValue(nowDate, databaseId)); + + if (hasCustomInfo) { + String cusValus = ""; + //如果有明细 + JSONObject custom = JSONObject.parseObject(JSON.toJSONString(detailContext.getCustomDetailInfo())); + for (String key : (Set) custom.keySet()) { + String keystr = custom.getString(key); + //如果keystr包含单引号,将单引号去掉 + if (StringUtils.isNotEmpty(keystr) && keystr.contains("'")) { + keystr = keystr.replace("'", "''"); + } + cusValus = cusValus + ",'" + keystr + "'"; + } + sb.append(cusValus); + } + String sql = isOracle ? sb.append(" from dual ").toString() : sb.append(")").toString(); + + batchValue.add(sql); + } + + return batchValue; + } + + private String transferString(String str) { + if (StringUtils.isNotEmpty(str)) { + str = str.replaceAll("#\\{", "\\\\\\\\#{"); + if (str.contains("'")) { + str = str.replace("'", "''"); + } + } + return str; + } + + + private String handleValue(String nowDate, String databaseId) { + switch (databaseId) { + case "mysql": + return "'" + nowDate + "'"; + case "oracle": + return "TO_DATE('" + nowDate + "','YYYY-MM-DD HH24:MI:SS')"; + case "sqlserver": + return "'" + nowDate + "'"; + case "postgresql": + return "'" + nowDate + "'"; + + } + return nowDate; + } + +// private void insertESElogCenter(LoggerContext context, String customInfo, String tableName) { +// //将数据转换为ES的数据格式 +// LogESDoc logESDoc = LogESDoc.context2Doc(context, customInfo, tableName); +// String json = JSON.toJSONString(logESDoc); +// String elogESTableName = ElogEsUtils.getElogESTableName(true, ElogEsUtils.getDateStr(context.getDate())); +// IndexRequest indexRequest = new IndexRequest(elogESTableName).id(logESDoc.getId().toString()); +// indexRequest.source(json, XContentType.JSON); +// +// try { +// client.index(indexRequest, RequestOptions.DEFAULT); +// } catch (IOException e) { +//// logger.info("主表数据添加失败:{}",e.getMessage()); +// } +// } + + + @Override + public int insertElogDetail(LoggerDetailContext loggerDetailContext, String mainId, String detailTableName) { + String cusColumns = ""; + String cusValus = ""; + if (loggerDetailContext.getCustomDetailInfo() != null) { + JSONObject custom = JSONObject.parseObject(JSON.toJSONString(loggerDetailContext.getCustomDetailInfo())); + + for (String key : (Set) custom.keySet()) { + cusColumns = cusColumns + ", " + key; + String keystr = custom.getString(key); + //如果keystr包含单引号,将单引号去掉 + if (StringUtils.isNotEmpty(keystr) && keystr.contains("'")) { + keystr = keystr.replace("'", "''"); + } + cusValus = cusValus + ",'" + keystr + "'"; + } + } + loggerDetailContext.setId(IdGenerator.generate()); + return getLocalElogAopDaoMapper().insertElogDetail(loggerDetailContext, mainId, cusColumns, cusValus, detailTableName); + + } + +// @Override +// public void rollBackElog(LoggerContext context) { +// //根据ID 判断数据是否存在 +// +// String tableName = getElogTableName(context.getModuleName(), context.getFunctionName()); +// Integer id = getLocalElogAopDaoMapper().queryElogContextById(context.getId(), tableName); +// //没查到就直接返回 +// if (id == null) { +// lazyRollBack.delayedRollBack(context); +// return; +// } +// getLocalElogAopDaoMapper().rollBackElogById(context.getId(), tableName); +// +//// if (context.getDetailContexts() != null) { +// String detailTableName = context.getModuleName() + "_" + context.getFunctionName() + "logs_detail"; +// //根据uuid回滚 +// getLocalElogAopDaoMapper().rollBackDetailElogByUUID(context.getUuid(), detailTableName); +//// } +// +// +// } + + /** + * 判断字符串是否为日期格式 + */ + public static Boolean checkStrIsDate(String str) { + if (StringUtils.isBlank(str)) { + return false; + } else { + try { + LocalDateTime.parse(str, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + return true; + } catch (Exception e) { + return false; + } + } + } + + private String getElogTableName(String moduleName, String functionName) { + +// List list = Arrays.asList("meetingTopic", "meetingService", "meetingDecision", "meetingSign", "meetingSignSet", "meetingMember", "meetingShare"); + +// if (list.contains(moduleName)) { +// return "meeting"+ "_" + functionName + "logs"; +// } + + return moduleName + "_" + functionName + "logs"; + + } + +} diff --git a/src/com/engine/salary/elog/threadlocal/ElogThreadLocal.java b/src/com/engine/salary/elog/threadlocal/ElogThreadLocal.java new file mode 100644 index 000000000..81eb070f0 --- /dev/null +++ b/src/com/engine/salary/elog/threadlocal/ElogThreadLocal.java @@ -0,0 +1,75 @@ +package com.engine.salary.elog.threadlocal; + +import com.alibaba.fastjson.JSONObject; +import com.engine.salary.elog.dto.LoggerContext; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Date: 2022/5/18 20:26 + * @Author: deli.xu + * @Description: + **/ +public class ElogThreadLocal { + + private static final ThreadLocal> loggerContextList = new ThreadLocal<>(); + private static final ThreadLocal requestBody = new ThreadLocal<>(); + + public static LoggerContext currentLoggerContext() { + List list = loggerContextList.get(); + + if(list == null || list.size() == 0) { + return null; + } else { + return list.get(list.size() -1); + } + } + + public static void addLoggerContext(LoggerContext loggerContext) { + if(loggerContext == null) + return; + List list = loggerContextList.get(); + if(list == null) { + list = new ArrayList<>(); + loggerContextList.set(list); + } + + list.add(loggerContext); + + } + + public static List getLoggerContextList() { + return loggerContextList.get(); + } + + public static void clear() { + loggerContextList.set(null); + } + + public static void removeLast() { + List list = loggerContextList.get(); + + if(list != null) { + int size = list.size(); + if(size > 0) + list.remove(size - 1); + } + } + + public static void remove() { + loggerContextList.remove(); + } + + public static JSONObject getRequestBody() { + return requestBody.get(); + } + + public static void setRequestBody(JSONObject json) { + requestBody.set(json); + } + + public static void removeRequestBody() { + requestBody.remove(); + } +} diff --git a/src/com/engine/salary/elog/util/ElogUtils.java b/src/com/engine/salary/elog/util/ElogUtils.java index d2203f7ab..5e792fbdd 100644 --- a/src/com/engine/salary/elog/util/ElogUtils.java +++ b/src/com/engine/salary/elog/util/ElogUtils.java @@ -1,6 +1,27 @@ package com.engine.salary.elog.util; -import com.engine.salary.elog.dto.DateTypeEnum; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.elog.enums.FromTerminalType; +import com.engine.salary.elog.threadlocal.ElogThreadLocal; +import org.apache.commons.lang3.StringUtils; +import org.apache.dubbo.common.utils.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.zip.GZIPInputStream; +import java.util.zip.GZIPOutputStream; /** * @ClassName: ElogUtils @@ -8,25 +29,44 @@ import com.engine.salary.elog.dto.DateTypeEnum; * @Author tanghj * @Date 2021/3/12 14:17 */ +@Component public class ElogUtils { + private static final Logger logger = LoggerFactory.getLogger(ElogUtils.class); + + + private static final String TABLE_SPACER = "_"; private static final String TABLE_SUFFIX = "logs"; - private static final String DETAIL_TABLE_SUFFIX = "detail"; + private static final String DETAIL_TABLE_SUFFIX = "_detail"; public static final String BASE_TABLE = "BASE_ELOG_TABLE"; + public String getApplicationName() { + return applicationName; + } + + public void setApplicationName(String applicationName) { + this.applicationName = applicationName; + } + +// @Value("${spring.application.name}") + public static String applicationName; + + public static String getTableName(String module, String function) { return getTableName(module, function, false); } - public static String getTableName(String module, String function, boolean isDetail){ - - return module + TABLE_SPACER + function + TABLE_SUFFIX + (isDetail ? DETAIL_TABLE_SUFFIX : ""); + public static String getTableName(String module, String function, boolean isDetail) { + String tablename = module + TABLE_SPACER + function + TABLE_SUFFIX + (isDetail ? DETAIL_TABLE_SUFFIX : ""); +// SecurityUtil.sqlCheck(tablename); + return tablename; } /** * String 转枚举 + * * @param c * @param string * @param @@ -42,9 +82,706 @@ public class ElogUtils { return null; } - public static void main(String[] args) { - System.out.println(DateTypeEnum.BIGINT.name()); - DateTypeEnum columnTypeEnum = getEnumFromString(DateTypeEnum.class, "varchar"); - System.out.println(columnTypeEnum.equals(DateTypeEnum.VARCHAR)); + /** + * 获取ip地址 + * + * @param request + * @return + */ + public static String getIp(HttpServletRequest request) { + String ipAddress = request.getHeader("x-forwarded-for"); + String unknown = "unknown"; + if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("WL-Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) { + ipAddress = request.getRemoteAddr(); + String benji = "127.0.0.1"; + String bj = "0:0:0:0:0:0:0:1"; + if (benji.equals(ipAddress) || bj.equals(ipAddress)) { + ///根据网卡取本机配置的IP + InetAddress inet = null; + try { + inet = InetAddress.getLocalHost(); + } catch (UnknownHostException e) { + logger.error("UnknownHostException", e); + } + if (inet != null) { + ipAddress = inet.getHostAddress(); + } + } + } + ///对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 + int i = 15; + String s = ","; + if (ipAddress != null && ipAddress.length() > i) { + if (ipAddress.indexOf(s) > 0) { + ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); + } + } + return ipAddress; } + + /** + * 获取设备信息 + * + * @param request + * @return + */ + public static String getDevice(HttpServletRequest request) { + return request.getHeader("User-Agent"); + } + + /** + * 获取来自终端的信息 + * + * @param context + * @param request + * @return + */ + public static void getFromTerminal(LoggerContext context, HttpServletRequest request) { + String fromTerminal = context.getFromTerminal(); + if (StringUtils.isEmpty(fromTerminal)) { + String device = getDevice(request); + String setFT = ""; + if (StringUtils.isNotEmpty(device)) { + context.setFromTerminal(getFromTerminal(device)); + } + } + } + + public static void initRequestInfo(HttpServletRequest request, LoggerContext context) { + if (StringUtils.isEmpty(context.getRequestUrl())) { + context.setRequestUrl(getRequestUrl(request)); + } + if (StringUtils.isEmpty(context.getRequestUri())) { + context.setRequestUri(getRequestMethod(request) + ":" + getRequestUri(request)); + } + //if (context.getParams() == null) { + //默认记录params,此参数给true时 或报表服务,不记录 + if (!context.getParamsIgnore() && !applicationName.equalsIgnoreCase("weaver-edcreportd-service")) { + context.setParams(getRequstParam(request,context)); + } + // } + if (StringUtils.isEmpty(context.getClientIp())) { + context.setClientIp(getIp(request)); + } + if (StringUtils.isEmpty(context.getDevice())) { + context.setDevice(getDevice(request)); + } + if (StringUtils.isEmpty(context.getFromTerminal())) { + context.setFromTerminal(getFromTerminal(getDevice(request))); + } + if (StringUtils.isEmpty(context.getBelongMainId())) { + context.setBelongMainId(getTraceId(request)); + } + + } + + private static String getTraceId(HttpServletRequest request) { + String traceId = request.getHeader("traceId"); + if (StringUtils.isNotBlank(traceId)) { + //System.out.println("traceId:====="+traceId); + return traceId; + } + return ""; + } + + /** + * @param request + * @return localhost:9080/api/fs/demo/updateReport + */ + public static String getRequestUrl(HttpServletRequest request) { + if (Objects.isNull(request) || Objects.isNull(request.getRequestURL())) { + return null; + } + return request.getRequestURL().toString(); + } + + /** + * @param request + * @return /api/fs/demo/updateReport + */ + public static String getRequestUri(HttpServletRequest request) { + return request.getRequestURI(); + } + + /** + * @param request + * @return GET/POST + */ + public static String getRequestMethod(HttpServletRequest request) { + return request.getMethod(); + } + + public static Map getRequstParam(HttpServletRequest request, LoggerContext context) { + return request2Map(request, context); + } + + /** + * 获取当前方法中的日志实体类 + * + * @return + */ + public static LoggerContext currentElogContext() { + return ElogThreadLocal.currentLoggerContext(); + } + + public static Map request2Map(HttpServletRequest request, LoggerContext context) { + // 参数Map + Map properties = request.getParameterMap(); + // 返回值Map + Map returnMap = new HashMap(); + Iterator entries = properties.entrySet().iterator(); + Map.Entry entry; + String name = ""; + Object value = null; + while (entries.hasNext()) { + entry = (Map.Entry) entries.next(); + name = (String) entry.getKey(); + Object valueObj = entry.getValue(); + if (null == valueObj) { + value = null; + } else if (valueObj instanceof String[]) { + String[] values = (String[]) valueObj; + if (values.length == 1) { + value = values[0]; + } else { + value = values; + } + } else { + value = valueObj.toString(); + } + returnMap.put(name, value); + } + //放入ip + returnMap.put("param_ip", getIp(request)); + returnMap.put("request_header_user_agent", request.getHeader("user-agent")); + JSONObject body = ElogThreadLocal.getRequestBody(); + if (body != null) { +// returnMap.put("request_body", body); + setReturnMapBody(returnMap,context.getParamsBodyKeys(),body); + } + return returnMap; + } + + public static void setReturnMapBody(Map returnMap,List keys,JSONObject body) { + //模块没设置则全部记录 + if (CollectionUtils.isEmpty(keys)) { + returnMap.put("request_body", body); + }else { + JSONObject newBody = new JSONObject(); + for (String key : keys) { + newBody.put(key,body.get(key)); + } + returnMap.put("request_body", newBody); + } + } + + public static int getIntValue(String v) { + return getIntValue(v, -1); + } + + public static int getIntValue(String v, int def) { + try { + return Integer.parseInt(v); + } catch (Exception var3) { + return def; + } + } + + public static long getLongValue(String v) { + return getLongValue(v, -1l); + } + + public static long getLongValue(String v, long def) { + try { + return Long.parseLong(v); + } catch (Exception var3) { + return def; + } + } + + public static boolean isLongValue(String v) { + try { + Long.parseLong(v); + } catch (Exception e) { + return false; + } + return true; + } + + public static int currentLanguage() { +// String employeeId = getEmployeeId(); +// if (employeeId != null) { +// return I18nLanguageUtil.getLangId(Long.parseLong(employeeId)); +// } else { +// return 7; +// } + return 7; + } + +// /** +// * 获取request请求 +// * +// * @return +// */ +// public static HttpServletRequest getRequest() { +// return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); +// } + + /** + * 将对象转换程字符串 + * + * @param obj 目标对象 + * @param def 如果为null时的默认值 + * @return + */ + public static String null2String(Object obj, String def) { + return obj == null ? def : obj.toString(); + } + + public static String null2String(Object obj) { + return null2String(obj, ""); + } + + public static int getIntValue(Object obj, int def) { + try { + return Integer.parseInt(null2String(obj)); + } catch (Exception ex) { + return def; + } + } + +// public static Page getPage() { +// HttpServletRequest request = getRequest(); +// String num = request.getParameter("pageNum"); +// String size = request.getParameter("pageSize"); +// +// Page page = new Page(ElogUtils.getIntValue(num, 1), ElogUtils.getIntValue(size, 10)); +// return page; +// } + +// public static void main(String[] args) { +// //System.out.println(getTableName("select", "from")); +// //DataTypeEnum columnTypeEnum = getEnumFromString(DataTypeEnum.class, "varchar"); +// } + + public static List switchString(List list) { + if (list != null) { + return list.stream().map(m -> { + Set en = m.entrySet(); + for (Map.Entry entry : en) { + if (entry.getValue() != null) { + entry.setValue(String.valueOf(entry.getValue())); + } + } + return m; + }).collect(Collectors.toList()); + } else { + return list; + } + } + + public static List switchComplexString(List list) { + if (list != null) { + return list.stream().map(m -> { + Iterator iterator = m.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry next = iterator.next(); + if (next.getValue() != null) { + if (next.getValue() instanceof Map && "parmas".equals(next.getKey())) { + next.setValue(String.valueOf(next.getValue())); + } + if (next.getValue() instanceof List) { + } else { + next.setValue(String.valueOf(next.getValue())); + } + } + } + return m; + }).collect(Collectors.toList()); + } else { + return list; + } + } + +// public static String getTenantKey() { +// +// String tenantKey = TenantRpcContext.getTenantKey(); +// if (StringUtils.isNotBlank(tenantKey)) { +// return tenantKey; +// } +// +// return ""; +// } +// +// public static String getEmployeeId() { +// +// String employeeId = TenantRpcContext.getEmployeeId(); +// if (StringUtils.isNotBlank(employeeId)) { +// return employeeId; +// } +// +// return ""; +// } + + public static String getUserName() { + +// String employeeId = getEmployeeId(); +// if (StringUtils.isNotEmpty(employeeId)) { +// HrmEmployeeComInfo simpleEmployee = null; +// try { +// ComInfoCache bean = SpringUtils.getBean(ComInfoCache.class); +// if (bean != null) { +// simpleEmployee = bean.getCacheById(HrmEmployeeComInfo.class, ElogUtils.getLongValue(employeeId)); +// } +// } catch (Exception e) { +// logger.error("Exception", e); +// } +// if (simpleEmployee != null) { +// if (StringUtils.isNotBlank(simpleEmployee.getUsername())) { +// return simpleEmployee.getUsername(); +// } +// } +// } + + + return ""; + } + + /** + * 获取rpc信息(客户端ip和来源设备) + * + * @param context + */ + public static void initRpcInfo(LoggerContext context) { +// String device = ""; +// String clientIp = ""; +// String traceId = ""; +// try { +// device = RpcContext.getContext().getAttachment(EteamsConstant.DEVICE); +// clientIp = RpcContext.getContext().getAttachment(EteamsConstant.CLIENT_IP); +// traceId = RpcContext.getContext().getAttachment(ApmConstant.TRACE_ID); +//// logger.info("rpc调用获取到 device:{},clientIp:{},traceId:{}", device, clientIp, traceId); +// } catch (Exception e) { +// logger.error("Exception", e); +// } +// if (StringUtils.isEmpty(context.getDevice()) && StringUtils.isNotEmpty(device)) { +// context.setDevice(device); +// } +// if (StringUtils.isEmpty(context.getFromTerminal()) && StringUtils.isNotEmpty(device)) { +// context.setFromTerminal(getFromTerminal(device)); +// } +// +// if (StringUtils.isEmpty(context.getClientIp()) && StringUtils.isNotEmpty(clientIp)) { +// context.setClientIp(clientIp); +// } +// if (StringUtils.isEmpty(context.getBelongMainId()) && StringUtils.isNotEmpty(traceId)) { +// context.setBelongMainId(traceId); +// } + } + + public static String getFromTerminal(String device) { + String setFT = ""; + if (StringUtils.isNotEmpty(device)) { + if (!device.contains("wxwork") && device.contains("MicroMessenger")) {//来自微信 + setFT = FromTerminalType.MICO_MSG.getCode(); + } else if (device.contains("wxwork") && device.contains("MicroMessenger")) {//企业微信 + setFT = FromTerminalType.WECHAT.getCode(); + } else if (device.contains("iPhone") && device.contains("Mac")) {//来自 Iphone + setFT = FromTerminalType.IOS.getCode(); + } else if (device.contains("Mac OS") && !device.contains("iPhone") && device.contains("weapp-pc")) {//来自 mac_client + setFT = FromTerminalType.MAC_CLIENT.getCode();//mac_client + } else if (!device.contains("wxwork") && device.contains("Mobile")) {//移动端 + setFT = FromTerminalType.H5.getCode(); + } else if (device.contains("Android") && !device.contains("wxwork")) {//来自安卓 包含安卓并且不包含微信 + setFT = FromTerminalType.ANDROID.getCode(); + } else {//pc + setFT = FromTerminalType.PC.getCode(); + } + } + return setFT; + } + + /** + * sql连接条件注入sql + * + * @param condition + * @return + */ + public static String checkConditionSql(String condition) { + if ("AND".equalsIgnoreCase(condition) || + "OR".equalsIgnoreCase(condition) + ) { + return condition; + } + return "AND"; + } + + public static String checkTypeSql(String type) { + if ("LIKE".equalsIgnoreCase(type) || + "IN".equalsIgnoreCase(type) || + "!<>".equalsIgnoreCase(type) || + "!=".equalsIgnoreCase(type) || + "BETWEEN".equalsIgnoreCase(type) || + "IS NULL".equalsIgnoreCase(type) || + "IS NULL".equalsIgnoreCase(type) || + "=".equalsIgnoreCase(type) || + "IS NOT NULL".equalsIgnoreCase(type)) { + return type; + } + return "="; + } + + /** + * sql条件防止注入 + * + * @param value + * @return + */ + public static String checkValSql(String value) { + Pattern p = Pattern.compile("\\s+"); + Matcher m = p.matcher(value); + String val = m.replaceAll(" "); + String[] keywords = {"master", "truncate", "declare", "alert", "create", "drop", "version", + "show", "table", "index", "insert", "into", "from", + "insert", "select", "delete", "update", "chr", "mid", "master", "truncate", "char", "declare", "union"}; + + + int count = 0; + String filterVal = ""; + for (String keyddlword : keywords) { + if (val.toLowerCase().contains(keyddlword)) { + count++; + if (count == 1) { + filterVal = keyddlword; + } + } + } + + if (count > 2) { + return filterVal; + } +// value = SecurityUtil.ecodeForSql(value); + + return value; + } + + /** + * 压缩工具类- + * + * @param str + * @return desc:version 0.0.1 基于jdk自带 GZIP 压缩。最后转成base64。 + * 市面上有其他压缩像jdk 的 deflate 可以设置压缩级别,但是都是主动的,需要改业务方法, + * snappy 压缩适用于大数据压缩。大数据量比较快 hadoop首选,但是压缩后比例比较大。 + * xz 下的 压缩比率大,但是解压比较慢-不提倡,空间换时间了 + * common下的压缩其实和jdk差不多,网上说优于jdk,但是相差不大。 + * weaver 压缩基于jdk + */ + public static String compress(String str) { + if (str == null || str.trim().length() == 0) { + return str; + } + try (ByteArrayOutputStream out = new ByteArrayOutputStream(); + GZIPOutputStream gzip = new GZIPOutputStream(out)) { + gzip.write(str.getBytes()); + gzip.close(); + return Base64.getEncoder().encodeToString(out.toByteArray()); + } catch (Exception e) { + logger.error("压缩失败", e.getMessage()); + return str; + } + + } + + + /** + * 解压缩 + * + * @param str + * @return + */ + public static String uncompress(String str) { + byte[] decode = Base64.getDecoder().decode(str); + if (str == null || str.trim().length() == 0) { + return str; + } + try (ByteArrayOutputStream out = new ByteArrayOutputStream(); + ByteArrayInputStream in = new ByteArrayInputStream(decode)) { + GZIPInputStream ungzip = new GZIPInputStream(in); + byte[] buffer = new byte[2048]; + int n; + while ((n = ungzip.read(buffer)) >= 0) { + out.write(buffer, 0, n); + } + return new String(out.toByteArray()); + } catch (Exception e) { + logger.error("解缩失败:{}", e.getMessage()); + return str; + } + } + + public static LoggerContext getEsField(LoggerContext context, String field) { + + switch (field.toLowerCase()) { + case "interfacename": + context.setInterfaceName(""); + break; + case "operatetype": + context.setOperateType(""); + break; + case "operatedesc": + context.setOperatedesc(""); + break; + case "params": + context.setParamsStr("ES"); + break; + case "clientip": + context.setClientIp(""); + break; + case "groupnamelabel": + context.setGroupNameLabel(""); + break; + case "redoservice": + context.setRedoService(""); + break; + case "redocontext": + context.setRedoContextStr(""); + break; + case "cancelservice": + context.setCancelService(""); + break; + case "cancelcontext": + context.setCancelContextStr(""); + break; + case "device": + context.setDevice(""); + break; + case "groupid": + context.setGroupId(""); + break; + case "belongmainid": + context.setBelongMainId(""); + break; + case "requesturl": + context.setRequestUrl(""); + break; + case "requesturi": + context.setRequestUri(""); + break; + case "log_result": + context.setResult(""); + break; + case "fromterminal": + context.setFromTerminal(""); + break; + case "resultdesc": + context.setResultDesc(""); + break; + case "old_content": + context.setOld_content(""); + break; + case "link_type": + context.setLink_type(""); + break; + } + + return context; + } + + public static String[] getESfields(String value) { + String[] split = value.split(","); + List list = new ArrayList<>(); + for (String s : split) { + switch (s.toLowerCase()) { + case "interfacename": + list.add("interfacename"); + break; + case "operatetype": + list.add("operatetype"); + break; + case "operatedesc": + list.add("operatedesc"); + break; + case "params": + list.add("params"); + break; + case "clientip": + list.add("clientip"); + break; + case "groupnamelabel": + list.add("groupnamelabel"); + break; + case "redoservice": + list.add("redoservice"); + break; + case "redocontext": + list.add("redocontext"); + break; + case "cancelservice": + list.add("cancelservice"); + break; + case "cancelcontext": + list.add("cancelcontext"); + break; + case "device": + list.add("device"); + break; + case "groupid": + list.add("groupid"); + break; + case "belongmainid": + list.add("belongmainid"); + break; + case "requesturl": + list.add("requesturl"); + break; + case "requesturi": + list.add("requesturi"); + break; + case "log_result": + list.add("logResult"); + break; + case "fromterminal": + list.add("fromterminal"); + break; + case "resultdesc": + list.add("resultdesc"); + break; + case "old_content": + list.add("oldContent"); + break; + case "link_type": + list.add("linkType"); + break; + } + } + //list转为数组 + if (list.size() > 0) { + String[] strings = list.toArray(new String[list.size()]); + return strings; + } + return null; + } + + public static String handleClobColumn(String value) { + // 处理超长字符串,oracle插入报错ORA-01704: string literal too long + if (StringUtils.isBlank(value)){ + return ""; + } + StringBuilder formatValue = new StringBuilder(); + String[] split = StrUtil.split(value, 1000); + for (int i = 0; i < split.length; i++) { + formatValue.append("TO_CLOB('").append(split[i]).append("')"); + if (i != split.length - 1) { + formatValue.append("||"); + } + } + return formatValue.toString(); + } + } diff --git a/src/com/engine/salary/elog/util/LoggerTemplate.java b/src/com/engine/salary/elog/util/LoggerTemplate.java index 6dc03b33c..c5584bc62 100644 --- a/src/com/engine/salary/elog/util/LoggerTemplate.java +++ b/src/com/engine/salary/elog/util/LoggerTemplate.java @@ -1,12 +1,23 @@ package com.engine.salary.elog.util; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.parser.Feature; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.elog.annotation.ElogTransform; import com.engine.salary.elog.async.LoggerMessageListener; import com.engine.salary.elog.dto.LoggerContext; import com.engine.salary.elog.dto.LoggerDetailContext; import com.engine.salary.elog.dto.TableChangeBean; +import dm.jdbc.util.IdGenerator; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.dubbo.common.utils.AnnotationUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.lang.reflect.Field; import java.util.*; @@ -17,6 +28,7 @@ import java.util.*; * @Author tanghj * @Date 2021/2/10 14:18 */ +//@Component public class LoggerTemplate { protected String function = "common"; @@ -24,8 +36,38 @@ public class LoggerTemplate { protected String logCenterQueue = "Elog_cneterlogQueue"; + public static final String AUDITLOGQUEUE = "AuditLog"; + public static final String ELOG = "Elog"; + protected String localQueue; + protected String moduleName; + + protected static String applicationName; + + public void setApplicationName(String applicationName) { + LoggerTemplate.applicationName = applicationName; + } + + public String getApplicationName() { + return applicationName; + } + + private static final Logger logger = LoggerFactory.getLogger(LoggerTemplate.class); + + protected static String publishkitGroup; + + public void setPublishkitGroup(String publishkitGroup) { + LoggerTemplate.publishkitGroup = publishkitGroup; + } + + public String getPublishkitGroup() { + return publishkitGroup; + } + + + LoggerMessageListener loggerMessageListener = new LoggerMessageListener(); + /** * 写入日志消息队列 * @@ -42,15 +84,198 @@ public class LoggerTemplate { * @param isLocal true 存储本地, false不存储本地 */ public void write(LoggerContext context, boolean isLocal) { - handleContext(context); - if (isLocal) { - new LoggerMessageListener().receive(context); + String elogLocalQueue = ELOG + this.applicationName; + if (StringUtils.isEmpty(this.localQueue)) + this.localQueue = (StringUtils.isNotEmpty(this.moduleName) ? this.moduleName : elogLocalQueue) + "LocalQueue" + this.publishkitGroup; + try { + handleContext(context); + } catch (Exception e) { + logger.error("handleContext方法异常!{}", e.getMessage(), e); } + loggerMessageListener.receiveold(context); + } +// public void writeLocal(LoggerContext context){ +// String elogLocalQueue = ELOG + this.applicationName; +// if(StringUtils.isEmpty(this.localQueue)) +// this.localQueue = (StringUtils.isNotEmpty(this.moduleName) ? this.moduleName : elogLocalQueue) + "LocalQueue" + this.publishkitGroup; +// AsyncBean asyncBean = new AsyncBean<>(); +// handleContext(context); +// if (context.getWeakElogReocrd() && CollectionUtils.isEmpty(context.getDetailContexts() )) { +// logger.info("日志弱控且没有明细记录,不记录日志,modulename:{},functionname:{}",context.getModuleName(),context.getFunctionName()); +// return; +// } +// +// try { +// asyncBean.setMessage(context); +// asyncBean.setQueue(localQueue); +// asyncClient.send(asyncBean); +// } catch (Exception e) { +// logger.error("发送writeLocal-mq消息异常!{}",e.getMessage(),e); +// } +// } + + +// public void checkAsyncBean(AsyncBean asyncBean) { +// int length = JSON.toJSON(asyncBean).toString().getBytes(StandardCharsets.UTF_8).length / 1000; +// boolean checkPass = length <= 5120; +// if (!checkPass) +// throw new RuntimeException("消息体超出5M,不支持发送!"); +// } + +// /** +// * 没有明细变化可以不写入日志 +// * @param context 日志信息 +// * @param isLocal 是否写入本地 +// * @param notChangeDetailSendLog 没有明细变化不写入日志 +// */ +// public void write(LoggerContext context, boolean isLocal,boolean notChangeDetailSendLog){ +// String elogLocalQueue = ELOG + this.applicationName; +// if(StringUtils.isEmpty(this.localQueue)) +// this.localQueue = (StringUtils.isNotEmpty(this.moduleName) ? this.moduleName : elogLocalQueue) + "LocalQueue"; +// AsyncBean asyncBean = new AsyncBean<>(); +// handleContext(context); +// +// if (notChangeDetailSendLog && (context.getDetailContexts() == null || context.getDetailContexts().size() == 0)) { +// return; +// } +// try { +// asyncBean.setMessage(context); +// asyncBean.setQueue(logCenterQueue); +// asyncClient.send(asyncBean); +// writeHrmLog(context); +// if(isLocal) { +// asyncBean.setQueue(localQueue); +// asyncClient.send(asyncBean); +// } +// } catch (Exception e) { +// logger.error("发送mq消息异常!{}",e.getMessage(),e); +// } +// +// } + +// /** +// * 支持了向其他模块服务发送业务日志 +// * @param context +// * @param isLocal +// * @param moduleName +// */ +// public void write(LoggerContext context, boolean isLocal, String moduleName){ +// +// if(StringUtils.isNotEmpty(moduleName)) { +// String localQueue = moduleName + "LocalQueue"; +// // context.setModuleName(moduleName); +// AsyncBean asyncBean = new AsyncBean<>(); +// handleContext(context); +// try { +// asyncBean.setMessage(context); +// asyncBean.setQueue(logCenterQueue); +// asyncClient.send(asyncBean); +// writeHrmLog(context); +// if(isLocal) { +// asyncBean.setQueue(localQueue); +// asyncClient.send(asyncBean); +// } +// } catch (Exception e) { +// logger.error("发送mq消息异常!:{}",e.getMessage()); +// } +// } else { +// write(context, isLocal); +// } +// +// } + +// public void writeHrmLog(LoggerContext context) { +// AsyncBean asyncBean = new AsyncBean<>(); +// handleContext(context); +// asyncBean.setMessage(context); +// //asyncBean.setTopic(WRITEAUDITLOGTOPIC); +// asyncBean.setQueue(AUDITLOGQUEUE); +// asyncClient.send(asyncBean); +// +// } + +// /** +// * 支持了向其他模块服务发送业务日志 +// * @param context +// * @param isLocal +// * @param moduleName +// */ +// public void write(LoggerContext context, boolean isLocal, String moduleName,String functionName,String queueName){ +// +// if (StringUtils.isNotEmpty(moduleName) && StringUtils.isNotEmpty(functionName)) { +// context.setModuleName(moduleName); +// context.setFunctionName(functionName); +// this.localQueue = queueName + "LocalQueue"; +// AsyncBean asyncBean = new AsyncBean<>(); +// handleContext(context); +// try { +// asyncBean.setMessage(context); +// asyncBean.setQueue(logCenterQueue); +// asyncClient.send(asyncBean); +// writeHrmLog(context); +// if (isLocal) { +// asyncBean.setQueue(localQueue); +// asyncClient.send(asyncBean); +// } +// } catch (Exception e) { +// logger.error("发送mq消息异常!,{}!",e); +// } +// } else { +// write(context, isLocal); +// } +// +// } + private void handleContext(LoggerContext context) { - context.setModuleName(module); - context.setFunctionName(function); + if (StringUtils.isEmpty(context.getModuleName())) + context.setModuleName(module); + if (StringUtils.isEmpty(context.getFunctionName())) + context.setFunctionName(function); + if (!(context.getId() > 0)) + context.setId(IdGenerator.generate()); + if (StringUtils.isEmpty(context.getUuid())) { + context.setUuid(UUID.randomUUID().toString().replace("-", "")); + } + + context.setTempParams(null); + //User user = UserContext.getCurrentUser(); + //if(user != null) { + // 通过统一登录获取 + String employeeId = "92"; + String tenantKey = SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY; + String userName = ElogUtils.getUserName(); + //String userName = TenantRpcContext.getEmployeeId(); + if (StringUtils.isEmpty(context.getOperator()) && StringUtils.isNotEmpty(employeeId)) { + context.setOperator(employeeId + ""); + } + + if (StringUtils.isEmpty(context.getTenant_key()) && StringUtils.isNotEmpty(tenantKey)) { + context.setTenant_key(tenantKey); + } + if (StringUtils.isEmpty(context.getOperatorName()) && StringUtils.isNotEmpty(userName)) { + context.setOperatorName(userName); + } + //} + + if (StringUtils.isBlank(context.getOperator()) || "null".equals(context.getOperator())) { + context.setOperator("-1"); + } + if (StringUtils.isBlank(context.getTargetId()) || "null".equals(context.getTargetId())) { + context.setTargetId("-1"); + } + +// RequestAttributes requestAttributes = WeaverRequestContextHolder.getRequestAttributesSafely(); +// if ((requestAttributes instanceof ServletRequestAttributes)) { +// HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest(); +// ElogUtils.initRequestInfo(request, context);z +// } else { +// if (StringUtils.isEmpty(context.getRequestUrl())) { +// context.setRequestUrl("非http请求"); +// } +// ElogUtils.initRpcInfo(context); +// } List changeBeans = context.getChangeValues(); @@ -59,29 +284,81 @@ public class LoggerTemplate { if (changeBeans != null) for (TableChangeBean changeBean : changeBeans) { if (changeBean != null && (changeBean.getNewValue() != null || changeBean.getOldValue() != null)) { + String uuid = UUID.randomUUID().toString().replace("-", ""); ApiModel apiModel = null; + ElogTransform tableTransform = null; JSONObject newJo = new JSONObject(); JSONObject oldJo = new JSONObject(); - JSONObject valueChange = JSONObject.parseObject(JSONObject.toJSONString(changeBean)); + JSONObject valueChange = JSONObject.parseObject(JSONObject.toJSONString(changeBean, SerializerFeature.WriteDateUseDateFormat), Feature.OrderedField); + Field[] fields = null; if (changeBean.getNewValue() != null) { apiModel = changeBean.getNewValue().getClass().getAnnotation(ApiModel.class); + tableTransform = changeBean.getNewValue().getClass().getAnnotation(ElogTransform.class); + //增加处理被动态代理对象注解的逻辑 + if (Objects.isNull(tableTransform)) { + tableTransform = AnnotationUtils.findAnnotation(changeBean.getNewValue().getClass(), ElogTransform.class); + } + //fields = changeBean.getNewValue().getClass().getDeclaredFields(); + fields = getAllFields(changeBean.getNewValue().getClass()); newJo = valueChange.getJSONObject("newValue"); } else { apiModel = changeBean.getOldValue().getClass().getAnnotation(ApiModel.class); + tableTransform = changeBean.getOldValue().getClass().getAnnotation(ElogTransform.class); + if (Objects.isNull(tableTransform)) { + tableTransform = AnnotationUtils.findAnnotation(changeBean.getOldValue().getClass(), ElogTransform.class); + } + //fields = changeBean.getOldValue().getClass().getDeclaredFields(); + fields = getAllFields(changeBean.getOldValue().getClass()); } if (changeBean.getOldValue() != null) { oldJo = valueChange.getJSONObject("oldValue"); } - if (apiModel != null) { - Field[] fields = changeBean.getNewValue().getClass().getDeclaredFields(); + if ((apiModel != null || tableTransform != null) && fields != null) { + for (Field field : fields) { + if (StringUtils.isEmpty(newJo.getString(field.getName())) && StringUtils.isEmpty(oldJo.getString(field.getName()))) { + continue; + } + if (StringUtils.isNotEmpty(newJo.getString(field.getName())) && newJo.getString(field.getName()).equals(oldJo.getString(field.getName()))) { + continue; + } + ApiModelProperty apiModelProperty = field.getAnnotation(ApiModelProperty.class); + ElogTransform fieldElogTransform = field.getAnnotation(ElogTransform.class); LoggerDetailContext valueChangeBean = new LoggerDetailContext(); - valueChangeBean.setTableName(changeBean.getTableName()); + if (fieldElogTransform != null && fieldElogTransform.ignore()) { + continue; + } + + //todo 若analyticList为true 且 新旧值属于JSONArray 解析List + if (fieldElogTransform != null && fieldElogTransform.analyticList() && fieldElogTransform.analyticListClass() != void.class) { + analyticListMethod(field, newJo, oldJo, valueChangeList, fieldElogTransform); + continue; + } + + valueChangeBean.setUuid(uuid); + valueChangeBean.setTableName(tableTransform != null && StringUtils.isNotEmpty(tableTransform.name()) ? tableTransform.name() : changeBean.getTableName()); + valueChangeBean.setTableNameDesc(tableTransform != null && StringUtils.isNotEmpty(tableTransform.tablename()) ? tableTransform.tablename() : ""); + valueChangeBean.setTableNameLabelId(tableTransform != null && tableTransform.labelId() != -1 ? tableTransform.labelId() + "" : ""); + valueChangeBean.setIsDetail(changeBean.getIsDetail()); valueChangeBean.setFieldName(field.getName()); - valueChangeBean.setFieldDesc(apiModelProperty.value()); + valueChangeBean.setFieldDesc(fieldElogTransform != null ? fieldElogTransform.name() : apiModelProperty != null ? apiModelProperty.value() : field.getName()); + valueChangeBean.setFieldNameLabelId(fieldElogTransform != null ? fieldElogTransform.labelId() + "" : "-1"); + valueChangeBean.setDataid(StringUtils.isNotEmpty(changeBean.getDataid()) ? changeBean.getDataid() : + StringUtils.isNoneEmpty(newJo.getString("id")) ? newJo.getString("id") : oldJo.getString("id")); + valueChangeBean.setBelongDataid(StringUtils.isNotEmpty(changeBean.getBelongDataid()) ? changeBean.getBelongDataid() : ""); + valueChangeBean.setNewValue(newJo.getString(field.getName())); valueChangeBean.setOldValue(oldJo.getString(field.getName())); + valueChangeBean.setCreator(-1l); + try { + extracted(newJo, oldJo, field, fieldElogTransform, valueChangeBean); + } catch (Exception e) { + logger.error("转换出错:{}", e); + //System.out.println("转换出错:" + e.getMessage()); + } + + valueChangeBean.setShoworder(showOrder++); valueChangeList.add(valueChangeBean); } @@ -89,26 +366,40 @@ public class LoggerTemplate { Set keys = new HashSet<>(); for (String key : (Set) newJo.keySet()) { keys.add(key); + if (newJo.getString(key).equals(oldJo.getString(key))) { + continue; + } LoggerDetailContext valueChangeBean = new LoggerDetailContext(); + valueChangeBean.setUuid(uuid); valueChangeBean.setTableName(changeBean.getTableName()); + valueChangeBean.setIsDetail(changeBean.getIsDetail()); + valueChangeBean.setDataid(StringUtils.isNotEmpty(changeBean.getDataid()) ? changeBean.getDataid() : + StringUtils.isNoneEmpty(newJo.getString("id")) ? newJo.getString("id") : oldJo.getString("id")); + valueChangeBean.setBelongDataid(StringUtils.isNotEmpty(changeBean.getBelongDataid()) ? changeBean.getBelongDataid() : ""); valueChangeBean.setFieldName(key); valueChangeBean.setFieldDesc(key); valueChangeBean.setNewValue(newJo.getString(key)); valueChangeBean.setOldValue(oldJo.getString(key)); valueChangeBean.setShoworder(showOrder++); + valueChangeBean.setCreator(-1l); valueChangeList.add(valueChangeBean); } - for (String key : (Set)oldJo.keySet()) { + for (String key : (Set) oldJo.keySet()) { if (keys.contains(key)) continue; keys.add(key); + if (oldJo.getString(key).equals(newJo.getString(key))) { + continue; + } LoggerDetailContext valueChangeBean = new LoggerDetailContext(); valueChangeBean.setTableName(changeBean.getTableName()); + valueChangeBean.setIsDetail(changeBean.getIsDetail()); valueChangeBean.setFieldName(key); valueChangeBean.setFieldDesc(key); valueChangeBean.setNewValue(newJo.getString(key)); valueChangeBean.setOldValue(oldJo.getString(key)); valueChangeBean.setShoworder(showOrder++); + valueChangeBean.setCreator(-1l); valueChangeList.add(valueChangeBean); } } @@ -119,6 +410,110 @@ public class LoggerTemplate { context.setDetailContexts(valueChangeList); } + + private void analyticListMethod(Field field, JSONObject newJo, JSONObject oldJo, List valueChangeList, ElogTransform tableTransform) { + JSONArray newValueArr = newJo.get(field.getName()) == null ? new JSONArray() : (JSONArray) newJo.get(field.getName()); + JSONArray oldvalueArr = oldJo.get(field.getName()) == null ? new JSONArray() : (JSONArray) oldJo.get(field.getName()); + Field[] allFields = getAllFields(tableTransform.analyticListClass()); + + + Boolean oldvalueIsNull = false; + Boolean newvalueIsNull = false; + + if (oldvalueArr.size() == 0) { + oldvalueIsNull = true; + } + if (newValueArr.size() == 0) { + newvalueIsNull = true; + } + if ((oldvalueIsNull && newvalueIsNull) || (!oldvalueIsNull && !newvalueIsNull && oldvalueArr.size() != newValueArr.size())) { + //如果新、旧没值或新旧值list数量对不上 直接返回 + return; + } + + JSONArray foreachArr = oldvalueIsNull ? newValueArr : oldvalueArr; + + //遍历list + for (int i = 0; i < foreachArr.size(); i++) { + //默认另一个list关系是一一对应的 + JSONObject oldValue = oldvalueIsNull ? new JSONObject() : (JSONObject) oldvalueArr.get(i); + JSONObject newValue = newvalueIsNull ? new JSONObject() : (JSONObject) newValueArr.get(i); + + //dataid uuid showOrder + long dataid = IdGenerator.generate(); + String uuid = UUID.randomUUID().toString().replace("-", ""); + int showOrder = 0; + + //遍历字段 + for (Field allField : allFields) { + if (StringUtils.isEmpty(newValue.getString(allField.getName())) && StringUtils.isEmpty(oldValue.getString(allField.getName()))) { + continue; + } + if (StringUtils.isNotEmpty(newValue.getString(allField.getName())) && newValue.getString(allField.getName()).equals(oldValue.getString(allField.getName()))) { + continue; + } + + ApiModelProperty apiModelProperty = allField.getAnnotation(ApiModelProperty.class); + ElogTransform fieldElogTransform = allField.getAnnotation(ElogTransform.class); + LoggerDetailContext valueChangeBean = new LoggerDetailContext(); + + valueChangeBean.setUuid(uuid); + valueChangeBean.setTableName(tableTransform != null && StringUtils.isNotEmpty(tableTransform.name()) ? tableTransform.name() : field.getName()); + valueChangeBean.setTableNameDesc(tableTransform != null && StringUtils.isNotEmpty(tableTransform.tablename()) ? tableTransform.tablename() : ""); + valueChangeBean.setTableNameLabelId(tableTransform != null && tableTransform.labelId() != -1 ? tableTransform.labelId() + "" : ""); + valueChangeBean.setIsDetail(1); + valueChangeBean.setFieldName(allField.getName()); + valueChangeBean.setNewValue(newValue.getString(allField.getName())); + valueChangeBean.setOldValue(oldValue.getString(allField.getName())); + valueChangeBean.setCreator(-1l); + valueChangeBean.setBelongDataid(""); + valueChangeBean.setDataid(String.valueOf(dataid)); + + if (fieldElogTransform != null) { + if (fieldElogTransform.ignore()) { + continue; + } + + valueChangeBean.setFieldDesc(fieldElogTransform != null ? fieldElogTransform.name() : apiModelProperty != null ? apiModelProperty.value() : field.getName()); + valueChangeBean.setFieldNameLabelId(fieldElogTransform != null ? fieldElogTransform.labelId() + "" : "-1"); + + try { + extracted(newValue, oldValue, allField, fieldElogTransform, valueChangeBean); + } catch (Exception e) { + logger.error("转换出错", e); + //System.out.println("转换出错:" + e.getMessage()); + } + + valueChangeBean.setShoworder(showOrder++); + } else { + valueChangeBean.setFieldDesc(allField.getName()); + valueChangeBean.setShoworder(showOrder++); + + } + valueChangeList.add(valueChangeBean); + } + } + } + + private void extracted(JSONObject newJo, JSONObject oldJo, Field field, ElogTransform fieldElogTransform, LoggerDetailContext valueChangeBean) { + JSONObject jo = null; + if (fieldElogTransform != null && StringUtils.isNotEmpty(fieldElogTransform.valuesKVPairs())) { + jo = JSONObject.parseObject(fieldElogTransform.valuesKVPairs()); + if (jo != null) { + valueChangeBean.setNewRealValue(jo.getString(newJo.getString(field.getName()))); + valueChangeBean.setOldRealValue(jo.getString(oldJo.getString(field.getName()))); + } + } + } + + public void setModuleName(String moduleName) { + this.moduleName = moduleName; + } + + public void setLocalQueue(String localQueue) { + this.localQueue = localQueue; + } + public String getFunction() { return function; } @@ -148,7 +543,99 @@ public class LoggerTemplate { } public void setModule(String module) { - this.localQueue = module + "LocalQueue"; this.module = module; } + +// public void setAsyncClient(AsyncClient asyncClient) { +// this.asyncClient = asyncClient; +// } + + + public static Field[] getAllFields(Class obj) { + Class superclass = obj.getSuperclass(); + Field[] superField = null; + //获取父类 + if (superclass != Object.class) { + superField = superclass.getDeclaredFields(); + } + //获取当前类 + Field[] nowfield = obj.getDeclaredFields(); + return addFields(superField, nowfield); + } + + public static Field[] addFields(Field[] superFields, Field[] fields) { + + return ArrayUtils.addAll(superFields, fields); + + } + + public void write(List context, boolean isLocal) { + context.forEach(loggerContext -> { + this.write(loggerContext, isLocal); + }); + } + + + public void write(List context) { + context.forEach(loggerContext -> { + this.write(loggerContext); + }); + } + +// public void writeAsync(LoggerContext context, boolean isLocal){ +// String applicationNameBak = this.applicationName; +// String localQueueBak = this.localQueue; +// String moduleNameBak = this.moduleName; +// String pk = this.publishkitGroup; +// LocalRunnable localRunnable = new LocalRunnable() { +// @Override +// public void execute() { +// String localQueueBakBak = localQueueBak; +// String elogLocalQueue = ELOG + applicationNameBak; +// if(StringUtils.isEmpty(localQueueBakBak)) +// localQueueBakBak = (StringUtils.isNotEmpty(moduleNameBak) ? moduleNameBak : elogLocalQueue) + "LocalQueue" + pk; +// AsyncBean asyncBean = new AsyncBean<>(); +// handleContext(context); +// if (context.getWeakElogReocrd() && CollectionUtils.isEmpty(context.getDetailContexts() )) { +// logger.info("日志弱控且没有明细记录,不记录日志,modulename:{},functionname:{}",context.getModuleName(),context.getFunctionName()); +// return; +// } +// try { +// asyncBean.setMessage(context); +// asyncBean.setQueue(logCenterQueue); +// checkAsyncBean(asyncBean);//检查消息体大小 +// asyncClient.send(asyncBean); +// writeHrmLog(context); +// if(isLocal) { +// asyncBean.setQueue(localQueueBakBak); +// asyncClient.send(asyncBean); +// } +// } catch (Exception e) { +// logger.error("发送mq消息异常!{}",e.getMessage(),e); +// } +// } +// }; +// ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "LoggerTemplate_writeAsync", localRunnable); +// +// } +// +// /** +// * 回滚队列 +// * +// * @param context +// */ +// public void writeRollBack(LoggerContext context){ +// String elogRollBackQueue = ELOG + this.applicationName + "RollBackQueue" + this.publishkitGroup; +// AsyncBean asyncBean = new AsyncBean<>(); +// +// try { +// asyncBean.setMessage(context); +// asyncBean.setQueue(elogRollBackQueue); +// checkAsyncBean(asyncBean);//检查消息体大小 +// asyncClient.send(asyncBean); +// } catch (Exception e) { +// logger.error("发送mq消息异常!{}",e.getMessage(),e); +// } +// } + } diff --git a/src/com/engine/salary/mapper/elog/TableCheckerMapper.java b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.java similarity index 60% rename from src/com/engine/salary/mapper/elog/TableCheckerMapper.java rename to src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.java index 5270ed5fe..5171e2641 100644 --- a/src/com/engine/salary/mapper/elog/TableCheckerMapper.java +++ b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.java @@ -4,8 +4,10 @@ import com.engine.salary.elog.dto.TableColumnBean; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; +import java.util.Set; -public interface TableCheckerMapper { +public interface ElogTableCheckerMapper { Long getVersion(@Param("mainTable") String mainTable); void recordVersion(@Param("id") long id, @Param("mainTable") String mainTable, @Param("version") long version); @@ -17,4 +19,12 @@ public interface TableCheckerMapper { List getTableStructure(@Param("tableName") String tableName); void createElogTable(@Param("createElogSql") String createElogSql); + + Map getTableIndex(@Param("tableName") String tableName, @Param("columnName") String columnName); + + Map getDataBase(); + + void createTableIndex(@Param("tableName") String tableName, @Param("columnName") String columnName, @Param("id") long id); + + List getAllExistTables(@Param("tableNames") Set tables); } diff --git a/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml new file mode 100644 index 000000000..c345b7aba --- /dev/null +++ b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml @@ -0,0 +1,451 @@ + + + + + insert into elog_version (id, maintable, version) values (#{id},#{mainTable},#{version}) + + + + create table ${mainTable} + ( + id bigint comment 'ID', + create_time datetime default current_timestamp , + update_time datetime default current_timestamp , + creator bigint, + delete_type int, + tenant_key varchar(10), + uuid char(36), + log_date datetime default current_timestamp , + log_operator varchar(50), + operatorName varchar(50), + targetId varchar(50), + targetName text, + modulename varchar(100), + functionname varchar(100), + interfaceName varchar(100), + requesturl varchar(200), + requesturi varchar(200), + operateType varchar(50), + operatetypename varchar(100), + operatedesc varchar(1000), + params longtext, + belongmainid varchar(36), + clientIp varchar(50), + groupid varchar(50), + device varchar(200), + groupNameLabel varchar(500), + redoService varchar(200), + redoContext longtext, + cancelService varchar(200), + cancelContext longtext, + totalruntime bigint, + mainruntime bigint, + log_result varchar(100), + fromterminal varchar(100), + resultdesc text, + old_content varchar(1000), + link_type varchar(20), + link_id bigint, + old_link_id bigint, + PRIMARY KEY (id) + ) + + + + create table ${mainTable} + ( + id number(*,0) not null primary key, + create_time date default sysdate, + update_time date default sysdate, + creator number(*,0), + delete_type number(*,0), + tenant_key varchar2(10), + uuid varchar2(36), + log_date date default sysdate, + log_operator varchar2(50), + operatorName varchar2(50), + targetId varchar2(50), + targetName varchar2(4000), + modulename varchar2(100), + functionname varchar2(100), + interfaceName varchar2(100), + requesturl varchar2(200), + requesturi varchar2(200), + operateType varchar2(50), + operatetypename varchar2(100), + operatedesc varchar2(1000), + params clob, + belongmainid varchar2(36), + clientIp varchar2(200), + groupid varchar2(50), + device varchar2(200), + groupNameLabel varchar2(500), + redoService varchar2(200), + redoContext varchar2(4000), + cancelService varchar2(200), + cancelContext varchar2(4000), + totalruntime number(*,0), + mainruntime number(*,0), + log_result varchar2(4000), + fromterminal varchar2(100), + resultdesc varchar2(4000), + old_content varchar2(1000), + link_type varchar2(20), + link_id number(*,0), + old_link_id number(*,0) + ) + + + create table ${mainTable} + ( + id bigint not null primary key, + create_time datetime default getdate(), + update_time datetime default getdate(), + creator bigint default '-1', + delete_type bigint default 0, + tenant_key nvarchar(10), + uuid nvarchar(36), + log_date datetime default getdate(), + device nvarchar(500), + log_operator bigint default '-1', + operatorname nvarchar(100), + targetid bigint default '-1', + targetname nvarchar(3000), + modulename nvarchar(100), + functionname nvarchar(100), + interfacename nvarchar(100), + requesturl nvarchar(200), + requesturi nvarchar(200), + operatetype nvarchar(50), + operatetypename nvarchar(100), + operatedesc nvarchar(3000), + params ntext, + belongmainid nvarchar(36), + clientip nvarchar(200), + groupid nvarchar(50), + groupnamelabel nvarchar(1000), + redoservice nvarchar(200), + redocontext nvarchar(3000), + cancelservice nvarchar(200), + cancelcontext nvarchar(3000), + totalruntime bigint default 0, + mainruntime bigint default 0, + log_result nvarchar(100), + fromterminal nvarchar(100), + resultdesc nvarchar(3000), + old_content nvarchar(3000), + link_type nvarchar(20), + link_id bigint default 0, + old_link_id bigint default 0 + ) + + + create table ${mainTable} + ( + id int8 not null primary key, + create_time timestamp default current_timestamp, + update_time timestamp default current_timestamp, + creator int8, + delete_type int, + tenant_key varchar(10), + uuid varchar(36), + log_date timestamp default current_timestamp, + log_operator varchar(50), + operatorName varchar(50), + targetId varchar(50), + targetName text, + modulename varchar(100), + functionname varchar(100), + interfaceName varchar(100), + requesturl varchar(200), + requesturi varchar(200), + operateType varchar(50), + operatetypename varchar(100), + operatedesc varchar(1000), + params text, + belongmainid varchar(36), + clientIp varchar(200), + groupid varchar(50), + device varchar(200), + groupNameLabel varchar(500), + redoService varchar(200), + redoContext text, + cancelService varchar(200), + cancelContext text, + totalruntime int4, + mainruntime int4, + log_result varchar(100), + fromterminal varchar(100), + resultdesc text, + old_content varchar(1000), + link_type varchar(20), + link_id int4, + old_link_id int4 + ) + + + create table ${detailTable} + ( + id bigint not null primary key, + create_time datetime default current_timestamp , + update_time datetime default current_timestamp , + creator bigint, + delete_type int, + tenant_key varchar(10), + uuid varchar(36), + mainid varchar(36), + dataid varchar(50), + belongdataid varchar(50), + tableName varchar(200), + tablenamelabelid varchar(50), + tablenamedesc varchar(50), + fieldName varchar(200), + fieldnamelabelid varchar(200), + newValue longtext, + oldValue longtext, + newrealvalue longtext, + oldrealvalue longtext, + fieldDesc varchar(200), + showorder int default 0, + isdetail int default 0 + ) + + + create table ${detailTable} + ( + id int8 not null primary key, + create_time timestamp default current_timestamp , + update_time timestamp default current_timestamp , + creator int8, + delete_type int8, + tenant_key varchar(10), + uuid varchar(36), + mainid varchar(36), + dataid varchar(50), + belongdataid varchar(50), + tableName varchar(200), + tablenamelabelid varchar(50), + tablenamedesc varchar(50), + fieldName varchar(200), + fieldnamelabelid varchar(200), + newValue text, + oldValue text, + newrealvalue text, + oldrealvalue text, + fieldDesc varchar(200), + showorder int8 default 0, + isdetail int8 default 0 + ) + + + create table ${detailTable} + ( + id number(*,0) not null primary key, + create_time date default sysdate, + update_time date default sysdate, + creator number(*,0), + delete_type number(*,0), + tenant_key varchar2(10), + uuid varchar2(36), + mainid varchar2(36), + dataid varchar2(50), + belongdataid varchar2(50), + tableName varchar2(200), + tablenamelabelid varchar2(50), + tablenamedesc varchar2(50), + fieldName varchar2(200), + fieldnamelabelid varchar2(200), + newValue varchar2(4000), + oldValue varchar2(4000), + newrealvalue varchar2(4000), + oldrealvalue varchar2(4000), + fieldDesc varchar2(200), + showorder number(*,0) default 0, + isdetail number(*,0) default 0 + ) + + + create table ${detailTable} + ( + id bigint not null primary key, + create_time datetime default getdate(), + update_time datetime default getdate(), + creator bigint, + delete_type bigint, + tenant_key nvarchar(10), + uuid nvarchar(36), + mainid nvarchar(36), + dataid nvarchar(50), + belongdataid nvarchar(50), + tableName nvarchar(200), + tablenamelabelid nvarchar(50), + tablenamedesc nvarchar(50), + fieldName nvarchar(200), + fieldnamelabelid nvarchar(200), + newValue ntext, + oldValue ntext, + newrealvalue ntext, + oldrealvalue ntext, + fieldDesc varchar(200), + showorder bigint default 0, + isdetail bigint default 0 + ) + + + + + + + + + + + ${createElogSql} + + + + + + + + + + + + + + + + create index idx${id} on ${tableName} (${columnName}) + + + + create index idx${id} on ${tableName} (${columnName}) + + + + create index idx${id} on ${tableName} (${columnName}) + + + + + + + + + + diff --git a/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.java b/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.java new file mode 100644 index 000000000..6a969c83e --- /dev/null +++ b/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.java @@ -0,0 +1,45 @@ +package com.engine.salary.mapper.elog; + + +import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.elog.dto.LoggerDetailContext; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @ClassName: LocalElogAopDaoMapper + * @Description 本地操作日志持久层 + * @Author tanghj + * @Date 2021/2/24 9:35 + */ +public interface LocalElogAopDaoMapper { + + int insertElogContext(@Param(value="logContent") LoggerContext loggerContext, + @Param(value="cusColumns")String cusColumns , + @Param(value="cusValus")String cusValus, + @Param(value="tableName")String tableName); + + + + int insertElogDetail(@Param(value="detailContext") LoggerDetailContext loggerDetailContext, + @Param(value="mainid")String mainid, + @Param(value="cusColumns")String cusColumns , + @Param(value="cusValus")String cusValus, + @Param(value="detailTableName")String tableName); + + + Integer queryElogContextById(@Param(value="id")Long id, + @Param(value="tableName")String tableName); + + void batchInsertDetail(@Param("sql") String sql); + + void insertElogDetailPrepared(@Param("tablename") String detailTableName, @Param("list") List detailContexts, @Param("mainid") String mainid); + + void insertElogDetailPreparedHasCustonInfo(@Param("tablename") String detailTableName, @Param("list") List detailContexts, @Param("mainid") String mainid, @Param(value="cusColumns")String cusColumns); + + void rollBackElogById(@Param("id") Long id,@Param("tableName") String tableName); + + void rollBackDetailElogByUUID(@Param("mainid") String uuid,@Param("tableName") String detailTableName); + +} diff --git a/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.xml b/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.xml new file mode 100644 index 000000000..4bd8ea6d2 --- /dev/null +++ b/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.xml @@ -0,0 +1,150 @@ + + + + + + insert into ${tableName} (id, uuid, log_date, tenant_key, modulename, functionName, operatetypename, + log_operator, operatorname, targetid, targetname, interfacename, operatetype, + operatedesc, + params, clientIp, groupnamelabel, redoservice, redocontext, cancelservice, + cancelcontext, device, groupid, + belongMainId, requestUrl, requestUri, totalRunTime, mainRunTime, log_result, + fromTerminal, resultDesc, old_content, + link_type, link_id, old_link_id, create_time, update_time, delete_type, creator + ${cusColumns}) + values (#{logContent.id}, #{logContent.uuid}, #{logContent.date}, + #{logContent.tenant_key}, #{logContent.moduleName}, #{logContent.functionName}, + #{logContent.operateTypeName}, #{logContent.logOperator}, #{logContent.operatorName}, + #{logContent.logTargetid} + , #{logContent.targetName}, #{logContent.interfaceName}, #{logContent.operateType}, + #{logContent.operatedesc}, + #{logContent.paramsStr}, #{logContent.clientIp}, #{logContent.groupNameLabel}, + #{logContent.redoService}, + #{logContent.redoContextStr}, #{logContent.cancelService}, #{logContent.cancelContextStr}, + #{logContent.device}, #{logContent.groupId}, + #{logContent.belongMainId}, #{logContent.requestUrl}, #{logContent.requestUri}, + #{logContent.totalRunTime}, #{logContent.mainRunTime} + , #{logContent.result}, #{logContent.fromTerminal}, #{logContent.resultDesc}, + #{logContent.old_content}, #{logContent.link_type} + , #{logContent.link_id}, #{logContent.old_link_id}, #{logContent.create_time}, + #{logContent.update_time}, #{logContent.delete_type}, #{logContent.logOperator} + ${cusValus}) + + + + insert into ${detailTableName} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue, + fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key, creator, + newRealValue, oldRealValue, tableNameDesc, + tableNameLabelId, fieldNameLabelId, create_time, update_time + ${cusColumns}) + values (#{detailContext.id}, #{mainid}, #{detailContext.uuid}, #{detailContext.tableName}, + #{detailContext.fieldName}, #{detailContext.newValue}, + #{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder}, + #{detailContext.dataid}, + #{detailContext.belongDataid}, #{detailContext.isDetail}, #{detailContext.tenant_key}, + #{detailContext.creator}, #{detailContext.newRealValue} + , #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId}, + #{detailContext.fieldNameLabelId}, #{detailContext.create_time}, #{detailContext.update_time} + ${cusValus}) + + + ${sql} + + + + + + + + insert into ${tablename} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue, + fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue, + oldRealValue,tableNameDesc, + tableNameLabelId,fieldNameLabelId, create_time, update_time,delete_type) + values + + ( #{detailContext.id},#{mainid}, #{detailContext.uuid}, #{detailContext.tableName}, + #{detailContext.fieldName}, #{detailContext.newValue}, + #{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder}, #{detailContext.dataid}, + #{detailContext.belongDataid}, #{detailContext.isDetail}, + #{detailContext.tenant_key},#{detailContext.creator}, #{detailContext.newRealValue} + , #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId}, + #{detailContext.fieldNameLabelId} + , #{detailContext.create_time}, #{detailContext.update_time}, #{logContent.delete_type}) + + + + + insert into ${tablename} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue, + fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue, + oldRealValue,tableNameDesc, + tableNameLabelId,fieldNameLabelId, create_time, update_time + ${cusColumns}) + values + + ( #{detailContext.id},#{mainid}, #{detailContext.uuid}, #{detailContext.tableName}, + #{detailContext.fieldName}, #{detailContext.newValue}, + #{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder}, #{detailContext.dataid}, + #{detailContext.belongDataid}, #{detailContext.isDetail}, + #{detailContext.tenant_key},#{detailContext.creator}, #{detailContext.newRealValue} + , #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId}, + #{detailContext.fieldNameLabelId} + , #{detailContext.create_time}, #{detailContext.update_time} + ${detailContext.cusValus}) + + + + + update ${tableName} + set delete_type = 3 + where id = #{id} + + + update ${tableName} + set delete_type = 3 + where mainid = #{mainid} + + + + insert into ${tablename} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue, + fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue, + oldRealValue,tableNameDesc, + tableNameLabelId,fieldNameLabelId, create_time, update_time,delete_type) + + SELECT #{detailContext.id},#{mainid}, #{detailContext.uuid}, #{detailContext.tableName}, + #{detailContext.fieldName}, #{detailContext.newValue}, + #{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder}, #{detailContext.dataid}, + #{detailContext.belongDataid}, #{detailContext.isDetail}, + #{detailContext.tenant_key},#{detailContext.creator}, #{detailContext.newRealValue} + , #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId}, + #{detailContext.fieldNameLabelId} + , #{detailContext.create_time}, #{detailContext.update_time}, #{logContent.delete_type} + FROM DUAL + + + + + insert into ${tablename} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue, + fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue, + oldRealValue,tableNameDesc, + tableNameLabelId,fieldNameLabelId, create_time, update_time + ${cusColumns}) + + SELECT #{detailContext.id},#{mainid}, #{detailContext.uuid}, #{detailContext.tableName}, + #{detailContext.fieldName}, #{detailContext.newValue}, + #{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder}, #{detailContext.dataid}, + #{detailContext.belongDataid}, #{detailContext.isDetail}, + #{detailContext.tenant_key},#{detailContext.creator}, #{detailContext.newRealValue} + , #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId}, + #{detailContext.fieldNameLabelId} + , #{detailContext.create_time}, #{detailContext.update_time} + ${detailContext.cusValus} + FROM DUAL + + + + diff --git a/src/com/engine/salary/mapper/elog/TableCheckerMapper.xml b/src/com/engine/salary/mapper/elog/TableCheckerMapper.xml deleted file mode 100644 index a9e4436d3..000000000 --- a/src/com/engine/salary/mapper/elog/TableCheckerMapper.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - - - insert into elog_version (id, maintable, version) - values (#{id}, #{mainTable}, #{version}); - - - - create table ${mainTable} - ( - id bigint comment 'ID', - create_time datetime, - update_time datetime, - creator bigint, - delete_type int, - tenant_key varchar(10), - uuid char(36), - date datetime, - operator varchar(50), - operatorName varchar(50), - targetId varchar(50), - targetName varchar(1000), - module varchar(100), - `function` varchar(100), - interfaceName varchar(100), - operateType varchar(50), - desc varchar(1000), - params longtext, - clientIp varchar(50), - device varchar(200), - groupNameLabel varchar(500), - redoService varchar(200), - redoContext longtext, - cancelService varchar(200), - cancelContext longtext - ) - - - create table ${detailTable} - ( - id bigint comment 'ID', - create_time datetime, - update_time datetime, - creator bigint, - delete_type int, - tenant_key varchar(10), - uuid varchar(36), - tableName varchar(200), - fieldName char(200), - newValue longtext, - oldValue longtext, - fieldDesc varchar(200), - showorder int default 0 - ) - - - - - - - ${createElogSql} - - \ No newline at end of file diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index 3c30540a4..f53e0ddeb 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -5,6 +5,9 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.SalaryItemBiz; import com.engine.salary.biz.SysSalaryItemBiz; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.elog.util.LoggerTemplate; import com.engine.salary.entity.salaryformula.po.FormulaPO; import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; @@ -17,6 +20,7 @@ import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.SalarySystemTypeEnum; import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.sicategory.SharedTypeEnum; @@ -76,6 +80,8 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService return ServiceUtil.getService(SalarySobServiceImpl.class, user); } + private LoggerTemplate salaryItemLoggerTemplate = SalaryElogConfig.salaryItemLoggerTemplate(); + private SysSalaryItemBiz sysSalaryItemBiz = new SysSalaryItemBiz(); // @Autowired @@ -202,15 +208,15 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService } SalaryItemPO salaryItemPO = SalaryItemBO.convert2SalaryItemPO(saveParam, (long) user.getUID()); salaryItemBiz.insert(salaryItemPO); - // todo 记录日志 -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId(String.valueOf(salaryItemPO.getId())); -// loggerContext.setTargetName(salaryItemPO.getName()); -// loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98329, "新建薪资项目")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98329, "新建薪资项目") + ": " + salaryItemPO.getName()); -// loggerContext.setNewValues(salaryItemPO); -// salaryItemLoggerTemplate.write(loggerContext); + // 记录日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(String.valueOf(salaryItemPO.getId())); + loggerContext.setTargetName(salaryItemPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98329, "新建薪资项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98329, "新建薪资项目") + ": " + salaryItemPO.getName()); + loggerContext.setNewValues(salaryItemPO); + salaryItemLoggerTemplate.write(loggerContext); } @Override @@ -284,15 +290,15 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService // 记录日志 -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId(String.valueOf(newSalaryItemPO.getId())); -// loggerContext.setTargetName(newSalaryItemPO.getName()); -// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(93892, "编辑薪资项目")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(93892, "编辑薪资项目") + ": " + newSalaryItemPO.getName()); -// loggerContext.setOldValues(salaryItemPO); -// loggerContext.setNewValues(newSalaryItemPO); -// salaryItemLoggerTemplate.write(loggerContext); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(String.valueOf(newSalaryItemPO.getId())); + loggerContext.setTargetName(newSalaryItemPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(93892, "编辑薪资项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(93892, "编辑薪资项目") + ": " + newSalaryItemPO.getName()); + loggerContext.setOldValues(salaryItemPO); + loggerContext.setNewValues(newSalaryItemPO); + salaryItemLoggerTemplate.write(loggerContext); } private void changeName(SalaryItemPO salaryItemPO, String oldName, String newName, String itemPrefix, String fieldNamePrefix) { From bd0edcf8e23e04d7a0ea124a8aaffe0f005acaef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 22 Dec 2023 14:50:16 +0800 Subject: [PATCH 04/64] =?UTF-8?q?=E6=97=A5=E5=BF=97=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/config/SalaryElogConfig.java | 760 +++++++++--------- .../engine/salary/elog/dto/LoggerContext.java | 11 + .../engine/salary/elog/util/ElogUtils.java | 116 +-- .../salary/elog/util/LoggerTemplate.java | 15 +- .../mapper/elog/LocalElogAopDaoMapper.xml | 4 +- .../service/impl/SalaryItemServiceImpl.java | 2 + .../engine/salary/util/ResponseResult.java | 15 +- .../salary/web/SalaryItemController.java | 8 +- 8 files changed, 416 insertions(+), 515 deletions(-) diff --git a/src/com/engine/salary/config/SalaryElogConfig.java b/src/com/engine/salary/config/SalaryElogConfig.java index 006e75a94..7156eeff4 100644 --- a/src/com/engine/salary/config/SalaryElogConfig.java +++ b/src/com/engine/salary/config/SalaryElogConfig.java @@ -4,23 +4,23 @@ import com.engine.salary.elog.util.LoggerTemplate; import com.engine.salary.elog.util.LoggerTemplateBuilder; /** - * @description: elog日志 - * @author: xiajun - * @modified By: xiajun - * @date: Created in 10/22/21 10:27 AM - * @version:v1.0 - */ + * elog日志 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalaryElogConfig { -// /** -// * 个税税率表 -// * -// * @return -// */ -// @Bean("taxRateLoggerTemplate") -// public LoggerTemplate taxRateLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "taxrate"); -// } + /** + * 个税税率表 + * + * @return + */ + public static LoggerTemplate taxRateLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "taxrate"); + } /** * 薪资项目 @@ -28,391 +28,351 @@ public class SalaryElogConfig { * @return */ public static LoggerTemplate salaryItemLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "adc"); + return LoggerTemplateBuilder.build("hrsa", "salaryitem"); } -// /** -// * 个税扣缴义务人 -// * -// * @return -// */ -// @Bean("taxAgentLoggerTemplate") -// public LoggerTemplate taxAgentLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "taxagent"); -// } -// -// @Bean("siCategoryLoggerTemplate") -// public LoggerTemplate siCategoryLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "siCategory"); -// } -// -// @Bean("siSchemeLoggerTemplate") -// public LoggerTemplate siSchemeLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "siScheme"); -// } -// -// @Bean("totalSchemeLoggerTemplate") -// public LoggerTemplate totalSchemeLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "totalScheme"); -// } -// -// /** -// * 累计情况 -// * -// * @return -// */ -// @Bean("addUpSituationLoggerTemplate") -// public LoggerTemplate addUpSituationLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "addupsituation"); -// } -// -// /** -// * 累计专项附加扣除 -// * -// * @return -// */ -// @Bean("addUpDeductionLoggerTemplate") -// public LoggerTemplate addUpDeductionLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "addupdeduction"); -// } -// -// /** -// * 其他免税扣除 -// * -// * @return -// */ -// @Bean("otherDeductionLoggerTemplate") -// public LoggerTemplate otherDeductionLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "otherdeduction"); -// } -// -// /** -// * 减税 -// * -// * @return -// */ -// @Bean("derateDeductionLoggerTemplate") -// public LoggerTemplate derateDeductionLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "deratededuction"); -// } -// -// /** -// * 税延养老保险 -// * -// * @return -// */ -// @Bean("endowmentInsuranceLoggerTemplate") -// public LoggerTemplate endowmentInsuranceLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "endowmentinsurance"); -// } -// -// /** -// * 税延养老保险 -// * -// * @return -// */ -// @Bean("freeIncomeLoggerTemplate") -// public LoggerTemplate freeIncomeLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "freeincome"); -// } -// -// /** -// * 捐赠免税 -// * -// * @return -// */ -// @Bean("grantDonationLoggerTemplate") -// public LoggerTemplate grantDonationLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "grantdonation"); -// } -// -// /** -// * 捐赠免税 -// * -// * @return -// */ -// @Bean("healthInsuranceLoggerTemplate") -// public LoggerTemplate healthInsuranceLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "healthinsurance"); -// } -// -// /** -// * 其他免税扣除 -// * -// * @return -// */ -// @Bean("otherDerateDeductionLoggerTemplate") -// public LoggerTemplate otherDerateDeductionLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "otherderatededuction"); -// } -// -// /** -// * 考勤引用 -// * -// * @return -// */ -// @Bean("attendQuoteLoggerTemplate") -// public LoggerTemplate attendQuoteLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "attendquote"); -// } -// -// /** -// * 考勤引用字段管理 -// * -// * @return -// */ -// @Bean("attendQuoteFieldLoggerTemplate") -// public LoggerTemplate attendQuoteFieldLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "attendfield"); -// } -// -// /** -// * 考勤引用字段设置 -// * -// * @return -// */ -// @Bean("attendQuoteFieldSettingLoggerTemplate") -// public LoggerTemplate attendQuoteFieldSettingLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "attendfieldset"); -// } -// -// /** -// * 薪资账套 -// * -// * @return -// */ -// @Bean("salarySobLoggerTemplate") -// public LoggerTemplate salarySobLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "salarysob"); -// } -// -// /** -// * 薪资核算 -// * -// * @return -// */ -// @Bean("salaryAcctRecordLoggerTemplate") -// public LoggerTemplate salaryAcctRecordLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "acctrecord"); -// } -// -// /** -// * 个税申报表 -// * -// * @return -// */ -// @Bean("taxDeclarationLoggerTemplate") -// public LoggerTemplate taxDeclarationLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "taxdecla"); -// } -// -// /** -// * 福利档案 -// * -// * @return -// */ -// @Bean("siArchivesLoggerTemplate") -// public LoggerTemplate siArchivesLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "siarchives"); -// } -// -// /** -// * 社保规则 -// */ -// @Bean("archiveRuleLoggerTemplate") -// public LoggerTemplate archiveRuleLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "archiverule"); -// } -// -// /** -// * 代缴机构 -// * -// * @return -// */ -// @Bean("paymentAgencyLoggerTemplate") -// public LoggerTemplate paymentAgencyLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "paymentagency"); -// } -// -// /** -// * 福利核算 -// * -// * @return -// */ -// @Bean("siAccountLoggerTemplate") -// public LoggerTemplate siAccountLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "siaccount"); -// } -// -// /** -// * 工资单模板 -// * -// * @return -// */ -// @Bean("salaryTemplateLoggerTemplate") -// public LoggerTemplate salaryTemplateLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "salarytemplate"); -// } -// -// /** -// * 工资单发放 -// * -// * @return -// */ -// @Bean("salarySendLoggerTemplate") -// public LoggerTemplate salarySendLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "salarysend"); -// } -// -// /** -// * 外部人员 -// * -// * @return -// */ -// @Bean("extEmployeeLoggerTemplate") -// public LoggerTemplate extEmployeeLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "extemployee"); -// } -// -// /** -// * 薪资档案 -// * -// * @return -// */ -// @Bean("salaryArchiveLoggerTemplate") -// public LoggerTemplate salaryArchiveLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "salaryarchive"); -// } -// -// /** -// * 薪资档案-字段 -// * -// * @return -// */ -// @Bean("salaryArchiveFieldLoggerTemplate") -// public LoggerTemplate salaryArchiveFieldLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "salarcfield"); -// } -// -// /** -// * 薪资档案-薪资项目调整 -// * -// * @return -// */ -// @Bean("salaryArchiveItemAdjustLoggerTemplate") -// public LoggerTemplate salaryArchiveItemAdjustLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "salarcitemadj"); -// } -// -// /** -// * 薪资档案-批量调薪 -// * -// * @return -// */ -// @Bean("salaryArchiveBatchAdjustLoggerTemplate") -// public LoggerTemplate salaryArchiveBatchAdjustLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "salarcbatadj"); -// } -// -// /** -// * 自定义业务数据设置 -// * -// * @return -// */ -// @Bean("customDataSetLoggerTemplate") -// public LoggerTemplate customDataSetLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "customdataset"); -// } -// -// /** -// * 自定义业务数据 -// * -// * @return -// */ -// @Bean("customDataLoggerTemplate") -// public LoggerTemplate customDataLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "customdata"); -// } -// -// -// /** -// * 人员报送 -// * -// * @return -// */ -// @Bean("employeeDeclareLoggerTemplate") -// public LoggerTemplate employeeDeclareLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "empdeclare"); -// } -// -// /** -// * 单位扣款账号 -// * -// * @return -// */ -// @Bean("withholdAccountLoggerTemplate") -// public LoggerTemplate withholdAccountLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "whaccount"); -// } -// -// /** -// * 银行报盘 -// * -// * @return -// */ -// @Bean("bankOfferLoggerTemplate") -// public LoggerTemplate bankOfferLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "bankoffer"); -// } -// -// /** -// * 银行报盘模板 -// * -// * @return -// */ -// @Bean("bankOfferTemplateLoggerTemplate") -// public LoggerTemplate bankOfferTemplateLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "botemplate"); -// } -// -// /** -// * 薪酬体系标准(岗薪制) -// * -// * @return -// */ -// @Bean("postSalaryLoggerTemplate") -// public LoggerTemplate postSalaryLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "postsalary"); -// } -// -// /** -// * 银行报盘模板 -// * -// * @return -// */ -// @Bean("taxFreeDetailLoggerTemplate") -// public LoggerTemplate taxFreeDetailLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "taxfreedetail"); -// } -// -// /** -// * 最优年终奖计税方案 -// * -// * @return -// */ -// @Bean("annualBonusPlanLoggerTemplate") -// public LoggerTemplate annualBonusPlanLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "annualplan"); -// } -// -// /** -// * 最优年终奖计税方案-累计情况 -// * 最优年终奖计税方案-优化方案详情 -// * -// * @return -// */ -// @Bean("annualBonusLoggerTemplate") -// public LoggerTemplate annualBonusLoggerTemplate() { -// return LoggerTemplateBuilder.build("hrsa", "annualbonus"); -// } + /** + * 个税扣缴义务人 + * + * @return + */ + public static LoggerTemplate taxAgentLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "taxagent"); + } + + public static LoggerTemplate siCategoryLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "siCategory"); + } + + public static LoggerTemplate siSchemeLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "siScheme"); + } + + public static LoggerTemplate totalSchemeLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "totalScheme"); + } + + /** + * 累计情况 + * + * @return + */ + public static LoggerTemplate addUpSituationLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "addupsituation"); + } + + /** + * 累计专项附加扣除 + * + * @return + */ + public static LoggerTemplate addUpDeductionLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "addupdeduction"); + } + + /** + * 其他免税扣除 + * + * @return + */ + public static LoggerTemplate otherDeductionLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "otherdeduction"); + } + + /** + * 减税 + * + * @return + */ + public static LoggerTemplate derateDeductionLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "deratededuction"); + } + + /** + * 税延养老保险 + * + * @return + */ + public static LoggerTemplate endowmentInsuranceLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "endowmentinsurance"); + } + + /** + * 税延养老保险 + * + * @return + */ + public static LoggerTemplate freeIncomeLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "freeincome"); + } + + /** + * 捐赠免税 + * + * @return + */ + public static LoggerTemplate grantDonationLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "grantdonation"); + } + + /** + * 捐赠免税 + * + * @return + */ + public static LoggerTemplate healthInsuranceLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "healthinsurance"); + } + + /** + * 其他免税扣除 + * + * @return + */ + public static LoggerTemplate otherDerateDeductionLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "otherderatededuction"); + } + + /** + * 考勤引用 + * + * @return + */ + public static LoggerTemplate attendQuoteLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "attendquote"); + } + + /** + * 考勤引用字段管理 + * + * @return + */ + public static LoggerTemplate attendQuoteFieldLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "attendfield"); + } + + /** + * 考勤引用字段设置 + * + * @return + */ + public static LoggerTemplate attendQuoteFieldSettingLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "attendfieldset"); + } + + /** + * 薪资账套 + * + * @return + */ + public static LoggerTemplate salarySobLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "salarysob"); + } + + /** + * 薪资核算 + * + * @return + */ + public static LoggerTemplate salaryAcctRecordLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "acctrecord"); + } + + /** + * 个税申报表 + * + * @return + */ + public static LoggerTemplate taxDeclarationLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "taxdecla"); + } + + /** + * 福利档案 + * + * @return + */ + public static LoggerTemplate siArchivesLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "siarchives"); + } + + /** + * 社保规则 + */ + public static LoggerTemplate archiveRuleLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "archiverule"); + } + + /** + * 代缴机构 + * + * @return + */ + public static LoggerTemplate paymentAgencyLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "paymentagency"); + } + + /** + * 福利核算 + * + * @return + */ + public static LoggerTemplate siAccountLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "siaccount"); + } + + /** + * 工资单模板 + * + * @return + */ + public static LoggerTemplate salaryTemplateLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "salarytemplate"); + } + + /** + * 工资单发放 + * + * @return + */ + public static LoggerTemplate salarySendLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "salarysend"); + } + + /** + * 外部人员 + * + * @return + */ + public static LoggerTemplate extEmployeeLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "extemployee"); + } + + /** + * 薪资档案 + * + * @return + */ + public static LoggerTemplate salaryArchiveLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "salaryarchive"); + } + + /** + * 薪资档案-字段 + * + * @return + */ + public static LoggerTemplate salaryArchiveFieldLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "salarcfield"); + } + + /** + * 薪资档案-薪资项目调整 + * + * @return + */ + public static LoggerTemplate salaryArchiveItemAdjustLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "salarcitemadj"); + } + + /** + * 薪资档案-批量调薪 + * + * @return + */ + public static LoggerTemplate salaryArchiveBatchAdjustLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "salarcbatadj"); + } + + /** + * 自定义业务数据设置 + * + * @return + */ + public static LoggerTemplate customDataSetLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "customdataset"); + } + + /** + * 自定义业务数据 + * + * @return + */ + public static LoggerTemplate customDataLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "customdata"); + } + + + /** + * 人员报送 + * + * @return + */ + public static LoggerTemplate employeeDeclareLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "empdeclare"); + } + + /** + * 单位扣款账号 + * + * @return + */ + public static LoggerTemplate withholdAccountLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "whaccount"); + } + + /** + * 银行报盘 + * + * @return + */ + public static LoggerTemplate bankOfferLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "bankoffer"); + } + + /** + * 银行报盘模板 + * + * @return + */ + public static LoggerTemplate bankOfferTemplateLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "botemplate"); + } + + /** + * 薪酬体系标准(岗薪制) + * + * @return + */ + public static LoggerTemplate postSalaryLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "postsalary"); + } + + /** + * 银行报盘模板 + * + * @return + */ + public static LoggerTemplate taxFreeDetailLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "taxfreedetail"); + } + + /** + * 最优年终奖计税方案 + * + * @return + */ + public static LoggerTemplate annualBonusPlanLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "annualplan"); + } + + /** + * 最优年终奖计税方案-累计情况 + * 最优年终奖计税方案-优化方案详情 + * + * @return + */ + public static LoggerTemplate annualBonusLoggerTemplate() { + return LoggerTemplateBuilder.build("hrsa", "annualbonus"); + } } diff --git a/src/com/engine/salary/elog/dto/LoggerContext.java b/src/com/engine/salary/elog/dto/LoggerContext.java index 8c4b3aa0e..5b00005f0 100644 --- a/src/com/engine/salary/elog/dto/LoggerContext.java +++ b/src/com/engine/salary/elog/dto/LoggerContext.java @@ -7,6 +7,7 @@ import com.engine.salary.elog.enums.ElogConsts; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import org.apache.commons.lang3.StringUtils; +import weaver.hrm.User; import java.io.Serializable; import java.util.ArrayList; @@ -26,6 +27,8 @@ public class LoggerContext implements Serializable { private static final long serialVersionUID = 15869325700230992L; + private User user; + @ElogField(comment = "ID", dataType = DataTypeEnum.BIGINT, isKey = true) @ApiModelProperty("日志ID") private long id; @@ -263,6 +266,14 @@ public class LoggerContext implements Serializable { private List clobFieldList; + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + public List getClobFieldList() { return clobFieldList; } diff --git a/src/com/engine/salary/elog/util/ElogUtils.java b/src/com/engine/salary/elog/util/ElogUtils.java index 5e792fbdd..077593ee6 100644 --- a/src/com/engine/salary/elog/util/ElogUtils.java +++ b/src/com/engine/salary/elog/util/ElogUtils.java @@ -10,6 +10,7 @@ import org.apache.dubbo.common.utils.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; +import weaver.hrm.User; import javax.servlet.http.HttpServletRequest; import java.io.ByteArrayInputStream; @@ -305,33 +306,6 @@ public class ElogUtils { } } - public static boolean isLongValue(String v) { - try { - Long.parseLong(v); - } catch (Exception e) { - return false; - } - return true; - } - - public static int currentLanguage() { -// String employeeId = getEmployeeId(); -// if (employeeId != null) { -// return I18nLanguageUtil.getLangId(Long.parseLong(employeeId)); -// } else { -// return 7; -// } - return 7; - } - -// /** -// * 获取request请求 -// * -// * @return -// */ -// public static HttpServletRequest getRequest() { -// return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); -// } /** * 将对象转换程字符串 @@ -409,80 +383,32 @@ public class ElogUtils { } } -// public static String getTenantKey() { -// -// String tenantKey = TenantRpcContext.getTenantKey(); -// if (StringUtils.isNotBlank(tenantKey)) { -// return tenantKey; -// } -// -// return ""; -// } -// -// public static String getEmployeeId() { -// -// String employeeId = TenantRpcContext.getEmployeeId(); -// if (StringUtils.isNotBlank(employeeId)) { -// return employeeId; -// } -// -// return ""; -// } - - public static String getUserName() { - -// String employeeId = getEmployeeId(); -// if (StringUtils.isNotEmpty(employeeId)) { -// HrmEmployeeComInfo simpleEmployee = null; -// try { -// ComInfoCache bean = SpringUtils.getBean(ComInfoCache.class); -// if (bean != null) { -// simpleEmployee = bean.getCacheById(HrmEmployeeComInfo.class, ElogUtils.getLongValue(employeeId)); -// } -// } catch (Exception e) { -// logger.error("Exception", e); -// } -// if (simpleEmployee != null) { -// if (StringUtils.isNotBlank(simpleEmployee.getUsername())) { -// return simpleEmployee.getUsername(); -// } -// } -// } - - - return ""; - } - /** * 获取rpc信息(客户端ip和来源设备) * * @param context */ public static void initRpcInfo(LoggerContext context) { -// String device = ""; -// String clientIp = ""; -// String traceId = ""; -// try { -// device = RpcContext.getContext().getAttachment(EteamsConstant.DEVICE); -// clientIp = RpcContext.getContext().getAttachment(EteamsConstant.CLIENT_IP); -// traceId = RpcContext.getContext().getAttachment(ApmConstant.TRACE_ID); -//// logger.info("rpc调用获取到 device:{},clientIp:{},traceId:{}", device, clientIp, traceId); -// } catch (Exception e) { -// logger.error("Exception", e); -// } -// if (StringUtils.isEmpty(context.getDevice()) && StringUtils.isNotEmpty(device)) { -// context.setDevice(device); -// } -// if (StringUtils.isEmpty(context.getFromTerminal()) && StringUtils.isNotEmpty(device)) { -// context.setFromTerminal(getFromTerminal(device)); -// } -// -// if (StringUtils.isEmpty(context.getClientIp()) && StringUtils.isNotEmpty(clientIp)) { -// context.setClientIp(clientIp); -// } -// if (StringUtils.isEmpty(context.getBelongMainId()) && StringUtils.isNotEmpty(traceId)) { -// context.setBelongMainId(traceId); -// } + User user = context.getUser(); + if(user == null){ + return; + } + String device = user.getLogintype(); + String clientIp = user.getLoginip(); + String traceId = ""; + if (StringUtils.isEmpty(context.getDevice()) && StringUtils.isNotEmpty(device)) { + context.setDevice(device); + } + if (StringUtils.isEmpty(context.getFromTerminal()) && StringUtils.isNotEmpty(device)) { + context.setFromTerminal(getFromTerminal(device)); + } + + if (StringUtils.isEmpty(context.getClientIp()) && StringUtils.isNotEmpty(clientIp)) { + context.setClientIp(clientIp); + } + if (StringUtils.isEmpty(context.getBelongMainId()) && StringUtils.isNotEmpty(traceId)) { + context.setBelongMainId(traceId); + } } public static String getFromTerminal(String device) { diff --git a/src/com/engine/salary/elog/util/LoggerTemplate.java b/src/com/engine/salary/elog/util/LoggerTemplate.java index c5584bc62..f3fca954a 100644 --- a/src/com/engine/salary/elog/util/LoggerTemplate.java +++ b/src/com/engine/salary/elog/util/LoggerTemplate.java @@ -18,6 +18,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.dubbo.common.utils.AnnotationUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import weaver.hrm.User; import java.lang.reflect.Field; import java.util.*; @@ -240,17 +241,12 @@ public class LoggerTemplate { } context.setTempParams(null); - //User user = UserContext.getCurrentUser(); - //if(user != null) { - // 通过统一登录获取 - String employeeId = "92"; + String employeeId = Optional.ofNullable(context.getUser()).map(User::getUID).orElse(0).toString(); String tenantKey = SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY; - String userName = ElogUtils.getUserName(); - //String userName = TenantRpcContext.getEmployeeId(); + String userName = Optional.ofNullable(context.getUser()).map(User::getUsername).orElse("").toString(); if (StringUtils.isEmpty(context.getOperator()) && StringUtils.isNotEmpty(employeeId)) { context.setOperator(employeeId + ""); } - if (StringUtils.isEmpty(context.getTenant_key()) && StringUtils.isNotEmpty(tenantKey)) { context.setTenant_key(tenantKey); } @@ -266,16 +262,17 @@ public class LoggerTemplate { context.setTargetId("-1"); } -// RequestAttributes requestAttributes = WeaverRequestContextHolder.getRequestAttributesSafely(); +// RequestAttributes requestAttributes = SalaryContext.get().getRequestAttributesSafely(); // if ((requestAttributes instanceof ServletRequestAttributes)) { // HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest(); -// ElogUtils.initRequestInfo(request, context);z +// ElogUtils.initRequestInfo(request, context); // } else { // if (StringUtils.isEmpty(context.getRequestUrl())) { // context.setRequestUrl("非http请求"); // } // ElogUtils.initRpcInfo(context); // } + ElogUtils.initRpcInfo(context); List changeBeans = context.getChangeValues(); diff --git a/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.xml b/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.xml index 4bd8ea6d2..41e8003ef 100644 --- a/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.xml +++ b/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.xml @@ -74,7 +74,7 @@ #{detailContext.tenant_key},#{detailContext.creator}, #{detailContext.newRealValue} , #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId}, #{detailContext.fieldNameLabelId} - , #{detailContext.create_time}, #{detailContext.update_time}, #{logContent.delete_type}) + , #{detailContext.create_time}, #{detailContext.update_time}, #{detailContext.delete_type}) @@ -122,7 +122,7 @@ #{detailContext.tenant_key},#{detailContext.creator}, #{detailContext.newRealValue} , #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId}, #{detailContext.fieldNameLabelId} - , #{detailContext.create_time}, #{detailContext.update_time}, #{logContent.delete_type} + , #{detailContext.create_time}, #{detailContext.update_time}, #{detailContext.delete_type} FROM DUAL diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index f53e0ddeb..1eebda42e 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -210,6 +210,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService salaryItemBiz.insert(salaryItemPO); // 记录日志 LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(salaryItemPO.getId())); loggerContext.setTargetName(salaryItemPO.getName()); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); @@ -291,6 +292,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService // 记录日志 LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(newSalaryItemPO.getId())); loggerContext.setTargetName(newSalaryItemPO.getName()); loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); diff --git a/src/com/engine/salary/util/ResponseResult.java b/src/com/engine/salary/util/ResponseResult.java index 7755bc673..2036fd1a2 100644 --- a/src/com/engine/salary/util/ResponseResult.java +++ b/src/com/engine/salary/util/ResponseResult.java @@ -3,9 +3,8 @@ package com.engine.salary.util; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; -import com.engine.common.service.HrmCommonService; -import com.engine.common.service.impl.HrmCommonServiceImpl; import com.engine.core.exception.ECException; +import com.engine.salary.common.SalaryContext; import com.engine.salary.exception.ExceptionUtil; import com.engine.salary.exception.SalaryRunTimeException; import com.fasterxml.jackson.core.JsonProcessingException; @@ -14,6 +13,8 @@ import lombok.extern.slf4j.Slf4j; import weaver.general.BaseBean; import weaver.hrm.User; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.Map; import java.util.function.Consumer; @@ -35,14 +36,20 @@ public class ResponseResult { private final User user; - private final HrmCommonService hrmCommonService = new HrmCommonServiceImpl(); - private final BaseBean baseBean = new BaseBean(); private final Boolean isLog = "true".equals(baseBean.getPropValue("hrmSalary", "log")); public ResponseResult(User user) { this.user = user; + SalaryContext.get().setValue("user", user); + } + + public ResponseResult(HttpServletRequest request, HttpServletResponse response, User user) { + this.user = user; + SalaryContext.get().setValue("user", user); + SalaryContext.get().setValue("request", request); + SalaryContext.get().setValue("response", response); } diff --git a/src/com/engine/salary/web/SalaryItemController.java b/src/com/engine/salary/web/SalaryItemController.java index 39131b9f4..cae184b9b 100644 --- a/src/com/engine/salary/web/SalaryItemController.java +++ b/src/com/engine/salary/web/SalaryItemController.java @@ -1,7 +1,6 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; -import com.engine.salary.common.SalaryContext; import com.engine.salary.component.WeaFormOption; import com.engine.salary.entity.salaryitem.dto.SalaryItemFormDTO; import com.engine.salary.entity.salaryitem.dto.SalaryItemListDTO; @@ -41,7 +40,6 @@ import java.util.Map; public class SalaryItemController { private SalaryItemWrapper getSalaryItemWrapper(User user) { - SalaryContext.get().setValue("user",user); return ServiceUtil.getService(SalaryItemWrapper.class, user); } @@ -60,7 +58,7 @@ public class SalaryItemController { @Produces(MediaType.APPLICATION_JSON) public String listSalaryItem(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemSearchParam searchParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>(user).run(getSalaryItemWrapper(user)::listPage, searchParam); + return new ResponseResult>(request, response, user).run(getSalaryItemWrapper(user)::listPage, searchParam); } @@ -168,9 +166,9 @@ public class SalaryItemController { public String saveSalaryItem(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemSaveParam saveParam) { User user = HrmUserVarify.getUser(request, response); if (saveParam.getId() == null || saveParam.getId() <= 0) { - return new ResponseResult(user).run(getSalaryItemWrapper(user)::save, saveParam); + return new ResponseResult(request, response, user).run(getSalaryItemWrapper(user)::save, saveParam); } else { - return new ResponseResult(user).run(getSalaryItemWrapper(user)::update, saveParam); + return new ResponseResult(request, response, user).run(getSalaryItemWrapper(user)::update, saveParam); } } From 7a2332474494a760122fa2bdbefe6d7b703fac90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 22 Dec 2023 14:52:09 +0800 Subject: [PATCH 05/64] =?UTF-8?q?=E4=BF=AE=E6=94=B9elog=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E8=A1=A8=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml index c345b7aba..a0410827b 100644 --- a/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml +++ b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml @@ -3,10 +3,10 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - insert into elog_version (id, maintable, version) values (#{id},#{mainTable},#{version}) + insert into hrsa_elog_version (id, maintable, version) values (#{id},#{mainTable},#{version}) create table ${mainTable} From ea8d51c493ccad7f4f9db32ffe3a7c5315e1830d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 22 Dec 2023 16:36:11 +0800 Subject: [PATCH 06/64] =?UTF-8?q?=E8=96=AA=E8=B5=84=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryItemServiceImpl.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index 1eebda42e..0110994fa 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -354,17 +354,18 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService // 删除薪资项目 ids = SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getId); salaryItemBiz.deleteByIds(ids); - //todo 记录删除日志 -// salaryItemPOS.forEach(salaryItemPO -> { -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId(String.valueOf(salaryItemPO.getId())); -// loggerContext.setTargetName(salaryItemPO.getName()); -// loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98323, "删除薪资项目")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98323, "删除薪资项目") + ": " + salaryItemPO.getName()); -// loggerContext.setOldValues(salaryItemPO); -// salaryItemLoggerTemplate.write(loggerContext); -// }); + // 记录删除日志 + salaryItemPOS.forEach(salaryItemPO -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(salaryItemPO.getId())); + loggerContext.setTargetName(salaryItemPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98323, "删除薪资项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98323, "删除薪资项目") + ": " + salaryItemPO.getName()); + loggerContext.setOldValues(salaryItemPO); + salaryItemLoggerTemplate.write(loggerContext); + }); } From 8b5703c8948f8370cfbfeedd8f11183547d7de8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 25 Dec 2023 09:36:23 +0800 Subject: [PATCH 07/64] =?UTF-8?q?=E8=96=AA=E8=B5=84=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/salary/web/LoggerTableController.java | 15 + .../salary/elog/annotation/HandleElog.java | 17 + src/com/engine/salary/elog/dto/ElogBean.java | 116 + .../salary/elog/dto/FilterConditionDto.java | 91 + .../engine/salary/elog/dto/ShowColumsDto.java | 105 + .../elog/service/ILoggerTableService.java | 39 + .../elog/service/impl/LoggerTableService.java | 1972 +++++++++++++++++ .../salary/elog/util/ElogServiceUtils.java | 92 + .../elog/util/ElogSeviceSwitchUtils.java | 1394 ++++++++++++ .../salary/elog/util/ElogSeviceUtils.java | 547 +++++ .../elog/web/LoggerTableController.java | 178 ++ 11 files changed, 4566 insertions(+) create mode 100644 src/com/api/salary/web/LoggerTableController.java create mode 100644 src/com/engine/salary/elog/annotation/HandleElog.java create mode 100644 src/com/engine/salary/elog/dto/ElogBean.java create mode 100644 src/com/engine/salary/elog/dto/FilterConditionDto.java create mode 100644 src/com/engine/salary/elog/dto/ShowColumsDto.java create mode 100644 src/com/engine/salary/elog/service/ILoggerTableService.java create mode 100644 src/com/engine/salary/elog/service/impl/LoggerTableService.java create mode 100644 src/com/engine/salary/elog/util/ElogServiceUtils.java create mode 100644 src/com/engine/salary/elog/util/ElogSeviceSwitchUtils.java create mode 100644 src/com/engine/salary/elog/util/ElogSeviceUtils.java create mode 100644 src/com/engine/salary/elog/web/LoggerTableController.java diff --git a/src/com/api/salary/web/LoggerTableController.java b/src/com/api/salary/web/LoggerTableController.java new file mode 100644 index 000000000..eb33772ce --- /dev/null +++ b/src/com/api/salary/web/LoggerTableController.java @@ -0,0 +1,15 @@ +package com.api.salary.web; + +import javax.ws.rs.Path; + +/** + * 日志列表公共接口暴漏 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Path("/bs/hrmsalary/elog") +public class LoggerTableController { +} diff --git a/src/com/engine/salary/elog/annotation/HandleElog.java b/src/com/engine/salary/elog/annotation/HandleElog.java new file mode 100644 index 000000000..387666b18 --- /dev/null +++ b/src/com/engine/salary/elog/annotation/HandleElog.java @@ -0,0 +1,17 @@ +package com.engine.salary.elog.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface HandleElog { + + String modulename() default ""; + + String functionname() default ""; + + String service() default ""; +} diff --git a/src/com/engine/salary/elog/dto/ElogBean.java b/src/com/engine/salary/elog/dto/ElogBean.java new file mode 100644 index 000000000..d4239b9a7 --- /dev/null +++ b/src/com/engine/salary/elog/dto/ElogBean.java @@ -0,0 +1,116 @@ +package com.engine.salary.elog.dto; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Date: 2022/5/2 21:51 + * @Author: deli.xu + * @Description: 日志中心bean + **/ +public class ElogBean implements Serializable { + + + private static final long serialVersionUID = 5357552376749564256L; + private String module; + private String function; + private String pageNum; + private String pageSize; + private String dataset; + private String searchMap; + private List showColumns = new ArrayList<>(); + private List filterConditionDtos = new ArrayList<>(); + private String downloadSize; + private String transMethod; + private Map authParamsJson; + + public String getModule() { + return module; + } + + public void setModule(String module) { + this.module = module; + } + + public String getFunction() { + return function; + } + + public void setFunction(String function) { + this.function = function; + } + + public String getPageNum() { + return pageNum; + } + + public void setPageNum(String pageNum) { + this.pageNum = pageNum; + } + + public String getPageSize() { + return pageSize; + } + + public void setPageSize(String pageSize) { + this.pageSize = pageSize; + } + + public String getDataset() { + return dataset; + } + + public void setDataset(String dataset) { + this.dataset = dataset; + } + + public String getSearchMap() { + return searchMap; + } + + public void setSearchMap(String searchMap) { + this.searchMap = searchMap; + } + + public List getShowColumns() { + return showColumns; + } + + public void setShowColumns(List showColumns) { + this.showColumns = showColumns; + } + + public List getFilterConditionDtos() { + return filterConditionDtos; + } + + public void setFilterConditionDtos(List filterConditionDtos) { + this.filterConditionDtos = filterConditionDtos; + } + + public String getDownloadSize() { + return downloadSize; + } + + public void setDownloadSize(String downloadSize) { + this.downloadSize = downloadSize; + } + + public String getTransMethod() { + return transMethod; + } + + public void setTransMethod(String transMethod) { + this.transMethod = transMethod; + } + + public Map getAuthParamsJson() { + return authParamsJson; + } + + public void setAuthParamsJson(Map authParamsJson) { + this.authParamsJson = authParamsJson; + } +} diff --git a/src/com/engine/salary/elog/dto/FilterConditionDto.java b/src/com/engine/salary/elog/dto/FilterConditionDto.java new file mode 100644 index 000000000..d276b1b27 --- /dev/null +++ b/src/com/engine/salary/elog/dto/FilterConditionDto.java @@ -0,0 +1,91 @@ +package com.engine.salary.elog.dto; + +import java.io.Serializable; + +/** + * @date: 2021/5/25 17:23 + * @author: deli.xu + * @description: + */ +public class FilterConditionDto implements Serializable { + + private static final long serialVersionUID = -3399942468474767859L; + + /** + * 列名 + */ + private String columIndex; + /** + * 值 + */ + private String value; + + /** + * 过滤类型 + */ + private String type; + + /** + * 模糊搜索 + */ + private Like like; + + /** + * 关联条件 + */ + private String connectCondition; + + /** + * sql条件 + */ + private String sql; + + + public String getColumIndex() { + return columIndex; + } + + public void setColumIndex(String columIndex) { + this.columIndex = columIndex; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public Like getLike() { + return like; + } + + public void setLike(Like like) { + this.like = like; + } + + public String getConnectCondition() { + return connectCondition; + } + + public void setConnectCondition(String connectCondition) { + this.connectCondition = connectCondition; + } + + public String getSql() { + return sql; + } + + public void setSql(String sql) { + this.sql = sql; + } +} diff --git a/src/com/engine/salary/elog/dto/ShowColumsDto.java b/src/com/engine/salary/elog/dto/ShowColumsDto.java new file mode 100644 index 000000000..828474be5 --- /dev/null +++ b/src/com/engine/salary/elog/dto/ShowColumsDto.java @@ -0,0 +1,105 @@ +package com.engine.salary.elog.dto; + + +import java.io.Serializable; + +/** + * @date: 2021/5/11 18:46 + * @author: deli.xu + * @description: 显示列对象 + */ +public class ShowColumsDto implements Serializable { + + private static final long serialVersionUID = 4650449925605408753L; + + /** + * 列名 + */ + private String columName; + /** + * 列别名 + */ + private String aliasColumName; + + /** + * 列名index + */ + private String columIndex; + + /** + * 是否隐藏 默认显示 + */ + private boolean isHide = false; + + /** + * 宽度 + */ + private String width; + + /** + * 是否转多语言 + */ + private boolean isTransfLanguage = false; + + /** + * 是否换行 + * @param width + */ + private boolean newLine = false; + + public void setWidth(String width){ + this.width =width; + } + + public String getWidth(){ + return width; + } + public String getColumName() { + return columName; + } + + public void setColumName(String columName) { + this.columName = columName; + } + + public String getAliasColumName() { + return aliasColumName; + } + + public void setAliasColumName(String aliasColumName) { + this.aliasColumName = aliasColumName; + } + + public boolean isHide() { + return isHide; + } + + public void setHide(boolean hide) { + isHide = hide; + } + + public String getColumIndex() { + return columIndex; + } + + public void setColumIndex(String columIndex) { + this.columIndex = columIndex; + } + + public boolean isTransfLanguage() { + return isTransfLanguage; + } + + public boolean isNewLine() { + return newLine; + } + + public void setNewLine(boolean newLine) { + this.newLine = newLine; + } + + public void setTransfLanguage(boolean transfLanguage) { + + isTransfLanguage = transfLanguage; + } +} diff --git a/src/com/engine/salary/elog/service/ILoggerTableService.java b/src/com/engine/salary/elog/service/ILoggerTableService.java new file mode 100644 index 000000000..00c5b6327 --- /dev/null +++ b/src/com/engine/salary/elog/service/ILoggerTableService.java @@ -0,0 +1,39 @@ +package com.engine.salary.elog.service; + +import com.weaver.common.batch.entity.BatchDocumentMessage; +import com.weaver.common.component.table.WeaTable; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +public interface ILoggerTableService { + WeaTable queryLogs(String data); + + WeaTable queryLogsPapi(String data, HttpServletRequest request); + + List getDetailChanges(String module, String function, String mainid,String transMethod); + + List getDetailChangesPapi(String module, String function, String mainid, String transMethod, HttpServletRequest request); + + List queryLogList(String module, String function, String current, String pageSize, String condition); + + List queryCardLogList(String data); + + Map countLog(String module, String function); + + List queryDetailLogList(String module, String function, String current, String pageSize, String condition, String mainId); + + Map countDestailLog(String module, String function, String mainId); + + WeaTable queryElogTraceInfo(String traceId, String module, String function, Integer currentPage, Integer pageSize,String traceTransMethod); + + List queryLogInfoByCustom(String module, String function, String field, String value, boolean isDetail); + + List queryLogInfoByCustom(String module, String function, String field, String value); + + BatchDocumentMessage downloadLog(String data); + + WeaTable getDetailChangePages(String module, String function, String mainid, String detailTransMethod, String current, String pageSize); + +} diff --git a/src/com/engine/salary/elog/service/impl/LoggerTableService.java b/src/com/engine/salary/elog/service/impl/LoggerTableService.java new file mode 100644 index 000000000..bb5dfc812 --- /dev/null +++ b/src/com/engine/salary/elog/service/impl/LoggerTableService.java @@ -0,0 +1,1972 @@ +package com.engine.salary.elog.service.impl; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.salary.elog.dto.ElogBean; +import com.engine.salary.elog.dto.FilterConditionDto; +import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.elog.dto.ShowColumsDto; +import com.engine.salary.elog.service.ILoggerTableService; +import com.engine.salary.elog.util.ElogServiceUtils; +import com.engine.salary.elog.util.ElogSeviceUtils; +import com.engine.salary.mapper.elog.LocalElogDaoMapper; +import com.weaver.common.batch.consts.FileType; +import com.weaver.common.batch.consts.HandlerFileMethod; +import com.weaver.common.batch.entity.BatchDocumentMessage; +import com.weaver.common.batch.entity.BatchFile; +import com.weaver.common.batch.entity.ExcelSheet; +import com.weaver.common.batch.sender.BatchExportSender; +import com.weaver.common.cache.tablecache.impl.ComInfoCache; +import com.weaver.common.component.table.WeaTable; +import com.weaver.common.component.table.column.WeaTableColumn; +import com.weaver.common.component.table.page.Page; +import com.weaver.common.distribution.genid.IdGenerator; +import com.weaver.common.elog.annotation.HandleElog; +import com.weaver.common.elog.annotation.OperateType; +import com.weaver.common.elog.annotation.handle.ElogMethodHandler; +import com.weaver.common.elog.annotation.handle.MethodHandler; +import com.weaver.common.elog.consts.ElogEsTableConsts; +import com.weaver.common.elog.dao.QueryCommonTabeMapper; +import com.weaver.common.elog.dto.*; +import com.weaver.common.elog.enums.ElogConsts; +import com.weaver.common.elog.service.ApplicationContextProvider; +import com.weaver.common.elog.service.ElogHandleService; +import com.weaver.common.elog.util.*; +import com.weaver.common.hrm.cache.HrmAvatarComInfo; +import com.weaver.common.hrm.cache.HrmEmployeeComInfo; +import com.weaver.common.hrm.domain.organization.HrmConditionResultType; +import com.weaver.common.hrm.domain.organization.HrmOrgEmpCondition; +import com.weaver.common.hrm.entity.employee.HrmEmployee; +import com.weaver.common.hrm.service.HrmCommonEmployeeService; +import com.weaver.common.hrm.util.HrmCommonUtil; +import com.weaver.common.hrm.util.HrmI18nUtil; +import com.weaver.common.i18n.label.SystemEnv; +import com.weaver.common.i18n.tool.config.date.format.DateRangeTransformer; +import com.weaver.common.i18n.tool.util.I18nUtil; +import com.weaver.common.mybatis.baseConfig.WeaDatabaseIdProvider; +import com.weaver.common.mybatis.util.DatabaseUtil; +import com.weaver.common.security.util.SecurityUtil; +import com.weaver.framework.rpc.context.impl.TenantRpcContext; +import com.weaver.teams.security.context.UserContext; +import com.weaver.teams.security.user.User; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.elasticsearch.action.admin.indices.get.GetIndexRequest; +import org.elasticsearch.action.search.SearchRequest; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.client.RequestOptions; +import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.client.indices.CreateIndexRequest; +import org.elasticsearch.index.query.QueryBuilders; +import org.elasticsearch.search.SearchHit; +import org.elasticsearch.search.SearchHits; +import org.elasticsearch.search.builder.SearchSourceBuilder; +import org.elasticsearch.xcontent.XContentType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.AnnotationUtils; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +import static com.weaver.common.elog.consts.LogConstants.MAPPING_TEMPLATE; + +public class LoggerTableService implements ILoggerTableService { + + private static final Logger logger = LoggerFactory.getLogger(LoggerTableService.class); + + @Autowired + private LocalElogDaoMapper localElogDaoMapper; + + @Autowired + private ComInfoCache comInfoCache; + + @Autowired + private HrmCommonUtil hrmCommonUtil; + + @Autowired + private QueryCommonTabeMapper queryCommonTabeMapper; + + @Autowired + private RestHighLevelClient restHighLevelClient; + + @Resource + private BatchExportSender batchExportSender; + + + @Resource + private DateRangeTransformer dateRangeTransformer; + + @Autowired + private HrmCommonEmployeeService hrmCommonEmployeeService; + + + private static final String databaseId = DatabaseUtil.getDatabaseId(); + + @Override + public WeaTable queryLogs(String data) { + //解析数据 + ElogBean elogBean = ElogServiceUtils.getElogBean(data); + // columIndex统一转为小写 + Optional.ofNullable(elogBean.getShowColumns()) + .ifPresent(list -> { + list.forEach(x -> { + if (StringUtils.isNotBlank(x.getColumIndex())) { + x.setColumIndex(x.getColumIndex().toLowerCase()); + } + }); + }); + + List showColums = elogBean.getShowColumns(); + String module = elogBean.getModule(); + String function = elogBean.getFunction(); + String searchMap = elogBean.getSearchMap(); + String pageSize = elogBean.getPageSize(); + String pageNum = elogBean.getPageNum(); + String downloadSize = elogBean.getDownloadSize(); + List filterConditionDtos = elogBean.getFilterConditionDtos(); + String transMethod = elogBean.getTransMethod(); + Map authParamsJson = elogBean.getAuthParamsJson(); + + //获取 context 数据 + LoggerContext context = new LoggerContext(); + context.setModuleName(module); + context.setFunctionName(function); + context.setTenant_key(getTenantKey()); +// context.setOperator(getEmployeeId()); + //获取主表 + String tableName = ElogSeviceUtils.getTableName(module, function); + //获取weaTable + WeaTable weaTable = new WeaTable(); + List recordColumns = getWeaColumns(data, showColums, module, function, weaTable); + //获取条件sql + String searchMapsql = getSearchMapSql(searchMap, module, function,elogBean.getShowColumns()); + String sb = getQueryCondition(filterConditionDtos); + sb = searchMapsql.concat(sb); + //处理数据权限 + Map res = getCustomAuthSql(transMethod, authParamsJson, "auth"); + if (!res.isEmpty()) { + Object flag = res.get("flag"); + if (flag != null && flag instanceof Boolean) { + boolean f = (boolean) flag; + if (!f) { + weaTable.setCustomParameters(res); + return weaTable; + } + } + } + String customSql = getCustomSql(transMethod, sb, "before"); + //处理数据权限(前缀) + Map hashMap = addPermissionHandler(transMethod); + logger.info("查询条件sql:{}", customSql); + //处理数据权限(对接权限sql) + PermissionParams permissionParams = getPermissionParams(hashMap); + String permissionId = permissionParams.getPermissionId(); + String permissionType = permissionParams.getPermissionType(); + String mainDataTable = permissionParams.getMainDataTable(); + String mainDataTableAlias = permissionParams.getMainDataTableAlias(); + String primaryKey = permissionParams.getPrimaryKey(); + String permissionTargetId = permissionParams.getPermissionTargetId(); + String permissionConfigSourceId = permissionParams.getPermissionConfigSourceId(); + + + // 设置操作菜单 + //weaTable.getOperates().add(new WeaTableOperate("查看", 1)); + + // 分页 + //Page page = ElogSeviceUtils.getPage(); + Page page = null; + if (StringUtils.isEmpty(downloadSize)) { + page = new Page(ElogSeviceUtils.getIntValue(pageNum, 1), ElogSeviceUtils.getIntValue(pageSize, 10)); + } else { + int pagesize = ElogSeviceUtils.getIntValue(downloadSize, 5000); + page = new Page(1, pagesize); + } + + String columns = getshowColumsStr(showColums); + + Map countMap = new HashMap<>(); + Long countNum = 0l; + + //最终查询前 + List interceptChain = ApplicationContextProvider.getServiceBean(ElogHandleService.class) + .stream().filter(Objects::nonNull) + .filter(x -> x instanceof ElogHandleService) + .map(x -> (ElogHandleService) x) + .collect(Collectors.toList()); + + if (CollectionUtils.isNotEmpty(interceptChain)) { + for (ElogHandleService handleService : interceptChain) { + Class itemClass = handleService.getClass(); + HandleElog annotation = itemClass.getAnnotation(HandleElog.class); + if(Objects.isNull(annotation)){ + annotation = AnnotationUtils.findAnnotation(itemClass, HandleElog.class); + } + if(Objects.nonNull(annotation)){ + if(module.equalsIgnoreCase(annotation.modulename())){ + String employeeId = getUserId(); + long id = StringUtils.isEmpty(employeeId) ? -1 : Long.parseLong(employeeId); + ElogHandleDto elogHandleDto = new ElogHandleDto(module,function,context.getTenant_key(),id,customSql,filterConditionDtos); + boolean preQuery = handleService.preQuery(elogHandleDto); + customSql = elogHandleDto.getSql(); + } + } + } + } + + // 查询 + List list = new ArrayList<>(); + if (StringUtils.isNotEmpty(permissionId) || StringUtils.isNotEmpty(permissionType) || StringUtils.isNotEmpty(mainDataTableAlias) || StringUtils.isNotEmpty(mainDataTable) || StringUtils.isNotEmpty(permissionTargetId) || StringUtils.isNotEmpty(permissionConfigSourceId)) { + list = localElogDaoMapper.queryElogList(page, context, null, tableName, customSql, mainDataTable, permissionId, permissionType, mainDataTableAlias, primaryKey,permissionTargetId,permissionConfigSourceId,"*"); + countNum = localElogDaoMapper.elogCountOnlyNum(context, tableName, customSql, mainDataTable, permissionId, permissionType, mainDataTableAlias, primaryKey,permissionTargetId,permissionConfigSourceId); + } else { + list = localElogDaoMapper.queryElogList(page, context, null, tableName, customSql,"*"); + countMap = localElogDaoMapper.elogCount(context, tableName, customSql); + + } + + String databaseId = WeaDatabaseIdProvider.databaseId; + if ("st".equals(databaseId)) { + //st数据库 date类型特殊处理 + list.forEach(map -> { + map.forEach((k, v) -> { + if (v instanceof Date) { + map.put(k, DateUtil.format((Date) v, "yyyy-MM-dd HH:mm:ss")); + } + }); + }); + + } + + String propertiesValue = module + "." + function + ".es"; + String value = ApplicationContextProvider.getPropertiesValue(propertiesValue); + logger.info("propertiesValue:{},value:{}", propertiesValue,value); + if (StringUtils.isNotEmpty(value) && !value.equalsIgnoreCase("${" + propertiesValue + "}")) { + //if判断通过说明走了自定义ES存储es + String[] fields = getESfields(value); + if (fields != null && fields.length > 0) { + for (Map map : list) { + String logDate = map.get("log_date").toString(); + logger.info("logDate:{}" ,logDate); + String esDate = logDate.substring(0, 10); + //先判断表存不存在,不存在创建 + if (checkEsTableIsExist(esDate)) { + // 根据id通过es查询大字段(params)然后赋值 + SearchRequest searchRequest = new SearchRequest(getElogESTableName(true,esDate)); + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + // 只获取指定字段 + searchSourceBuilder.fetchSource(fields, null); + // 根据id匹配 + searchSourceBuilder.query(QueryBuilders.termQuery("id",map.get("id").toString())); + searchRequest.source(searchSourceBuilder); + + SearchResponse searchResponse = null; + try { + searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); + } catch (IOException e) { + logger.info("查询ES出现异常:{}",e.getMessage()); + } + SearchHits hits = searchResponse.getHits(); + SearchHit[] searchHits = hits.getHits(); + if (searchHits != null && searchHits.length > 0) { + // 根据id匹配唯一,所以直接取第一个 + Map sourceAsMap = searchHits[0].getSourceAsMap(); + if (Objects.nonNull(sourceAsMap) && sourceAsMap.size() > 0) { + logger.info("ES查出来的sourceAsMap:{}",JSON.toJSONString(sourceAsMap)); + map.putAll(sourceAsMap); + } + } + } + } + } + } + //处理转换其他数据库类型值 + list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list); + //处理用户信息Data + + // 大小写转换 + ElogSeviceSwitchUtils.changKey2Lower(list); + + transSwitchDataInfo(list,recordColumns); + //转换多语言 + //ElogSeviceSwitchUtils.switchValues(list, recordColumns, true); + //ElogSeviceSwitchUtils.switchChangeValues(list); + logger.info("开始执行转换方法"); + if (Util.isNotEmpty(transMethod)) { + logger.info("转换方法:{}", transMethod); + // 消费到消息,通过MethodHandler调用对应的方法 + MethodHandler methodHandler = ElogMethodHandler.loadMethodHandler(transMethod); + if (methodHandler != null) { + try { + logger.info("执行方法前的数据:{}", JSON.toJSONString(list)); + methodHandler.execute(list); + logger.info("执行方法后的数据:{}", JSON.toJSONString(list)); + } catch (Exception e) { + logger.error("转换出错:" + e); + } + } + + } + page.setTotal(ElogSeviceUtils.getLongValue(countMap.get("counts") + "", 0)); + page.setRecords(switchString(list)); + if (!countNum.equals(0l)) { + //countNum不为0 则覆盖 + page.setTotal(countNum); + + } + // 处理后的数据 + // weaTable.setDisplayData(DataTransform.userProcessData(page.getRecords())); + + // 处理操作菜单权限 + //weaTable.setOperatesPermission(DataTransform.userOperatesPermission(page.getRecords())); + + // 处理选择框权限 + //weaTable.setCheckBoxPermission(DataTransform.userCheckBoxPermission(page.getRecords())); + + // 存放结果集 + weaTable.setPage(page); + return weaTable; + } + + @Override + public WeaTable queryLogsPapi(String data, HttpServletRequest request) { + return null; + } + + @Override + public List getDetailChangesPapi(String module, String function, String mainid, String transMethod, HttpServletRequest request) { + return null; + } + + + private String getshowColumsStr(List showColums) { + StringBuffer sb = new StringBuffer(); + sb.append("id,uuid,targetid,params,operatetype,link_id,link_type,"); + for (ShowColumsDto showColum : showColums) { + String columIndex = showColum.getColumIndex(); + if ("date".equalsIgnoreCase(columIndex) || "createdate".equalsIgnoreCase(columIndex)){ + columIndex = "log_date"; + }else if ("operator".equalsIgnoreCase(columIndex)){ + columIndex = "log_operator"; + }else if ("modulenamespan".equalsIgnoreCase(columIndex)){ + columIndex = "modulename"; + } else if ("functionnameespan".equalsIgnoreCase(columIndex)){ + columIndex = "functionname"; + } else if ("avatar".equals(columIndex)) { + continue; + } + sb.append(columIndex).append(","); + } + String substring = sb.toString().substring(0, sb.toString().length() - 1); + return substring; + } + + private PermissionParams getPermissionParams(Map hashMap) { + PermissionParams permissionParams = new PermissionParams(); + String permissionId = getPermissionStr(hashMap, "permissionId"); + String permissionType = getPermissionStr(hashMap, "permissionType"); + String mainDataTableAlias = getPermissionStr(hashMap, "mainDataTableAlias"); + String mainDataTable = getPermissionStr(hashMap, "mainDataTable"); + String primaryKey = getPermissionStr(hashMap, "primaryKey"); + String permissionTargetId = getPermissionStr(hashMap, "permissionTargetId"); + String permissionConfigSourceId = getPermissionStr(hashMap, "permissionConfigSourceId"); + + permissionParams.setPermissionId(permissionId); + permissionParams.setPermissionType(permissionType); + permissionParams.setMainDataTableAlias(mainDataTableAlias); + permissionParams.setMainDataTable(mainDataTable); + permissionParams.setPrimaryKey(primaryKey); + permissionParams.setPermissionTargetId(permissionTargetId); + permissionParams.setPermissionConfigSourceId(permissionConfigSourceId); + + return permissionParams; + + } + + private List getWeaColumns(String data, List showColums, String module, String function, WeaTable weaTable) { + // 每一个Table的唯一标识 + weaTable.setPageUid(IdGenerator.generate() + ""); + // 表头 + //weaTable.getColumns().add(new WeaTableColumn("id","id", true)); + List recordColumns = new ArrayList<>(); + if (showColums != null && showColums.size() > 0) { + for (ShowColumsDto showColum : showColums) { + if (showColum.isTransfLanguage()) { + recordColumns.add(showColum.getColumIndex()); + } + if (StringUtils.isNotBlank(showColum.getAliasColumName())) { + WeaTableColumn weaTableColumn = new WeaTableColumn(showColum.getAliasColumName(), showColum.getColumIndex(), getColumnsWidth(showColum), "", showColum.isHide()); + if (showColum.isNewLine()) { + weaTableColumn.setNewLine(showColum.isNewLine()); + } + weaTable.getColumns().add(weaTableColumn); + } else if (StringUtils.isNotBlank(showColum.getColumName())) { + WeaTableColumn weaTableColumn = new WeaTableColumn(FieldNameMap.getMainFieldNameMap(data, function, showColum.getColumName()), showColum.getColumIndex(), getColumnsWidth(showColum), "", showColum.isHide()); + if (showColum.isNewLine()) { + weaTableColumn.setNewLine(showColum.isNewLine()); + } + weaTable.getColumns().add(weaTableColumn); + } + } + } else { + weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "moduleName"), "modulenamespan", "5%")); + weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "functionName"), "functionnamespan", "5%")); + weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "clientIp"), "clientip", "5%")); + weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "operateTypeName"), "operatetypename", "5%")); + weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "targetName"), "targetname", "5%")); + weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "date"), "createdate", "5%")); + weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "operatorName"), "operatorname", "5%")); + } + return recordColumns; + } + + private String getTargetid(List filterConditionDtos) { + if (!filterConditionDtos.isEmpty()) { + for (FilterConditionDto filterConditionDto : filterConditionDtos) { + if ("targetid".equalsIgnoreCase(filterConditionDto.getColumIndex())) { + return filterConditionDto.getValue(); + } + } + } + return ""; + } + + private String getPermissionStr(Map hashMap, String str) { + if (hashMap != null && hashMap.size() > 0) { + Object obj = hashMap.get(str); + if (obj != null) { + return obj.toString(); + } + } + return ""; + } + + /** + * 处理数据权限 + * + * @param transMethod + * @return + */ + private Map addPermissionHandler(String transMethod) { + Map hashMap = new HashMap(); + hashMap.put("permissionId", ""); + hashMap.put("permissionType", ""); + hashMap.put("mainDataTableAlias", ""); + hashMap.put("mainDataTable", ""); + hashMap.put("primaryKey", ""); + hashMap.put("permissionTargetId", ""); + hashMap.put("permissionConfigSourceId", ""); + + MethodHandler beforeMethodHandler = ElogMethodHandler.loadMethodHandler("permission" + transMethod); + if (beforeMethodHandler != null) { + try { + Object execute = beforeMethodHandler.execute(hashMap); + if (execute != null) { + if (execute instanceof Map) { + return (Map) execute; + } + } + } catch (Exception e) { + logger.error("转换出错:" + e); + throw new RuntimeException(e.getMessage()); + } + } + return hashMap; + } + + private Map getCustomAuthSql(String transMethod, Map params, String prefix) { + MethodHandler beforeMethodHandler = ElogMethodHandler.loadMethodHandler(prefix + transMethod); + Map hashMap = new HashMap<>(); + if (beforeMethodHandler != null) { + try { + hashMap.put("flag", true); + hashMap.put("msg", ""); + hashMap.putAll(params); + Object execute = beforeMethodHandler.execute(hashMap); + if (execute != null && execute instanceof Map) { + Map map = (Map) execute; + return map; + } + } catch (Exception e) { + logger.error("转换出错:" + e); + throw new RuntimeException(e.getMessage()); + } + } + return hashMap; + } + + + private String getCustomSql(String transMethod, String sql, String prefix) { + MethodHandler beforeMethodHandler = ElogMethodHandler.loadMethodHandler(prefix + transMethod); + boolean flag = false; + if (beforeMethodHandler != null) { + try { + String subSql = ""; + if (sql.length() > 5) { + flag = true; + subSql = sql.substring(5, sql.length()); + } + Object execute = beforeMethodHandler.execute(subSql); + if (execute != null) { + if (execute instanceof String) { + StringBuffer sb = null; + if(execute.toString().length()==0){ + sb = new StringBuffer(); + } else if (flag || execute.toString().length() > 0) { + sb = new StringBuffer(" and "); + } else { + sb = new StringBuffer(); + } + + sb.append(execute.toString()); + return sb.toString(); + } + } + } catch (Exception e) { + logger.error("转换出错:" + e); + throw new RuntimeException(e.getMessage()); + } + } + return sql; + } + + private void transUserInfo(List list) { + List operators = new ArrayList<>(); + if (list != null && list.size() > 0) { + for (Map map : list) { + //避免暴露内网地址 + map.remove("requesturl"); + + Object operator = map.get("operator"); + if (operator != null && StringUtils.isNotBlank(operator.toString())) { + operators.add(ElogSeviceUtils.getLongValue(operator.toString())); + } + } + } + List cacheList = comInfoCache.getCacheList(HrmEmployeeComInfo.class, operators); + Map infoHashMap = new HashMap<>(); + if (cacheList != null && cacheList.size() > 0) { + for (HrmEmployeeComInfo hrmEmployeeComInfo : cacheList) { + HrmAvatarComInfo hrmAvatarComInfo = (HrmAvatarComInfo) comInfoCache.getCacheById(HrmAvatarComInfo.class, hrmEmployeeComInfo.getAvatar()); + ElogHrmSimpleEmployeeInfo info = new ElogHrmSimpleEmployeeInfo(); + if (hrmAvatarComInfo != null) { + info.setAvatarP3Id(hrmAvatarComInfo.getP3()); + } + info.setId(hrmEmployeeComInfo.getId()); + info.setUserName(hrmEmployeeComInfo.getUsername()); + infoHashMap.put(hrmEmployeeComInfo.getId(), info); + } + } + if (list != null && list.size() > 0) { + for (Map map : list) { + Object operator = map.get("operator"); + if (map.get("params") != null && map.get("params").toString().startsWith("H4s")) { + map.put("params", ElogSeviceUtils.uncompress(map.get("params").toString())); + } + map.put("dboperatorname", Util.null2String(map.get("operatorname"))); + if (operator != null && StringUtils.isNotBlank(operator.toString())) { + Map i18nOperatorMap = new HashMap<>(); + ElogHrmSimpleEmployeeInfo hrmEmployeeComInfo = infoHashMap.get(Long.parseLong(operator.toString())); + if (hrmEmployeeComInfo != null) { + //获取最新的人员名称并进行多语言转换 + i18nOperatorMap.put(Long.parseLong(operator.toString()),hrmEmployeeComInfo.getUserName()); + Map parseI18nOperator = HrmI18nUtil.batchCovertEmployee(i18nOperatorMap, map.get("tenant_key").toString()); + map.put("operatorname", parseI18nOperator.get(Long.parseLong(operator.toString()))); + +// if (StringUtils.isNotEmpty(hrmEmployeeComInfo.getUserName())) { +// map.put("operatorname", hrmEmployeeComInfo.getUserName()); +// } + if (hrmEmployeeComInfo.getAvatarP3Id() != null) { + map.put("avatar", hrmEmployeeComInfo.getAvatarP3Id()); + } + } + } + } + } + } + + private void transSwitchDataInfo(List list, List recordColumns) { + List operators = new ArrayList<>(); + if (list != null && list.size() > 0) { + for (Map map : list) { + //避免暴露内网地址 + map.remove("requesturl"); + + map.put("dboperatorname", Util.null2String(map.get("operatorname"))); + ElogSeviceSwitchUtils.switchDatabaseField(map); + Object operator = map.get("operator"); + if (operator != null && StringUtils.isNotBlank(operator.toString())) { + operators.add(ElogSeviceUtils.getLongValue(operator.toString())); + } + if (map.get("PARAMS") != null) { + map.put("params", JSONObject.toJSON(map.get("PARAMS"))); + } else if (map.get("params") != null) { + map.put("params", JSONObject.toJSON(map.get("params"))); + } + for (String recordColumn : recordColumns) { + Object val = map.get(recordColumn); + if (val != null) { + map.put(recordColumn, ElogSeviceSwitchUtils.transfi18Method(val.toString())); + } + } + Object modulename = map.get("modulename"); + if (modulename != null) { + map.put("modulenamespan", ElogSeviceSwitchUtils.getModuleName(modulename.toString())); + } + + } + } + List cacheList = comInfoCache.getCacheList(HrmEmployeeComInfo.class, operators); + Map infoHashMap = new HashMap<>(); + if (cacheList != null && cacheList.size() > 0) { + for (HrmEmployeeComInfo hrmEmployeeComInfo : cacheList) { + ElogHrmSimpleEmployeeInfo info = new ElogHrmSimpleEmployeeInfo(); + info.setId(hrmEmployeeComInfo.getId()); + info.setUserName(hrmEmployeeComInfo.getUsername()); + infoHashMap.put(hrmEmployeeComInfo.getId(), info); + } + } + if (list != null && list.size() > 0) { + for (Map map : list) { + Object operator = map.get("operator"); + if (map.get("params") != null && map.get("params").toString().startsWith("H4s")) { + map.put("params", ElogSeviceUtils.uncompress(map.get("params").toString())); + map.put("params",SecurityUtil.encodeForHtml(map.get("params").toString(), true)); + + } + //获取最新的人员名称并进行多语言转换 + if (operator != null && StringUtils.isNotBlank(operator.toString())) { + Map i18nOperatorMap = new HashMap<>(); + ElogHrmSimpleEmployeeInfo hrmEmployeeComInfo = infoHashMap.get(Long.parseLong(operator.toString())); + if (hrmEmployeeComInfo != null && StringUtils.isNotEmpty(hrmEmployeeComInfo.getUserName())) { + i18nOperatorMap.put(Long.parseLong(operator.toString()),hrmEmployeeComInfo.getUserName()); + Map parseI18nOperator = HrmI18nUtil.batchCovertEmployee(i18nOperatorMap, map.get("tenant_key").toString()); + map.put("operatorname", parseI18nOperator.get(Long.parseLong(operator.toString()))); +// map.put("operatorname", hrmEmployeeComInfo.getUserName()); + } + } + } + } + } + + /** + * 查询头像相关信息 + * + * @param id + * @return + */ +// private String queryAvatarInfo(long id) { +// Map avatarInfoMap = queryAvatarInfoMapper.queryAvatarInfo(id); +// if (avatarInfoMap != null) { +// if (avatarInfoMap.get("p3") != null) { +// return avatarInfoMap.get("p3").toString(); +// } +// } +// return ""; +// } + + /** + * 获取宽度 + * + * @param showColum + * @return + */ + private String getColumnsWidth(ShowColumsDto showColum) { + if (StringUtils.isBlank(showColum.getWidth())) { + return "5%"; + } else { + return showColum.getWidth(); + } + } + + private String getTenantKey() { + User currentUser = UserContext.getCurrentUser(); + if (currentUser != null) { + return currentUser.getTenantKey(); + } else { + String tenantKey = TenantRpcContext.getTenantKey(); + if (StringUtils.isNotBlank(tenantKey)) { + return tenantKey; + } + } + return ""; + } + + private String getEmployeeId() { + + User currentUser = UserContext.getCurrentUser(); + if (currentUser != null&&!currentUser.isAdmin()) { + String employeeId = TenantRpcContext.getEmployeeId(); + return StringUtils.isNotBlank(employeeId) ? employeeId : ""; + } + return ""; + } + + private String getUserId(){ + User currentUser = UserContext.getCurrentUser(); + if (currentUser != null) { + return currentUser.getEmployeeId().toString(); + } + String employeeId = TenantRpcContext.getEmployeeId(); + return StringUtils.isNotBlank(employeeId) ? employeeId : ""; + } + + /** + * 拼接搜索条件 + * + * @param searchMap + * @param module + * @param function + * @return + */ + private String getSearchMapSql(String searchMap, String module, String function, List showColumns) { + StringBuffer sb = new StringBuffer(); + Map map = JSON.parseObject(searchMap); + if (map == null) return sb.toString(); + Iterator> iterators = map.entrySet().iterator(); + while (iterators.hasNext()) { + Map.Entry next = iterators.next(); + String key = next.getKey(); + SecurityUtil.sqlCheck(key); + if ("date".equals(key) || "createdate".equals(key)) { + Object date = next.getValue(); + if (date != null) { + if (StringUtils.isNotBlank(date.toString())) { + List dates = (List) date; + if (dates != null && dates.size() == 2) { + Object startDate = dates.get(0); + Object endDate = dates.get(1); + startDate = ElogSeviceUtils.checkValSql(startDate.toString()); + endDate = ElogSeviceUtils.checkValSql(endDate.toString()); + if (StringUtils.isNotBlank(startDate.toString()) && StringUtils.isNotBlank(endDate.toString())) { + startDate = startDate.toString().replaceAll("'", "''"); + endDate = endDate.toString().replaceAll("'", "''"); + String dateRangeAfter = dateRangeTransformer.getDateRangeAfter(startDate.toString()); + String dateRangeBefore = dateRangeTransformer.getDateRangeBefore(endDate.toString()); + sb.append(" and log_date ").append(" between ").append(getSwithDatabaseDate(dateRangeAfter)).append(" and ").append(getSwithDatabaseDate(dateRangeBefore)).append(" "); + } else if (StringUtils.isNotBlank(startDate.toString())) { + String dateRangeAfter = dateRangeTransformer.getDateRangeAfter(startDate.toString()); + sb.append(" and log_date ").append(" >= ").append(getSwithDatabaseDate(dateRangeAfter)).append(" "); + } else if (StringUtils.isNotBlank(endDate.toString())) { + String dateRangeBefore = dateRangeTransformer.getDateRangeBefore(endDate.toString()); + sb.append(" and log_date ").append(" <= ").append(getSwithDatabaseDate(dateRangeBefore)).append(" "); + } + } + } + } + } else if ("operator".equals(next.getKey())) { + Object operator = next.getValue(); + if (operator != null) { + if (StringUtils.isNotBlank(operator.toString())) { + operator = ElogSeviceUtils.checkValSql(operator.toString()); + operator = operator.toString().replaceAll("'", "''"); + if (StringUtils.isNumeric(operator.toString()) && operator.toString().length() > 15 ) { + sb.append(" and log_operator = ").append(operator.toString()).append(" "); + } else { + List likeNameHrmEmployeeList = hrmCommonEmployeeService.queryEmpsByCondidtion( + new HrmOrgEmpCondition().setNameLikeList(Arrays.asList(operator.toString())).setTenantKey(getTenantKey()), + HrmConditionResultType.BEAN.name()); + if (likeNameHrmEmployeeList != null && likeNameHrmEmployeeList.size() > 0) { + List ids = likeNameHrmEmployeeList.stream().map(HrmEmployee::getId).collect(Collectors.toList()); + if (ids != null && ids.size() > 0) { + sb.append(" and ( operatorname like '%").append(operator.toString()).append("%' ") + .append(" or log_operator in (").append(StringUtils.join(ids, ",")).append(")) "); + } + } else { + sb.append(" and operatorname like '%").append(operator.toString()).append("%' "); + } + } + } + } + } else if ("modulename".equals(next.getKey())) { + Object moduleName = next.getValue(); + if (moduleName != null) { + moduleName = moduleName.toString().replaceAll("'", "''"); + if (StringUtils.isNotBlank(moduleName.toString())) { + moduleName = ElogSeviceUtils.checkValSql(moduleName.toString()); + //sb.append(" and modulename = '").append(moduleName.toString()).append("' "); + StringBuffer stringBuffer = new StringBuffer(); + if (isEnglish(moduleName.toString())) { + Map moduleMap = ElogSeviceSwitchUtils.moduleMap; + Iterator> iterator = moduleMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry nextObj = iterator.next(); + if (nextObj.getKey().contains(moduleName.toString())) { + stringBuffer.append("'").append(nextObj.getKey()).append("',"); + } + } + + } else { + Map moduleMap = ElogSeviceSwitchUtils.moduleMap; + Iterator> iterator = moduleMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry nextObj = iterator.next(); + String val = ElogSeviceSwitchUtils.getModuleName(nextObj.getValue() + ""); + if (val.contains(moduleName.toString())) { + stringBuffer.append("'").append(nextObj.getKey()).append("',"); + } + } + } + String str = ""; + if (stringBuffer.toString().length() > 0) { + str = stringBuffer.substring(0, stringBuffer.length() - 1); + String inVals = str.toString().replaceAll("''", "'"); + sb.append(" and modulename in (").append(inVals).append(") "); + } else { + sb.append(" and modulename = '").append(moduleName.toString()).append("' "); + } + } + } + } else if (databaseId.equalsIgnoreCase(ElogConsts.POSTGRESQL) && "targetid".equalsIgnoreCase(next.getKey())){ + //兼容PG环境int类型不支持模糊搜索的问题 + String value = next.getValue().toString().replaceAll("'", "''"); + value = ElogSeviceUtils.checkValSql(value.toString()); + if (value.startsWith("_")) { + value = value.replace("_", "\\_"); + } + //将类型转为varchar再进行查询 + sb.append(" and ").append("cast(").append(key).append(" as VARCHAR(255) )").append(" like '%").append(value).append("%' "); + } else { + + if (next.getValue() != null && StringUtils.isNotBlank(key) && StringUtils.isNotBlank(next.getValue().toString())) { + String value = next.getValue().toString().replaceAll("'", "''"); + value = ElogSeviceUtils.checkValSql(value.toString()); + StringBuilder stringBuffer = new StringBuilder(); + if (isLikeSearch(showColumns, key)) { + String logSearchSql = I18nUtil.getLogSearchSql(ElogSeviceUtils.getTableName(module, function), key, value); + String sql = logSearchSql.replaceAll("%_", "%\\\\_"); + try { + logger.error("执行多语言sql:{}",sql); + List maps = queryCommonTabeMapper.queryLabelIds(sql); + if (maps != null && maps.size() > 0) { + for (Map map1 : maps) { + Object indexid = map1.get(key); + if (indexid == null || StringUtils.isEmpty(indexid.toString())) { + indexid = map1.get(key.toLowerCase()); + } + if (indexid != null && StringUtils.isNotEmpty(indexid.toString())) { + String val = indexid.toString().replace("'", "''"); + if (ElogSeviceUtils.checkIsNumber(map.get(key))) { + val = "-"+val; + value = "-"+value; + } + stringBuffer.append("'").append(val).append("',"); + } + } + } + } catch (Exception e) { + logger.error("i18查询sql报错:{}",e.getMessage(),e); + } + + } + String str = ""; + if (stringBuffer.toString().length() > 0) { + str = stringBuffer.substring(0, stringBuffer.length() - 1); + if (value.startsWith("_")) { + value = value.replace("_", "\\_"); + } + sb.append(" and (").append(key).append(" like '%").append(value).append("%' "); + //String inVals = str.toString().replaceAll("''", "'"); + if (str.startsWith("_")) { + str = str.replace("_", "\\_"); + } + if ("operatetypename".equals(key)) { + String s = ElogSeviceUtils.checkValSql(next.getValue().toString()); + sb.append(matchOperatetype(s)); + } + sb.append(" or ").append(key).append(" in (").append(str).append(")) "); + } else { + if ("operatetypename".equals(key)) { + sb.append(" and (").append(key).append(" like '%").append(value).append("%' "); + String s = ElogSeviceUtils.checkValSql(next.getValue().toString()); + sb.append(matchOperatetype(s)).append(")"); + } else { + if (value.startsWith("_")) { + value = value.replace("_", "\\_"); + } + sb.append(" and ").append(key).append(" like '%").append(value).append("%' "); + } + } + + } + } + } + return sb.toString(); + } + + /** + * 是否模糊搜索 + * @param showColumns + * @param key + * @return + */ + private boolean isLikeSearch(List showColumns, String key) { + for (ShowColumsDto showColumn : showColumns) { + if (key.equalsIgnoreCase(showColumn.getColumIndex()) && showColumn.isTransfLanguage()) { + return true; + } + } + return false; + } + + private String getSwithDatabaseDate(String date) { + SecurityUtil.ecodeForSql(date); + if (ElogConsts.ORACLE.equals(DatabaseUtil.getDatabaseId())) { + return " to_date('"+date+"','yyyy-mm-dd hh24:mi:ss') "; + } else if (ElogConsts.POSTGRESQL.equals(DatabaseUtil.getDatabaseId())) { + return " to_timestamp('"+date+"', 'YYYY-MM-DD HH24:MI:SS') "; + } else if (ElogConsts.SQLSERVER.equals(DatabaseUtil.getDatabaseId())) { + return " convert(nvarchar(19),'"+date+"',120) "; + } else { + return " DATE_FORMAT('"+date+"','%Y-%m-%d %H:%i:%s') "; + } + } + + public String matchOperatetype(String str) { + if (ElogSeviceUtils.currentLanguage() != 8) { + return ""; + } + List list = new ArrayList(); + list.add(OperateType.add); + list.add(OperateType.update); + list.add(OperateType.view); + list.add(OperateType.delete); + + StringBuffer sb = new StringBuffer(); + for (String o : list) { + if (o.toLowerCase().contains(str.toLowerCase())) { + sb.append("'").append(o).append("',"); + } + } + if ("new".toLowerCase().contains(str.toLowerCase())) { + sb.append("'add',"); + } + String sql = ""; + if (sb.length() > 0) { + sql = sb.toString().substring(0, sb.length() - 1); + sql = "or operatetype in (" + sql + ")"; + } + + return sql; + + } + + + public static boolean isEnglish(String charaString) { + return charaString.matches("^[a-zA-Z]*"); + + } + + /** + * 获取搜索条件 + * + * @param filterConditionDtos + * @return + */ + private String getQueryCondition(List filterConditionDtos) { + StringBuffer sb = new StringBuffer(); + if (filterConditionDtos != null && filterConditionDtos.size() > 0) { + for (FilterConditionDto filterConditionDto : filterConditionDtos) { + if (StringUtils.isNotBlank(filterConditionDto.getColumIndex())) { + sb.append(getsql(filterConditionDto)); + } + } + } + return sb.toString(); + } + + /** + * 拼接sql + * + * @param filterConditionDto + * @return + */ + private String getsql(FilterConditionDto filterConditionDto) { + StringBuffer sb = new StringBuffer(); + /* if (StringUtils.isNotBlank(filterConditionDto.getSql())) { + sb.append(" ").append(filterConditionDto.getSql()).append(" "); + return sb.toString(); + }*/ + SecurityUtil.sqlCheck(filterConditionDto.getColumIndex()); + filterConditionDto.setConnectCondition(ElogSeviceUtils.checkConditionSql(filterConditionDto.getConnectCondition())); + filterConditionDto.setType(ElogSeviceUtils.checkTypeSql(filterConditionDto.getType())); + filterConditionDto.setValue(ElogSeviceUtils.checkValSql(filterConditionDto.getValue())); + switchDatabaseFieldIndex(filterConditionDto); + if ("LIKE".equalsIgnoreCase(filterConditionDto.getType())) { + if (filterConditionDto.getLike() != null) { + sb.append(" "). + append(getConnectCondition(filterConditionDto.getConnectCondition())). + append(" "). + append(filterConditionDto.getColumIndex()). + append(" "). + append(getQueryType(filterConditionDto.getType())). + append(" '"). + append(filterConditionDto.getLike().getPrefix() != null ? filterConditionDto.getLike().getPrefix() : ""). + append(filterConditionDto.getValue()). + append(filterConditionDto.getLike().getSuffix() != null ? filterConditionDto.getLike().getSuffix() : ""). + append("' "); + } + } else if ("IN".equalsIgnoreCase(filterConditionDto.getType())) { + String[] split = filterConditionDto.getValue().split("\",\""); + if (split.length > 0) { + StringBuffer str = new StringBuffer("("); + String value = ""; + if ("targetid".equals(filterConditionDto.getColumIndex()) || "log_operator".equals(filterConditionDto.getColumIndex())) { + List list = JSONArray.parseArray(filterConditionDto.getValue(), String.class); + for (String s : list) { + str.append(s).append(","); + } + } else { + List list = JSONArray.parseArray(filterConditionDto.getValue(), String.class); + for (String s : list) { + str.append("'").append(s).append("',"); + } + } + + value = str.toString().substring(0, str.length() - 1); + value += ")"; + switchDatabaseFieldIndex(filterConditionDto); + sb.append(" "). + append(getConnectCondition(filterConditionDto.getConnectCondition())). + append(" "). + append(filterConditionDto.getColumIndex()). + append(" "). + append(getQueryType(filterConditionDto.getType())). + append(value). + append(" "); + + } else if (split.length == 0) { + sb.append(" "). + append(getConnectCondition(filterConditionDto.getConnectCondition())). + append(" "). + append(filterConditionDto.getColumIndex()). + append(" "). + append(getQueryType(filterConditionDto.getType())). + append(" ('"). + append(filterConditionDto.getValue()). + append("') "); + } + } else if ("IS NULL".equalsIgnoreCase(filterConditionDto.getType()) || "IS NOT NULL".equalsIgnoreCase(filterConditionDto.getType())) { + sb.append(" "). + append(getConnectCondition(filterConditionDto.getConnectCondition())). + append(" "). + append(filterConditionDto.getColumIndex()). + append(" "). + append(getQueryType(filterConditionDto.getType())). + append(" "); + } else if ("BETWEEN".equalsIgnoreCase(filterConditionDto.getType())) { + String[] split = filterConditionDto.getValue().split("\",\""); + StringBuffer stringBuffer = new StringBuffer(); + if (split.length > 0) { + List list = JSONArray.parseArray(filterConditionDto.getValue(), String.class); + String str = ""; + for (String s : list) { + stringBuffer.append(" '").append(s).append("' AND"); + } + str = stringBuffer.toString().substring(0, stringBuffer.length() - 3); + sb.append(" "). + append(getConnectCondition(filterConditionDto.getConnectCondition())). + append(" "). + append(filterConditionDto.getColumIndex()). + append(" "). + append(getQueryType(filterConditionDto.getType())). + append(str). + append(" "); + } else if (split.length == 0) { + sb.append(" "). + append(getConnectCondition(filterConditionDto.getConnectCondition())). + append(" "). + append(filterConditionDto.getColumIndex()). + append(" "). + append(getQueryType(filterConditionDto.getType())). + append(" '"). + append(filterConditionDto.getValue()). + append("' "); + } + } else { + if ("targetid".equals(filterConditionDto.getColumIndex()) || "log_operator".equals(filterConditionDto.getColumIndex())) { + if (StringUtils.isNotBlank(filterConditionDto.getValue())) { + sb.append(" "). + append(getConnectCondition(filterConditionDto.getConnectCondition())). + append(" "). + append(filterConditionDto.getColumIndex()). + append(" "). + append(getQueryType(filterConditionDto.getType())). + append(" "). + append(filterConditionDto.getValue()). + append(" "); + } else { + sb.append(" "). + append(getConnectCondition(filterConditionDto.getConnectCondition())). + append(" "). + append(filterConditionDto.getColumIndex()). + append(" "). + append(getQueryType(filterConditionDto.getType())). + append(" "). + append(-1). + append(" "); + } + } else { + sb.append(" "). + append(getConnectCondition(filterConditionDto.getConnectCondition())). + append(" "). + append(filterConditionDto.getColumIndex()). + append(" "). + append(getQueryType(filterConditionDto.getType())). + append(" '"). + append(filterConditionDto.getValue()). + append("' "); + } + + } + return sb.toString(); + } + + private void switchDatabaseFieldIndex(FilterConditionDto filterConditionDto) { + if ("operator".equalsIgnoreCase(filterConditionDto.getColumIndex())) { + filterConditionDto.setColumIndex("log_operator"); + } else if ("date".equalsIgnoreCase(filterConditionDto.getColumIndex())) { + filterConditionDto.setColumIndex("log_date"); + } else if ("result".equalsIgnoreCase(filterConditionDto.getColumIndex())) { + filterConditionDto.setColumIndex("log_result"); + } + } + + + /** + * 获取查询类型 + * + * @param type + * @return + */ + private String getQueryType(String type) { + //如果不填默认是= + if (StringUtils.isBlank(type)) { + return " = "; + } + return type; + } + + /** + * 获取连接条件 + * + * @param connectCondition + * @return + */ + private String getConnectCondition(String connectCondition) { + //如果不填默认是AND + if (StringUtils.isBlank(connectCondition)) { + return " AND "; + } + return connectCondition; + } + + @Override + public List> getDetailChanges(String module, String function, String mainid, String detailTransMethod) { + List> list = getDetailChangesMethod(module, function, mainid, detailTransMethod, null); + return list; + + } + + /** + * 明细分页查询 + * @param module + * @param function + * @param mainid + * @param detailTransMethod + * @param current + * @param pageSize + * @return + */ + @Override + public WeaTable getDetailChangePages(String module, String function, String mainid, String detailTransMethod, String current, String pageSize) { + + Integer pageNum = Util.getIntValue(current, 1); + Integer size = Util.getIntValue(pageSize, 10); + Page page = new Page(pageNum,size); + + List> list = getDetailChangesMethod(module, function, mainid, null, page); + + //查询分页总数 + String tableName = ElogSeviceUtils.getTableName(module, function, true); + Integer total = localElogDaoMapper.queryAllChangesPageCounts(tableName, mainid); + page.setTotal(total); + WeaTable weaTable =new WeaTable(); + weaTable.setColumns(getDetailColumns(list)); + weaTable.setPage(page); + weaTable.setData(list); + + if (Util.isNotEmpty(detailTransMethod)) { + // 消费到消息,通过MethodHandler调用对应的方法 + MethodHandler methodHandler = ElogMethodHandler.loadMethodHandler(detailTransMethod); + if (methodHandler != null) { + try { + methodHandler.execute(weaTable); + } catch (Exception e) { + logger.error("转换出错:" + e); + } + } + } + return weaTable; + } + + private List getDetailColumns(List> list) { + + List columns = new ArrayList<>(); + if (Util.isNotEmpty(list)) { + List detailcontexts= (List) list.get(0).get("detailcontexts"); + if (Util.isNotEmpty(detailcontexts)) { + for (Map map : detailcontexts) { + WeaTableColumn weaTableColumn = new WeaTableColumn(); + // 列表属性名 + weaTableColumn.setDataIndex((String) map.get("fieldname")); + //显示名称 多语言转换 fieldnamelabelid + weaTableColumn.setTitle((String) map.get("fieldname")); + columns.add(weaTableColumn); + } + } + } + return columns; + } + + public List> getDetailChangesMethod(String module, String function, String mainid, String detailTransMethod,Page page) { + + List list = new ArrayList<>(); + String tableName = ElogSeviceUtils.getTableName(module, function, true); + String maintableName = ElogSeviceUtils.getTableName(module, function, false); + List maps = localElogDaoMapper.queryAllMainData(maintableName, mainid); + + for (Map map : maps) { + + if (map.get("params") != null && ElogConsts.ES.equalsIgnoreCase(map.get("params").toString())) { + + String logDate = map.get("log_date").toString(); + logger.info("logDate:{}" ,logDate); + String esDate = logDate.substring(0, 10); + //先判断表存不存在,不存在创建 + if (checkEsTableIsExist(esDate)) { + // 根据id通过es查询大字段(params)然后赋值 + SearchRequest searchRequest = new SearchRequest(getElogESTableName(true,esDate)); + + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + // 只获取指定字段 + String[] fields = {"params"}; + searchSourceBuilder.fetchSource(fields, null); + // 根据id匹配 + searchSourceBuilder.query(QueryBuilders.termQuery("id",map.get("id").toString())); + searchRequest.source(searchSourceBuilder); + + SearchResponse searchResponse = null; + try { + searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); + } catch (IOException e) { + logger.info("查询ES出现异常:{}",e.getMessage()); + } + + SearchHits hits = searchResponse.getHits(); + SearchHit[] searchHits = hits.getHits(); + if (searchHits != null && searchHits.length > 0) { + // 根据id匹配唯一,所以直接取第一个 + Map sourceAsMap = searchHits[0].getSourceAsMap(); + if (Objects.nonNull(sourceAsMap) && Objects.nonNull(sourceAsMap.get("params")) && StringUtils.isNotEmpty(sourceAsMap.get("params").toString())) { + logger.info("ES查出来的params:{}",sourceAsMap.get("params")); + map.put("params",sourceAsMap.get("params")); + } + } + } + } + if (map.get("params") != null && map.get("params").toString().startsWith("H4s")) { + map.put("params", ElogSeviceUtils.uncompress(map.get("params").toString())); + map.put("params",SecurityUtil.encodeForHtml(map.get("params").toString(), true)); + } + } + + maps = ElogSeviceSwitchUtils.getSwitchDatabaseData(maps); + ElogSeviceSwitchUtils.changKey2Lower(maps); + List allChangesData = new ArrayList<>(); + //如果有分页数据则走分页方法 + if (Objects.nonNull(page) ) { +// Integer offset = (pageNum - 1) * size; + //分页查询明细数据 + allChangesData = localElogDaoMapper.queryAllChangesDataPages(tableName, mainid, page); + } else { + //没有被则不分页 + allChangesData = localElogDaoMapper.queryAllChangesData(tableName, mainid); + } + ElogSeviceSwitchUtils.changKey2Lower(allChangesData); + allChangesData = ElogSeviceSwitchUtils.getSwitchDatabaseData(allChangesData); + List mainlist = new ArrayList<>(); + List detaillist = new ArrayList<>(); + if (allChangesData != null && allChangesData.size() > 0) { + for (Map allChangesDatum : allChangesData) { + Object o = allChangesDatum.get("isdetail"); + if (o != null) { + if ("0".equals(o.toString())) { + mainlist.add(allChangesDatum); + } else { + detaillist.add(allChangesDatum); + } + } + } + } +// List mainlist = localElogDaoMapper.queryAllMainChanges(tableName, mainid); +// List detaillist = localElogDaoMapper.queryAllDetailChanges(tableName, mainid); + //List moduleInfo = queryCommonTabeMapper.queryModuleNameInfo(module); + List moduleInfo = new ArrayList<>(); + processDetailInfo(mainlist, detaillist, moduleInfo); + Map map = ElogSeviceSwitchUtils.switchChangeValue(mainlist, maps); + Map detailMap = ElogSeviceSwitchUtils.switchDetailChangeValue(detaillist); + map.putAll(detailMap); + if (maps != null && maps.size() > 0) { + Map maininfoMap = maps.get(0); + String operatetypename = (String)maininfoMap.get("operatetypename"); + String targetname = (String)maininfoMap.get("targetname"); + //长度大于1避免部分模块为1,2,3这类的操作类型 + if (StringUtils.isNumeric(operatetypename) && operatetypename.length() > 1 && operatetypename.length() < 10) { + String transfOperatetypename = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(operatetypename), operatetypename); + maininfoMap.put("operatetypename",transfOperatetypename); + } + if (StringUtils.isNumeric(targetname) && targetname.length() > 1 && targetname.length() < 10) { + String transfTargetname = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(targetname), targetname); + maininfoMap.put("targetname",transfTargetname); + } + map.put("maininfo",maininfoMap); + + map.put("detailtitle", ""); + } + + list.add(map); + if (Util.isNotEmpty(detailTransMethod)) { + // 消费到消息,通过MethodHandler调用对应的方法 + MethodHandler methodHandler = ElogMethodHandler.loadMethodHandler(detailTransMethod); + if (methodHandler != null) { + try { + methodHandler.execute(list); + } catch (Exception e) { + logger.error("转换出错:" + e); + } + } + } + //List transfLanguageData = ElogSeviceSwitchUtils.transfLanguageData(list); + return list; + + } + + /** + * 处理修改详情转多语言(主表和明细表) + * + * @param mainlist + * @param detaillist + * @param commonTableInfo + * @return + */ + private void processDetailInfo(List mainlist, List detaillist, List commonTableInfo) { + Map tablenameMap = new HashMap<>(); + Map fieldnameMap = new HashMap<>(); + Map valueMap = new HashMap<>(); + + if (commonTableInfo != null && commonTableInfo.size() > 0) { + for (Map commonTableInfoMap : commonTableInfo) { + JSONObject commonTableInfoMapJs = JSONObject.parseObject(JSONObject.toJSONString(commonTableInfoMap)); + String tablename = commonTableInfoMapJs.getString("table_name"); + String tablename_labelid = commonTableInfoMapJs.getString("tablename_labelid"); + String fieldname = commonTableInfoMapJs.getString("field_name"); + String fieldname_labelid = commonTableInfoMapJs.getString("fieldname_labelid"); + String values_kvpairs = commonTableInfoMapJs.getString("values_kvpairs"); + fieldnameMap.put(fieldname, fieldname_labelid); + if (StringUtils.isNotBlank(fieldname) && StringUtils.isNotBlank(values_kvpairs)) { + JSONObject jsonObject = JSONObject.parseObject(values_kvpairs); + valueMap.put(fieldname, jsonObject); + } + Object tablenameObj = tablenameMap.get(tablename); + if (tablenameObj == null) { + tablenameMap.put(tablename, tablename_labelid); + } + } + } + + + if (mainlist != null && mainlist.size() > 0 && fieldnameMap.size() > 0 && valueMap.size() > 0) { + for (Map mainlistMap : mainlist) { + JSONObject mainMapJs = JSONObject.parseObject(JSONObject.toJSONString(mainlistMap)); + String fielddesc = mainMapJs.getString("fielddesc"); + String oldvalue = mainMapJs.getString("oldvalue"); + String newvalue = mainMapJs.getString("newvalue"); + if (fieldnameMap.get(fielddesc) != null) { + mainlistMap.put("fielddesc", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(fieldnameMap.get(fielddesc).toString()), fieldnameMap.get(fielddesc).toString())); + } + if (valueMap.get(fielddesc) != null) { + JSONObject jsonObject = JSONObject.parseObject(valueMap.get(fielddesc).toString()); + String oldvalueStr = jsonObject.getString(oldvalue); + String newvalueStr = jsonObject.getString(newvalue); + if (StringUtils.isNotBlank(oldvalueStr)) { + mainlistMap.put("oldvalue", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(oldvalueStr), oldvalue)); + } + if (StringUtils.isNotBlank(newvalueStr)) { + mainlistMap.put("newvalue", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(newvalueStr), newvalue)); + } + } + } + } + + if (detaillist != null && detaillist.size() > 0 && fieldnameMap.size() > 0 && valueMap.size() > 0) { + for (Map detaillistMap : detaillist) { + JSONObject mainMapJs = JSONObject.parseObject(JSONObject.toJSONString(detaillistMap)); + String tablename = mainMapJs.getString("tablename"); + String fielddesc = mainMapJs.getString("fielddesc"); + String oldvalue = mainMapJs.getString("oldvalue"); + String newvalue = mainMapJs.getString("newvalue"); + if (tablenameMap.get(tablename) != null) { + detaillistMap.put("tablename", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(tablenameMap.get(tablename).toString()), tablenameMap.get(tablename).toString())); + } + if (fieldnameMap.get(fielddesc) != null) { + detaillistMap.put("fielddesc", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(fieldnameMap.get(fielddesc).toString()), fieldnameMap.get(fielddesc).toString())); + } + if (valueMap.get(fielddesc) != null) { + JSONObject jsonObject = JSONObject.parseObject(valueMap.get(fielddesc).toString()); + String oldvalueStr = jsonObject.getString(oldvalue); + String newvalueStr = jsonObject.getString(newvalue); + if (StringUtils.isNotBlank(oldvalueStr)) { + detaillistMap.put("oldvalue", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(oldvalueStr), oldvalue)); + } + if (StringUtils.isNotBlank(newvalueStr)) { + detaillistMap.put("newvalue", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(newvalueStr), newvalue)); + } + } + } + } + + } + + @Override + public List queryLogList(String module, String function, String current, String pageSize, String condition) { + LoggerContext context = new LoggerContext(); + context.setModuleName(module); + context.setFunctionName(function); + int pagenum = Util.getIntValue(current, 1) - 1; + int size = Util.getIntValue(pageSize, 10); + int start = pagenum * size; + int end = start + size; + Page page = new Page(pagenum, size); + String limit = " limit " + start + "," + (end - start); + + String tableName = ElogSeviceUtils.getTableName(module, function); + List list = localElogDaoMapper.queryElogList(page, context, null, tableName, null,"*"); + list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list); + return switchString(list); + } + + @Override + public List queryCardLogList(String data) { + JSONObject map = JSONObject.parseObject(data); + String module = ""; + String function = ""; + String pageNum = ""; + String pageSize = ""; + String dataset = ""; + String searchMap = ""; + String sColum = ""; + String fColum = ""; + String transMethod = null; + List showColums = new ArrayList<>(); + List filterConditionDtos = new ArrayList<>(); + String authParams = ""; + Map jsonObject = new HashMap(); + if (map != null) { + module = map.getString("module"); + function = map.getString("function"); + pageNum = map.getString("pageNum"); + pageSize = map.getString("pageSize"); + //dataset = map.get("dataset").toString(); + searchMap = map.getString("searchMap"); + sColum = map.getString("showColums"); + showColums = JSONArray.parseArray(sColum, ShowColumsDto.class); + fColum = map.getString("filterConditions"); + transMethod = map.getString("transMethod"); + filterConditionDtos = JSONArray.parseArray(fColum, FilterConditionDto.class); + authParams = map.getString("authParams"); + jsonObject = JSONObject.parseObject(authParams); + } + LoggerContext context = new LoggerContext(); + context.setModuleName(module); + context.setFunctionName(function); + context.setTenant_key(getTenantKey().toLowerCase()); + // 分页 + //Page pages = ElogSeviceUtils.getPage(); + String sb = getQueryCondition(filterConditionDtos); + logger.info("elog查询条件拼接sql:{}", sb); + // 消费到消息,通过MethodHandler调用对应的方法 + //String targetid = getTargetid(filterConditionDtos); + Map customAuthMap = getCustomAuthSql(transMethod, jsonObject, "auth"); + if (!customAuthMap.isEmpty()) { + Object flag = customAuthMap.get("flag"); + if (flag != null && flag instanceof Boolean) { + boolean f = (boolean) flag; + if (!f) { + List list = new ArrayList<>(); + list.add(customAuthMap); + return list; + } + } + } + String customSql = getCustomSql(transMethod, sb, "before"); + + Page pages = new Page(ElogSeviceUtils.getIntValue(pageNum, 1), ElogSeviceUtils.getIntValue(pageSize, 10)); + int page = Util.getIntValue(pages.getCurrent() + "", 1) - 1; + int size = Util.getIntValue(pages.getSize() + "", 10); + int start = page * size; + int end = start + size; + String limit = " limit " + start + "," + (end - start); + String tableName = ElogSeviceUtils.getTableName(module, function); + long l = System.currentTimeMillis(); + Map hashMap = addPermissionHandler(transMethod); + String permissionId = ""; + String permissionType = ""; + String mainDataTableAlias = ""; + String mainDataTable = ""; + String primaryKey = ""; + String permissionTargetId = ""; + String permissionConfigSourceId = ""; + + permissionId = getPermissionStr(hashMap, "permissionId"); + permissionType = getPermissionStr(hashMap, "permissionType"); + mainDataTableAlias = getPermissionStr(hashMap, "mainDataTableAlias"); + mainDataTable = getPermissionStr(hashMap, "mainDataTable"); + primaryKey = getPermissionStr(hashMap, "primaryKey"); + permissionTargetId = getPermissionStr(hashMap, "permissionTargetId"); + permissionConfigSourceId = getPermissionStr(hashMap, "permissionConfigSourceId"); + + //String columns = getshowColumsStr(showColums); + List list = new ArrayList<>(); + Map countMap = new HashMap<>(); + if (StringUtils.isNotEmpty(permissionId) || StringUtils.isNotEmpty(permissionType) || StringUtils.isNotEmpty(mainDataTableAlias) || StringUtils.isNotEmpty(mainDataTable) || StringUtils.isNotEmpty(permissionTargetId) || StringUtils.isNotEmpty(permissionConfigSourceId)) { + list = localElogDaoMapper.queryElogList(pages, context, null, tableName, customSql, mainDataTable, permissionId, permissionType, mainDataTableAlias, primaryKey,permissionTargetId,permissionConfigSourceId,"*"); + countMap = localElogDaoMapper.elogCountByMorePermission(context, tableName, customSql, mainDataTable, permissionId, permissionType, mainDataTableAlias, primaryKey, permissionTargetId,permissionConfigSourceId); + } else { + list = localElogDaoMapper.queryElogList(pages, context, null, tableName, customSql,"*"); + long l1 = System.currentTimeMillis(); + logger.info("elog查询列表耗时:{}", (l1 - l)); + countMap = localElogDaoMapper.elogCount(context, tableName, customSql); + long l2 = System.currentTimeMillis(); + logger.info("elog查询总数耗时:{}", (l2 - l1)); + } + list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list); + + if (list != null && list.size() > 0) { + //if ("1".equals(pageNum)){ + list.get(0).put("total", ElogSeviceUtils.getLongValue(countMap.get("counts") + "", 0)); + //} + } + transUserInfo(list); + long l3 = System.currentTimeMillis(); + //System.out.println("elog查询名称和头像耗时:{}"+ (l3-l2)); + transfLanguageData(list, showColums); + if (Util.isNotEmpty(transMethod)) { + // 消费到消息,通过MethodHandler调用对应的方法 + MethodHandler methodHandler = ElogMethodHandler.loadMethodHandler(transMethod); + if (methodHandler != null) { + try { + methodHandler.execute(list); + } catch (Exception e) { + logger.error("转换出错:" + e); + } + } + + } + long l4 = System.currentTimeMillis(); + logger.info("elog查询转换耗时:{}", (l4 - l3)); + List res = switchString(list); + logger.info("elog查询总耗时:{}", (l4 - l)); + return res; + } + + /** + * 转换数据成多语言,结合前端转 + * + * @param lists + * @param showColums + */ + public static List transfLanguageData(List lists, List showColums) { + if (lists != null && lists.size() > 0) { + for (Map map : lists) { + if (map != null) { + Iterator> iterator = map.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + for (ShowColumsDto showColum : showColums) { + if (StringUtils.isNotBlank(showColum.getColumIndex()) && showColum.isTransfLanguage() && entry.getKey().equals(showColum.getColumIndex()) && !Objects.isNull(entry.getValue()) && StringUtils.isNumeric(entry.getValue().toString())) { + if (entry.getValue() instanceof Integer || entry.getValue() instanceof Long || entry.getValue() instanceof String) { + map.put(entry.getKey(), ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(entry.getValue().toString()), entry.getValue().toString())); + } else { + //map.put(entry.getKey(), ElogSeviceSwitchUtils.handlerBaseDataMethod(entry.getValue().toString())); + map.put(entry.getKey(), entry.getValue()); + } + } else if (StringUtils.isNotBlank(showColum.getColumIndex()) && showColum.isTransfLanguage() && entry.getKey().equals(showColum.getColumIndex()) && !Objects.isNull(entry.getValue())) { + //read view add edit update delete + if ("add".equals(entry.getValue().toString()) || "创建".equals(entry.getValue().toString())) { + map.put(entry.getKey(), SystemEnv.getHtmlLabelName(63252, "新增")); + } else if ("read".equals(entry.getValue().toString()) || "view".equals(entry.getValue().toString()) || "查看".equals(entry.getValue().toString())) { + map.put(entry.getKey(), SystemEnv.getHtmlLabelName(55172, "查看")); + } else if ("edit".equals(entry.getValue().toString()) || "update".equals(entry.getValue().toString()) || "更新".equals(entry.getValue().toString())) { + map.put(entry.getKey(), SystemEnv.getHtmlLabelName(63253, "修改")); + } else if ("delete".equals(entry.getValue().toString()) || "删除".equals(entry.getValue().toString()) ) { + map.put(entry.getKey(), SystemEnv.getHtmlLabelName(63254, "删除")); + } else if (entry.getValue().toString().contains("取消关联标签 ")) { + String val = entry.getValue().toString().replace("取消关联标签 ", SystemEnv.getHtmlLabelName(83237, "取消关联标签 ") + " "); + map.put(entry.getKey(), val); + } else if (entry.getValue().toString().contains("关联标签 ")) { + String val = entry.getValue().toString().replace("关联标签 ", SystemEnv.getHtmlLabelName(83236, "关联标签 ") + " "); + map.put(entry.getKey(), val); + } + } + } + } + } + } + } + return lists; + } + + + @Override + public Map countLog(String module, String function) { + LoggerContext context = new LoggerContext(); + context.setModuleName(module); + context.setFunctionName(function); + context.setTenant_key(getTenantKey()); + String tableName = ElogSeviceUtils.getTableName(module, function); + return localElogDaoMapper.elogCount(context, tableName, null); + } + + @Override + public List queryDetailLogList(String module, String function, String current, String pageSize, String condition, String mainId) { + LoggerContext context = new LoggerContext(); + context.setModuleName(module); + context.setFunctionName(function); + context.setTenant_key(getTenantKey()); + context.setUuid(mainId); + int page = Util.getIntValue(current, 1) - 1; + int size = Util.getIntValue(pageSize, 10); + int start = page * size; + int end = start + size; + String limit = " limit " + start + "," + (end - start); + // 还需要支持下查询 + String tableName = ElogSeviceUtils.getTableName(module, function, true); + List list = localElogDaoMapper.queryDetailElogList(context, limit, tableName, null); + list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list); + return switchString(list); + } + + @Override + public Map countDestailLog(String module, String function, String mainId) { + LoggerContext context = new LoggerContext(); + context.setModuleName(module); + context.setFunctionName(function); + context.setTenant_key(getTenantKey()); + context.setUuid(mainId); + String tableName = ElogSeviceUtils.getTableName(module, function, true); + return localElogDaoMapper.elogDetailCount(context, tableName, null); + } + + @Override + public WeaTable queryElogTraceInfo(String traceId, String module, String function, Integer currentPage, Integer pageSize, String traceTransMethod) { + WeaTable weaTable = new WeaTable(); + if (StringUtils.isNotEmpty(traceId)) { + String tableName = ElogSeviceUtils.getTableName(module, function); + Integer offset = (currentPage - 1) * pageSize; + List list = localElogDaoMapper.queryElogTraceInfo(traceId, tableName, offset, pageSize); + for (Map map : list) { + if (map.get("modulename") != null) { + map.put("modulenamespan", ElogSeviceSwitchUtils.getModuleName(map.get("modulename").toString())); + } + } + //list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list); + int count = localElogDaoMapper.queryElogTraceInfoCount(traceId, tableName); + weaTable.setTotal(count); + Page page = new Page(); + page.setTotal(count); + page.setSize(pageSize); + page.setCurrent(currentPage); + weaTable.setPage(page); + if (Util.isNotEmpty(traceTransMethod)) { + // 消费到消息,通过MethodHandler调用对应的方法 + MethodHandler methodHandler = ElogMethodHandler.loadMethodHandler(traceTransMethod); + if (methodHandler != null) { + try { + methodHandler.execute(list); + } catch (Exception e) { + logger.error("转换出错:" + e); + } + } + } + weaTable.setData(list); + } + + return weaTable; + } + + @Override + public List queryLogInfoByCustom(String module, String function, String field, String value, boolean isDetail) { + List list = new ArrayList(); + String tableName = ElogSeviceUtils.getTableName(module, function, isDetail); + if (StringUtils.isNotBlank(field) && StringUtils.isNotBlank(value)) { + StringBuffer sql = new StringBuffer(); + sql.append(field).append(" = '").append(value).append("' "); + + list = localElogDaoMapper.queryLogInfoByCustom(tableName, sql.toString()); + } + return list; + } + + + @Override + public List queryLogInfoByCustom(String module, String function, String field, String value) { + return queryLogInfoByCustom(module, function, field, value, false); + } + + public List switchString(List list) { + if (list != null) { + return list.stream().map(m -> { + Set en = m.entrySet(); + for (Map.Entry entry : en) { + if (entry.getValue() != null) { + entry.setValue(String.valueOf(entry.getValue())); + } + } + return m; + }).collect(Collectors.toList()); + } else { + return list; + } + } + + @Override + public BatchDocumentMessage downloadLog(String data) { + JSONObject jsonObject = JSONObject.parseObject(data); + String module = jsonObject.getString("downloadmodule"); + String function = jsonObject.getString("function"); + String serviceName = jsonObject.getString("serviceName"); + String fileName = jsonObject.getString("fileName"); + String passWord = jsonObject.getString("passWord"); + + if (StringUtils.isEmpty(fileName)) { + fileName = SystemEnv.getHtmlLabelName(191432,"日志记录"); + } + + BatchDocumentMessage batchDocumentMessage = new BatchDocumentMessage(); + WeaTable weaTable = queryLogs(data); + List columns = weaTable.getColumns(); + List headers = new ArrayList<>(); + if (columns != null && !columns.isEmpty()) { + for (WeaTableColumn column : columns) { + Map header = new HashMap<>(); + header.put("key", column.getDataIndex()); + header.put("name", column.getTitle()); + headers.add(header); + } + } + List> dataList = weaTable.getData(); + List> maps = new ArrayList<>(); + if (dataList != null && !dataList.isEmpty()) { + dataList.stream().forEach(m -> { + Map map = new HashMap<>(); + headers.stream().forEach(h -> { + map.put(h.get("key").toString(), m.get(h.get("key"))); + }); + maps.add(map); + }); + } + + //必传--业务id + batchDocumentMessage.setBizId(IdGenerator.generate() + ""); + //必传-处理名称 + batchDocumentMessage.setHandlerName("ebatchdemo"); + //必传-服务名称 + batchDocumentMessage.setServiceName(serviceName); + //必传-数据类型 + batchDocumentMessage.setDataType(fileName); + //任务id + batchDocumentMessage.setBatchTaskId(IdGenerator.generate()); + //必传-模块 + batchDocumentMessage.setModule(module); //com.weaver.teams.domain.EntityType 中的module(没有的话需要找温明刚维护下) + //必传-功能 + batchDocumentMessage.setFunction(function); + //必传-eteamsid + batchDocumentMessage.setEteamsId(TenantRpcContext.getEteamsId()); + + //非必传 + if (StringUtils.isNotBlank(passWord)) { + batchDocumentMessage.setPassword(passWord); + } + + //必传 + BatchFile batchFile = new BatchFile(); + batchFile.setName(fileName); + //必传 + batchFile.setFileType(FileType.EXCEL); + //必传 + batchFile.setHandlerFileMethod(HandlerFileMethod.HANDLER_EXCEL_WITH_DATA); + batchFile.setTemplateId(1l); + List excelSheets = new ArrayList<>(); + ExcelSheet excelSheet = new ExcelSheet(); + + excelSheet.setHeader(headers); + excelSheet.setData(maps); + excelSheet.setName(fileName); + excelSheets.add(excelSheet); + batchFile.setExcelSheets(excelSheets); + batchDocumentMessage.setBatchFile(batchFile); + batchDocumentMessage.setChunk(false);//不分片 + batchExportSender.sendBatchExport(batchDocumentMessage); + + return batchDocumentMessage; + } + + public Boolean checkEsTableIsExist(String date) { + try { + String esMainIndex = getElogESTableName(true, date); + //先检查表是否存在 不存在则创建 + boolean existsLog = isExistsIndex(esMainIndex); + return existsLog; + } catch (Exception e) { + logger.info("创建相关ES表失败:{}", e.getMessage(), e); + } + return false; + } + + /** + * 判断一个索引是否存在 + * + * @param indexName + * @return + */ + public boolean isExistsIndex(String indexName) { + GetIndexRequest request = new GetIndexRequest(); + try { + boolean exists = restHighLevelClient.indices().exists(request.indices(indexName), RequestOptions.DEFAULT); + return exists; + } catch (Exception e) { + logger.info("判断索引是否存在出现异常:{}", e.getMessage()); + + } + return false; + } + + /** + * 创建主表语句 + * + * @throws IOException + */ + private void createLogIndex(String esMainIndex) { + // 1.创建Request对象 + CreateIndexRequest request = new CreateIndexRequest(esMainIndex); + // 2.准备请求的参数:DSL语句 + request.source(MAPPING_TEMPLATE, XContentType.JSON); + // 3.发送请求 + try { + restHighLevelClient.indices().create(request, RequestOptions.DEFAULT); + } catch (IOException e) { + logger.info("创建ES主表失败:{}", e.getMessage()); + + } + } + + private String getElogESTableName(boolean flag, String date) { + String currentDate = ""; + if (StringUtils.isEmpty(date)) { + currentDate = DateUtils.getCurrentDate().replaceAll("-", ""); + } else { + currentDate = date.replaceAll("-", ""); + } + return getEsMainIndex(flag, currentDate); + } + + private String getEsMainIndex(boolean flag, String date) { + if (flag) { + return ElogEsTableConsts.ELOG_CENTER_LOGS_ES + date; + } + return ElogEsTableConsts.ELOG_CENTER_LOGSDETAIL_ES + date; + } + + private String[] getESfields(String value) { + String[] split = value.split(","); + List list = new ArrayList<>(); + for (String s : split) { + switch (s.toLowerCase()) { + case "interfacename": + list.add("interfacename"); + break; + case "operatetype": + list.add("operatetype"); + break; + case "operatedesc": + list.add("operatedesc"); + break; + case "params": + list.add("params"); + break; + case "clientip": + list.add("clientip"); + break; + case "groupnamelabel": + list.add("groupnamelabel"); + break; + case "redoservice": + list.add("redoservice"); + break; + case "redocontext": + list.add("redocontext"); + break; + case "cancelservice": + list.add("cancelservice"); + break; + case "cancelcontext": + list.add("cancelcontext"); + break; + case "device": + list.add("device"); + break; + case "groupid": + list.add("groupid"); + break; + case "belongmainid": + list.add("belongmainid"); + break; + case "requesturl": + list.add("requesturl"); + break; + case "requesturi": + list.add("requesturi"); + break; + case "log_result": + list.add("logResult"); + break; + case "fromterminal": + list.add("fromterminal"); + break; + case "resultdesc": + list.add("resultdesc"); + break; + case "old_content": + list.add("oldContent"); + break; + case "link_type": + list.add("linkType"); + break; + } + } + //list转为数组 + if (list.size() > 0) { + String[] strings = list.toArray(new String[list.size()]); + return strings; + } + return null; + } + +} diff --git a/src/com/engine/salary/elog/util/ElogServiceUtils.java b/src/com/engine/salary/elog/util/ElogServiceUtils.java new file mode 100644 index 000000000..1e7428366 --- /dev/null +++ b/src/com/engine/salary/elog/util/ElogServiceUtils.java @@ -0,0 +1,92 @@ +package com.engine.salary.elog.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.salary.elog.dto.ElogBean; +import com.engine.salary.elog.dto.FilterConditionDto; +import com.engine.salary.elog.dto.ShowColumsDto; +import com.engine.salary.elog.enums.ElogConsts; + +import java.util.List; +import java.util.Map; + +/** + * @Date: 2022/5/18 19:19 + * @Author: deli.xu + * @Description: elog服务工具类 + **/ +public class ElogServiceUtils { + + public static String getTableName(String module, String function) { + return getTableName(module, function, false); + } + + public static String getTableName(String module, String function, boolean isDetail) { + String tablename = module + ElogConsts.TABLE_SPACER + function + ElogConsts.TABLE_SUFFIX + (isDetail ? ElogConsts.DETAIL_TABLE_SUFFIX : ""); + sqlCheck(tablename); + return tablename; + } + + public static void sqlCheck(String value) { + if (value != null) { + if (!value.matches("^[A-Za-z][a-zA-Z0-9_\\.,]{0,31}$")) { + throw new RuntimeException("sqlCheck failed ! value :" + value); + } + } + } + + public static ElogBean getElogBean(String data) { + JSONObject datas = JSONObject.parseObject(data); + ElogBean elogBean = new ElogBean(); + String module = datas.getString("module"); + String function = datas.getString("function"); + String pageNum = datas.getString("pageNum"); + String pageSize = datas.getString("pageSize"); + String searchMap = datas.getString("searchMap"); + String transMethod = datas.getString("transMethod"); + String authParams = datas.getString("authParams"); + String showColums = datas.getString("showColums"); + String filterConditions = datas.getString("filterConditions"); + String downloadSize = datas.getString("downloadSize"); + List showColumsDtos = JSONArray.parseArray(showColums, ShowColumsDto.class); + List filterConditionDtos = JSONArray.parseArray(filterConditions, FilterConditionDto.class); + Map authParamsJson = JSONObject.parseObject(authParams); + elogBean.setModule(module); + elogBean.setFunction(function); + elogBean.setPageNum(pageNum); + elogBean.setPageSize(pageSize); + elogBean.setSearchMap(searchMap); + elogBean.setTransMethod(transMethod); + elogBean.setDownloadSize(downloadSize); + elogBean.setShowColumns(showColumsDtos); + elogBean.setFilterConditionDtos(filterConditionDtos); + elogBean.setAuthParamsJson(authParamsJson); + return elogBean; + } + + public static int getIntValue(String v) { + return getIntValue(v, -1); + } + + public static int getIntValue(String v, int def) { + try { + return Integer.parseInt(v); + } catch (Exception var3) { + return def; + } + } + + public static long getLongValue(String v) { + return getLongValue(v, -1l); + } + + public static long getLongValue(String v, long def) { + try { + return Long.parseLong(v); + } catch (Exception var3) { + return def; + } + } + + +} diff --git a/src/com/engine/salary/elog/util/ElogSeviceSwitchUtils.java b/src/com/engine/salary/elog/util/ElogSeviceSwitchUtils.java new file mode 100644 index 000000000..f6d55aece --- /dev/null +++ b/src/com/engine/salary/elog/util/ElogSeviceSwitchUtils.java @@ -0,0 +1,1394 @@ +//package com.engine.salary.elog.util; +// +//import cn.hutool.core.map.CaseInsensitiveMap; +//import com.alibaba.druid.proxy.jdbc.ClobProxyImpl; +//import com.alibaba.fastjson.JSON; +//import com.alibaba.fastjson.JSONArray; +//import com.alibaba.fastjson.JSONObject; +//import com.weaver.common.component.table.WeaTable; +//import com.weaver.common.component.table.column.WeaTableColumn; +//import com.weaver.common.elog.annotation.OperateType; +//import com.weaver.common.elog.enums.ElogConsts; +//import com.weaver.common.i18n.label.SystemEnv; +//import com.weaver.common.mybatis.util.DatabaseUtil; +//import com.weaver.common.security.util.SecurityUtil; +//import org.apache.commons.lang3.StringUtils; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +// +//import java.sql.Clob; +//import java.util.*; +//import java.util.regex.Matcher; +//import java.util.regex.Pattern; +// +///** +// * @Date: 2022/5/18 19:34 +// * @Author: deli.xu +// * @Description: elog服务转换类 +// **/ +//public class ElogSeviceSwitchUtils { +// +// private static final Logger logger = LoggerFactory.getLogger(ElogSeviceSwitchUtils.class); +// // TODO 后续需要考虑多语言label写法 +// public static final Map moduleMap = new HashMap<>(); +// +// private static final Map> moduleFuctionMap = new HashMap<>(); +// +// static { +// /*moduleMap.put("elog", SystemEnv.getHtmlLabelName(62975, ElogSeviceUtils.currentLanguage(), "日志")); +// moduleMap.put("report", SystemEnv.getHtmlLabelName(62976, ElogSeviceUtils.currentLanguage(), "报表")); +// moduleMap.put("edc", SystemEnv.getHtmlLabelName(62977, ElogSeviceUtils.currentLanguage(), "数据中心")); +// moduleMap.put("hrm", SystemEnv.getHtmlLabelName(62978, ElogSeviceUtils.currentLanguage(), "人力资源")); +// moduleMap.put("crm", SystemEnv.getHtmlLabelName(62979, ElogSeviceUtils.currentLanguage(), "资产")); +// moduleMap.put("demo", SystemEnv.getHtmlLabelName(62980, ElogSeviceUtils.currentLanguage(), "示例")); +// moduleMap.put("attc", SystemEnv.getHtmlLabelName(62981, ElogSeviceUtils.currentLanguage(), "出勤打卡")); +// moduleMap.put("attm", SystemEnv.getHtmlLabelName(62982, ElogSeviceUtils.currentLanguage(), "出勤机")); +// moduleMap.put("attw", SystemEnv.getHtmlLabelName(62983, ElogSeviceUtils.currentLanguage(), "出勤报表")); +// moduleMap.put("auth", SystemEnv.getHtmlLabelName(62984, ElogSeviceUtils.currentLanguage(), "系统权限")); +// moduleMap.put("bank", SystemEnv.getHtmlLabelName(62985, ElogSeviceUtils.currentLanguage(), "银企直联")); +// moduleMap.put("bap", SystemEnv.getHtmlLabelName(62986, ElogSeviceUtils.currentLanguage(), "云办公")); +// moduleMap.put("base", SystemEnv.getHtmlLabelName(62987, ElogSeviceUtils.currentLanguage(), "应用管理")); +// moduleMap.put("batc", SystemEnv.getHtmlLabelName(62988, ElogSeviceUtils.currentLanguage(), "导入导出")); +// moduleMap.put("blog", SystemEnv.getHtmlLabelName(62989, ElogSeviceUtils.currentLanguage(), "日报微博")); +// moduleMap.put("cld", SystemEnv.getHtmlLabelName(62990, ElogSeviceUtils.currentLanguage(), "日程管理")); +// moduleMap.put("cmca", SystemEnv.getHtmlLabelName(62991, ElogSeviceUtils.currentLanguage(), "资金管理")); +// moduleMap.put("cmcl", SystemEnv.getHtmlLabelName(62992, ElogSeviceUtils.currentLanguage(), "线索管理")); +// moduleMap.put("cmco", SystemEnv.getHtmlLabelName(62993, ElogSeviceUtils.currentLanguage(), "联系人管理")); +// moduleMap.put("cmcp", SystemEnv.getHtmlLabelName(62994, ElogSeviceUtils.currentLanguage(), "对手管理")); +// moduleMap.put("cmcu", SystemEnv.getHtmlLabelName(62995, ElogSeviceUtils.currentLanguage(), "客户管理")); +// moduleMap.put("cmex", SystemEnv.getHtmlLabelName(62996, ElogSeviceUtils.currentLanguage(), "批量操作")); +// moduleMap.put("cmmk", SystemEnv.getHtmlLabelName(62997, ElogSeviceUtils.currentLanguage(), "营销管理")); +// moduleMap.put("cmor", SystemEnv.getHtmlLabelName(62998, ElogSeviceUtils.currentLanguage(), "订单管理")); +// moduleMap.put("cmpc", SystemEnv.getHtmlLabelName(62999, ElogSeviceUtils.currentLanguage(), "价格管理")); +// moduleMap.put("cmpr", SystemEnv.getHtmlLabelName(63000, ElogSeviceUtils.currentLanguage(), "产品管理")); +// moduleMap.put("cmpt", SystemEnv.getHtmlLabelName(63001, ElogSeviceUtils.currentLanguage(), "外部门户")); +// moduleMap.put("cmqu", SystemEnv.getHtmlLabelName(63002, ElogSeviceUtils.currentLanguage(), "报价管理")); +// moduleMap.put("cmsa", SystemEnv.getHtmlLabelName(63003, ElogSeviceUtils.currentLanguage(), "商机管理")); +// moduleMap.put("cmtr", SystemEnv.getHtmlLabelName(63004, ElogSeviceUtils.currentLanguage(), "合同管理")); +// moduleMap.put("comp", SystemEnv.getHtmlLabelName(63005, ElogSeviceUtils.currentLanguage(), "文档对比")); +// moduleMap.put("cs", SystemEnv.getHtmlLabelName(63006, ElogSeviceUtils.currentLanguage(), "云商店")); +// moduleMap.put("cowork", SystemEnv.getHtmlLabelName(63007, ElogSeviceUtils.currentLanguage(), "协作区")); +// moduleMap.put("dbs", SystemEnv.getHtmlLabelName(63008, ElogSeviceUtils.currentLanguage(), "文档公共模块")); +// moduleMap.put("dcad", SystemEnv.getHtmlLabelName(63009, ElogSeviceUtils.currentLanguage(), "数据中心运行")); +// moduleMap.put("dcap", SystemEnv.getHtmlLabelName(63010, ElogSeviceUtils.currentLanguage(), "数据中心分析开发配置")); +// moduleMap.put("dcrd", SystemEnv.getHtmlLabelName(63011, ElogSeviceUtils.currentLanguage(), "数据中心开发配置")); +// moduleMap.put("dcre", SystemEnv.getHtmlLabelName(63012, ElogSeviceUtils.currentLanguage(), "数据中心分析生产运行")); +// moduleMap.put("dcs", SystemEnv.getHtmlLabelName(63013, ElogSeviceUtils.currentLanguage(), "文档目录模块")); +// moduleMap.put("dds", SystemEnv.getHtmlLabelName(63014, ElogSeviceUtils.currentLanguage(), "文档模块")); +// moduleMap.put("dps", SystemEnv.getHtmlLabelName(63015, ElogSeviceUtils.currentLanguage(), "文档权限模块")); +// moduleMap.put("drle", SystemEnv.getHtmlLabelName(63016, ElogSeviceUtils.currentLanguage(), "数据规则库")); +// moduleMap.put("ds", SystemEnv.getHtmlLabelName(63017, ElogSeviceUtils.currentLanguage(), "数据安全")); +// moduleMap.put("dw_etl", SystemEnv.getHtmlLabelName(63018, ElogSeviceUtils.currentLanguage(), "ETL(抽取,转换,治理)")); +// moduleMap.put("dw_model", SystemEnv.getHtmlLabelName(63019, ElogSeviceUtils.currentLanguage(), "建模服务")); +// moduleMap.put("dw_process", SystemEnv.getHtmlLabelName(63020, ElogSeviceUtils.currentLanguage(), "计算服务")); +// moduleMap.put("dw_search", SystemEnv.getHtmlLabelName(63021, ElogSeviceUtils.currentLanguage(), "查询服务")); +// moduleMap.put("dw_sync", SystemEnv.getHtmlLabelName(63022, ElogSeviceUtils.currentLanguage(), "数据抽取")); +// moduleMap.put("eb", SystemEnv.getHtmlLabelName(63023, ElogSeviceUtils.currentLanguage(), "云桥")); +// moduleMap.put("ebda", SystemEnv.getHtmlLabelName(62987, ElogSeviceUtils.currentLanguage(), "应用管理")); +// moduleMap.put("ebdd", SystemEnv.getHtmlLabelName(63024, ElogSeviceUtils.currentLanguage(), "页面设计")); +// moduleMap.put("ebdf", SystemEnv.getHtmlLabelName(63025, ElogSeviceUtils.currentLanguage(), "表单服务")); +// moduleMap.put("ebdp", SystemEnv.getHtmlLabelName(63026, ElogSeviceUtils.currentLanguage(), "页面管理")); +// moduleMap.put("ecod", SystemEnv.getHtmlLabelName(63027, ElogSeviceUtils.currentLanguage(), "ecode")); +// moduleMap.put("ei", SystemEnv.getHtmlLabelName(63028, ElogSeviceUtils.currentLanguage(), "数据导出导入")); +// moduleMap.put("em", SystemEnv.getHtmlLabelName(63029, ElogSeviceUtils.currentLanguage(), "移动相关")); +// moduleMap.put("es", SystemEnv.getHtmlLabelName(63030, ElogSeviceUtils.currentLanguage(), "微搜搜索")); +// moduleMap.put("esa", SystemEnv.getHtmlLabelName(63031, ElogSeviceUtils.currentLanguage(), "微搜文件分析")); +// moduleMap.put("esb", SystemEnv.getHtmlLabelName(63032, ElogSeviceUtils.currentLanguage(), "ESB")); +// moduleMap.put("esch", SystemEnv.getHtmlLabelName(63033, ElogSeviceUtils.currentLanguage(), "计划任务")); +// moduleMap.put("esd", SystemEnv.getHtmlLabelName(63034, ElogSeviceUtils.currentLanguage(), "微搜索引数据")); +// moduleMap.put("exfo", SystemEnv.getHtmlLabelName(63035, ElogSeviceUtils.currentLanguage(), "excel函数引擎")); +// moduleMap.put("fbdg", SystemEnv.getHtmlLabelName(63036, ElogSeviceUtils.currentLanguage(), "预算编制")); +// moduleMap.put("fdt", SystemEnv.getHtmlLabelName(63037, ElogSeviceUtils.currentLanguage(), "表单数据")); +// moduleMap.put("fexs", SystemEnv.getHtmlLabelName(63038, ElogSeviceUtils.currentLanguage(), "费用管理")); +// moduleMap.put("file", SystemEnv.getHtmlLabelName(63039, ElogSeviceUtils.currentLanguage(), "文件服务")); +// moduleMap.put("finc", SystemEnv.getHtmlLabelName(63040, ElogSeviceUtils.currentLanguage(), "微报账")); +// moduleMap.put("fnar", SystemEnv.getHtmlLabelName(63041, ElogSeviceUtils.currentLanguage(), "财务报表")); +// moduleMap.put("fomo", SystemEnv.getHtmlLabelName(63042, ElogSeviceUtils.currentLanguage(), "表单监控")); +// moduleMap.put("form", SystemEnv.getHtmlLabelName(63043, ElogSeviceUtils.currentLanguage(), "表单服务")); +// moduleMap.put("frpt", SystemEnv.getHtmlLabelName(63043, ElogSeviceUtils.currentLanguage(), "业务表单")); +// moduleMap.put("fvou", SystemEnv.getHtmlLabelName(63044, ElogSeviceUtils.currentLanguage(), "凭证集成")); +// moduleMap.put("hp", SystemEnv.getHtmlLabelName(63045, ElogSeviceUtils.currentLanguage(), "门户")); +// moduleMap.put("hr", SystemEnv.getHtmlLabelName(63046, ElogSeviceUtils.currentLanguage(), "人事档案")); +// moduleMap.put("ic", SystemEnv.getHtmlLabelName(63047, ElogSeviceUtils.currentLanguage(), "集成服务")); +// moduleMap.put("il", SystemEnv.getHtmlLabelName(63048, ElogSeviceUtils.currentLanguage(), "集成登录")); +// moduleMap.put("im", SystemEnv.getHtmlLabelName(63049, ElogSeviceUtils.currentLanguage(), "IM相关服务")); +// moduleMap.put("inc", SystemEnv.getHtmlLabelName(63050, ElogSeviceUtils.currentLanguage(), "发票云服务")); +// moduleMap.put("iua", SystemEnv.getHtmlLabelName(63051, ElogSeviceUtils.currentLanguage(), "统一认证")); +// moduleMap.put("iut", SystemEnv.getHtmlLabelName(63052, ElogSeviceUtils.currentLanguage(), "统一待办")); +// moduleMap.put("mail", SystemEnv.getHtmlLabelName(63053, ElogSeviceUtils.currentLanguage(), "邮件服务")); +// moduleMap.put("mc", SystemEnv.getHtmlLabelName(63054, ElogSeviceUtils.currentLanguage(), "消息服务")); +// moduleMap.put("mt", SystemEnv.getHtmlLabelName(63055, ElogSeviceUtils.currentLanguage(), "会议管理")); +// moduleMap.put("my", SystemEnv.getHtmlLabelName(63056, ElogSeviceUtils.currentLanguage(), "关注&收藏&标签")); +// moduleMap.put("odoc", SystemEnv.getHtmlLabelName(63057, ElogSeviceUtils.currentLanguage(), "公文管理")); +// moduleMap.put("odoc_exchange", SystemEnv.getHtmlLabelName(63058, ElogSeviceUtils.currentLanguage(), "公文交换平台")); +// moduleMap.put("open", SystemEnv.getHtmlLabelName(63059, ElogSeviceUtils.currentLanguage(), "开放平台")); +// moduleMap.put("pr", SystemEnv.getHtmlLabelName(63060, ElogSeviceUtils.currentLanguage(), "工作画像")); +// moduleMap.put("proj", SystemEnv.getHtmlLabelName(63061, ElogSeviceUtils.currentLanguage(), "项目管理")); +// moduleMap.put("prt", SystemEnv.getHtmlLabelName(63062, ElogSeviceUtils.currentLanguage(), "打印服务")); +// moduleMap.put("pspt", SystemEnv.getHtmlLabelName(63063, ElogSeviceUtils.currentLanguage(), "系统登录")); +// moduleMap.put("rptc", SystemEnv.getHtmlLabelName(63064, ElogSeviceUtils.currentLanguage(), "数据协作")); +// moduleMap.put("rpts", SystemEnv.getHtmlLabelName(63065, ElogSeviceUtils.currentLanguage(), "上报调查")); +// moduleMap.put("sala", SystemEnv.getHtmlLabelName(63066, ElogSeviceUtils.currentLanguage(), "薪资管理")); +// moduleMap.put("sign", SystemEnv.getHtmlLabelName(63067, ElogSeviceUtils.currentLanguage(), "印控中心")); +// moduleMap.put("sms", SystemEnv.getHtmlLabelName(63068, ElogSeviceUtils.currentLanguage(), "短信")); +// moduleMap.put("task", SystemEnv.getHtmlLabelName(63069, ElogSeviceUtils.currentLanguage(), "任务管理")); +// moduleMap.put("tnt", SystemEnv.getHtmlLabelName(63070, ElogSeviceUtils.currentLanguage(), "租户管理")); +// moduleMap.put("wf", SystemEnv.getHtmlLabelName(63071, ElogSeviceUtils.currentLanguage(), "路径定义")); +// moduleMap.put("wfc", SystemEnv.getHtmlLabelName(63072, ElogSeviceUtils.currentLanguage(), "流程流转")); +// moduleMap.put("wfr", SystemEnv.getHtmlLabelName(63073, ElogSeviceUtils.currentLanguage(), "流程规则路由")); +// moduleMap.put("wrgm", SystemEnv.getHtmlLabelName(63074, ElogSeviceUtils.currentLanguage(), "目标管理")); +// moduleMap.put("wrgp", SystemEnv.getHtmlLabelName(63075, ElogSeviceUtils.currentLanguage(), "绩效考核")); +// moduleMap.put("wrpr", SystemEnv.getHtmlLabelName(63076, ElogSeviceUtils.currentLanguage(), "计划报告")); +// moduleMap.put("doc", SystemEnv.getHtmlLabelName(63077, ElogSeviceUtils.currentLanguage(), "文档服务")); +// moduleMap.put("placard", SystemEnv.getHtmlLabelName(63078, ElogSeviceUtils.currentLanguage(), "团队公告")); +// moduleMap.put("fna", SystemEnv.getHtmlLabelName(135042, ElogSeviceUtils.currentLanguage(), "云报销")); +// moduleMap.put("meeting", SystemEnv.getHtmlLabelName(63080, ElogSeviceUtils.currentLanguage(), "会议")); +// moduleMap.put("wfp", SystemEnv.getHtmlLabelName(63081, ElogSeviceUtils.currentLanguage(), "流程")); +// moduleMap.put("portal", SystemEnv.getHtmlLabelName(63045, ElogSeviceUtils.currentLanguage(), "门户")); +// moduleMap.put("workreport", SystemEnv.getHtmlLabelName(63082, ElogSeviceUtils.currentLanguage(), "工作报告")); +// moduleMap.put("goal", SystemEnv.getHtmlLabelName(63074, ElogSeviceUtils.currentLanguage(), "目标管理")); +// moduleMap.put("performance", SystemEnv.getHtmlLabelName(63075, ElogSeviceUtils.currentLanguage(), "绩效考核")); +// moduleMap.put("intlogin", SystemEnv.getHtmlLabelName(63083, ElogSeviceUtils.currentLanguage(), "集成登录设置")); +// moduleMap.put("i18n", SystemEnv.getHtmlLabelName(64559, ElogSeviceUtils.currentLanguage(), "国际化")); +// moduleMap.put("timecard", SystemEnv.getHtmlLabelName(63085, ElogSeviceUtils.currentLanguage(), "出勤")); +// moduleMap.put("market", SystemEnv.getHtmlLabelName(63086, ElogSeviceUtils.currentLanguage(), "营销")); +// moduleMap.put("excelformula", SystemEnv.getHtmlLabelName(64560, ElogSeviceUtils.currentLanguage(), "函数服务")); +// moduleMap.put("ic_ldap", SystemEnv.getHtmlLabelName(70081, ElogSeviceUtils.currentLanguage(), "Ldap集成")); +// moduleMap.put("iut_c_c", SystemEnv.getHtmlLabelName(70303, ElogSeviceUtils.currentLanguage(), "统一待办推送设置")); +// moduleMap.put("plan", SystemEnv.getHtmlLabelName(70303, ElogSeviceUtils.currentLanguage(), "计划报告")); +// moduleMap.put("document", SystemEnv.getHtmlLabelName(34218, ElogSeviceUtils.currentLanguage(), "文档")); +// moduleMap.put("taskCustStatus", SystemEnv.getHtmlLabelName(73988, ElogSeviceUtils.currentLanguage(), "任务状态")); +// moduleMap.put("project", SystemEnv.getHtmlLabelName(55158, ElogSeviceUtils.currentLanguage(), "项目")); +// moduleMap.put("calendar", SystemEnv.getHtmlLabelName(74186, ElogSeviceUtils.currentLanguage(), "日历")); +// moduleMap.put("web", SystemEnv.getHtmlLabelName(75598, ElogSeviceUtils.currentLanguage(), "浏览")); +// moduleMap.put("formdatareport", SystemEnv.getHtmlLabelName(76068, ElogSeviceUtils.currentLanguage(), "来自上报数据")); +// moduleMap.put("mainline", SystemEnv.getHtmlLabelName(31898, ElogSeviceUtils.currentLanguage(), "主线")); +// moduleMap.put("customer", SystemEnv.getHtmlLabelName(32726, ElogSeviceUtils.currentLanguage(), "客户")); +// moduleMap.put("contract", SystemEnv.getHtmlLabelName(32864, ElogSeviceUtils.currentLanguage(), "合同")); +// moduleMap.put("group", SystemEnv.getHtmlLabelName(19426, ElogSeviceUtils.currentLanguage(), "分组")); +// moduleMap.put("workflow", SystemEnv.getHtmlLabelName(81851, ElogSeviceUtils.currentLanguage(), "工作流程")); +// moduleMap.put("biaoge", SystemEnv.getHtmlLabelName(30919, ElogSeviceUtils.currentLanguage(), "表格")); +// moduleMap.put("clue", SystemEnv.getHtmlLabelName(28908, ElogSeviceUtils.currentLanguage(), "线索")); +// moduleMap.put("competitor", SystemEnv.getHtmlLabelName(81852, ElogSeviceUtils.currentLanguage(), "竞争对手")); +// moduleMap.put("kpiFlow", SystemEnv.getHtmlLabelName(81853, ElogSeviceUtils.currentLanguage(), "kpil流程")); +// moduleMap.put("mainlineCustStatus", SystemEnv.getHtmlLabelName(81854, ElogSeviceUtils.currentLanguage(), "主线客户状态")); +// moduleMap.put("marketactivity", SystemEnv.getHtmlLabelName(34221, ElogSeviceUtils.currentLanguage(), "市场活动")); +// moduleMap.put("mtPhase", SystemEnv.getHtmlLabelName(81855, ElogSeviceUtils.currentLanguage(), "mt阶段")); +// moduleMap.put("production", SystemEnv.getHtmlLabelName(29329, ElogSeviceUtils.currentLanguage(), "产品")); +// moduleMap.put("quote", SystemEnv.getHtmlLabelName(34231, ElogSeviceUtils.currentLanguage(), "报价")); +// moduleMap.put("saleChance", SystemEnv.getHtmlLabelName(32863, ElogSeviceUtils.currentLanguage(), "商机")); +// moduleMap.put("orderform", SystemEnv.getHtmlLabelName(34230, ElogSeviceUtils.currentLanguage(), "订单")); +// moduleMap.put("contact", SystemEnv.getHtmlLabelName(32711, ElogSeviceUtils.currentLanguage(), "联系人")); +// moduleMap.put("price", SystemEnv.getHtmlLabelName(31922, ElogSeviceUtils.currentLanguage(), "价格")); +// moduleMap.put("capital", SystemEnv.getHtmlLabelName(83428, ElogSeviceUtils.currentLanguage(), "资金")); +// moduleMap.put("ice", SystemEnv.getHtmlLabelName(94360, ElogSeviceUtils.currentLanguage(), "日程会议集成")); +// moduleMap.put("ic_hr", SystemEnv.getHtmlLabelName(84284, ElogSeviceUtils.currentLanguage(), "HR同步")); +// moduleMap.put("intunifyauth", SystemEnv.getHtmlLabelName(84467, ElogSeviceUtils.currentLanguage(), "统一认证接入管理")); +// moduleMap.put("signcenter", SystemEnv.getHtmlLabelName(84691, ElogSeviceUtils.currentLanguage(), "电子签")); +// moduleMap.put("iut_s_c", SystemEnv.getHtmlLabelName(91503, ElogSeviceUtils.currentLanguage(), "统一待办-异构系统")); +// moduleMap.put("iut_s_c1", SystemEnv.getHtmlLabelName(91503, ElogSeviceUtils.currentLanguage(), "统一待办-应用系统")); +// moduleMap.put("iut_s_c2", SystemEnv.getHtmlLabelName(91503, ElogSeviceUtils.currentLanguage(), "统一待办中心")); +// moduleMap.put("iut_s_c3", SystemEnv.getHtmlLabelName(91503, ElogSeviceUtils.currentLanguage(), "统一待办-应用系统-流程类型")); +// moduleMap.put("ic_mail", SystemEnv.getHtmlLabelName(100715, ElogSeviceUtils.currentLanguage(), "邮箱集成")); +// moduleMap.put("hrsa", SystemEnv.getHtmlLabelName(105038, ElogSeviceUtils.currentLanguage(), "薪酬管理")); +// moduleMap.put("icc", SystemEnv.getHtmlLabelName(113884, ElogSeviceUtils.currentLanguage(), "转换规则")); +// moduleMap.put("basicserver", SystemEnv.getHtmlLabelName(113885, ElogSeviceUtils.currentLanguage(), "整体基础")); +// moduleMap.put("dw", SystemEnv.getHtmlLabelName(115549, ElogSeviceUtils.currentLanguage(), "数据仓库")); +// moduleMap.put("msg", SystemEnv.getHtmlLabelName(115563, ElogSeviceUtils.currentLanguage(), "工作消息")); +// moduleMap.put("intunifybase", SystemEnv.getHtmlLabelName(115599, ElogSeviceUtils.currentLanguage(), "统一认证服务")); +// moduleMap.put("esearch", SystemEnv.getHtmlLabelName(21694, ElogSeviceUtils.currentLanguage(), "全文检索")); +// moduleMap.put("iaauthserver", SystemEnv.getHtmlLabelName(115603, ElogSeviceUtils.currentLanguage(), "统一认证注册应用")); +// moduleMap.put("excel", SystemEnv.getHtmlLabelName(115543, ElogSeviceUtils.currentLanguage(), "excel函数")); +// moduleMap.put("scene", SystemEnv.getHtmlLabelName(115539, ElogSeviceUtils.currentLanguage(), "绘图")); +// moduleMap.put("bcw", SystemEnv.getHtmlLabelName(115651, ElogSeviceUtils.currentLanguage(), "公共模块")); +// moduleMap.put("folder", SystemEnv.getHtmlLabelName(10734, ElogSeviceUtils.currentLanguage(), "文件夹")); +// moduleMap.put("pdfcnv", SystemEnv.getHtmlLabelName(115957, ElogSeviceUtils.currentLanguage(), "PDF转换服务")); +// moduleMap.put("ebform", SystemEnv.getHtmlLabelName(121462, ElogSeviceUtils.currentLanguage(), "e-Builder表单")); +// moduleMap.put("statistics", SystemEnv.getHtmlLabelName(17745, ElogSeviceUtils.currentLanguage(), "自定义统计")); +// moduleMap.put("edcapp", SystemEnv.getHtmlLabelName(121631, ElogSeviceUtils.currentLanguage(), "多级填报")); +// +// */ +// +// moduleMap.put("elog", 62975); +// moduleMap.put("report", 62976); +// moduleMap.put("edc", 52689); +// moduleMap.put("hrm", 62978); +// moduleMap.put("crm", 62979); +// moduleMap.put("demo", 62980); +// moduleMap.put("attc", 62981); +// moduleMap.put("attm", 62982); +// moduleMap.put("attw", 62983); +// moduleMap.put("auth", 62984); +// moduleMap.put("bank", 62985); +// moduleMap.put("bap", 62986); +// moduleMap.put("base", 62987); +// moduleMap.put("batc", 62988); +// moduleMap.put("blog", 62989); +// moduleMap.put("cld", 62990); +// moduleMap.put("cmca", 62991); +// moduleMap.put("cmcl", 62992); +// moduleMap.put("cmco", 62993); +// moduleMap.put("cmcp", 62994); +// moduleMap.put("cmcu", 62995); +// moduleMap.put("cmex", 62996); +// moduleMap.put("cmmk", 62997); +// moduleMap.put("cmor", 62998); +// moduleMap.put("cmpc", 62999); +// moduleMap.put("cmpr", 63000); +// moduleMap.put("cmpt", 63001); +// moduleMap.put("cmqu", 63002); +// moduleMap.put("cmsa", 63003); +// moduleMap.put("cmtr", 63004); +// moduleMap.put("comp", 63005); +// moduleMap.put("cs", 63006); +// moduleMap.put("cowork", 63007); +// moduleMap.put("dbs", 63008); +// moduleMap.put("dcad", 63009); +// moduleMap.put("dcap", 63010); +// moduleMap.put("dcrd", 63011); +// moduleMap.put("dcre", 63012); +// moduleMap.put("dcs", 63013); +// moduleMap.put("dds", 63014); +// moduleMap.put("dps", 63015); +// moduleMap.put("drle", 63016); +// moduleMap.put("ds", 63017); +// moduleMap.put("dw_etl", 63018); +// moduleMap.put("dw_model", 63019); +// moduleMap.put("dw_process", 63020); +// moduleMap.put("dw_search", 63021); +// moduleMap.put("dw_sync", 63022); +// moduleMap.put("eb", 63023); +// moduleMap.put("ebda", 62987); +// moduleMap.put("ebdd", 63024); +// moduleMap.put("ebdf", 63025); +// moduleMap.put("ebdp", 63026); +// moduleMap.put("ecod", 63027); +// moduleMap.put("ei", 63028); +// moduleMap.put("em", 63029); +// moduleMap.put("es", 63030); +// moduleMap.put("esa", 63031); +// moduleMap.put("esb", 63032); +// moduleMap.put("esch", 63033); +// moduleMap.put("esd", 63034); +// moduleMap.put("exfo", 63035); +// moduleMap.put("fbdg", 63036); +// moduleMap.put("fdt",63037); +// moduleMap.put("fexs", 63038); +// moduleMap.put("file", 63039); +// moduleMap.put("finc", 63040); +// moduleMap.put("fnar", 63041); +// moduleMap.put("fomo", 63042); +// moduleMap.put("form", 63043); +// moduleMap.put("frpt", 63043); +// moduleMap.put("fvou", 63044); +// moduleMap.put("hp", 63045); +// moduleMap.put("hr", 63046); +// moduleMap.put("ic", 63047); +// moduleMap.put("il", 63048); +// moduleMap.put("im", 63049); +// moduleMap.put("inc", 63050); +// moduleMap.put("iua", 63051); +// moduleMap.put("iut", 63052); +// moduleMap.put("mail", 63053); +// moduleMap.put("mc", 63054); +// moduleMap.put("mt", 63055); +// moduleMap.put("my", 63056); +// moduleMap.put("odoc", 63057); +// moduleMap.put("odoc_exchange", 63058); +// moduleMap.put("open", 63059); +// moduleMap.put("pr", 63060); +// moduleMap.put("proj", 63061); +// moduleMap.put("prt", 63062); +// moduleMap.put("pspt", 63063); +// moduleMap.put("rptc", 63064); +// moduleMap.put("rpts", 63065); +// moduleMap.put("sala", 63066); +// moduleMap.put("sign", 63067); +// moduleMap.put("sms", 63068); +// moduleMap.put("task", 63069); +// moduleMap.put("tnt", 63070); +// moduleMap.put("wf", 63071); +// moduleMap.put("wfc", 63072); +// moduleMap.put("wfr", 63073); +// moduleMap.put("wrgm", 63074); +// moduleMap.put("wrgp", 63075); +// moduleMap.put("wrpr", 63076); +// moduleMap.put("doc", 63077); +// moduleMap.put("placard", 63078); +// moduleMap.put("fna", 135042); +// moduleMap.put("meeting", 63080); +// moduleMap.put("wfp", 63081); +// moduleMap.put("portal", 63045); +// moduleMap.put("workreport", 63082); +// moduleMap.put("goal", 63074); +// moduleMap.put("performance", 63075); +// moduleMap.put("intlogin", 63083); +// moduleMap.put("i18n", 64559); +// moduleMap.put("timecard", 63085); +// moduleMap.put("market", 63086); +// moduleMap.put("excelformula", 64560); +// moduleMap.put("ebatch", 69280); +// moduleMap.put("ic_ldap", 70081); +// moduleMap.put("iut_c_c", 96493); +// moduleMap.put("plan", 63076); +// moduleMap.put("document", 34218); +// moduleMap.put("taskCustStatus", 73988); +// moduleMap.put("calendar", 74186); +// moduleMap.put("batch", 69280); +// moduleMap.put("project", 55158); +// moduleMap.put("web", 75598); +// moduleMap.put("formdatareport", 76068); +// moduleMap.put("mainline", 31898); +// moduleMap.put("customer", 32726); +// moduleMap.put("contract", 32864); +// moduleMap.put("group", 19426); +// moduleMap.put("workflow", 81851); +// moduleMap.put("biaoge", 30919); +// moduleMap.put("clue", 28908); +// moduleMap.put("competitor", 81852); +// moduleMap.put("kpiFlow", 81853); +// moduleMap.put("mainlineCustStatus", 81854); +// moduleMap.put("marketactivity", 34221); +// moduleMap.put("mtPhase", 81855); +// moduleMap.put("production", 29329); +// moduleMap.put("quote", 34231); +// moduleMap.put("saleChance", 32863); +// moduleMap.put("orderform", 34230); +// moduleMap.put("contact", 32711); +// moduleMap.put("price", 31922); +// moduleMap.put("capital", 83428); +// moduleMap.put("ice", 87722); +// moduleMap.put("ic_hr", 84284); +// moduleMap.put("intunifyauth", 84508); +// moduleMap.put("signcenter", 84691); +// moduleMap.put("iut_s_c", 91503); +// moduleMap.put("iut_s_c1", 95218); +// moduleMap.put("iut_s_c2", 95219); +// moduleMap.put("iut_s_c3", 95220); +// moduleMap.put("iut_c_log", 96494); +// moduleMap.put("ic_mail", 100715); +// moduleMap.put("hrsa", 105038); +// moduleMap.put("icc", 113884); +// moduleMap.put("basicserver", 113885); +// moduleMap.put("dw", 115549); +// moduleMap.put("msg", 115563); +// moduleMap.put("intunifybase", 115599); +// moduleMap.put("esearch", 21694); +// moduleMap.put("iaauthserver", 115603); +// moduleMap.put("excel", 115543); +// moduleMap.put("scene", 115539); +// moduleMap.put("bcw", 115651); +// moduleMap.put("folder", 10734); +// moduleMap.put("pdfcnv", 115957); +// moduleMap.put("login", 63063); +// moduleMap.put("ebform", 121462); +// moduleMap.put("statistics", 17745); +// moduleMap.put("edcapp", 121631); +// moduleMap.put("cusapp", 16381); +// moduleMap.put("e10-allinone-base", 141083); +// moduleMap.put("voice", 142713); +// moduleMap.put("filter", 147832); +// moduleMap.put("ias", 146674); +// moduleMap.put("device", 153666); +// moduleMap.put("meetingTopic", 180274); +// moduleMap.put("meetingService", 180276); +// moduleMap.put("meetingDecision", 180277); +// moduleMap.put("meetingSign", 180278); +// moduleMap.put("meetingSignSet", 61601); +// moduleMap.put("meetingMember", 180280); +// moduleMap.put("meetingShare", 180281); +// moduleMap.put("int", 40031); +// moduleMap.put("print", 160051); +// moduleMap.put("wcwIconUpdate", 182661); +// moduleMap.put("wcwIconRelease", 183123); +// moduleMap.put("wcwIconUse", 183124); +// moduleMap.put("wcw", 29385); +// moduleMap.put("component", 115651); +// moduleMap.put("ic_exchange", 87722); +// moduleMap.put("iut_c_c", 240048); +// moduleMap.put("iut_c_set", 240049); +// +// Map elogMap = new HashMap<>(); +// Map reportMap = new HashMap<>(); +// Map edcMap = new HashMap<>(); +// Map hrmMap = new HashMap<>(); +// Map crmMap = new HashMap<>(); +// Map demoMap = new HashMap<>(); +// +// moduleFuctionMap.put("elog", elogMap); +// moduleFuctionMap.put("report", reportMap); +// moduleFuctionMap.put("edc", edcMap); +// moduleFuctionMap.put("hrm", hrmMap); +// moduleFuctionMap.put("crm", crmMap); +// moduleFuctionMap.put("demo", demoMap); +// +// +// +// elogMap.put("operator", "日志操作"); +// elogMap.put("reportcusinfo","报表自定义"); +// edcMap.put("dataset","数据集合"); +// +// demoMap.put("reportcusinfo","报表自定义字段"); +// } +// +// /** +// * 获取模块名称 +// * @param module +// * @return +// */ +// public static String getModuleName(String module) { +// String modulename = ElogSeviceUtils.null2String(moduleMap.get(module), module); +// +// return ElogSeviceUtils.isLongValue(modulename) ? SystemEnv.getHtmlLabelName(ElogSeviceUtils.getLongValue(modulename),modulename) : modulename; +// } +// +// /** +// * 获取模块名称 +// * @param module +// * @return +// */ +// public static String getModuleNamePapi(String module) { +// String modulename = ElogSeviceUtils.null2String(moduleMap.get(module), module); +// +// return ElogSeviceUtils.isLongValue(modulename) ? SystemEnv.getHtmlLabelName(ElogSeviceUtils.getLongValue(modulename),modulename) : modulename; +// } +// +// +// /** +// * 获取方法名称 +// * @param module +// * @param function +// * @return +// */ +// public static String getFunctionName(String module, String function) { +// Map functionMap = moduleFuctionMap.get(module); +// +// if(functionMap != null) +// function = ElogSeviceUtils.null2String(functionMap.get(function),function); +// +// return ElogSeviceUtils.isLongValue(function) ? SystemEnv.getHtmlLabelName(ElogSeviceUtils.getLongValue(function),function) : function; +// } +// +// public static void switchValues(List resultMap, List recordColumns) { +// +// switchValues(resultMap,recordColumns,false); +// +// } +// +// +// public static void switchValues(List list,List recordColumns, boolean islocal) { +//// if(!islocal) { +//// changKey2Lower(list); +//// } +// for(Map map : list) { +// Iterator> iterator = map.entrySet().iterator(); +// while (iterator.hasNext()) { +// Map.Entry next = iterator.next(); +// for (String recordColumn : recordColumns) { +// if (next.getKey().equals(recordColumn) && next.getValue() instanceof String) { +// map.put(next.getKey(), transfi18Method(next.getValue())); +// } +// } +// } +// map.put("modulenamespan", getModuleName(map.get("modulename"))); +// //map.put("functionnamespan", getFunctionName(map.get("modulename"), map.get("functionname"))); +// //switchDatabaseField(map); +// } +// +// } +// +// public static void switchDatabaseField(Map map) { +// map.put("date", map.get("log_date")); +// map.put("operator", map.get("log_operator")); +// map.put("result", map.get("log_result")); +// } +// +// /** +// * 转换数据成多语言 +// * @param lists +// */ +// public static List transfLanguageData(List lists) { +// if (lists != null && lists.size() > 0) { +// for (Map map : lists) { +// if (map != null) { +// Iterator> iterator = map.entrySet().iterator(); +// while (iterator.hasNext()) { +// Map.Entry entry = iterator.next(); +// if (entry.getValue() instanceof Integer ||entry.getValue() instanceof Long||entry.getValue()instanceof String) { +// map.put(entry.getKey(), transfLanguageLableid(ElogSeviceUtils.getLongValue(entry.getValue().toString()),entry.getValue().toString())); +// }else{ +// map.put(entry.getKey(), entry.getValue()); +// } +// } +// } +// } +// } +// return lists; +// } +// +// public static String transfi18Method(String str) { +// if ("新增".equals(str)){ +// return transfLanguageLableid(63252l,str); +// } else if ("查看".equals(str)) { +// return transfLanguageLableid(55172l,str); +// }else if ("修改".equals(str)) { +// return transfLanguageLableid(63253l,str); +// }else if ("更新".equals(str)) { +// return transfLanguageLableid(29540l,str); +// }else if ("删除".equals(str)) { +// return transfLanguageLableid(63254l,str); +// }else if (StringUtils.isNumeric(str) && str.length()< 10) { +// return transfLanguageLableid(Long.parseLong(str),str); +// }else { +// return str; +// } +// } +// +// public static String transfLanguageLableid(Long lableid) { +// return SystemEnv.getHtmlLabelName(lableid, lableid.toString()); +// } +// +// /** +// * 转换多语言 +// * @param lableid +// * @param def +// * @return +// */ +// public static String transfLanguageLableid(Long lableid,String def) { +// return SystemEnv.getHtmlLabelName(lableid, def); +// } +// +// +// /** +// * 日志本地服务-更新明细转换 +// * +// * @param mainlist +// * @param list +// * @return +// */ +// public static Map switchChangeValue(List mainlist, List list) { +// Map res = new HashMap<>(); +// StringBuilder valuesChange = new StringBuilder(); +// List valuesChanges = new ArrayList<>(); +// String values = ""; +// String operatetypeName = ""; +// int oldCount = 0; +// int newCount = 0; +// String operatetype = ""; +// CaseInsensitiveMap map = null; +// if (list != null && list.size() > 0) { +// for (Map hashmap : list) { +// map = new CaseInsensitiveMap<>(hashmap); +// Object obj = map.get("operatetype"); +// if (obj != null) { +// operatetype = obj.toString(); +// } +// } +// } +// if (mainlist != null && mainlist.size() > 0) { +// for (Map hashMap : mainlist) { +// map = new CaseInsensitiveMap<>(hashMap); +// Object isdetail = map.get("isdetail"); +// if (isdetail != null) { +// if (StringUtils.isBlank(isdetail.toString())||!"0".equals(isdetail.toString())){ +// continue; +// } +// }else{ +// continue; +// } +// Object oldvalue = map.get("oldvalue"); +// if (oldvalue != null) { +// if (StringUtils.isNotBlank(oldvalue.toString())) { +// oldCount++; +// } +// } +// +// Object newvalue = map.get("newvalue"); +// if (newvalue != null) { +// if (StringUtils.isNotBlank(newvalue.toString())) { +// newCount++; +// } +// } +// +// } +// } +// CaseInsensitiveMap jo = null; +// for(int i = 0 ; i < mainlist.size(); i++) { +// Map jomap = mainlist.get(i); +// jo = new CaseInsensitiveMap<>(jomap); +// String fieldName = jo.get("fielddesc"); +// String oldvalue = obj2String(jo.get("oldvalue")); +// String oldrealvalue = obj2String(jo.get("oldrealvalue")); +// String newValue = obj2String(jo.get("newvalue")); +// String newrealvalue = obj2String(jo.get("newrealvalue")); +// // oracle.sql.CLOB类型处理 +// jomap.put("oldvalue", oldvalue); +// jomap.put("oldrealvalue", oldrealvalue); +// jomap.put("newvalue", newValue); +// jomap.put("newrealvalue", newrealvalue); +// +// String fieldNameLabelId = jo.get("fieldnamelabelid"); +// if (StringUtils.isNotBlank(fieldNameLabelId)&&StringUtils.isNumeric(fieldNameLabelId)) { +// fieldName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldNameLabelId),fieldName); +// } else if (StringUtils.isNotBlank(fieldNameLabelId)&&!StringUtils.isNumeric(fieldNameLabelId) && !"-1".equals(fieldNameLabelId)) { +// fieldName = fieldNameLabelId; +// } else if (StringUtils.isNotBlank(fieldName)&&StringUtils.isNumeric(fieldName)) { +// fieldName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldName),fieldName); +// } +// if (StringUtils.isNotBlank(oldrealvalue)&&StringUtils.isNumeric(oldrealvalue)) { +// oldvalue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(oldrealvalue),oldvalue); +// }else if (StringUtils.isNotBlank(oldrealvalue)&&!StringUtils.isNumeric(oldrealvalue)) { +// oldvalue = oldrealvalue; +// } +// if (StringUtils.isNotBlank(newrealvalue)&&StringUtils.isNumeric(newrealvalue)) { +// newValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(newrealvalue),newValue); +// }else if (StringUtils.isNotBlank(newrealvalue)&&!StringUtils.isNumeric(newrealvalue)) { +// newValue = newrealvalue; +// } +// +// //oldvalue,newValue 避免xss漏洞 分别进行转义 +// oldvalue = StringConversionForXSS(oldvalue); +// newValue = StringConversionForXSS(newValue); +// +// if (oldCount != 0) { +// valuesChanges.add(String.format(valueChangeFormat(), fieldName, oldvalue, newValue)); +// +// } else if (oldCount == 0 || newCount==0 || operatetype.startsWith(OperateType.add)||operatetype.startsWith(OperateType.delete)) { +// valuesChanges.add(String.format(valueChangeNewFormat(), fieldName, newValue)); +// +// } else { +// valuesChanges.add(String.format(valueChangeFormat(), fieldName, oldvalue, newValue)); +// } +// //} +// /*if (valuesChange.length() > 3) { +// values = valuesChange.substring(0, valuesChange.length() - 3); +// }*/ +// } +// +// res.put("valueschanges", valuesChanges); +// res.put("detailcontexts", mainlist); +// return res; +// } +// +// private static String obj2String(Object o) { +// if (o == null) { +// return ""; +// } +// if (o instanceof String) { +// return (String) o; +// } +// return JSON.toJSONString(o); +// } +// +// /** +// * 服务中心结果集转换 +// */ +// public static void switchChangeValues(List list) { +// CaseInsensitiveMap map = null; +// for(Map hashMap : list) { +// map = new CaseInsensitiveMap<>(hashMap); +// int count = 0; +// StringBuilder valuesChange = new StringBuilder(); +// List valuesChanges = new ArrayList(); +// Object detailContexts = map.get("detailcontexts"); +// if(detailContexts != null) { +// JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(detailContexts)); +// for(int i = 0 ; i < jsonArray.size(); i++) { +// JSONObject jo = jsonArray.getJSONObject(i); +// String isDetail = jo.getString("isDetail"); +// if (StringUtils.isBlank(isDetail)||!"0".equals(isDetail)){ +// continue; +// } +// String oldvalue = jo.getString("oldValue"); +// if (StringUtils.isNotBlank(oldvalue)) { +// count++; +// } +// } +// } +// +// if(detailContexts != null) { +// JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(detailContexts)); +// for(int i = 0 ; i < jsonArray.size(); i++) { +// JSONObject jo = jsonArray.getJSONObject(i); +// String isDetail = jo.getString("isDetail"); +// if (StringUtils.isBlank(isDetail)||!"0".equals(isDetail)){ +// continue; +// } +// String fieldName = jo.getString("fieldDesc"); +// String oldvalue = jo.getString("oldValue"); +// String oldrealvalue = jo.getString("oldRealValue"); +// String newValue = jo.getString("newValue"); +// String newrealvalue = jo.getString("newRealValue"); +// String fieldNameLabelId = jo.getString("fieldNameLabelId"); +// if (StringUtils.isNotBlank(fieldNameLabelId)&&StringUtils.isNumeric(fieldNameLabelId)) { +// fieldName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldNameLabelId)); +// } +// if (StringUtils.isNotBlank(oldrealvalue)&&StringUtils.isNumeric(oldrealvalue)) { +// oldvalue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(oldrealvalue)); +// } +// if (StringUtils.isNotBlank(newrealvalue)&&StringUtils.isNumeric(newrealvalue)) { +// newValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(newrealvalue)); +// } +// if (count == 0) { +// valuesChanges.add(String.format(valueChangeNewFormat(), fieldName, newValue)); +// } else { +// valuesChanges.add(String.format(valueChangeFormat(), fieldName, oldvalue, newValue)); +// } +// +// } +// /*String values = ""; +// if (valuesChange.length() > 3) { +// values = valuesChange.substring(0, valuesChange.length() - 3); +// }*/ +// +// map.put("valueschanges", valuesChanges); +// } +// +// } +// } +// +// public static String valueChangeNewFormat(){ +// return "【%s】:%s"; +// } +// public static String valueChangeFormat(){ +// return "【%s】:"+SystemEnv.getHtmlLabelName(61695,"由")+ +// "[%s] "+SystemEnv.getHtmlLabelName(61697,"改为")+" [%s]"; +// } +// +// public static void changKey2Lower(List list) { +// +// List newList = new ArrayList<>(); +// for(Map orgMap : list) { +// Map resultMap = new HashMap<>(); +// +// if (orgMap == null || orgMap.isEmpty()) { +// newList.add(resultMap); +// continue; +// } +// +// Set keySet = orgMap.keySet(); +// for (String key : keySet) { +// resultMap.put(key != null ? key.toLowerCase() : "", orgMap.get(key)); +// } +// newList.add(resultMap); +// } +// list.clear(); +// list.addAll(newList); +// } +// +// /** +// * 查看详细表的数据 +// * @param list +// */ +// public static Map switchDetailChangeValue(List list) { +// Map res = new HashMap<>(); +// List> lists = new ArrayList<>(); +// HashMap repeatTableName = new HashMap<>(); +// CaseInsensitiveMap map = null; +// for (Map hashMap : list) { +// map = new CaseInsensitiveMap<>(hashMap); +// List detailmap = new ArrayList<>(); +// HashMap detailoldMap= new HashMap<>(); +// detailoldMap.put("operator",SystemEnv.getHtmlLabelName(63248,"操作(旧)")); +// detailoldMap.put("dataid",map.get("dataid")); +// HashMap detailnewMap= new HashMap<>(); +// detailnewMap.put("operator",SystemEnv.getHtmlLabelName(63249,"操作(新)")); +// detailnewMap.put("dataid",map.get("dataid")); +// detailmap.add(detailoldMap); +// detailmap.add(detailnewMap); +// WeaTable wea = new WeaTable(); +// wea.getColumns().add(new WeaTableColumn(SystemEnv.getHtmlLabelName(63250,"操作"), "operator", "5%")); +// wea.getColumns().add(new WeaTableColumn("dataid", "dataid", true)); +// Object tablename = map.get("tablename"); +// Object tablenamelabelid = map.get("tablenamelabelid"); +// if (tablenamelabelid != null) { +// if (StringUtils.isNotBlank(tablenamelabelid.toString())&&StringUtils.isNumeric(tablenamelabelid.toString())) { +// tablename = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(tablenamelabelid.toString())); +// } +// } +// Map m = new HashMap<>(); +// if (tablename!=null&&StringUtils.isNotBlank(tablename.toString())) { +// String temptablename = repeatTableName.get(tablename.toString()); +// if (tablename.toString().equals(temptablename)) { +// continue; +// } +// repeatTableName.put(tablename.toString(), tablename.toString()); +// m.put("tablename", tablename.toString()); +// m.put("detailmap", detailmap); +// m.put("column", wea); +// lists.add(m); +// } else { +// tablename = tablename!=null?tablename:""; +// String temptablename = repeatTableName.get(tablename.toString()); +// if (tablename.toString().equals(temptablename)) { +// continue; +// } +// repeatTableName.put(tablename.toString(), tablename.toString()); +// m.put("tablename", ""); +// m.put("detailmap", detailmap); +// m.put("column", wea); +// lists.add(m); +// } +// } +// +// for (Map hashMap : list) { +// map = new CaseInsensitiveMap<>(hashMap); +// Object isDetail = map.get("isdetail"); +// if (isDetail != null) { +// if ("0".equals(isDetail.toString())) { +// continue; +// } +// } else { +// continue; +// } +// String title = ""; +// String dataIndex = ""; +// String oldValue = ""; +// String newValue = ""; +// String tableName = ""; +// String dataId = ""; +// +// Object fieldDesc = map.get("fielddesc"); +// if (fieldDesc != null) { +// if (StringUtils.isNotBlank(fieldDesc.toString())) { +// title = fieldDesc.toString(); +// } +// } +// +// Object fieldnamelabelid = map.get("fieldnamelabelid"); +// if (fieldnamelabelid != null) { +// if (StringUtils.isNotBlank(fieldnamelabelid.toString())&&StringUtils.isNumeric(fieldnamelabelid.toString())) { +// title = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldnamelabelid.toString())); +// } +// } +// +// Object fieldName = map.get("fieldname"); +// if (fieldName != null) { +// if (StringUtils.isNotBlank(fieldName.toString())) { +// dataIndex = fieldName.toString(); +// } +// } +// Object oValue = map.get("oldvalue"); +// if (oValue != null) { +// if (StringUtils.isNotBlank(oValue.toString())) { +// oldValue = oValue.toString(); +// } +// } +// Object nValue = map.get("newvalue"); +// if (nValue != null) { +// if (StringUtils.isNotBlank(nValue.toString())) { +// newValue = nValue.toString(); +// } +// } +// Object oldRealValue = map.get("oldrealvalue"); +// if (oldRealValue != null) { +// if (StringUtils.isNotBlank(oldRealValue.toString())&&StringUtils.isNumeric(oldRealValue.toString())) { +// oldValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(oldRealValue.toString())); +// } +// } +// +// Object newrealvalue = map.get("newrealvalue"); +// if (newrealvalue != null) { +// if (StringUtils.isNotBlank(newrealvalue.toString())&&StringUtils.isNumeric(newrealvalue.toString())) { +// newValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(newrealvalue.toString())); +// } +// } +// +// Object tablename = map.get("tablename"); +// if (StringUtils.isNotBlank(tablename.toString())) { +// tableName = tablename.toString(); +// } else { +// tableName = ""; +// } +// Object tablenamelabelid = map.get("tablenamelabelid"); +// if (tablenamelabelid != null) { +// if (tablenamelabelid != null) { +// if (StringUtils.isNotBlank(tablenamelabelid.toString())&&StringUtils.isNumeric(tablenamelabelid.toString())) { +// tableName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(tablenamelabelid.toString())); +// } +// } +// } +// Object dataid = map.get("dataid"); +// if (StringUtils.isNotBlank(dataid.toString())) { +// dataId = dataid.toString(); +// } else { +// dataId = ""; +// } +// for (Map m : lists) { +// Object o = m.get("tablename"); +// if (o != null) { +// if (tableName.equals(o)) { +// List details = (List) m.get("detailmap"); +// List newDetails = new ArrayList<>(); +// if (details != null && details.size() > 0) { +// for (Map detail : details) { +// Object data_id = detail.get("dataid"); +// if (data_id != null) { +// if (dataId.equals(data_id)) { +// Object operator = detail.get("operator"); +// if (operator != null) { +// if (SystemEnv.getHtmlLabelName(63248, "操作(旧)").equals(operator.toString())) { +// detail.put(dataIndex, oldValue); +// } else if (SystemEnv.getHtmlLabelName(63249, "操作(新)").equals(operator.toString())) { +// detail.put(dataIndex, newValue); +// } +// } +// }else{ +// if (newDetails.size() > 2) { +// for (Map newDetail : newDetails) { +// if (dataId.equals(newDetail.get("dataid"))) { +// Object operator = detail.get("operator"); +// if (operator != null) { +// if (SystemEnv.getHtmlLabelName(63248, "操作(旧)").equals(operator.toString())) { +// detail.put(dataIndex, oldValue); +// } else if (SystemEnv.getHtmlLabelName(63249, "操作(新)").equals(operator.toString())) { +// detail.put(dataIndex, newValue); +// } +// } +// }else{ +// HashMap detailoldMap= new HashMap<>(); +// detailoldMap.put("operator",SystemEnv.getHtmlLabelName(63248,"操作(旧)")); +// detailoldMap.put("dataid",map.get("dataid")); +// detailoldMap.put(dataIndex, oldValue); +// HashMap detailnewMap= new HashMap<>(); +// detailnewMap.put("operator",SystemEnv.getHtmlLabelName(63249,"操作(新)")); +// detailnewMap.put("dataid",map.get("dataid")); +// detailnewMap.put(dataIndex, newValue); +// newDetails.add(detailoldMap); +// newDetails.add(detailnewMap); +// } +// } +// }else if (newDetails.size() == 0) { +// int count = 0; +// for (Map mapdetail : details) { +// Object dataid_ = mapdetail.get("dataid"); +// if (dataid_ != null && dataid_.equals(dataId)) { +// count++; +// } +// } +// if (count == 0) { +// HashMap detailoldMap= new HashMap<>(); +// detailoldMap.put("operator",SystemEnv.getHtmlLabelName(63248,"操作(旧)")); +// detailoldMap.put("dataid",map.get("dataid")); +// detailoldMap.put(dataIndex, oldValue); +// HashMap detailnewMap= new HashMap<>(); +// detailnewMap.put("operator",SystemEnv.getHtmlLabelName(63249,"操作(新)")); +// detailnewMap.put("dataid",map.get("dataid")); +// detailnewMap.put(dataIndex, newValue); +// newDetails.add(detailoldMap); +// newDetails.add(detailnewMap); +// } +// } +// } +// } +// } +// } +// if (newDetails.size() > 0) { +// details.addAll(newDetails); +// newDetails.clear(); +// } +// +// WeaTable column = (WeaTable) m.get("column"); +// if (column != null) { +// List columns = column.getColumns(); +// if (columns != null && columns.size() > 0) { +// Boolean flag = true; +// for (Object object : columns) { +// WeaTableColumn weaTableColumn = JSONObject.parseObject(JSON.toJSONString(object), WeaTableColumn.class); +// if (weaTableColumn != null) { +// String title1 = weaTableColumn.getTitle(); +// if (title.equals(title1)) { +// flag = false; +// break; +// } +// } +// } +// if (flag) { +// column.getColumns().add(new WeaTableColumn(title, dataIndex, "5%")); +// m.put("column", column); +// } +// } +// } +// } +// } +// } +// } +// res.put("detail", lists); +// return res; +// } +// +// +// public static void switchDetailChangeValues(List list) { +// for (Map map : list) { +// Map repeatTableName = new HashMap<>(); +// List detailContexts = (List) map.get("detailcontexts"); +// List lists = new ArrayList<>(); +// if (detailContexts != null) { +// for (Map detailContext : detailContexts) { +// List detailmap = new ArrayList<>(); +// HashMap detailoldMap = new HashMap<>(); +// detailoldMap.put("operator", SystemEnv.getHtmlLabelName(63248,"操作(旧)")); +// detailoldMap.put("dataid",detailContext.get("dataid")); +// HashMap detailnewMap = new HashMap<>(); +// detailnewMap.put("operator", SystemEnv.getHtmlLabelName(63249,"操作(新)")); +// detailnewMap.put("dataid",detailContext.get("dataid")); +// detailmap.add(detailoldMap); +// detailmap.add(detailnewMap); +// WeaTable wea = new WeaTable(); +// wea.getColumns().add(new WeaTableColumn(SystemEnv.getHtmlLabelName(63250,"操作"), "operator", "5%")); +// wea.getColumns().add(new WeaTableColumn("dataid", "dataid", true)); +// Object tableName = detailContext.get("tableName"); +// Object tablenamelabelid = detailContext.get("tableNameLabelId"); +// if (tablenamelabelid != null) { +// if (StringUtils.isNotBlank(tablenamelabelid.toString())&&StringUtils.isNumeric(tablenamelabelid.toString())) { +// tableName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(tablenamelabelid.toString())); +// } +// } +// Map m = new HashMap<>(); +// if (StringUtils.isNotBlank(tableName.toString())) { +// String temptablename = repeatTableName.get(tableName.toString()); +// if (tableName.toString().equals(temptablename)) { +// continue; +// } +// repeatTableName.put(tableName.toString(), tableName.toString()); +// m.put("tablename", tableName.toString()); +// m.put("detailmap", detailmap); +// m.put("column", wea); +// lists.add(m); +// map.put("detail", lists); +// } else { +// String temptablename = repeatTableName.get(tableName.toString()); +// if (tableName.toString().equals(temptablename)) { +// continue; +// } +// repeatTableName.put(tableName.toString(), tableName.toString()); +// m.put("tablename", ""); +// m.put("detailmap", detailmap); +// m.put("column", wea); +// lists.add(m); +// map.put("detail", lists); +// } +// } +// } +// List details = (List) map.get("detail"); +// if (details != null) { +// int size = details.size(); +// int start = 0; +// while (start < size) { +// start++; +// +// for (int i = 0; i < size; i++) { +// Map detail = details.get(i); +// +// //for (Map detail : details) { +// if (details.size() > size) { +// break; +// } +// for (Map detailContext : detailContexts) { +// Object isDetail = detailContext.get("isDetail"); +// if (isDetail != null) { +// if ("0".equals(isDetail.toString())) { +// continue; +// } +// } else { +// continue; +// } +// String title = ""; +// String dataIndex = ""; +// String oldValue = ""; +// String newValue = ""; +// String tableName = ""; +// String dataId = ""; +// Object fieldDesc = detailContext.get("fieldDesc"); +// if (StringUtils.isNotBlank(fieldDesc.toString())) { +// title = fieldDesc.toString(); +// } +// Object fieldnamelabelid = detailContext.get("fieldNameLabelId"); +// if (fieldnamelabelid != null) { +// if (StringUtils.isNotBlank(fieldnamelabelid.toString())&&StringUtils.isNumeric(fieldnamelabelid.toString())) { +// title = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldnamelabelid.toString())); +// } +// } +// Object fieldName = detailContext.get("fieldName"); +// if (StringUtils.isNotBlank(fieldName.toString())) { +// dataIndex = fieldName.toString(); +// } +// Object oValue = detailContext.get("oldValue"); +// if (StringUtils.isNotBlank(oValue.toString())) { +// oldValue = oValue.toString(); +// } +// Object nValue = detailContext.get("newValue"); +// if (StringUtils.isNotBlank(nValue.toString())) { +// newValue = nValue.toString(); +// } +// Object oldRealValue = detailContext.get("oldRealValue"); +// if (oldRealValue != null) { +// if (StringUtils.isNotBlank(oldRealValue.toString())&&StringUtils.isNumeric(oldRealValue.toString())) { +// oldValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(oldRealValue.toString())); +// } +// } +// +// Object newrealvalue = detailContext.get("newRealValue"); +// if (newrealvalue != null) { +// if (StringUtils.isNotBlank(newrealvalue.toString())&&StringUtils.isNumeric(newrealvalue.toString())) { +// newValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(newrealvalue.toString())); +// } +// } +// Object tablename = detailContext.get("tableName"); +// if (StringUtils.isNotBlank(tablename.toString())) { +// tableName = tablename.toString(); +// } else { +// tableName = ""; +// } +// Object tablenamelabelid = detailContext.get("tableNameLabelId"); +// if (tablenamelabelid != null) { +// if (tablenamelabelid != null) { +// if (StringUtils.isNotBlank(tablenamelabelid.toString())&&StringUtils.isNumeric(tablenamelabelid.toString())) { +// tableName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(tablenamelabelid.toString())); +// } +// } +// } +// Object dataid = detailContext.get("dataid"); +// if (StringUtils.isNotBlank(dataid.toString())) { +// dataId = dataid.toString(); +// } else { +// dataId = ""; +// } +// Object detailtablename = detail.get("tablename"); +// if (detailtablename != null) { +// if (tableName.equals(detailtablename.toString())) { +// List detailmap = (List) detail.get("detailmap"); +// List newDetails = new ArrayList<>(); +// if (detailmap != null && detailmap.size() > 0) { +// for (Map d : detailmap) { +// Object data_id = d.get("dataid"); +// if (data_id != null) { +// if (dataId.equals(data_id)) { +// Object operator = d.get("operator"); +// if (operator != null) { +// if (SystemEnv.getHtmlLabelName(63248, "操作(旧)").equals(operator.toString())) { +// d.put(dataIndex, oldValue); +// } else if (SystemEnv.getHtmlLabelName(63249, "操作(新)").equals(operator.toString())) { +// d.put(dataIndex, newValue); +// } +// } +// }else{ +// if (newDetails.size() > 2) { +// for (Map newDetail : newDetails) { +// if (dataId.equals(newDetail.get("dataid"))) { +// Object operator = d.get("operator"); +// if (operator != null) { +// if (SystemEnv.getHtmlLabelName(63248, "操作(旧)").equals(operator.toString())) { +// d.put(dataIndex, oldValue); +// } else if (SystemEnv.getHtmlLabelName(63249, "操作(新)").equals(operator.toString())) { +// d.put(dataIndex, newValue); +// } +// } +// }else{ +// HashMap detailoldMap= new HashMap<>(); +// detailoldMap.put("operator",SystemEnv.getHtmlLabelName(63248,"操作(旧)")); +// detailoldMap.put("dataid",detailContext.get("dataid")); +// detailoldMap.put(dataIndex, oldValue); +// HashMap detailnewMap= new HashMap<>(); +// detailnewMap.put("operator",SystemEnv.getHtmlLabelName(63249,"操作(新)")); +// detailnewMap.put("dataid",detailContext.get("dataid")); +// detailnewMap.put(dataIndex, newValue); +// newDetails.add(detailoldMap); +// newDetails.add(detailnewMap); +// } +// } +// }else if (newDetails.size() == 0) { +// int count = 0; +// for (Map mapdetail : detailmap) { +// Object dataid_ = mapdetail.get("dataid"); +// if (dataid_ != null && dataid_.equals(dataId)) { +// count++; +// } +// } +// if (count == 0) { +// HashMap detailoldMap= new HashMap<>(); +// detailoldMap.put("operator",SystemEnv.getHtmlLabelName(63248,"操作(旧)")); +// detailoldMap.put("dataid",detailContext.get("dataid")); +// detailoldMap.put(dataIndex, oldValue); +// HashMap detailnewMap= new HashMap<>(); +// detailnewMap.put("operator",SystemEnv.getHtmlLabelName(63249,"操作(新)")); +// detailnewMap.put("dataid",detailContext.get("dataid")); +// detailnewMap.put(dataIndex, newValue); +// newDetails.add(detailoldMap); +// newDetails.add(detailnewMap); +// } +// } +// } +// } +// } +// } +// if (newDetails.size() > 0) { +// details.addAll(newDetails); +// newDetails.clear(); +// //detailmap = new ArrayList<>(); +// //detail.put("detailmap", detailmap); +// } +// +// WeaTable column = (WeaTable) detail.get("column"); +// if (column != null) { +// List columns = column.getColumns(); +// if (columns != null && columns.size() > 0) { +// Boolean flag = true; +// for (Object object : columns) { +// WeaTableColumn weaTableColumn = JSONObject.parseObject(JSON.toJSONString(object), WeaTableColumn.class); +// if (weaTableColumn != null) { +// String title1 = weaTableColumn.getTitle(); +// if (title.equals(title1)) { +// flag = false; +// break; +// }else{ +// flag = true; +// } +// } +// } +// if (flag) { +// column.getColumns().add(new WeaTableColumn(title, dataIndex, "5%")); +// detail.put("column", column); +// } +// } +// } +// } +// } +// } +// } +// } +// } +// } +// } +// +// public static List getSwitchDatabaseData(List list) { +// if (ElogConsts.ORACLE.equalsIgnoreCase(DatabaseUtil.getDatabaseId()) || ElogConsts.SQLSERVER.equalsIgnoreCase(DatabaseUtil.getDatabaseId())) { +// List arrayList = new ArrayList<>(); +// for (Map map : list) { +// Set en = map.entrySet(); +// Map hashMap = new HashMap<>(); +// for (Map.Entry entry : en) { +// Object key = entry.getKey(); +// Object val = null; +// if ("PARAMS".equalsIgnoreCase(key.toString())||"CUSTOMINFO".equalsIgnoreCase(key.toString()) +// || entry.getValue() instanceof ClobProxyImpl || entry.getValue() instanceof Clob) { +// val = JSONObject.toJSON(entry.getValue()); +// }else{ +// val = entry.getValue(); +// } +// hashMap.put(key.toString().toLowerCase(),val ); +// } +// switchDatabaseField(hashMap); +// arrayList.add(hashMap); +// } +// return arrayList; +// }else{ +// for (Map map : list) { +// switchDatabaseField(map); +// } +// return list; +// } +// } +// +// public static List getSwitchDatabaseAnalysisData(List list,Map keys) { +// if (!ElogConsts.MYSQL.equalsIgnoreCase(DatabaseUtil.getDatabaseId())) { +// List arrayList = new ArrayList<>(); +// +// for (Map map : list) { +// Set en = map.entrySet(); +// Map hashMap = new HashMap<>(); +// for (Map.Entry entry : en) { +// Object key = entry.getKey(); +// Object val = entry.getValue(); +// if (key.toString().equalsIgnoreCase(keys.get(key.toString().toLowerCase()))){ +// key = keys.get(key.toString().toLowerCase()); +// }else { +// key = key.toString().toLowerCase(); +// } +// hashMap.put(key.toString(),val ); +// } +// arrayList.add(hashMap); +// } +// return arrayList; +// } +// return list; +// } +// +// /** +// * 获取多个模块名称 +// * @param modules +// * @return +// */ +// public static Map getModuleNames(List modules) { +// Map hashMap = new HashMap<>(); +// if (modules == null || modules.size() == 0) { +// return hashMap; +// } +// for (String module : modules) { +// String modulenum = ElogSeviceUtils.null2String(moduleMap.get(module), module); +// String modulename = ElogSeviceUtils.isLongValue(modulenum) ? SystemEnv.getHtmlLabelName(ElogSeviceUtils.getLongValue(modulenum), modulenum) : modulenum; +// hashMap.put(module, modulename); +// } +// return hashMap; +// +// } +// +// private static String StringConversionForXSS(String str) { +// if (StringUtils.isBlank(str)) +// return str; +// //判断是否是json串 是json串的话也直接返回 +// if (isJSONString(str)) +// return str; +// // 判断是否为前端标签类型字符串或带< 或 >的字符串,用false方法 /<(\\w+)[^>]*>(.*?<\\/\\1>)?/ +// Pattern pattern = Pattern.compile("[<>]"); +// Matcher matcher = pattern.matcher(str); +// if (matcher.find()) +// return SecurityUtil.encodeForHtml(str, false); +// //都不是则用true方法 +// return SecurityUtil.encodeForHtml(str, true); +// +// } +// +// +// /** +// * 判断是否为json字符串 +// * +// * @param content +// * @return +// */ +// public static boolean isJSONString(String content) { +// if (StringUtils.isEmpty(content)) { +// return false; +// } +// if (!content.startsWith("{") || !content.endsWith("}")) { +// if (!content.startsWith("[") || !content.endsWith("]")) { +// return false; +// } +// } +// try { +// JSONObject.parse(content); +// return true; +// } catch (Exception e) { +// return false; +// } +// } +// public static List getNameModule(String module) { +// if(StringUtils.isBlank(module)){ +// return new ArrayList<>(); +// } +// Map> dataMap = new HashMap<>(); +// moduleMap.forEach( (k,v)->{ +// List list=new ArrayList<>(); +// Integer moduleCode = moduleMap.get(k); +// String htmlLabelName = SystemEnv.getHtmlLabelName(moduleCode.longValue(), ""); +// if(dataMap.containsKey(htmlLabelName)){ +// list= dataMap.get(htmlLabelName); +// list .add(k); +// }else { +// list.add(k); +// } +// dataMap.put(htmlLabelName,list); +// }); +// return Objects.isNull(dataMap.get(module))?Arrays.asList(module):dataMap.get(module); +// } +//} diff --git a/src/com/engine/salary/elog/util/ElogSeviceUtils.java b/src/com/engine/salary/elog/util/ElogSeviceUtils.java new file mode 100644 index 000000000..3ee65acaa --- /dev/null +++ b/src/com/engine/salary/elog/util/ElogSeviceUtils.java @@ -0,0 +1,547 @@ +package com.engine.salary.elog.util; + +import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.elog.enums.FromTerminalType; +import com.weaver.common.component.table.page.Page; +import com.weaver.common.security.util.SecurityUtil; +import com.weaver.framework.log4j2.constant.ApmConstant; +import com.weaver.framework.rpc.context.impl.TenantRpcContext; +import com.weaver.framework.web.constant.EteamsConstant; +import org.apache.commons.lang3.StringUtils; +import org.apache.dubbo.rpc.RpcContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.zip.GZIPInputStream; +import java.util.zip.GZIPOutputStream; + +/** + * @Date: 2022/5/18 23:34 + * @Author: deli.xu + * @Description: elog服务工具类 + **/ +public class ElogSeviceUtils { + + private static final Logger logger = LoggerFactory.getLogger(ElogSeviceUtils.class); + + /*@Autowired + private ComInfoCache comInfoCache; + private static ComInfoCache baseComInfoCache; + + @PostConstruct + public void init() { + baseComInfoCache = comInfoCache; + }*/ + + private static final String TABLE_SPACER = "_"; + private static final String TABLE_SUFFIX = "logs"; + private static final String DETAIL_TABLE_SUFFIX = "_detail"; + public static final String BASE_TABLE = "BASE_ELOG_TABLE"; + + + public static String getTableName(String module, String function) { + return getTableName(module, function, false); + } + + public static String getTableName(String module, String function, boolean isDetail) { + String tablename = module + TABLE_SPACER + function + TABLE_SUFFIX + (isDetail ? DETAIL_TABLE_SUFFIX : ""); +// SecurityUtil.sqlCheck(tablename); + return tablename; + } + + /** + * String 转枚举 + * + * @param c + * @param string + * @param + * @return + */ + public static > T getEnumFromString(Class c, String string) { + if (c != null && string != null) { + try { + return Enum.valueOf(c, string.trim().toUpperCase()); + } catch (IllegalArgumentException ex) { + } + } + return null; + } + + /** + * 获取ip地址 + * + * @param request + * @return + */ + public static String getIp(HttpServletRequest request) { + String ipAddress = request.getHeader("x-forwarded-for"); + String unknown = "unknown"; + if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("WL-Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) { + ipAddress = request.getRemoteAddr(); + String benji = "127.0.0.1"; + String bj = "0:0:0:0:0:0:0:1"; + if (benji.equals(ipAddress) || bj.equals(ipAddress)) { + ///根据网卡取本机配置的IP + InetAddress inet = null; + try { + inet = InetAddress.getLocalHost(); + } catch (UnknownHostException e) { + logger.error("UnknownHostException", e); + } + if (inet != null) { + ipAddress = inet.getHostAddress(); + } + } + } + ///对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 + int i = 15; + String s = ","; + if (ipAddress != null && ipAddress.length() > i) { + if (ipAddress.indexOf(s) > 0) { + ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); + } + } + return ipAddress; + } + + /** + * 获取设备信息 + * + * @param request + * @return + */ + public static String getDevice(HttpServletRequest request) { + return request.getHeader("User-Agent"); + } + + /** + * 获取来自终端的信息 + * + * @param context + * @param request + * @return + */ + public static void getFromTerminal(LoggerContext context, HttpServletRequest request) { + String fromTerminal = context.getFromTerminal(); + if (StringUtils.isEmpty(fromTerminal)) { + String device = getDevice(request); + String setFT = ""; + if (StringUtils.isNotEmpty(device)) { + context.setFromTerminal(getFromTerminal(device)); + } + } + } + + + private static String getTraceId(HttpServletRequest request) { + String traceId = request.getHeader("traceId"); + if (StringUtils.isNotBlank(traceId)) { + //System.out.println("traceId:====="+traceId); + return traceId; + } + return ""; + } + + /** + * @param request + * @return localhost:9080/api/fs/demo/updateReport + */ + public static String getRequestUrl(HttpServletRequest request) { + if (Objects.isNull(request) || Objects.isNull(request.getRequestURL())) { + return null; + } + return request.getRequestURL().toString(); + } + + /** + * @param request + * @return /api/fs/demo/updateReport + */ + public static String getRequestUri(HttpServletRequest request) { + return request.getRequestURI(); + } + + /** + * @param request + * @return GET/POST + */ + public static String getRequestMethod(HttpServletRequest request) { + return request.getMethod(); + } + + +// /** +// * 获取当前方法中的日志实体类 +// * @return +// */ +// public static LoggerContext currentElogContext() { +// return ElogThreadLocal.currentLoggerContext(); +// } + + + public static int getIntValue(String v) { + return getIntValue(v, -1); + } + + public static int getIntValue(String v, int def) { + try { + return Integer.parseInt(v); + } catch (Exception var3) { + return def; + } + } + + public static long getLongValue(String v) { + return getLongValue(v, -1l); + } + + public static long getLongValue(String v, long def) { + try { + return Long.parseLong(v); + } catch (Exception var3) { + return def; + } + } + + public static boolean isLongValue(String v) { + try { + Long.parseLong(v); + } catch (Exception e) { + return false; + } + return true; + } + + + + /** + * 获取request请求 + * + * @return + */ + public static HttpServletRequest getRequest() { + return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + } + + /** + * 将对象转换程字符串 + * + * @param obj 目标对象 + * @param def 如果为null时的默认值 + * @return + */ + public static String null2String(Object obj, String def) { + return obj == null ? def : obj.toString(); + } + + public static String null2String(Object obj) { + return null2String(obj, ""); + } + + public static int getIntValue(Object obj, int def) { + try { + return Integer.parseInt(null2String(obj)); + } catch (Exception ex) { + return def; + } + } + + public static Page getPage() { + HttpServletRequest request = getRequest(); + String num = request.getParameter("pageNum"); + String size = request.getParameter("pageSize"); + + Page page = new Page(ElogSeviceUtils.getIntValue(num, 1), ElogSeviceUtils.getIntValue(size, 10)); + return page; + } + +// public static void main(String[] args) { +// //System.out.println(getTableName("select", "from")); +// //DataTypeEnum columnTypeEnum = getEnumFromString(DataTypeEnum.class, "varchar"); +// } + + public static List switchString(List list) { + if (list != null) { + return list.stream().map(m -> { + Set en = m.entrySet(); + for (Map.Entry entry : en) { + if (entry.getValue() != null) { + entry.setValue(String.valueOf(entry.getValue())); + } + } + return m; + }).collect(Collectors.toList()); + } else { + return list; + } + } + + public static List switchComplexString(List list) { + if (list != null) { + return list.stream().map(m -> { + Iterator iterator = m.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry next = iterator.next(); + if (next.getValue() != null) { + if (next.getValue() instanceof Map && "parmas".equals(next.getKey())) { + next.setValue(String.valueOf(next.getValue())); + } + if (next.getValue() instanceof List) { + } else { + next.setValue(String.valueOf(next.getValue())); + } + } + } + return m; + }).collect(Collectors.toList()); + } else { + return list; + } + } + + public static String getTenantKey() { + + String tenantKey = TenantRpcContext.getTenantKey(); + if (StringUtils.isNotBlank(tenantKey)) { + return tenantKey; + } + + return ""; + } + + public static String getEmployeeId() { + + String employeeId = TenantRpcContext.getEmployeeId(); + if (StringUtils.isNotBlank(employeeId)) { + return employeeId; + } + + return ""; + } + +// public static String getUserName() { +// +// String employeeId = getEmployeeId(); +// if (StringUtils.isNotEmpty(employeeId)) { +// SimpleEmployee simpleEmployee = null; +// try { +// HrmCommonUtil hrmCommonUtil = (HrmCommonUtil) ApplicationContextProvider.getBean("hrmCommonUtil"); +// simpleEmployee = hrmCommonUtil.getSimpleEmployee(ElogSeviceUtils.getLongValue(employeeId)); +// } catch (Exception e) { +// logger.error("Exception", e); +// } +// if (simpleEmployee != null) { +// if (StringUtils.isNotBlank(simpleEmployee.getUsername())) { +// return simpleEmployee.getUsername(); +// } +// } +// } +// +// +// return ""; +// } + + /** + * 获取rpc信息(客户端ip和来源设备) + * + * @param context + */ + public static void initRpcInfo(LoggerContext context) { + String device = ""; + String clientIp = ""; + String traceId = ""; + try { + device = RpcContext.getContext().getAttachment(EteamsConstant.DEVICE); + clientIp = RpcContext.getContext().getAttachment(EteamsConstant.CLIENT_IP); + traceId = RpcContext.getContext().getAttachment(ApmConstant.TRACE_ID); + logger.info("rpc调用获取到 device:{},clientIp:{},traceId:{}", device, clientIp, traceId); + } catch (Exception e) { + logger.error("Exception", e); + } + if (StringUtils.isEmpty(context.getDevice()) && StringUtils.isNotEmpty(device)) { + context.setDevice(device); + } + if (StringUtils.isEmpty(context.getFromTerminal()) && StringUtils.isNotEmpty(device)) { + context.setFromTerminal(getFromTerminal(device)); + } + + if (StringUtils.isEmpty(context.getClientIp()) && StringUtils.isNotEmpty(clientIp)) { + context.setClientIp(clientIp); + } + if (StringUtils.isEmpty(context.getBelongMainId()) && StringUtils.isNotEmpty(traceId)) { + context.setBelongMainId(traceId); + } + } + + public static String getFromTerminal(String device) { + String setFT = ""; + if (StringUtils.isNotEmpty(device)) { + if (!device.contains("wxwork") && device.contains("MicroMessenger")) {//来自微信 + setFT = FromTerminalType.MICO_MSG.getCode(); + } else if (device.contains("wxwork") && device.contains("MicroMessenger")) {//企业微信 + setFT = FromTerminalType.WECHAT.getCode(); + } else if (device.contains("iPhone") && device.contains("Mac")) {//来自 Iphone + setFT = FromTerminalType.IOS.getCode(); + } else if (device.contains("Mac OS") && !device.contains("iPhone") && device.contains("weapp-pc")) {//来自 mac_client + setFT = FromTerminalType.MAC_CLIENT.getCode();//mac_client + } else if (!device.contains("wxwork") && device.contains("Mobile")) {//移动端 + setFT = FromTerminalType.H5.getCode(); + } else if (device.contains("Android") && !device.contains("wxwork")) {//来自安卓 包含安卓并且不包含微信 + setFT = FromTerminalType.ANDROID.getCode(); + } else {//pc + setFT = FromTerminalType.PC.getCode(); + } + } + return setFT; + } + + /** + * sql连接条件注入sql + * + * @param condition + * @return + */ + public static String checkConditionSql(String condition) { + if ("AND".equalsIgnoreCase(condition) || + "OR".equalsIgnoreCase(condition) + ) { + return condition; + } + return "AND"; + } + + public static String checkTypeSql(String type) { + if ("LIKE".equalsIgnoreCase(type) || + "IN".equalsIgnoreCase(type) || + "!<>".equalsIgnoreCase(type) || + "!=".equalsIgnoreCase(type) || + "BETWEEN".equalsIgnoreCase(type) || + "IS NULL".equalsIgnoreCase(type) || + "IS NULL".equalsIgnoreCase(type) || + "=".equalsIgnoreCase(type) || + "IS NOT NULL".equalsIgnoreCase(type)) { + return type; + } + return "="; + } + + /** + * sql条件防止注入 + * + * @param value + * @return + */ + public static String checkValSql(String value) { + if (StringUtils.isBlank(value)) { + return ""; + } + Pattern p = Pattern.compile("\\s+"); + Matcher m = p.matcher(value); + String val = m.replaceAll(" "); + String[] keywords = {"master ", "truncate ", "declare ", "alert ", "create ", "drop ", " version", + "show ", "table ", "index ", "insert ", "into ", "from ", + "select ", "delete ", "update ", "mid ", "master ", "char ","union "}; + + String replaceStr = val.replaceAll(" ", ""); + if (replaceStr.contains("1=1") || replaceStr.contains(";")) { + return "-1"; + } + int count = 0; + String filterVal = ""; + for (String keyddlword : keywords) { + if (val.toLowerCase().contains(keyddlword)) { + count++; + if (count == 1) { + filterVal = keyddlword; + } + } + } + + if (count > 2) { + return filterVal; + } + value = SecurityUtil.ecodeForSql(value); + + return value; + } + + /** + * 压缩工具类- + * + * @param str + * @return desc:version 0.0.1 基于jdk自带 GZIP 压缩。最后转成base64。 + * 市面上有其他压缩像jdk 的 deflate 可以设置压缩级别,但是都是主动的,需要改业务方法, + * snappy 压缩适用于大数据压缩。大数据量比较快 hadoop首选,但是压缩后比例比较大。 + * xz 下的 压缩比率大,但是解压比较慢-不提倡,空间换时间了 + * common下的压缩其实和jdk差不多,网上说优于jdk,但是相差不大。 + * weaver 压缩基于jdk + */ + public static String compress(String str) { + if (str == null || str.trim().length() == 0) { + return str; + } + try (ByteArrayOutputStream out = new ByteArrayOutputStream(); + GZIPOutputStream gzip = new GZIPOutputStream(out)) { + gzip.write(str.getBytes()); + gzip.close(); + return Base64.getEncoder().encodeToString(out.toByteArray()); + } catch (Exception e) { + logger.error("压缩失败", e.getMessage()); + return str; + } + + } + + + /** + * 解压缩 + * + * @param str + * @return + */ + public static String uncompress(String str) { + byte[] decode = Base64.getDecoder().decode(str); + if (str == null || str.trim().length() == 0) { + return str; + } + try (ByteArrayOutputStream out = new ByteArrayOutputStream(); + ByteArrayInputStream in = new ByteArrayInputStream(decode)) { + GZIPInputStream ungzip = new GZIPInputStream(in); + byte[] buffer = new byte[2048]; + int n; + while ((n = ungzip.read(buffer)) >= 0) { + out.write(buffer, 0, n); + } + return new String(out.toByteArray()); + } catch (Exception e) { + logger.error("解缩失败:{}", e.getMessage()); + return str; + } + } + + public static Boolean checkIsNumber(Object obj) { + if (obj == null) { + return false; + } + + return StringUtils.isNumeric(obj.toString()); + + } +} diff --git a/src/com/engine/salary/elog/web/LoggerTableController.java b/src/com/engine/salary/elog/web/LoggerTableController.java new file mode 100644 index 000000000..279bffdfe --- /dev/null +++ b/src/com/engine/salary/elog/web/LoggerTableController.java @@ -0,0 +1,178 @@ +package com.engine.salary.elog.web; + +import com.weaver.common.authority.annotation.WeaPermission; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.batch.entity.BatchDocumentMessage; +import com.weaver.common.component.table.WeaTable; +import com.weaver.common.elog.service.ApplicationContextProvider; +import com.weaver.common.elog.service.ILoggerTableService; +import com.weaver.common.elog.service.impl.LoggerTableService; +import com.weaver.framework.spring.annotation.AopClass; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.apache.ibatis.annotations.Param; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; +import java.util.Map; + +public class LoggerTableController { + + @Autowired + @Qualifier("loggerTableService") + private LoggerTableService loggerTableService; + + @ApiOperation("获取日志") + @RequestMapping(path = "getLogs", method = {RequestMethod.GET, RequestMethod.POST}) + @WeaPermission(publicPermission = true) + public WeaResult getLogs(@RequestBody(required = false) @ApiParam("数据") String data){ + + WeaTable weaTable = loggerTableService.queryLogs(data); + return WeaResult.success(weaTable); + } + + @ApiOperation("获取日志(卡片)") + @RequestMapping(path = "getCardLogs", method = {RequestMethod.GET, RequestMethod.POST}) + @WeaPermission(publicPermission = true) + public WeaResult>> carddatas(@RequestBody(required = false) @ApiParam("数据") String data){ + List> list = loggerTableService.queryCardLogList(data); + return WeaResult.success(list); + } + + @ApiOperation("获取单条操作记录的更新明细") + @RequestMapping(path = "getDetailChanges", method = {RequestMethod.GET, RequestMethod.POST}) + @WeaPermission(publicPermission = true) + public WeaResult>> getDetailChanges(@PathVariable("module") @ApiParam("服务(模块)名")String module, + @PathVariable("function") @ApiParam("方法名")String function, + @RequestParam("mainid") @ApiParam("主键id") String mainid, + @RequestParam("detailTransMethod") @ApiParam("转换方法") String detailTransMethod) { + return WeaResult.success(loggerTableService.getDetailChanges(module, function,mainid,detailTransMethod)); + } + + /** + * 获取单条操作记录的更新明细(分页) + * @param module 服务(模块)名 + * @param function 方法名 + * @param mainid 主键id + * @param detailTransMethod 转换方法 + * @param current 页码 + * @param pageSize 每页条数 + * @return WeaTable + */ + @ApiOperation("获取单条操作记录的更新明细(分页)") + @RequestMapping(path = "getDetailChangePages", method = {RequestMethod.GET, RequestMethod.POST}) + @WeaPermission(publicPermission = true) + public WeaResult getDetailChangePages(@PathVariable("module") @ApiParam("服务(模块)名")String module, + @PathVariable("function") @ApiParam("方法名")String function, + @RequestParam("mainid") @ApiParam("主键id") String mainid, + @RequestParam("detailTransMethod") @ApiParam("转换方法") String detailTransMethod, + @RequestParam("page") @ApiParam("页码") String current, + @RequestParam("pageSize") @ApiParam("每页条数") String pageSize) { + return WeaResult.success(loggerTableService.getDetailChangePages(module, function,mainid,detailTransMethod,current,pageSize)); + } + + + @ApiOperation("获取日志列表") + @RequestMapping(path = "datas", method = {RequestMethod.GET, RequestMethod.POST}) + @WeaPermission(publicPermission = true) + public WeaResult>> datas(@PathVariable("module") @ApiParam("服务(模块)名")String module, + @PathVariable("function") @ApiParam("方法名")String function, + @Param("pageSize") @ApiParam("每页多少数据")String pageSize, + @Param("current") @ApiParam("当前页")String current, + @ApiParam("查询条件") String condition){ + + if("datasecurity".equals(module) && "auditLog".equals(function)) { + try { + ILoggerTableService tableService = ApplicationContextProvider.getBean("auditLogService", ILoggerTableService.class); + if(tableService != null){ + List> list = tableService.queryLogList(module, function, current, pageSize, condition); + return WeaResult.success(list); + } + } catch ( Exception e) { + + } + } + List> list = loggerTableService.queryLogList(module, function, current, pageSize, condition); + return WeaResult.success(list); + } + + @ApiOperation("获取日志总数") + @RequestMapping(path = "counts", method = {RequestMethod.GET, RequestMethod.POST}) + @WeaPermission(publicPermission = true) + public WeaResult> counts(@PathVariable("module") @ApiParam("服务(模块)名") String module, + @PathVariable("function") @ApiParam("方法名")String function){ + return WeaResult.success(loggerTableService.countLog(module,function), "success"); + } + + @ApiOperation("获取明细日志列表") + @RequestMapping(path = "detaildatas", method = {RequestMethod.GET, RequestMethod.POST}) + @WeaPermission(publicPermission = true) + public WeaResult>> detaildatas(@PathVariable("module") @ApiParam("服务(模块)名")String module, + @PathVariable("function") @ApiParam("方法名")String function, + @Param("pageSize") @ApiParam("每页多少数据")String pageSize, + @Param("current") @ApiParam("当前页")String current, + @Param("mainId") @ApiParam("主表id") String mainId, + @ApiParam("查询条件") String condition){ + + if("datasecurity".equals(module) && "auditLog".equals(function)) { + try { + ILoggerTableService tableService = ApplicationContextProvider.getBean("auditLogService", ILoggerTableService.class); + if(tableService != null){ + List> list = tableService.queryDetailLogList(module, function, current, pageSize, condition, mainId); + return WeaResult.success(list); + } + } catch ( Exception e) { + + } + } + List> list = loggerTableService.queryDetailLogList(module, function, current, pageSize, condition, mainId); + return WeaResult.success(list); + } + + @ApiOperation("获取日志总数") + @RequestMapping(path = "detailcounts", method = {RequestMethod.GET, RequestMethod.POST}) + @WeaPermission(publicPermission = true) + public WeaResult> detailcounts(@PathVariable("module") @ApiParam("服务(模块)名") String module, + @PathVariable("function") @ApiParam("方法名")String function, + @Param("mainId") @ApiParam("主表id") String mainId){ + return WeaResult.success(loggerTableService.countDestailLog(module,function, mainId), "success"); + } + + @ApiOperation("根据traceId获取链路列表") + @RequestMapping(path = "queryLogTraceInfo", method = {RequestMethod.GET, RequestMethod.POST}) + @WeaPermission(publicPermission = true) + public WeaResult queryLogTraceInfo(@PathVariable("module") @ApiParam("服务(模块)名") String module, + @PathVariable("function") @ApiParam("方法名")String function, + @Param("traceId") @ApiParam("traceId") String traceId, + @Param("currentPage") @ApiParam("currentPage") Integer currentPage, + @Param("pageSize") @ApiParam("pageSize") Integer pageSize, + @Param("traceTransMethod") @ApiParam("traceTransMethod") String traceTransMethod + ){ + + if("datasecurity".equals(module) && "auditLog".equals(function)) { + try { + ILoggerTableService tableService = ApplicationContextProvider.getBean("auditLogService", ILoggerTableService.class); + if(tableService != null){ + return WeaResult.success(tableService.queryElogTraceInfo(traceId,module,function,currentPage,pageSize,traceTransMethod ), "success"); + } + } catch ( Exception e) { + + } + } + + return WeaResult.success(loggerTableService.queryElogTraceInfo(traceId,module,function,currentPage,pageSize,traceTransMethod ), "success"); + } + + @ApiOperation("日志下载") + @RequestMapping(path = "downloadLog", method = {RequestMethod.GET, RequestMethod.POST}) + @WeaPermission(publicPermission = true) + public WeaResult downloadLog(@RequestBody(required = false) @ApiParam("数据") String data){ + + BatchDocumentMessage message = loggerTableService.downloadLog(data); + return WeaResult.success(message); + } +} From b7435554e87fe5fae4aa133ad6e6a04b4d6fc396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 26 Dec 2023 16:12:44 +0800 Subject: [PATCH 08/64] =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/salary/web/LoggerTableController.java | 2 +- .../salary/elog/annotation/ElogField.java | 2 +- .../salary/elog/annotation/OperateType.java | 15 + .../annotation/handle/ElogTableScanner.java | 4 +- .../elog/async/LoggerMessageListener.java | 2 +- .../salary/elog/config/ELogTableChecker.java | 2 +- .../elog/{ => entity}/dto/CancelContext.java | 2 +- .../elog/{ => entity}/dto/DataTypeEnum.java | 2 +- .../elog/{ => entity}/dto/ElogBean.java | 2 +- .../{ => entity}/dto/FilterConditionDto.java | 2 +- .../engine/salary/elog/entity/dto/Like.java | 31 + .../elog/{ => entity}/dto/LoggerContext.java | 2 +- .../{ => entity}/dto/LoggerDetailContext.java | 2 +- .../elog/entity/dto/ReadInfoEntity.java | 40 + .../elog/{ => entity}/dto/RedoContext.java | 2 +- .../elog/{ => entity}/dto/ShowColumsDto.java | 2 +- .../{ => entity}/dto/TableChangeBean.java | 2 +- .../{ => entity}/dto/TableColumnBean.java | 2 +- .../elog/entity/param/ELogGetLogParam.java | 35 + .../elog/service/ILocalElogService.java | 4 +- .../elog/service/ILoggerTableService.java | 11 +- .../elog/service/impl/LocalElogService.java | 4 +- .../elog/service/impl/LoggerTableService.java | 1419 +++------ .../elog/threadlocal/ElogThreadLocal.java | 2 +- .../salary/elog/util/ElogServiceUtils.java | 6 +- .../elog/util/ElogSeviceSwitchUtils.java | 2746 +++++++++-------- .../salary/elog/util/ElogSeviceUtils.java | 121 +- .../engine/salary/elog/util/ElogUtils.java | 2 +- .../engine/salary/elog/util/FieldNameMap.java | 94 + .../salary/elog/util/LoggerTemplate.java | 6 +- .../elog/web/LoggerTableController.java | 331 +- .../mapper/elog/ElogTableCheckerMapper.java | 2 +- .../mapper/elog/ElogTableCheckerMapper.xml | 8 +- .../mapper/elog/LocalElogAopDaoMapper.java | 4 +- .../mapper/elog/LocalElogDaoMapper.java | 215 +- .../salary/mapper/elog/LocalElogDaoMapper.xml | 429 ++- .../impl/SalaryAcctEmployeeServiceImpl.java | 32 +- .../service/impl/SalaryItemServiceImpl.java | 2 +- 38 files changed, 2922 insertions(+), 2669 deletions(-) create mode 100644 src/com/engine/salary/elog/annotation/OperateType.java rename src/com/engine/salary/elog/{ => entity}/dto/CancelContext.java (92%) rename src/com/engine/salary/elog/{ => entity}/dto/DataTypeEnum.java (78%) rename src/com/engine/salary/elog/{ => entity}/dto/ElogBean.java (98%) rename src/com/engine/salary/elog/{ => entity}/dto/FilterConditionDto.java (97%) create mode 100644 src/com/engine/salary/elog/entity/dto/Like.java rename src/com/engine/salary/elog/{ => entity}/dto/LoggerContext.java (99%) rename src/com/engine/salary/elog/{ => entity}/dto/LoggerDetailContext.java (99%) create mode 100644 src/com/engine/salary/elog/entity/dto/ReadInfoEntity.java rename src/com/engine/salary/elog/{ => entity}/dto/RedoContext.java (91%) rename src/com/engine/salary/elog/{ => entity}/dto/ShowColumsDto.java (97%) rename src/com/engine/salary/elog/{ => entity}/dto/TableChangeBean.java (98%) rename src/com/engine/salary/elog/{ => entity}/dto/TableColumnBean.java (98%) create mode 100644 src/com/engine/salary/elog/entity/param/ELogGetLogParam.java create mode 100644 src/com/engine/salary/elog/util/FieldNameMap.java diff --git a/src/com/api/salary/web/LoggerTableController.java b/src/com/api/salary/web/LoggerTableController.java index eb33772ce..ddf2b4f41 100644 --- a/src/com/api/salary/web/LoggerTableController.java +++ b/src/com/api/salary/web/LoggerTableController.java @@ -11,5 +11,5 @@ import javax.ws.rs.Path; * @version 1.0 **/ @Path("/bs/hrmsalary/elog") -public class LoggerTableController { +public class LoggerTableController extends com.engine.salary.elog.web.LoggerTableController{ } diff --git a/src/com/engine/salary/elog/annotation/ElogField.java b/src/com/engine/salary/elog/annotation/ElogField.java index 557a14f3c..a60c1f6a7 100644 --- a/src/com/engine/salary/elog/annotation/ElogField.java +++ b/src/com/engine/salary/elog/annotation/ElogField.java @@ -1,6 +1,6 @@ package com.engine.salary.elog.annotation; -import com.engine.salary.elog.dto.DataTypeEnum; +import com.engine.salary.elog.entity.dto.DataTypeEnum; import java.lang.annotation.*; diff --git a/src/com/engine/salary/elog/annotation/OperateType.java b/src/com/engine/salary/elog/annotation/OperateType.java new file mode 100644 index 000000000..7dbb84303 --- /dev/null +++ b/src/com/engine/salary/elog/annotation/OperateType.java @@ -0,0 +1,15 @@ +package com.engine.salary.elog.annotation; + +public class OperateType { + public static final String view = "view"; + public static final String viewSpan = "查看"; + + public static final String add = "add"; + public static final String addSpan = "新增"; + + public static final String update = "update"; + public static final String updateSpan = "更新"; + + public static final String delete = "delete"; + public static final String deleteSpan = "删除"; +} diff --git a/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java b/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java index 4e75cf8bb..a024d3478 100644 --- a/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java +++ b/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java @@ -2,8 +2,8 @@ package com.engine.salary.elog.annotation.handle; import com.engine.salary.elog.annotation.ElogField; import com.engine.salary.elog.annotation.ElogTable; -import com.engine.salary.elog.dto.DataTypeEnum; -import com.engine.salary.elog.dto.TableColumnBean; +import com.engine.salary.elog.entity.dto.DataTypeEnum; +import com.engine.salary.elog.entity.dto.TableColumnBean; import com.engine.salary.elog.util.ElogUtils; import lombok.extern.slf4j.Slf4j; import org.reflections.Reflections; diff --git a/src/com/engine/salary/elog/async/LoggerMessageListener.java b/src/com/engine/salary/elog/async/LoggerMessageListener.java index 6687a0603..2bf5dc957 100644 --- a/src/com/engine/salary/elog/async/LoggerMessageListener.java +++ b/src/com/engine/salary/elog/async/LoggerMessageListener.java @@ -1,7 +1,7 @@ package com.engine.salary.elog.async; import com.engine.salary.elog.config.ELogTableChecker; -import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.elog.service.impl.LocalElogService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/com/engine/salary/elog/config/ELogTableChecker.java b/src/com/engine/salary/elog/config/ELogTableChecker.java index acbb1dc89..272da15a7 100644 --- a/src/com/engine/salary/elog/config/ELogTableChecker.java +++ b/src/com/engine/salary/elog/config/ELogTableChecker.java @@ -1,6 +1,6 @@ package com.engine.salary.elog.config; -import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.mapper.elog.ElogTableCheckerMapper; import com.engine.salary.util.db.MapperProxyFactory; import dm.jdbc.util.IdGenerator; diff --git a/src/com/engine/salary/elog/dto/CancelContext.java b/src/com/engine/salary/elog/entity/dto/CancelContext.java similarity index 92% rename from src/com/engine/salary/elog/dto/CancelContext.java rename to src/com/engine/salary/elog/entity/dto/CancelContext.java index 1c9771b69..d7ecccb7b 100644 --- a/src/com/engine/salary/elog/dto/CancelContext.java +++ b/src/com/engine/salary/elog/entity/dto/CancelContext.java @@ -1,4 +1,4 @@ -package com.engine.salary.elog.dto; +package com.engine.salary.elog.entity.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/src/com/engine/salary/elog/dto/DataTypeEnum.java b/src/com/engine/salary/elog/entity/dto/DataTypeEnum.java similarity index 78% rename from src/com/engine/salary/elog/dto/DataTypeEnum.java rename to src/com/engine/salary/elog/entity/dto/DataTypeEnum.java index 4b46cdd33..b31b8e490 100644 --- a/src/com/engine/salary/elog/dto/DataTypeEnum.java +++ b/src/com/engine/salary/elog/entity/dto/DataTypeEnum.java @@ -1,4 +1,4 @@ -package com.engine.salary.elog.dto; +package com.engine.salary.elog.entity.dto; public enum DataTypeEnum { VARCHAR, diff --git a/src/com/engine/salary/elog/dto/ElogBean.java b/src/com/engine/salary/elog/entity/dto/ElogBean.java similarity index 98% rename from src/com/engine/salary/elog/dto/ElogBean.java rename to src/com/engine/salary/elog/entity/dto/ElogBean.java index d4239b9a7..b79b0f66e 100644 --- a/src/com/engine/salary/elog/dto/ElogBean.java +++ b/src/com/engine/salary/elog/entity/dto/ElogBean.java @@ -1,4 +1,4 @@ -package com.engine.salary.elog.dto; +package com.engine.salary.elog.entity.dto; import java.io.Serializable; import java.util.ArrayList; diff --git a/src/com/engine/salary/elog/dto/FilterConditionDto.java b/src/com/engine/salary/elog/entity/dto/FilterConditionDto.java similarity index 97% rename from src/com/engine/salary/elog/dto/FilterConditionDto.java rename to src/com/engine/salary/elog/entity/dto/FilterConditionDto.java index d276b1b27..28cb451e5 100644 --- a/src/com/engine/salary/elog/dto/FilterConditionDto.java +++ b/src/com/engine/salary/elog/entity/dto/FilterConditionDto.java @@ -1,4 +1,4 @@ -package com.engine.salary.elog.dto; +package com.engine.salary.elog.entity.dto; import java.io.Serializable; diff --git a/src/com/engine/salary/elog/entity/dto/Like.java b/src/com/engine/salary/elog/entity/dto/Like.java new file mode 100644 index 000000000..2caead76c --- /dev/null +++ b/src/com/engine/salary/elog/entity/dto/Like.java @@ -0,0 +1,31 @@ +package com.engine.salary.elog.entity.dto; + +import java.io.Serializable; + +/** + * @date: 2021/6/1 17:50 + * @author: deli.xu + * @description: + */ +public class Like implements Serializable { + private static final long serialVersionUID = -3399942468474767851L; + private String prefix; + private String suffix; + + + public String getPrefix() { + return prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + public String getSuffix() { + return suffix; + } + + public void setSuffix(String suffix) { + this.suffix = suffix; + } +} diff --git a/src/com/engine/salary/elog/dto/LoggerContext.java b/src/com/engine/salary/elog/entity/dto/LoggerContext.java similarity index 99% rename from src/com/engine/salary/elog/dto/LoggerContext.java rename to src/com/engine/salary/elog/entity/dto/LoggerContext.java index 5b00005f0..f9be10c8f 100644 --- a/src/com/engine/salary/elog/dto/LoggerContext.java +++ b/src/com/engine/salary/elog/entity/dto/LoggerContext.java @@ -1,4 +1,4 @@ -package com.engine.salary.elog.dto; +package com.engine.salary.elog.entity.dto; import com.alibaba.fastjson.annotation.JSONField; import com.engine.salary.elog.annotation.ElogField; diff --git a/src/com/engine/salary/elog/dto/LoggerDetailContext.java b/src/com/engine/salary/elog/entity/dto/LoggerDetailContext.java similarity index 99% rename from src/com/engine/salary/elog/dto/LoggerDetailContext.java rename to src/com/engine/salary/elog/entity/dto/LoggerDetailContext.java index 7bb64e1ff..ef4a66503 100644 --- a/src/com/engine/salary/elog/dto/LoggerDetailContext.java +++ b/src/com/engine/salary/elog/entity/dto/LoggerDetailContext.java @@ -1,4 +1,4 @@ -package com.engine.salary.elog.dto; +package com.engine.salary.elog.entity.dto; import com.engine.salary.elog.annotation.ElogDetailTable; import com.engine.salary.elog.annotation.ElogField; diff --git a/src/com/engine/salary/elog/entity/dto/ReadInfoEntity.java b/src/com/engine/salary/elog/entity/dto/ReadInfoEntity.java new file mode 100644 index 000000000..3f7a364e4 --- /dev/null +++ b/src/com/engine/salary/elog/entity/dto/ReadInfoEntity.java @@ -0,0 +1,40 @@ +package com.engine.salary.elog.entity.dto; + +import java.io.Serializable; +import java.util.Date; + +/** + * @date: 2022/5/14 13:52 + * @author: deli.xu + * @description: + */ + +public class ReadInfoEntity implements Serializable { + private static final long serialVersionUID = -8890667941835568289L; + private Long employeeId; + private Date date; + + public Long getEmployeeId() { + return this.employeeId; + } + + public void setEmployeeId(Long employeeId) { + this.employeeId = employeeId; + } + + public Date getDate() { + return this.date; + } + + public void setDate(Date date) { + this.date = date; + } + + public ReadInfoEntity() { + } + + public ReadInfoEntity(Long employeeId, Date date) { + this.employeeId = employeeId; + this.date = date; + } +} \ No newline at end of file diff --git a/src/com/engine/salary/elog/dto/RedoContext.java b/src/com/engine/salary/elog/entity/dto/RedoContext.java similarity index 91% rename from src/com/engine/salary/elog/dto/RedoContext.java rename to src/com/engine/salary/elog/entity/dto/RedoContext.java index 749643aed..3ec87adb3 100644 --- a/src/com/engine/salary/elog/dto/RedoContext.java +++ b/src/com/engine/salary/elog/entity/dto/RedoContext.java @@ -1,4 +1,4 @@ -package com.engine.salary.elog.dto; +package com.engine.salary.elog.entity.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/src/com/engine/salary/elog/dto/ShowColumsDto.java b/src/com/engine/salary/elog/entity/dto/ShowColumsDto.java similarity index 97% rename from src/com/engine/salary/elog/dto/ShowColumsDto.java rename to src/com/engine/salary/elog/entity/dto/ShowColumsDto.java index 828474be5..b5f47e084 100644 --- a/src/com/engine/salary/elog/dto/ShowColumsDto.java +++ b/src/com/engine/salary/elog/entity/dto/ShowColumsDto.java @@ -1,4 +1,4 @@ -package com.engine.salary.elog.dto; +package com.engine.salary.elog.entity.dto; import java.io.Serializable; diff --git a/src/com/engine/salary/elog/dto/TableChangeBean.java b/src/com/engine/salary/elog/entity/dto/TableChangeBean.java similarity index 98% rename from src/com/engine/salary/elog/dto/TableChangeBean.java rename to src/com/engine/salary/elog/entity/dto/TableChangeBean.java index 463d9dd73..445bd8510 100644 --- a/src/com/engine/salary/elog/dto/TableChangeBean.java +++ b/src/com/engine/salary/elog/entity/dto/TableChangeBean.java @@ -1,4 +1,4 @@ -package com.engine.salary.elog.dto; +package com.engine.salary.elog.entity.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/src/com/engine/salary/elog/dto/TableColumnBean.java b/src/com/engine/salary/elog/entity/dto/TableColumnBean.java similarity index 98% rename from src/com/engine/salary/elog/dto/TableColumnBean.java rename to src/com/engine/salary/elog/entity/dto/TableColumnBean.java index cf8609c61..a6fdf6148 100644 --- a/src/com/engine/salary/elog/dto/TableColumnBean.java +++ b/src/com/engine/salary/elog/entity/dto/TableColumnBean.java @@ -1,4 +1,4 @@ -package com.engine.salary.elog.dto; +package com.engine.salary.elog.entity.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/src/com/engine/salary/elog/entity/param/ELogGetLogParam.java b/src/com/engine/salary/elog/entity/param/ELogGetLogParam.java new file mode 100644 index 000000000..77132c908 --- /dev/null +++ b/src/com/engine/salary/elog/entity/param/ELogGetLogParam.java @@ -0,0 +1,35 @@ +package com.engine.salary.elog.entity.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ELogGetLogParam { + /** + * 服务(模块)名 + */ + String module; + /** + * 方法名 + */ + String function; + /** + * 查询条件 + */ + String condition; + /** + * 每页多少数据 + */ + String pageSize; + /** + * ' + * 当前页 + */ + String current; + +} diff --git a/src/com/engine/salary/elog/service/ILocalElogService.java b/src/com/engine/salary/elog/service/ILocalElogService.java index 9d721b69c..af12b54c8 100644 --- a/src/com/engine/salary/elog/service/ILocalElogService.java +++ b/src/com/engine/salary/elog/service/ILocalElogService.java @@ -1,7 +1,7 @@ package com.engine.salary.elog.service; -import com.engine.salary.elog.dto.LoggerContext; -import com.engine.salary.elog.dto.LoggerDetailContext; +import com.engine.salary.elog.entity.dto.LoggerContext; +import com.engine.salary.elog.entity.dto.LoggerDetailContext; public interface ILocalElogService { diff --git a/src/com/engine/salary/elog/service/ILoggerTableService.java b/src/com/engine/salary/elog/service/ILoggerTableService.java index 00c5b6327..e59fde3fb 100644 --- a/src/com/engine/salary/elog/service/ILoggerTableService.java +++ b/src/com/engine/salary/elog/service/ILoggerTableService.java @@ -1,14 +1,15 @@ package com.engine.salary.elog.service; -import com.weaver.common.batch.entity.BatchDocumentMessage; -import com.weaver.common.component.table.WeaTable; +import com.cloudstore.eccom.pc.table.WeaTable; +import com.engine.salary.elog.entity.param.ELogGetLogParam; +import com.engine.salary.util.page.PageInfo; import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; public interface ILoggerTableService { - WeaTable queryLogs(String data); + PageInfo queryLogs(String data); WeaTable queryLogsPapi(String data, HttpServletRequest request); @@ -16,7 +17,7 @@ public interface ILoggerTableService { List getDetailChangesPapi(String module, String function, String mainid, String transMethod, HttpServletRequest request); - List queryLogList(String module, String function, String current, String pageSize, String condition); + List queryLogList(ELogGetLogParam param); List queryCardLogList(String data); @@ -32,7 +33,7 @@ public interface ILoggerTableService { List queryLogInfoByCustom(String module, String function, String field, String value); - BatchDocumentMessage downloadLog(String data); +// BatchDocumentMessage downloadLog(String data); WeaTable getDetailChangePages(String module, String function, String mainid, String detailTransMethod, String current, String pageSize); diff --git a/src/com/engine/salary/elog/service/impl/LocalElogService.java b/src/com/engine/salary/elog/service/impl/LocalElogService.java index d12163a29..3900f4727 100644 --- a/src/com/engine/salary/elog/service/impl/LocalElogService.java +++ b/src/com/engine/salary/elog/service/impl/LocalElogService.java @@ -2,8 +2,8 @@ package com.engine.salary.elog.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.engine.salary.elog.dto.LoggerContext; -import com.engine.salary.elog.dto.LoggerDetailContext; +import com.engine.salary.elog.entity.dto.LoggerContext; +import com.engine.salary.elog.entity.dto.LoggerDetailContext; import com.engine.salary.elog.enums.ElogConsts; import com.engine.salary.elog.service.ILocalElogService; import com.engine.salary.elog.util.ElogUtils; diff --git a/src/com/engine/salary/elog/service/impl/LoggerTableService.java b/src/com/engine/salary/elog/service/impl/LoggerTableService.java index bb5dfc812..f81a8c0ab 100644 --- a/src/com/engine/salary/elog/service/impl/LoggerTableService.java +++ b/src/com/engine/salary/elog/service/impl/LoggerTableService.java @@ -4,113 +4,75 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.engine.salary.elog.dto.ElogBean; -import com.engine.salary.elog.dto.FilterConditionDto; -import com.engine.salary.elog.dto.LoggerContext; -import com.engine.salary.elog.dto.ShowColumsDto; +import com.cloudstore.eccom.pc.table.WeaTable; +import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.engine.core.impl.Service; +import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.elog.annotation.OperateType; +import com.engine.salary.elog.entity.dto.ElogBean; +import com.engine.salary.elog.entity.dto.FilterConditionDto; +import com.engine.salary.elog.entity.dto.LoggerContext; +import com.engine.salary.elog.entity.dto.ShowColumsDto; +import com.engine.salary.elog.entity.param.ELogGetLogParam; +import com.engine.salary.elog.enums.ElogConsts; import com.engine.salary.elog.service.ILoggerTableService; import com.engine.salary.elog.util.ElogServiceUtils; +import com.engine.salary.elog.util.ElogSeviceSwitchUtils; import com.engine.salary.elog.util.ElogSeviceUtils; +import com.engine.salary.elog.util.FieldNameMap; import com.engine.salary.mapper.elog.LocalElogDaoMapper; -import com.weaver.common.batch.consts.FileType; -import com.weaver.common.batch.consts.HandlerFileMethod; -import com.weaver.common.batch.entity.BatchDocumentMessage; -import com.weaver.common.batch.entity.BatchFile; -import com.weaver.common.batch.entity.ExcelSheet; -import com.weaver.common.batch.sender.BatchExportSender; -import com.weaver.common.cache.tablecache.impl.ComInfoCache; -import com.weaver.common.component.table.WeaTable; -import com.weaver.common.component.table.column.WeaTableColumn; -import com.weaver.common.component.table.page.Page; -import com.weaver.common.distribution.genid.IdGenerator; -import com.weaver.common.elog.annotation.HandleElog; -import com.weaver.common.elog.annotation.OperateType; -import com.weaver.common.elog.annotation.handle.ElogMethodHandler; -import com.weaver.common.elog.annotation.handle.MethodHandler; -import com.weaver.common.elog.consts.ElogEsTableConsts; -import com.weaver.common.elog.dao.QueryCommonTabeMapper; -import com.weaver.common.elog.dto.*; -import com.weaver.common.elog.enums.ElogConsts; -import com.weaver.common.elog.service.ApplicationContextProvider; -import com.weaver.common.elog.service.ElogHandleService; -import com.weaver.common.elog.util.*; -import com.weaver.common.hrm.cache.HrmAvatarComInfo; -import com.weaver.common.hrm.cache.HrmEmployeeComInfo; -import com.weaver.common.hrm.domain.organization.HrmConditionResultType; -import com.weaver.common.hrm.domain.organization.HrmOrgEmpCondition; -import com.weaver.common.hrm.entity.employee.HrmEmployee; -import com.weaver.common.hrm.service.HrmCommonEmployeeService; -import com.weaver.common.hrm.util.HrmCommonUtil; -import com.weaver.common.hrm.util.HrmI18nUtil; -import com.weaver.common.i18n.label.SystemEnv; -import com.weaver.common.i18n.tool.config.date.format.DateRangeTransformer; -import com.weaver.common.i18n.tool.util.I18nUtil; -import com.weaver.common.mybatis.baseConfig.WeaDatabaseIdProvider; -import com.weaver.common.mybatis.util.DatabaseUtil; -import com.weaver.common.security.util.SecurityUtil; -import com.weaver.framework.rpc.context.impl.TenantRpcContext; -import com.weaver.teams.security.context.UserContext; -import com.weaver.teams.security.user.User; -import org.apache.commons.collections.CollectionUtils; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.MapperProxyFactory; +import com.engine.salary.util.page.Column; +import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.page.SalaryPageUtil; +import com.github.pagehelper.Page; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.elasticsearch.action.admin.indices.get.GetIndexRequest; -import org.elasticsearch.action.search.SearchRequest; -import org.elasticsearch.action.search.SearchResponse; -import org.elasticsearch.client.RequestOptions; -import org.elasticsearch.client.RestHighLevelClient; -import org.elasticsearch.client.indices.CreateIndexRequest; -import org.elasticsearch.index.query.QueryBuilders; -import org.elasticsearch.search.SearchHit; -import org.elasticsearch.search.SearchHits; -import org.elasticsearch.search.builder.SearchSourceBuilder; -import org.elasticsearch.xcontent.XContentType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.annotation.AnnotationUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; -import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import java.io.IOException; import java.util.*; import java.util.stream.Collectors; -import static com.weaver.common.elog.consts.LogConstants.MAPPING_TEMPLATE; - -public class LoggerTableService implements ILoggerTableService { +public class LoggerTableService extends Service implements ILoggerTableService { private static final Logger logger = LoggerFactory.getLogger(LoggerTableService.class); - @Autowired - private LocalElogDaoMapper localElogDaoMapper; + private LocalElogDaoMapper getLocalElogDaoMapper() { + return MapperProxyFactory.getProxy(LocalElogDaoMapper.class); + } - @Autowired - private ComInfoCache comInfoCache; - - @Autowired - private HrmCommonUtil hrmCommonUtil; - - @Autowired - private QueryCommonTabeMapper queryCommonTabeMapper; - - @Autowired - private RestHighLevelClient restHighLevelClient; - - @Resource - private BatchExportSender batchExportSender; - - - @Resource - private DateRangeTransformer dateRangeTransformer; - - @Autowired - private HrmCommonEmployeeService hrmCommonEmployeeService; - - - private static final String databaseId = DatabaseUtil.getDatabaseId(); + // +// private ComInfoCache comInfoCache; +// +// +// private HrmCommonUtil hrmCommonUtil; +// +// +// private QueryCommonTabeMapper queryCommonTabeMapper; +// +// +// private RestHighLevelClient restHighLevelClient; +// +// @Resource +// private BatchExportSender batchExportSender; +// +// +// @Resource +// private DateRangeTransformer dateRangeTransformer; +// +// +// private HrmCommonEmployeeService hrmCommonEmployeeService; +// +// + private final String databaseId = new RecordSet().getDBType(); @Override - public WeaTable queryLogs(String data) { + public PageInfo queryLogs(String data) { //解析数据 ElogBean elogBean = ElogServiceUtils.getElogBean(data); // columIndex统一转为小写 @@ -143,44 +105,14 @@ public class LoggerTableService implements ILoggerTableService { //获取主表 String tableName = ElogSeviceUtils.getTableName(module, function); //获取weaTable - WeaTable weaTable = new WeaTable(); - List recordColumns = getWeaColumns(data, showColums, module, function, weaTable); + List columns = getWeaColumns(data, showColums, module, function); //获取条件sql - String searchMapsql = getSearchMapSql(searchMap, module, function,elogBean.getShowColumns()); + String searchMapsql = getSearchMapSql(searchMap, module, function, elogBean.getShowColumns()); String sb = getQueryCondition(filterConditionDtos); sb = searchMapsql.concat(sb); - //处理数据权限 - Map res = getCustomAuthSql(transMethod, authParamsJson, "auth"); - if (!res.isEmpty()) { - Object flag = res.get("flag"); - if (flag != null && flag instanceof Boolean) { - boolean f = (boolean) flag; - if (!f) { - weaTable.setCustomParameters(res); - return weaTable; - } - } - } String customSql = getCustomSql(transMethod, sb, "before"); - //处理数据权限(前缀) - Map hashMap = addPermissionHandler(transMethod); - logger.info("查询条件sql:{}", customSql); - //处理数据权限(对接权限sql) - PermissionParams permissionParams = getPermissionParams(hashMap); - String permissionId = permissionParams.getPermissionId(); - String permissionType = permissionParams.getPermissionType(); - String mainDataTable = permissionParams.getMainDataTable(); - String mainDataTableAlias = permissionParams.getMainDataTableAlias(); - String primaryKey = permissionParams.getPrimaryKey(); - String permissionTargetId = permissionParams.getPermissionTargetId(); - String permissionConfigSourceId = permissionParams.getPermissionConfigSourceId(); - - - // 设置操作菜单 - //weaTable.getOperates().add(new WeaTableOperate("查看", 1)); // 分页 - //Page page = ElogSeviceUtils.getPage(); Page page = null; if (StringUtils.isEmpty(downloadSize)) { page = new Page(ElogSeviceUtils.getIntValue(pageNum, 1), ElogSeviceUtils.getIntValue(pageSize, 10)); @@ -189,49 +121,9 @@ public class LoggerTableService implements ILoggerTableService { page = new Page(1, pagesize); } - String columns = getshowColumsStr(showColums); + List list = getLocalElogDaoMapper().queryElogList(page, context, null, tableName, customSql, "*"); + Map countMap = getLocalElogDaoMapper().elogCount(context, tableName, customSql); - Map countMap = new HashMap<>(); - Long countNum = 0l; - - //最终查询前 - List interceptChain = ApplicationContextProvider.getServiceBean(ElogHandleService.class) - .stream().filter(Objects::nonNull) - .filter(x -> x instanceof ElogHandleService) - .map(x -> (ElogHandleService) x) - .collect(Collectors.toList()); - - if (CollectionUtils.isNotEmpty(interceptChain)) { - for (ElogHandleService handleService : interceptChain) { - Class itemClass = handleService.getClass(); - HandleElog annotation = itemClass.getAnnotation(HandleElog.class); - if(Objects.isNull(annotation)){ - annotation = AnnotationUtils.findAnnotation(itemClass, HandleElog.class); - } - if(Objects.nonNull(annotation)){ - if(module.equalsIgnoreCase(annotation.modulename())){ - String employeeId = getUserId(); - long id = StringUtils.isEmpty(employeeId) ? -1 : Long.parseLong(employeeId); - ElogHandleDto elogHandleDto = new ElogHandleDto(module,function,context.getTenant_key(),id,customSql,filterConditionDtos); - boolean preQuery = handleService.preQuery(elogHandleDto); - customSql = elogHandleDto.getSql(); - } - } - } - } - - // 查询 - List list = new ArrayList<>(); - if (StringUtils.isNotEmpty(permissionId) || StringUtils.isNotEmpty(permissionType) || StringUtils.isNotEmpty(mainDataTableAlias) || StringUtils.isNotEmpty(mainDataTable) || StringUtils.isNotEmpty(permissionTargetId) || StringUtils.isNotEmpty(permissionConfigSourceId)) { - list = localElogDaoMapper.queryElogList(page, context, null, tableName, customSql, mainDataTable, permissionId, permissionType, mainDataTableAlias, primaryKey,permissionTargetId,permissionConfigSourceId,"*"); - countNum = localElogDaoMapper.elogCountOnlyNum(context, tableName, customSql, mainDataTable, permissionId, permissionType, mainDataTableAlias, primaryKey,permissionTargetId,permissionConfigSourceId); - } else { - list = localElogDaoMapper.queryElogList(page, context, null, tableName, customSql,"*"); - countMap = localElogDaoMapper.elogCount(context, tableName, customSql); - - } - - String databaseId = WeaDatabaseIdProvider.databaseId; if ("st".equals(databaseId)) { //st数据库 date类型特殊处理 list.forEach(map -> { @@ -243,49 +135,6 @@ public class LoggerTableService implements ILoggerTableService { }); } - - String propertiesValue = module + "." + function + ".es"; - String value = ApplicationContextProvider.getPropertiesValue(propertiesValue); - logger.info("propertiesValue:{},value:{}", propertiesValue,value); - if (StringUtils.isNotEmpty(value) && !value.equalsIgnoreCase("${" + propertiesValue + "}")) { - //if判断通过说明走了自定义ES存储es - String[] fields = getESfields(value); - if (fields != null && fields.length > 0) { - for (Map map : list) { - String logDate = map.get("log_date").toString(); - logger.info("logDate:{}" ,logDate); - String esDate = logDate.substring(0, 10); - //先判断表存不存在,不存在创建 - if (checkEsTableIsExist(esDate)) { - // 根据id通过es查询大字段(params)然后赋值 - SearchRequest searchRequest = new SearchRequest(getElogESTableName(true,esDate)); - SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - // 只获取指定字段 - searchSourceBuilder.fetchSource(fields, null); - // 根据id匹配 - searchSourceBuilder.query(QueryBuilders.termQuery("id",map.get("id").toString())); - searchRequest.source(searchSourceBuilder); - - SearchResponse searchResponse = null; - try { - searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); - } catch (IOException e) { - logger.info("查询ES出现异常:{}",e.getMessage()); - } - SearchHits hits = searchResponse.getHits(); - SearchHit[] searchHits = hits.getHits(); - if (searchHits != null && searchHits.length > 0) { - // 根据id匹配唯一,所以直接取第一个 - Map sourceAsMap = searchHits[0].getSourceAsMap(); - if (Objects.nonNull(sourceAsMap) && sourceAsMap.size() > 0) { - logger.info("ES查出来的sourceAsMap:{}",JSON.toJSONString(sourceAsMap)); - map.putAll(sourceAsMap); - } - } - } - } - } - } //处理转换其他数据库类型值 list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list); //处理用户信息Data @@ -293,45 +142,11 @@ public class LoggerTableService implements ILoggerTableService { // 大小写转换 ElogSeviceSwitchUtils.changKey2Lower(list); - transSwitchDataInfo(list,recordColumns); - //转换多语言 - //ElogSeviceSwitchUtils.switchValues(list, recordColumns, true); - //ElogSeviceSwitchUtils.switchChangeValues(list); - logger.info("开始执行转换方法"); - if (Util.isNotEmpty(transMethod)) { - logger.info("转换方法:{}", transMethod); - // 消费到消息,通过MethodHandler调用对应的方法 - MethodHandler methodHandler = ElogMethodHandler.loadMethodHandler(transMethod); - if (methodHandler != null) { - try { - logger.info("执行方法前的数据:{}", JSON.toJSONString(list)); - methodHandler.execute(list); - logger.info("执行方法后的数据:{}", JSON.toJSONString(list)); - } catch (Exception e) { - logger.error("转换出错:" + e); - } - } - - } - page.setTotal(ElogSeviceUtils.getLongValue(countMap.get("counts") + "", 0)); - page.setRecords(switchString(list)); - if (!countNum.equals(0l)) { - //countNum不为0 则覆盖 - page.setTotal(countNum); - - } - // 处理后的数据 - // weaTable.setDisplayData(DataTransform.userProcessData(page.getRecords())); - - // 处理操作菜单权限 - //weaTable.setOperatesPermission(DataTransform.userOperatesPermission(page.getRecords())); - - // 处理选择框权限 - //weaTable.setCheckBoxPermission(DataTransform.userCheckBoxPermission(page.getRecords())); - // 存放结果集 - weaTable.setPage(page); - return weaTable; + PageInfo pageInfo = SalaryPageUtil.buildPage(page.getPageNum(), page.getPageSize(), switchString(list)); + pageInfo.setTotal(ElogSeviceUtils.getLongValue(countMap.get("counts") + "", 0)); + pageInfo.setColumns(columns); + return pageInfo; } @Override @@ -350,13 +165,13 @@ public class LoggerTableService implements ILoggerTableService { sb.append("id,uuid,targetid,params,operatetype,link_id,link_type,"); for (ShowColumsDto showColum : showColums) { String columIndex = showColum.getColumIndex(); - if ("date".equalsIgnoreCase(columIndex) || "createdate".equalsIgnoreCase(columIndex)){ + if ("date".equalsIgnoreCase(columIndex) || "createdate".equalsIgnoreCase(columIndex)) { columIndex = "log_date"; - }else if ("operator".equalsIgnoreCase(columIndex)){ + } else if ("operator".equalsIgnoreCase(columIndex)) { columIndex = "log_operator"; - }else if ("modulenamespan".equalsIgnoreCase(columIndex)){ + } else if ("modulenamespan".equalsIgnoreCase(columIndex)) { columIndex = "modulename"; - } else if ("functionnameespan".equalsIgnoreCase(columIndex)){ + } else if ("functionnameespan".equalsIgnoreCase(columIndex)) { columIndex = "functionname"; } else if ("avatar".equals(columIndex)) { continue; @@ -367,63 +182,48 @@ public class LoggerTableService implements ILoggerTableService { return substring; } - private PermissionParams getPermissionParams(Map hashMap) { - PermissionParams permissionParams = new PermissionParams(); - String permissionId = getPermissionStr(hashMap, "permissionId"); - String permissionType = getPermissionStr(hashMap, "permissionType"); - String mainDataTableAlias = getPermissionStr(hashMap, "mainDataTableAlias"); - String mainDataTable = getPermissionStr(hashMap, "mainDataTable"); - String primaryKey = getPermissionStr(hashMap, "primaryKey"); - String permissionTargetId = getPermissionStr(hashMap, "permissionTargetId"); - String permissionConfigSourceId = getPermissionStr(hashMap, "permissionConfigSourceId"); +// private PermissionParams getPermissionParams(Map hashMap) { +// PermissionParams permissionParams = new PermissionParams(); +// String permissionId = getPermissionStr(hashMap, "permissionId"); +// String permissionType = getPermissionStr(hashMap, "permissionType"); +// String mainDataTableAlias = getPermissionStr(hashMap, "mainDataTableAlias"); +// String mainDataTable = getPermissionStr(hashMap, "mainDataTable"); +// String primaryKey = getPermissionStr(hashMap, "primaryKey"); +// String permissionTargetId = getPermissionStr(hashMap, "permissionTargetId"); +// String permissionConfigSourceId = getPermissionStr(hashMap, "permissionConfigSourceId"); +// +// permissionParams.setPermissionId(permissionId); +// permissionParams.setPermissionType(permissionType); +// permissionParams.setMainDataTableAlias(mainDataTableAlias); +// permissionParams.setMainDataTable(mainDataTable); +// permissionParams.setPrimaryKey(primaryKey); +// permissionParams.setPermissionTargetId(permissionTargetId); +// permissionParams.setPermissionConfigSourceId(permissionConfigSourceId); +// +// return permissionParams; +// +// } - permissionParams.setPermissionId(permissionId); - permissionParams.setPermissionType(permissionType); - permissionParams.setMainDataTableAlias(mainDataTableAlias); - permissionParams.setMainDataTable(mainDataTable); - permissionParams.setPrimaryKey(primaryKey); - permissionParams.setPermissionTargetId(permissionTargetId); - permissionParams.setPermissionConfigSourceId(permissionConfigSourceId); - - return permissionParams; - - } - - private List getWeaColumns(String data, List showColums, String module, String function, WeaTable weaTable) { - // 每一个Table的唯一标识 - weaTable.setPageUid(IdGenerator.generate() + ""); - // 表头 - //weaTable.getColumns().add(new WeaTableColumn("id","id", true)); - List recordColumns = new ArrayList<>(); + private List getWeaColumns(String data, List showColums, String module, String function) { + List columns = new ArrayList<>(); if (showColums != null && showColums.size() > 0) { for (ShowColumsDto showColum : showColums) { - if (showColum.isTransfLanguage()) { - recordColumns.add(showColum.getColumIndex()); - } if (StringUtils.isNotBlank(showColum.getAliasColumName())) { - WeaTableColumn weaTableColumn = new WeaTableColumn(showColum.getAliasColumName(), showColum.getColumIndex(), getColumnsWidth(showColum), "", showColum.isHide()); - if (showColum.isNewLine()) { - weaTableColumn.setNewLine(showColum.isNewLine()); - } - weaTable.getColumns().add(weaTableColumn); + columns.add(new Column(showColum.getAliasColumName(), showColum.getColumIndex(), showColum.getColumIndex())); } else if (StringUtils.isNotBlank(showColum.getColumName())) { - WeaTableColumn weaTableColumn = new WeaTableColumn(FieldNameMap.getMainFieldNameMap(data, function, showColum.getColumName()), showColum.getColumIndex(), getColumnsWidth(showColum), "", showColum.isHide()); - if (showColum.isNewLine()) { - weaTableColumn.setNewLine(showColum.isNewLine()); - } - weaTable.getColumns().add(weaTableColumn); + columns.add(new Column(FieldNameMap.getMainFieldNameMap(data, function, showColum.getColumName()), showColum.getColumIndex(), showColum.getColumIndex())); } } } else { - weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "moduleName"), "modulenamespan", "5%")); - weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "functionName"), "functionnamespan", "5%")); - weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "clientIp"), "clientip", "5%")); - weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "operateTypeName"), "operatetypename", "5%")); - weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "targetName"), "targetname", "5%")); - weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "date"), "createdate", "5%")); - weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "operatorName"), "operatorname", "5%")); + columns.add(new Column(FieldNameMap.getMainFieldNameMap(module, function, "moduleName"), "modulenamespan", "modulenamespan")); + columns.add(new Column(FieldNameMap.getMainFieldNameMap(module, function, "functionName"), "functionnamespan", "functionnamespan")); + columns.add(new Column(FieldNameMap.getMainFieldNameMap(module, function, "clientIp"), "clientip", "clientip")); + columns.add(new Column(FieldNameMap.getMainFieldNameMap(module, function, "operateTypeName"), "operatetypename", "operatetypename")); + columns.add(new Column(FieldNameMap.getMainFieldNameMap(module, function, "targetName"), "targetname", "targetname")); + columns.add(new Column(FieldNameMap.getMainFieldNameMap(module, function, "date"), "createdate", "createdate")); + columns.add(new Column(FieldNameMap.getMainFieldNameMap(module, function, "operatorName"), "operatorname", "operatorname")); } - return recordColumns; + return columns; } private String getTargetid(List filterConditionDtos) { @@ -447,229 +247,116 @@ public class LoggerTableService implements ILoggerTableService { return ""; } - /** - * 处理数据权限 - * - * @param transMethod - * @return - */ - private Map addPermissionHandler(String transMethod) { - Map hashMap = new HashMap(); - hashMap.put("permissionId", ""); - hashMap.put("permissionType", ""); - hashMap.put("mainDataTableAlias", ""); - hashMap.put("mainDataTable", ""); - hashMap.put("primaryKey", ""); - hashMap.put("permissionTargetId", ""); - hashMap.put("permissionConfigSourceId", ""); - - MethodHandler beforeMethodHandler = ElogMethodHandler.loadMethodHandler("permission" + transMethod); - if (beforeMethodHandler != null) { - try { - Object execute = beforeMethodHandler.execute(hashMap); - if (execute != null) { - if (execute instanceof Map) { - return (Map) execute; - } - } - } catch (Exception e) { - logger.error("转换出错:" + e); - throw new RuntimeException(e.getMessage()); - } - } - return hashMap; - } - - private Map getCustomAuthSql(String transMethod, Map params, String prefix) { - MethodHandler beforeMethodHandler = ElogMethodHandler.loadMethodHandler(prefix + transMethod); - Map hashMap = new HashMap<>(); - if (beforeMethodHandler != null) { - try { - hashMap.put("flag", true); - hashMap.put("msg", ""); - hashMap.putAll(params); - Object execute = beforeMethodHandler.execute(hashMap); - if (execute != null && execute instanceof Map) { - Map map = (Map) execute; - return map; - } - } catch (Exception e) { - logger.error("转换出错:" + e); - throw new RuntimeException(e.getMessage()); - } - } - return hashMap; - } +// private Map getCustomAuthSql(String transMethod, Map params, String prefix) { +// MethodHandler beforeMethodHandler = ElogMethodHandler.loadMethodHandler(prefix + transMethod); +// Map hashMap = new HashMap<>(); +// if (beforeMethodHandler != null) { +// try { +// hashMap.put("flag", true); +// hashMap.put("msg", ""); +// hashMap.putAll(params); +// Object execute = beforeMethodHandler.execute(hashMap); +// if (execute != null && execute instanceof Map) { +// Map map = (Map) execute; +// return map; +// } +// } catch (Exception e) { +// logger.error("转换出错:" + e); +// throw new RuntimeException(e.getMessage()); +// } +// } +// return hashMap; +// } private String getCustomSql(String transMethod, String sql, String prefix) { - MethodHandler beforeMethodHandler = ElogMethodHandler.loadMethodHandler(prefix + transMethod); - boolean flag = false; - if (beforeMethodHandler != null) { - try { - String subSql = ""; - if (sql.length() > 5) { - flag = true; - subSql = sql.substring(5, sql.length()); - } - Object execute = beforeMethodHandler.execute(subSql); - if (execute != null) { - if (execute instanceof String) { - StringBuffer sb = null; - if(execute.toString().length()==0){ - sb = new StringBuffer(); - } else if (flag || execute.toString().length() > 0) { - sb = new StringBuffer(" and "); - } else { - sb = new StringBuffer(); - } - - sb.append(execute.toString()); - return sb.toString(); - } - } - } catch (Exception e) { - logger.error("转换出错:" + e); - throw new RuntimeException(e.getMessage()); - } - } +// MethodHandler beforeMethodHandler = ElogMethodHandler.loadMethodHandler(prefix + transMethod); +// boolean flag = false; +// if (beforeMethodHandler != null) { +// try { +// String subSql = ""; +// if (sql.length() > 5) { +// flag = true; +// subSql = sql.substring(5, sql.length()); +// } +// Object execute = beforeMethodHandler.execute(subSql); +// if (execute != null) { +// if (execute instanceof String) { +// StringBuffer sb = null; +// if(execute.toString().length()==0){ +// sb = new StringBuffer(); +// } else if (flag || execute.toString().length() > 0) { +// sb = new StringBuffer(" and "); +// } else { +// sb = new StringBuffer(); +// } +// +// sb.append(execute.toString()); +// return sb.toString(); +// } +// } +// } catch (Exception e) { +// logger.error("转换出错:" + e); +// throw new RuntimeException(e.getMessage()); +// } +// } return sql; } private void transUserInfo(List list) { - List operators = new ArrayList<>(); - if (list != null && list.size() > 0) { - for (Map map : list) { - //避免暴露内网地址 - map.remove("requesturl"); - - Object operator = map.get("operator"); - if (operator != null && StringUtils.isNotBlank(operator.toString())) { - operators.add(ElogSeviceUtils.getLongValue(operator.toString())); - } - } - } - List cacheList = comInfoCache.getCacheList(HrmEmployeeComInfo.class, operators); - Map infoHashMap = new HashMap<>(); - if (cacheList != null && cacheList.size() > 0) { - for (HrmEmployeeComInfo hrmEmployeeComInfo : cacheList) { - HrmAvatarComInfo hrmAvatarComInfo = (HrmAvatarComInfo) comInfoCache.getCacheById(HrmAvatarComInfo.class, hrmEmployeeComInfo.getAvatar()); - ElogHrmSimpleEmployeeInfo info = new ElogHrmSimpleEmployeeInfo(); - if (hrmAvatarComInfo != null) { - info.setAvatarP3Id(hrmAvatarComInfo.getP3()); - } - info.setId(hrmEmployeeComInfo.getId()); - info.setUserName(hrmEmployeeComInfo.getUsername()); - infoHashMap.put(hrmEmployeeComInfo.getId(), info); - } - } - if (list != null && list.size() > 0) { - for (Map map : list) { - Object operator = map.get("operator"); - if (map.get("params") != null && map.get("params").toString().startsWith("H4s")) { - map.put("params", ElogSeviceUtils.uncompress(map.get("params").toString())); - } - map.put("dboperatorname", Util.null2String(map.get("operatorname"))); - if (operator != null && StringUtils.isNotBlank(operator.toString())) { - Map i18nOperatorMap = new HashMap<>(); - ElogHrmSimpleEmployeeInfo hrmEmployeeComInfo = infoHashMap.get(Long.parseLong(operator.toString())); - if (hrmEmployeeComInfo != null) { - //获取最新的人员名称并进行多语言转换 - i18nOperatorMap.put(Long.parseLong(operator.toString()),hrmEmployeeComInfo.getUserName()); - Map parseI18nOperator = HrmI18nUtil.batchCovertEmployee(i18nOperatorMap, map.get("tenant_key").toString()); - map.put("operatorname", parseI18nOperator.get(Long.parseLong(operator.toString()))); - -// if (StringUtils.isNotEmpty(hrmEmployeeComInfo.getUserName())) { -// map.put("operatorname", hrmEmployeeComInfo.getUserName()); -// } - if (hrmEmployeeComInfo.getAvatarP3Id() != null) { - map.put("avatar", hrmEmployeeComInfo.getAvatarP3Id()); - } - } - } - } - } - } - - private void transSwitchDataInfo(List list, List recordColumns) { - List operators = new ArrayList<>(); - if (list != null && list.size() > 0) { - for (Map map : list) { - //避免暴露内网地址 - map.remove("requesturl"); - - map.put("dboperatorname", Util.null2String(map.get("operatorname"))); - ElogSeviceSwitchUtils.switchDatabaseField(map); - Object operator = map.get("operator"); - if (operator != null && StringUtils.isNotBlank(operator.toString())) { - operators.add(ElogSeviceUtils.getLongValue(operator.toString())); - } - if (map.get("PARAMS") != null) { - map.put("params", JSONObject.toJSON(map.get("PARAMS"))); - } else if (map.get("params") != null) { - map.put("params", JSONObject.toJSON(map.get("params"))); - } - for (String recordColumn : recordColumns) { - Object val = map.get(recordColumn); - if (val != null) { - map.put(recordColumn, ElogSeviceSwitchUtils.transfi18Method(val.toString())); - } - } - Object modulename = map.get("modulename"); - if (modulename != null) { - map.put("modulenamespan", ElogSeviceSwitchUtils.getModuleName(modulename.toString())); - } - - } - } - List cacheList = comInfoCache.getCacheList(HrmEmployeeComInfo.class, operators); - Map infoHashMap = new HashMap<>(); - if (cacheList != null && cacheList.size() > 0) { - for (HrmEmployeeComInfo hrmEmployeeComInfo : cacheList) { - ElogHrmSimpleEmployeeInfo info = new ElogHrmSimpleEmployeeInfo(); - info.setId(hrmEmployeeComInfo.getId()); - info.setUserName(hrmEmployeeComInfo.getUsername()); - infoHashMap.put(hrmEmployeeComInfo.getId(), info); - } - } - if (list != null && list.size() > 0) { - for (Map map : list) { - Object operator = map.get("operator"); - if (map.get("params") != null && map.get("params").toString().startsWith("H4s")) { - map.put("params", ElogSeviceUtils.uncompress(map.get("params").toString())); - map.put("params",SecurityUtil.encodeForHtml(map.get("params").toString(), true)); - - } - //获取最新的人员名称并进行多语言转换 - if (operator != null && StringUtils.isNotBlank(operator.toString())) { - Map i18nOperatorMap = new HashMap<>(); - ElogHrmSimpleEmployeeInfo hrmEmployeeComInfo = infoHashMap.get(Long.parseLong(operator.toString())); - if (hrmEmployeeComInfo != null && StringUtils.isNotEmpty(hrmEmployeeComInfo.getUserName())) { - i18nOperatorMap.put(Long.parseLong(operator.toString()),hrmEmployeeComInfo.getUserName()); - Map parseI18nOperator = HrmI18nUtil.batchCovertEmployee(i18nOperatorMap, map.get("tenant_key").toString()); - map.put("operatorname", parseI18nOperator.get(Long.parseLong(operator.toString()))); -// map.put("operatorname", hrmEmployeeComInfo.getUserName()); - } - } - } - } - } - - /** - * 查询头像相关信息 - * - * @param id - * @return - */ -// private String queryAvatarInfo(long id) { -// Map avatarInfoMap = queryAvatarInfoMapper.queryAvatarInfo(id); -// if (avatarInfoMap != null) { -// if (avatarInfoMap.get("p3") != null) { -// return avatarInfoMap.get("p3").toString(); +// List operators = new ArrayList<>(); +// if (list != null && list.size() > 0) { +// for (Map map : list) { +// //避免暴露内网地址 +// map.remove("requesturl"); +// +// Object operator = map.get("operator"); +// if (operator != null && StringUtils.isNotBlank(operator.toString())) { +// operators.add(ElogSeviceUtils.getLongValue(operator.toString())); +// } // } // } -// return ""; -// } +// List cacheList = comInfoCache.getCacheList(HrmEmployeeComInfo.class, operators); +// Map infoHashMap = new HashMap<>(); +// if (cacheList != null && cacheList.size() > 0) { +// for (HrmEmployeeComInfo hrmEmployeeComInfo : cacheList) { +// HrmAvatarComInfo hrmAvatarComInfo = (HrmAvatarComInfo) comInfoCache.getCacheById(HrmAvatarComInfo.class, hrmEmployeeComInfo.getAvatar()); +// ElogHrmSimpleEmployeeInfo info = new ElogHrmSimpleEmployeeInfo(); +// if (hrmAvatarComInfo != null) { +// info.setAvatarP3Id(hrmAvatarComInfo.getP3()); +// } +// info.setId(hrmEmployeeComInfo.getId()); +// info.setUserName(hrmEmployeeComInfo.getUsername()); +// infoHashMap.put(hrmEmployeeComInfo.getId(), info); +// } +// } +// if (list != null && list.size() > 0) { +// for (Map map : list) { +// Object operator = map.get("operator"); +// if (map.get("params") != null && map.get("params").toString().startsWith("H4s")) { +// map.put("params", ElogSeviceUtils.uncompress(map.get("params").toString())); +// } +// map.put("dboperatorname", Util.null2String(map.get("operatorname"))); +// if (operator != null && StringUtils.isNotBlank(operator.toString())) { +// Map i18nOperatorMap = new HashMap<>(); +// ElogHrmSimpleEmployeeInfo hrmEmployeeComInfo = infoHashMap.get(Long.parseLong(operator.toString())); +// if (hrmEmployeeComInfo != null) { +// //获取最新的人员名称并进行多语言转换 +// i18nOperatorMap.put(Long.parseLong(operator.toString()), hrmEmployeeComInfo.getUserName()); +// Map parseI18nOperator = HrmI18nUtil.batchCovertEmployee(i18nOperatorMap, map.get("tenant_key").toString()); +// map.put("operatorname", parseI18nOperator.get(Long.parseLong(operator.toString()))); +// +//// if (StringUtils.isNotEmpty(hrmEmployeeComInfo.getUserName())) { +//// map.put("operatorname", hrmEmployeeComInfo.getUserName()); +//// } +// if (hrmEmployeeComInfo.getAvatarP3Id() != null) { +// map.put("avatar", hrmEmployeeComInfo.getAvatarP3Id()); +// } +// } +// } +// } +// } + } /** * 获取宽度 @@ -686,36 +373,36 @@ public class LoggerTableService implements ILoggerTableService { } private String getTenantKey() { - User currentUser = UserContext.getCurrentUser(); - if (currentUser != null) { - return currentUser.getTenantKey(); - } else { - String tenantKey = TenantRpcContext.getTenantKey(); - if (StringUtils.isNotBlank(tenantKey)) { - return tenantKey; - } - } - return ""; +// User currentUser = UserContext.getCurrentUser(); +// if (currentUser != null) { +// return currentUser.getTenantKey(); +// } else { +// String tenantKey = TenantRpcContext.getTenantKey(); +// if (StringUtils.isNotBlank(tenantKey)) { +// return tenantKey; +// } +// } + return SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY; } - private String getEmployeeId() { - - User currentUser = UserContext.getCurrentUser(); - if (currentUser != null&&!currentUser.isAdmin()) { - String employeeId = TenantRpcContext.getEmployeeId(); - return StringUtils.isNotBlank(employeeId) ? employeeId : ""; - } - return ""; - } - - private String getUserId(){ - User currentUser = UserContext.getCurrentUser(); - if (currentUser != null) { - return currentUser.getEmployeeId().toString(); - } - String employeeId = TenantRpcContext.getEmployeeId(); - return StringUtils.isNotBlank(employeeId) ? employeeId : ""; - } +// private String getEmployeeId() { +// +// User currentUser = UserContext.getCurrentUser(); +// if (currentUser != null && !currentUser.isAdmin()) { +// String employeeId = TenantRpcContext.getEmployeeId(); +// return StringUtils.isNotBlank(employeeId) ? employeeId : ""; +// } +// return ""; +// } +// +// private String getUserId() { +// User currentUser = UserContext.getCurrentUser(); +// if (currentUser != null) { +// return currentUser.getEmployeeId().toString(); +// } +// String employeeId = TenantRpcContext.getEmployeeId(); +// return StringUtils.isNotBlank(employeeId) ? employeeId : ""; +// } /** * 拼接搜索条件 @@ -733,31 +420,31 @@ public class LoggerTableService implements ILoggerTableService { while (iterators.hasNext()) { Map.Entry next = iterators.next(); String key = next.getKey(); - SecurityUtil.sqlCheck(key); +// SecurityUtil.sqlCheck(key); if ("date".equals(key) || "createdate".equals(key)) { Object date = next.getValue(); if (date != null) { if (StringUtils.isNotBlank(date.toString())) { List dates = (List) date; - if (dates != null && dates.size() == 2) { - Object startDate = dates.get(0); - Object endDate = dates.get(1); - startDate = ElogSeviceUtils.checkValSql(startDate.toString()); - endDate = ElogSeviceUtils.checkValSql(endDate.toString()); - if (StringUtils.isNotBlank(startDate.toString()) && StringUtils.isNotBlank(endDate.toString())) { - startDate = startDate.toString().replaceAll("'", "''"); - endDate = endDate.toString().replaceAll("'", "''"); - String dateRangeAfter = dateRangeTransformer.getDateRangeAfter(startDate.toString()); - String dateRangeBefore = dateRangeTransformer.getDateRangeBefore(endDate.toString()); - sb.append(" and log_date ").append(" between ").append(getSwithDatabaseDate(dateRangeAfter)).append(" and ").append(getSwithDatabaseDate(dateRangeBefore)).append(" "); - } else if (StringUtils.isNotBlank(startDate.toString())) { - String dateRangeAfter = dateRangeTransformer.getDateRangeAfter(startDate.toString()); - sb.append(" and log_date ").append(" >= ").append(getSwithDatabaseDate(dateRangeAfter)).append(" "); - } else if (StringUtils.isNotBlank(endDate.toString())) { - String dateRangeBefore = dateRangeTransformer.getDateRangeBefore(endDate.toString()); - sb.append(" and log_date ").append(" <= ").append(getSwithDatabaseDate(dateRangeBefore)).append(" "); - } - } +// if (dates != null && dates.size() == 2) { +// Object startDate = dates.get(0); +// Object endDate = dates.get(1); +// startDate = ElogSeviceUtils.checkValSql(startDate.toString()); +// endDate = ElogSeviceUtils.checkValSql(endDate.toString()); +// if (StringUtils.isNotBlank(startDate.toString()) && StringUtils.isNotBlank(endDate.toString())) { +// startDate = startDate.toString().replaceAll("'", "''"); +// endDate = endDate.toString().replaceAll("'", "''"); +// String dateRangeAfter = dateRangeTransformer.getDateRangeAfter(startDate.toString()); +// String dateRangeBefore = dateRangeTransformer.getDateRangeBefore(endDate.toString()); +// sb.append(" and log_date ").append(" between ").append(getSwithDatabaseDate(dateRangeAfter)).append(" and ").append(getSwithDatabaseDate(dateRangeBefore)).append(" "); +// } else if (StringUtils.isNotBlank(startDate.toString())) { +// String dateRangeAfter = dateRangeTransformer.getDateRangeAfter(startDate.toString()); +// sb.append(" and log_date ").append(" >= ").append(getSwithDatabaseDate(dateRangeAfter)).append(" "); +// } else if (StringUtils.isNotBlank(endDate.toString())) { +// String dateRangeBefore = dateRangeTransformer.getDateRangeBefore(endDate.toString()); +// sb.append(" and log_date ").append(" <= ").append(getSwithDatabaseDate(dateRangeBefore)).append(" "); +// } +// } } } } else if ("operator".equals(next.getKey())) { @@ -766,22 +453,24 @@ public class LoggerTableService implements ILoggerTableService { if (StringUtils.isNotBlank(operator.toString())) { operator = ElogSeviceUtils.checkValSql(operator.toString()); operator = operator.toString().replaceAll("'", "''"); - if (StringUtils.isNumeric(operator.toString()) && operator.toString().length() > 15 ) { + if (StringUtils.isNumeric(operator.toString()) && operator.toString().length() > 15) { sb.append(" and log_operator = ").append(operator.toString()).append(" "); - } else { - List likeNameHrmEmployeeList = hrmCommonEmployeeService.queryEmpsByCondidtion( - new HrmOrgEmpCondition().setNameLikeList(Arrays.asList(operator.toString())).setTenantKey(getTenantKey()), - HrmConditionResultType.BEAN.name()); - if (likeNameHrmEmployeeList != null && likeNameHrmEmployeeList.size() > 0) { - List ids = likeNameHrmEmployeeList.stream().map(HrmEmployee::getId).collect(Collectors.toList()); - if (ids != null && ids.size() > 0) { - sb.append(" and ( operatorname like '%").append(operator.toString()).append("%' ") - .append(" or log_operator in (").append(StringUtils.join(ids, ",")).append(")) "); - } - } else { - sb.append(" and operatorname like '%").append(operator.toString()).append("%' "); - } } + +// else { +// List likeNameHrmEmployeeList = hrmCommonEmployeeService.queryEmpsByCondidtion( +// new HrmOrgEmpCondition().setNameLikeList(Arrays.asList(operator.toString())).setTenantKey(getTenantKey()), +// HrmConditionResultType.BEAN.name()); +// if (likeNameHrmEmployeeList != null && likeNameHrmEmployeeList.size() > 0) { +// List ids = likeNameHrmEmployeeList.stream().map(HrmEmployee::getId).collect(Collectors.toList()); +// if (ids != null && ids.size() > 0) { +// sb.append(" and ( operatorname like '%").append(operator.toString()).append("%' ") +// .append(" or log_operator in (").append(StringUtils.join(ids, ",")).append(")) "); +// } +// } else { +// sb.append(" and operatorname like '%").append(operator.toString()).append("%' "); +// } +// } } } } else if ("modulename".equals(next.getKey())) { @@ -823,7 +512,7 @@ public class LoggerTableService implements ILoggerTableService { } } } - } else if (databaseId.equalsIgnoreCase(ElogConsts.POSTGRESQL) && "targetid".equalsIgnoreCase(next.getKey())){ + } else if (databaseId.equalsIgnoreCase(ElogConsts.POSTGRESQL) && "targetid".equalsIgnoreCase(next.getKey())) { //兼容PG环境int类型不支持模糊搜索的问题 String value = next.getValue().toString().replaceAll("'", "''"); value = ElogSeviceUtils.checkValSql(value.toString()); @@ -838,33 +527,32 @@ public class LoggerTableService implements ILoggerTableService { String value = next.getValue().toString().replaceAll("'", "''"); value = ElogSeviceUtils.checkValSql(value.toString()); StringBuilder stringBuffer = new StringBuilder(); - if (isLikeSearch(showColumns, key)) { - String logSearchSql = I18nUtil.getLogSearchSql(ElogSeviceUtils.getTableName(module, function), key, value); - String sql = logSearchSql.replaceAll("%_", "%\\\\_"); - try { - logger.error("执行多语言sql:{}",sql); - List maps = queryCommonTabeMapper.queryLabelIds(sql); - if (maps != null && maps.size() > 0) { - for (Map map1 : maps) { - Object indexid = map1.get(key); - if (indexid == null || StringUtils.isEmpty(indexid.toString())) { - indexid = map1.get(key.toLowerCase()); - } - if (indexid != null && StringUtils.isNotEmpty(indexid.toString())) { - String val = indexid.toString().replace("'", "''"); - if (ElogSeviceUtils.checkIsNumber(map.get(key))) { - val = "-"+val; - value = "-"+value; - } - stringBuffer.append("'").append(val).append("',"); - } - } - } - } catch (Exception e) { - logger.error("i18查询sql报错:{}",e.getMessage(),e); - } - - } +// if (isLikeSearch(showColumns, key)) { +// String logSearchSql = I18nUtil.getLogSearchSql(ElogSeviceUtils.getTableName(module, function), key, value); +// String sql = logSearchSql.replaceAll("%_", "%\\\\_"); +// try { +// List maps = queryCommonTabeMapper.queryLabelIds(sql); +// if (maps != null && maps.size() > 0) { +// for (Map map1 : maps) { +// Object indexid = map1.get(key); +// if (indexid == null || StringUtils.isEmpty(indexid.toString())) { +// indexid = map1.get(key.toLowerCase()); +// } +// if (indexid != null && StringUtils.isNotEmpty(indexid.toString())) { +// String val = indexid.toString().replace("'", "''"); +// if (ElogSeviceUtils.checkIsNumber(map.get(key))) { +// val = "-" + val; +// value = "-" + value; +// } +// stringBuffer.append("'").append(val).append("',"); +// } +// } +// } +// } catch (Exception e) { +// logger.error("i18查询sql报错:{}", e.getMessage(), e); +// } +// +// } String str = ""; if (stringBuffer.toString().length() > 0) { str = stringBuffer.substring(0, stringBuffer.length() - 1); @@ -900,38 +588,38 @@ public class LoggerTableService implements ILoggerTableService { return sb.toString(); } - /** - * 是否模糊搜索 - * @param showColumns - * @param key - * @return - */ - private boolean isLikeSearch(List showColumns, String key) { - for (ShowColumsDto showColumn : showColumns) { - if (key.equalsIgnoreCase(showColumn.getColumIndex()) && showColumn.isTransfLanguage()) { - return true; - } - } - return false; - } +// /** +// * 是否模糊搜索 +// * +// * @param showColumns +// * @param key +// * @return +// */ +// private boolean isLikeSearch(List showColumns, String key) { +// for (ShowColumsDto showColumn : showColumns) { +// if (key.equalsIgnoreCase(showColumn.getColumIndex()) && showColumn.isTransfLanguage()) { +// return true; +// } +// } +// return false; +// } - private String getSwithDatabaseDate(String date) { - SecurityUtil.ecodeForSql(date); - if (ElogConsts.ORACLE.equals(DatabaseUtil.getDatabaseId())) { - return " to_date('"+date+"','yyyy-mm-dd hh24:mi:ss') "; - } else if (ElogConsts.POSTGRESQL.equals(DatabaseUtil.getDatabaseId())) { - return " to_timestamp('"+date+"', 'YYYY-MM-DD HH24:MI:SS') "; - } else if (ElogConsts.SQLSERVER.equals(DatabaseUtil.getDatabaseId())) { - return " convert(nvarchar(19),'"+date+"',120) "; - } else { - return " DATE_FORMAT('"+date+"','%Y-%m-%d %H:%i:%s') "; - } - } +// private String getSwithDatabaseDate(String date) { +// if (ElogConsts.ORACLE.equals(DatabaseUtil.getDatabaseId())) { +// return " to_date('" + date + "','yyyy-mm-dd hh24:mi:ss') "; +// } else if (ElogConsts.POSTGRESQL.equals(DatabaseUtil.getDatabaseId())) { +// return " to_timestamp('" + date + "', 'YYYY-MM-DD HH24:MI:SS') "; +// } else if (ElogConsts.SQLSERVER.equals(DatabaseUtil.getDatabaseId())) { +// return " convert(nvarchar(19),'" + date + "',120) "; +// } else { +// return " DATE_FORMAT('" + date + "','%Y-%m-%d %H:%i:%s') "; +// } +// } public String matchOperatetype(String str) { - if (ElogSeviceUtils.currentLanguage() != 8) { - return ""; - } +// if (ElogSeviceUtils.currentLanguage() != 8) { +// return ""; +// } List list = new ArrayList(); list.add(OperateType.add); list.add(OperateType.update); @@ -989,11 +677,6 @@ public class LoggerTableService implements ILoggerTableService { */ private String getsql(FilterConditionDto filterConditionDto) { StringBuffer sb = new StringBuffer(); - /* if (StringUtils.isNotBlank(filterConditionDto.getSql())) { - sb.append(" ").append(filterConditionDto.getSql()).append(" "); - return sb.toString(); - }*/ - SecurityUtil.sqlCheck(filterConditionDto.getColumIndex()); filterConditionDto.setConnectCondition(ElogSeviceUtils.checkConditionSql(filterConditionDto.getConnectCondition())); filterConditionDto.setType(ElogSeviceUtils.checkTypeSql(filterConditionDto.getType())); filterConditionDto.setValue(ElogSeviceUtils.checkValSql(filterConditionDto.getValue())); @@ -1176,6 +859,7 @@ public class LoggerTableService implements ILoggerTableService { /** * 明细分页查询 + * * @param module * @param function * @param mainid @@ -1189,45 +873,35 @@ public class LoggerTableService implements ILoggerTableService { Integer pageNum = Util.getIntValue(current, 1); Integer size = Util.getIntValue(pageSize, 10); - Page page = new Page(pageNum,size); + Page page = new Page(pageNum, size); List> list = getDetailChangesMethod(module, function, mainid, null, page); //查询分页总数 String tableName = ElogSeviceUtils.getTableName(module, function, true); - Integer total = localElogDaoMapper.queryAllChangesPageCounts(tableName, mainid); - page.setTotal(total); - WeaTable weaTable =new WeaTable(); + Integer total = getLocalElogDaoMapper().queryAllChangesPageCounts(tableName, mainid); + WeaTable weaTable = new WeaTable(); weaTable.setColumns(getDetailColumns(list)); - weaTable.setPage(page); - weaTable.setData(list); - if (Util.isNotEmpty(detailTransMethod)) { - // 消费到消息,通过MethodHandler调用对应的方法 - MethodHandler methodHandler = ElogMethodHandler.loadMethodHandler(detailTransMethod); - if (methodHandler != null) { - try { - methodHandler.execute(weaTable); - } catch (Exception e) { - logger.error("转换出错:" + e); - } - } - } + + PageInfo pageInfo = SalaryPageUtil.buildPage(pageNum, size, list); + pageInfo.setTotal(total); + return weaTable; } private List getDetailColumns(List> list) { List columns = new ArrayList<>(); - if (Util.isNotEmpty(list)) { - List detailcontexts= (List) list.get(0).get("detailcontexts"); - if (Util.isNotEmpty(detailcontexts)) { + if (CollectionUtils.isNotEmpty(list)) { + List detailcontexts = (List) list.get(0).get("detailcontexts"); + if (CollectionUtils.isNotEmpty(detailcontexts)) { for (Map map : detailcontexts) { WeaTableColumn weaTableColumn = new WeaTableColumn(); // 列表属性名 - weaTableColumn.setDataIndex((String) map.get("fieldname")); + weaTableColumn.setColumn((String) map.get("fieldname")); //显示名称 多语言转换 fieldnamelabelid - weaTableColumn.setTitle((String) map.get("fieldname")); + weaTableColumn.setText((String) map.get("fieldname")); columns.add(weaTableColumn); } } @@ -1235,69 +909,24 @@ public class LoggerTableService implements ILoggerTableService { return columns; } - public List> getDetailChangesMethod(String module, String function, String mainid, String detailTransMethod,Page page) { + public List> getDetailChangesMethod(String module, String function, String mainid, String detailTransMethod, Page page) { List list = new ArrayList<>(); String tableName = ElogSeviceUtils.getTableName(module, function, true); String maintableName = ElogSeviceUtils.getTableName(module, function, false); - List maps = localElogDaoMapper.queryAllMainData(maintableName, mainid); - - for (Map map : maps) { - - if (map.get("params") != null && ElogConsts.ES.equalsIgnoreCase(map.get("params").toString())) { - - String logDate = map.get("log_date").toString(); - logger.info("logDate:{}" ,logDate); - String esDate = logDate.substring(0, 10); - //先判断表存不存在,不存在创建 - if (checkEsTableIsExist(esDate)) { - // 根据id通过es查询大字段(params)然后赋值 - SearchRequest searchRequest = new SearchRequest(getElogESTableName(true,esDate)); - - SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - // 只获取指定字段 - String[] fields = {"params"}; - searchSourceBuilder.fetchSource(fields, null); - // 根据id匹配 - searchSourceBuilder.query(QueryBuilders.termQuery("id",map.get("id").toString())); - searchRequest.source(searchSourceBuilder); - - SearchResponse searchResponse = null; - try { - searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); - } catch (IOException e) { - logger.info("查询ES出现异常:{}",e.getMessage()); - } - - SearchHits hits = searchResponse.getHits(); - SearchHit[] searchHits = hits.getHits(); - if (searchHits != null && searchHits.length > 0) { - // 根据id匹配唯一,所以直接取第一个 - Map sourceAsMap = searchHits[0].getSourceAsMap(); - if (Objects.nonNull(sourceAsMap) && Objects.nonNull(sourceAsMap.get("params")) && StringUtils.isNotEmpty(sourceAsMap.get("params").toString())) { - logger.info("ES查出来的params:{}",sourceAsMap.get("params")); - map.put("params",sourceAsMap.get("params")); - } - } - } - } - if (map.get("params") != null && map.get("params").toString().startsWith("H4s")) { - map.put("params", ElogSeviceUtils.uncompress(map.get("params").toString())); - map.put("params",SecurityUtil.encodeForHtml(map.get("params").toString(), true)); - } - } + List maps = getLocalElogDaoMapper().queryAllMainData(maintableName, mainid); maps = ElogSeviceSwitchUtils.getSwitchDatabaseData(maps); ElogSeviceSwitchUtils.changKey2Lower(maps); List allChangesData = new ArrayList<>(); //如果有分页数据则走分页方法 - if (Objects.nonNull(page) ) { + if (Objects.nonNull(page)) { // Integer offset = (pageNum - 1) * size; //分页查询明细数据 - allChangesData = localElogDaoMapper.queryAllChangesDataPages(tableName, mainid, page); + allChangesData = getLocalElogDaoMapper().queryAllChangesDataPages(tableName, mainid, page); } else { //没有被则不分页 - allChangesData = localElogDaoMapper.queryAllChangesData(tableName, mainid); + allChangesData = getLocalElogDaoMapper().queryAllChangesData(tableName, mainid); } ElogSeviceSwitchUtils.changKey2Lower(allChangesData); allChangesData = ElogSeviceSwitchUtils.getSwitchDatabaseData(allChangesData); @@ -1315,8 +944,8 @@ public class LoggerTableService implements ILoggerTableService { } } } -// List mainlist = localElogDaoMapper.queryAllMainChanges(tableName, mainid); -// List detaillist = localElogDaoMapper.queryAllDetailChanges(tableName, mainid); +// List mainlist = getLocalElogDaoMapper().queryAllMainChanges(tableName, mainid); +// List detaillist = getLocalElogDaoMapper().queryAllDetailChanges(tableName, mainid); //List moduleInfo = queryCommonTabeMapper.queryModuleNameInfo(module); List moduleInfo = new ArrayList<>(); processDetailInfo(mainlist, detaillist, moduleInfo); @@ -1325,34 +954,23 @@ public class LoggerTableService implements ILoggerTableService { map.putAll(detailMap); if (maps != null && maps.size() > 0) { Map maininfoMap = maps.get(0); - String operatetypename = (String)maininfoMap.get("operatetypename"); - String targetname = (String)maininfoMap.get("targetname"); + String operatetypename = (String) maininfoMap.get("operatetypename"); + String targetname = (String) maininfoMap.get("targetname"); //长度大于1避免部分模块为1,2,3这类的操作类型 if (StringUtils.isNumeric(operatetypename) && operatetypename.length() > 1 && operatetypename.length() < 10) { String transfOperatetypename = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(operatetypename), operatetypename); - maininfoMap.put("operatetypename",transfOperatetypename); + maininfoMap.put("operatetypename", transfOperatetypename); } if (StringUtils.isNumeric(targetname) && targetname.length() > 1 && targetname.length() < 10) { String transfTargetname = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(targetname), targetname); - maininfoMap.put("targetname",transfTargetname); + maininfoMap.put("targetname", transfTargetname); } - map.put("maininfo",maininfoMap); + map.put("maininfo", maininfoMap); map.put("detailtitle", ""); } list.add(map); - if (Util.isNotEmpty(detailTransMethod)) { - // 消费到消息,通过MethodHandler调用对应的方法 - MethodHandler methodHandler = ElogMethodHandler.loadMethodHandler(detailTransMethod); - if (methodHandler != null) { - try { - methodHandler.execute(list); - } catch (Exception e) { - logger.error("转换出错:" + e); - } - } - } //List transfLanguageData = ElogSeviceSwitchUtils.transfLanguageData(list); return list; @@ -1445,19 +1063,19 @@ public class LoggerTableService implements ILoggerTableService { } @Override - public List queryLogList(String module, String function, String current, String pageSize, String condition) { + public List queryLogList(ELogGetLogParam param) { LoggerContext context = new LoggerContext(); - context.setModuleName(module); - context.setFunctionName(function); - int pagenum = Util.getIntValue(current, 1) - 1; - int size = Util.getIntValue(pageSize, 10); + context.setModuleName(param.getModule()); + context.setFunctionName(param.getFunction()); + int pagenum = Util.getIntValue(param.getCurrent(), 1) - 1; + int size = Util.getIntValue(param.getPageSize(), 10); int start = pagenum * size; int end = start + size; Page page = new Page(pagenum, size); String limit = " limit " + start + "," + (end - start); - String tableName = ElogSeviceUtils.getTableName(module, function); - List list = localElogDaoMapper.queryElogList(page, context, null, tableName, null,"*"); + String tableName = ElogSeviceUtils.getTableName(param.getModule(), param.getFunction()); + List list = getLocalElogDaoMapper().queryElogList(page, context, null, tableName, null, "*"); list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list); return switchString(list); } @@ -1502,60 +1120,21 @@ public class LoggerTableService implements ILoggerTableService { String sb = getQueryCondition(filterConditionDtos); logger.info("elog查询条件拼接sql:{}", sb); // 消费到消息,通过MethodHandler调用对应的方法 - //String targetid = getTargetid(filterConditionDtos); - Map customAuthMap = getCustomAuthSql(transMethod, jsonObject, "auth"); - if (!customAuthMap.isEmpty()) { - Object flag = customAuthMap.get("flag"); - if (flag != null && flag instanceof Boolean) { - boolean f = (boolean) flag; - if (!f) { - List list = new ArrayList<>(); - list.add(customAuthMap); - return list; - } - } - } String customSql = getCustomSql(transMethod, sb, "before"); Page pages = new Page(ElogSeviceUtils.getIntValue(pageNum, 1), ElogSeviceUtils.getIntValue(pageSize, 10)); - int page = Util.getIntValue(pages.getCurrent() + "", 1) - 1; - int size = Util.getIntValue(pages.getSize() + "", 10); + int page = Util.getIntValue(pages.getPageNum() + "", 1) - 1; + int size = Util.getIntValue(pages.getPageSize() + "", 10); int start = page * size; int end = start + size; String limit = " limit " + start + "," + (end - start); String tableName = ElogSeviceUtils.getTableName(module, function); - long l = System.currentTimeMillis(); - Map hashMap = addPermissionHandler(transMethod); - String permissionId = ""; - String permissionType = ""; - String mainDataTableAlias = ""; - String mainDataTable = ""; - String primaryKey = ""; - String permissionTargetId = ""; - String permissionConfigSourceId = ""; - - permissionId = getPermissionStr(hashMap, "permissionId"); - permissionType = getPermissionStr(hashMap, "permissionType"); - mainDataTableAlias = getPermissionStr(hashMap, "mainDataTableAlias"); - mainDataTable = getPermissionStr(hashMap, "mainDataTable"); - primaryKey = getPermissionStr(hashMap, "primaryKey"); - permissionTargetId = getPermissionStr(hashMap, "permissionTargetId"); - permissionConfigSourceId = getPermissionStr(hashMap, "permissionConfigSourceId"); //String columns = getshowColumsStr(showColums); List list = new ArrayList<>(); Map countMap = new HashMap<>(); - if (StringUtils.isNotEmpty(permissionId) || StringUtils.isNotEmpty(permissionType) || StringUtils.isNotEmpty(mainDataTableAlias) || StringUtils.isNotEmpty(mainDataTable) || StringUtils.isNotEmpty(permissionTargetId) || StringUtils.isNotEmpty(permissionConfigSourceId)) { - list = localElogDaoMapper.queryElogList(pages, context, null, tableName, customSql, mainDataTable, permissionId, permissionType, mainDataTableAlias, primaryKey,permissionTargetId,permissionConfigSourceId,"*"); - countMap = localElogDaoMapper.elogCountByMorePermission(context, tableName, customSql, mainDataTable, permissionId, permissionType, mainDataTableAlias, primaryKey, permissionTargetId,permissionConfigSourceId); - } else { - list = localElogDaoMapper.queryElogList(pages, context, null, tableName, customSql,"*"); - long l1 = System.currentTimeMillis(); - logger.info("elog查询列表耗时:{}", (l1 - l)); - countMap = localElogDaoMapper.elogCount(context, tableName, customSql); - long l2 = System.currentTimeMillis(); - logger.info("elog查询总数耗时:{}", (l2 - l1)); - } + list = getLocalElogDaoMapper().queryElogList(pages, context, null, tableName, customSql, "*"); + countMap = getLocalElogDaoMapper().elogCount(context, tableName, customSql); list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list); if (list != null && list.size() > 0) { @@ -1564,25 +1143,9 @@ public class LoggerTableService implements ILoggerTableService { //} } transUserInfo(list); - long l3 = System.currentTimeMillis(); //System.out.println("elog查询名称和头像耗时:{}"+ (l3-l2)); transfLanguageData(list, showColums); - if (Util.isNotEmpty(transMethod)) { - // 消费到消息,通过MethodHandler调用对应的方法 - MethodHandler methodHandler = ElogMethodHandler.loadMethodHandler(transMethod); - if (methodHandler != null) { - try { - methodHandler.execute(list); - } catch (Exception e) { - logger.error("转换出错:" + e); - } - } - - } - long l4 = System.currentTimeMillis(); - logger.info("elog查询转换耗时:{}", (l4 - l3)); List res = switchString(list); - logger.info("elog查询总耗时:{}", (l4 - l)); return res; } @@ -1610,18 +1173,18 @@ public class LoggerTableService implements ILoggerTableService { } else if (StringUtils.isNotBlank(showColum.getColumIndex()) && showColum.isTransfLanguage() && entry.getKey().equals(showColum.getColumIndex()) && !Objects.isNull(entry.getValue())) { //read view add edit update delete if ("add".equals(entry.getValue().toString()) || "创建".equals(entry.getValue().toString())) { - map.put(entry.getKey(), SystemEnv.getHtmlLabelName(63252, "新增")); + map.put(entry.getKey(), SalaryI18nUtil.getI18nLabel(1111111, "新增")); } else if ("read".equals(entry.getValue().toString()) || "view".equals(entry.getValue().toString()) || "查看".equals(entry.getValue().toString())) { - map.put(entry.getKey(), SystemEnv.getHtmlLabelName(55172, "查看")); + map.put(entry.getKey(), SalaryI18nUtil.getI18nLabel(1111111, "查看")); } else if ("edit".equals(entry.getValue().toString()) || "update".equals(entry.getValue().toString()) || "更新".equals(entry.getValue().toString())) { - map.put(entry.getKey(), SystemEnv.getHtmlLabelName(63253, "修改")); - } else if ("delete".equals(entry.getValue().toString()) || "删除".equals(entry.getValue().toString()) ) { - map.put(entry.getKey(), SystemEnv.getHtmlLabelName(63254, "删除")); + map.put(entry.getKey(), SalaryI18nUtil.getI18nLabel(1111111, "修改")); + } else if ("delete".equals(entry.getValue().toString()) || "删除".equals(entry.getValue().toString())) { + map.put(entry.getKey(), SalaryI18nUtil.getI18nLabel(63254, "删除")); } else if (entry.getValue().toString().contains("取消关联标签 ")) { - String val = entry.getValue().toString().replace("取消关联标签 ", SystemEnv.getHtmlLabelName(83237, "取消关联标签 ") + " "); + String val = entry.getValue().toString().replace("取消关联标签 ", SalaryI18nUtil.getI18nLabel(1111111, "取消关联标签 ") + " "); map.put(entry.getKey(), val); } else if (entry.getValue().toString().contains("关联标签 ")) { - String val = entry.getValue().toString().replace("关联标签 ", SystemEnv.getHtmlLabelName(83236, "关联标签 ") + " "); + String val = entry.getValue().toString().replace("关联标签 ", SalaryI18nUtil.getI18nLabel(1111111, "关联标签 ") + " "); map.put(entry.getKey(), val); } } @@ -1641,7 +1204,7 @@ public class LoggerTableService implements ILoggerTableService { context.setFunctionName(function); context.setTenant_key(getTenantKey()); String tableName = ElogSeviceUtils.getTableName(module, function); - return localElogDaoMapper.elogCount(context, tableName, null); + return getLocalElogDaoMapper().elogCount(context, tableName, null); } @Override @@ -1658,7 +1221,7 @@ public class LoggerTableService implements ILoggerTableService { String limit = " limit " + start + "," + (end - start); // 还需要支持下查询 String tableName = ElogSeviceUtils.getTableName(module, function, true); - List list = localElogDaoMapper.queryDetailElogList(context, limit, tableName, null); + List list = getLocalElogDaoMapper().queryDetailElogList(context, limit, tableName, null); list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list); return switchString(list); } @@ -1671,7 +1234,7 @@ public class LoggerTableService implements ILoggerTableService { context.setTenant_key(getTenantKey()); context.setUuid(mainId); String tableName = ElogSeviceUtils.getTableName(module, function, true); - return localElogDaoMapper.elogDetailCount(context, tableName, null); + return getLocalElogDaoMapper().elogDetailCount(context, tableName, null); } @Override @@ -1680,32 +1243,17 @@ public class LoggerTableService implements ILoggerTableService { if (StringUtils.isNotEmpty(traceId)) { String tableName = ElogSeviceUtils.getTableName(module, function); Integer offset = (currentPage - 1) * pageSize; - List list = localElogDaoMapper.queryElogTraceInfo(traceId, tableName, offset, pageSize); + List list = getLocalElogDaoMapper().queryElogTraceInfo(traceId, tableName, offset, pageSize); for (Map map : list) { if (map.get("modulename") != null) { map.put("modulenamespan", ElogSeviceSwitchUtils.getModuleName(map.get("modulename").toString())); } } //list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list); - int count = localElogDaoMapper.queryElogTraceInfoCount(traceId, tableName); - weaTable.setTotal(count); - Page page = new Page(); - page.setTotal(count); - page.setSize(pageSize); - page.setCurrent(currentPage); - weaTable.setPage(page); - if (Util.isNotEmpty(traceTransMethod)) { - // 消费到消息,通过MethodHandler调用对应的方法 - MethodHandler methodHandler = ElogMethodHandler.loadMethodHandler(traceTransMethod); - if (methodHandler != null) { - try { - methodHandler.execute(list); - } catch (Exception e) { - logger.error("转换出错:" + e); - } - } - } - weaTable.setData(list); + int count = getLocalElogDaoMapper().queryElogTraceInfoCount(traceId, tableName); + PageInfo pageInfo = SalaryPageUtil.buildPage(currentPage, pageSize, list); +// pageInfo.setColumns(); + pageInfo.setTotal(count); } return weaTable; @@ -1719,7 +1267,7 @@ public class LoggerTableService implements ILoggerTableService { StringBuffer sql = new StringBuffer(); sql.append(field).append(" = '").append(value).append("' "); - list = localElogDaoMapper.queryLogInfoByCustom(tableName, sql.toString()); + list = getLocalElogDaoMapper().queryLogInfoByCustom(tableName, sql.toString()); } return list; } @@ -1746,153 +1294,88 @@ public class LoggerTableService implements ILoggerTableService { } } - @Override - public BatchDocumentMessage downloadLog(String data) { - JSONObject jsonObject = JSONObject.parseObject(data); - String module = jsonObject.getString("downloadmodule"); - String function = jsonObject.getString("function"); - String serviceName = jsonObject.getString("serviceName"); - String fileName = jsonObject.getString("fileName"); - String passWord = jsonObject.getString("passWord"); - - if (StringUtils.isEmpty(fileName)) { - fileName = SystemEnv.getHtmlLabelName(191432,"日志记录"); - } - - BatchDocumentMessage batchDocumentMessage = new BatchDocumentMessage(); - WeaTable weaTable = queryLogs(data); - List columns = weaTable.getColumns(); - List headers = new ArrayList<>(); - if (columns != null && !columns.isEmpty()) { - for (WeaTableColumn column : columns) { - Map header = new HashMap<>(); - header.put("key", column.getDataIndex()); - header.put("name", column.getTitle()); - headers.add(header); - } - } - List> dataList = weaTable.getData(); - List> maps = new ArrayList<>(); - if (dataList != null && !dataList.isEmpty()) { - dataList.stream().forEach(m -> { - Map map = new HashMap<>(); - headers.stream().forEach(h -> { - map.put(h.get("key").toString(), m.get(h.get("key"))); - }); - maps.add(map); - }); - } - - //必传--业务id - batchDocumentMessage.setBizId(IdGenerator.generate() + ""); - //必传-处理名称 - batchDocumentMessage.setHandlerName("ebatchdemo"); - //必传-服务名称 - batchDocumentMessage.setServiceName(serviceName); - //必传-数据类型 - batchDocumentMessage.setDataType(fileName); - //任务id - batchDocumentMessage.setBatchTaskId(IdGenerator.generate()); - //必传-模块 - batchDocumentMessage.setModule(module); //com.weaver.teams.domain.EntityType 中的module(没有的话需要找温明刚维护下) - //必传-功能 - batchDocumentMessage.setFunction(function); - //必传-eteamsid - batchDocumentMessage.setEteamsId(TenantRpcContext.getEteamsId()); - - //非必传 - if (StringUtils.isNotBlank(passWord)) { - batchDocumentMessage.setPassword(passWord); - } - - //必传 - BatchFile batchFile = new BatchFile(); - batchFile.setName(fileName); - //必传 - batchFile.setFileType(FileType.EXCEL); - //必传 - batchFile.setHandlerFileMethod(HandlerFileMethod.HANDLER_EXCEL_WITH_DATA); - batchFile.setTemplateId(1l); - List excelSheets = new ArrayList<>(); - ExcelSheet excelSheet = new ExcelSheet(); - - excelSheet.setHeader(headers); - excelSheet.setData(maps); - excelSheet.setName(fileName); - excelSheets.add(excelSheet); - batchFile.setExcelSheets(excelSheets); - batchDocumentMessage.setBatchFile(batchFile); - batchDocumentMessage.setChunk(false);//不分片 - batchExportSender.sendBatchExport(batchDocumentMessage); - - return batchDocumentMessage; - } - - public Boolean checkEsTableIsExist(String date) { - try { - String esMainIndex = getElogESTableName(true, date); - //先检查表是否存在 不存在则创建 - boolean existsLog = isExistsIndex(esMainIndex); - return existsLog; - } catch (Exception e) { - logger.info("创建相关ES表失败:{}", e.getMessage(), e); - } - return false; - } - - /** - * 判断一个索引是否存在 - * - * @param indexName - * @return - */ - public boolean isExistsIndex(String indexName) { - GetIndexRequest request = new GetIndexRequest(); - try { - boolean exists = restHighLevelClient.indices().exists(request.indices(indexName), RequestOptions.DEFAULT); - return exists; - } catch (Exception e) { - logger.info("判断索引是否存在出现异常:{}", e.getMessage()); - - } - return false; - } - - /** - * 创建主表语句 - * - * @throws IOException - */ - private void createLogIndex(String esMainIndex) { - // 1.创建Request对象 - CreateIndexRequest request = new CreateIndexRequest(esMainIndex); - // 2.准备请求的参数:DSL语句 - request.source(MAPPING_TEMPLATE, XContentType.JSON); - // 3.发送请求 - try { - restHighLevelClient.indices().create(request, RequestOptions.DEFAULT); - } catch (IOException e) { - logger.info("创建ES主表失败:{}", e.getMessage()); - - } - } - - private String getElogESTableName(boolean flag, String date) { - String currentDate = ""; - if (StringUtils.isEmpty(date)) { - currentDate = DateUtils.getCurrentDate().replaceAll("-", ""); - } else { - currentDate = date.replaceAll("-", ""); - } - return getEsMainIndex(flag, currentDate); - } - - private String getEsMainIndex(boolean flag, String date) { - if (flag) { - return ElogEsTableConsts.ELOG_CENTER_LOGS_ES + date; - } - return ElogEsTableConsts.ELOG_CENTER_LOGSDETAIL_ES + date; - } +// @Override +// public BatchDocumentMessage downloadLog(String data) { +// JSONObject jsonObject = JSONObject.parseObject(data); +// String module = jsonObject.getString("downloadmodule"); +// String function = jsonObject.getString("function"); +// String serviceName = jsonObject.getString("serviceName"); +// String fileName = jsonObject.getString("fileName"); +// String passWord = jsonObject.getString("passWord"); +// +// if (StringUtils.isEmpty(fileName)) { +// fileName = SalaryI18nUtil.getI18nLabel(191432, "日志记录"); +// } +// +// BatchDocumentMessage batchDocumentMessage = new BatchDocumentMessage(); +// WeaTable weaTable = queryLogs(data); +// List columns = weaTable.getColumns(); +// List headers = new ArrayList<>(); +// if (columns != null && !columns.isEmpty()) { +// for (WeaTableColumn column : columns) { +// Map header = new HashMap<>(); +// header.put("key", column.getDataIndex()); +// header.put("name", column.getTitle()); +// headers.add(header); +// } +// } +// List> dataList = weaTable.getData(); +// List> maps = new ArrayList<>(); +// if (dataList != null && !dataList.isEmpty()) { +// dataList.stream().forEach(m -> { +// Map map = new HashMap<>(); +// headers.stream().forEach(h -> { +// map.put(h.get("key").toString(), m.get(h.get("key"))); +// }); +// maps.add(map); +// }); +// } +// +// //必传--业务id +// batchDocumentMessage.setBizId(IdGenerator.generate() + ""); +// //必传-处理名称 +// batchDocumentMessage.setHandlerName("ebatchdemo"); +// //必传-服务名称 +// batchDocumentMessage.setServiceName(serviceName); +// //必传-数据类型 +// batchDocumentMessage.setDataType(fileName); +// //任务id +// batchDocumentMessage.setBatchTaskId(IdGenerator.generate()); +// //必传-模块 +// batchDocumentMessage.setModule(module); //com.weaver.teams.domain.EntityType 中的module(没有的话需要找温明刚维护下) +// //必传-功能 +// batchDocumentMessage.setFunction(function); +// //必传-eteamsid +// batchDocumentMessage.setEteamsId(TenantRpcContext.getEteamsId()); +// +// //非必传 +// if (StringUtils.isNotBlank(passWord)) { +// batchDocumentMessage.setPassword(passWord); +// } +// +// //必传 +// BatchFile batchFile = new BatchFile(); +// batchFile.setName(fileName); +// //必传 +// batchFile.setFileType(FileType.EXCEL); +// //必传 +// batchFile.setHandlerFileMethod(HandlerFileMethod.HANDLER_EXCEL_WITH_DATA); +// batchFile.setTemplateId(1l); +// List excelSheets = new ArrayList<>(); +// ExcelSheet excelSheet = new ExcelSheet(); +// +// excelSheet.setHeader(headers); +// excelSheet.setData(maps); +// excelSheet.setName(fileName); +// excelSheets.add(excelSheet); +// batchFile.setExcelSheets(excelSheets); +// batchDocumentMessage.setBatchFile(batchFile); +// batchDocumentMessage.setChunk(false);//不分片 +// batchExportSender.sendBatchExport(batchDocumentMessage); +// +// return batchDocumentMessage; +// } +// private String[] getESfields(String value) { String[] split = value.split(","); diff --git a/src/com/engine/salary/elog/threadlocal/ElogThreadLocal.java b/src/com/engine/salary/elog/threadlocal/ElogThreadLocal.java index 81eb070f0..63e188956 100644 --- a/src/com/engine/salary/elog/threadlocal/ElogThreadLocal.java +++ b/src/com/engine/salary/elog/threadlocal/ElogThreadLocal.java @@ -1,7 +1,7 @@ package com.engine.salary.elog.threadlocal; import com.alibaba.fastjson.JSONObject; -import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.elog.entity.dto.LoggerContext; import java.util.ArrayList; import java.util.List; diff --git a/src/com/engine/salary/elog/util/ElogServiceUtils.java b/src/com/engine/salary/elog/util/ElogServiceUtils.java index 1e7428366..e06225b36 100644 --- a/src/com/engine/salary/elog/util/ElogServiceUtils.java +++ b/src/com/engine/salary/elog/util/ElogServiceUtils.java @@ -2,9 +2,9 @@ package com.engine.salary.elog.util; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.engine.salary.elog.dto.ElogBean; -import com.engine.salary.elog.dto.FilterConditionDto; -import com.engine.salary.elog.dto.ShowColumsDto; +import com.engine.salary.elog.entity.dto.ElogBean; +import com.engine.salary.elog.entity.dto.FilterConditionDto; +import com.engine.salary.elog.entity.dto.ShowColumsDto; import com.engine.salary.elog.enums.ElogConsts; import java.util.List; diff --git a/src/com/engine/salary/elog/util/ElogSeviceSwitchUtils.java b/src/com/engine/salary/elog/util/ElogSeviceSwitchUtils.java index f6d55aece..78a78dc94 100644 --- a/src/com/engine/salary/elog/util/ElogSeviceSwitchUtils.java +++ b/src/com/engine/salary/elog/util/ElogSeviceSwitchUtils.java @@ -1,1338 +1,1345 @@ -//package com.engine.salary.elog.util; -// -//import cn.hutool.core.map.CaseInsensitiveMap; -//import com.alibaba.druid.proxy.jdbc.ClobProxyImpl; -//import com.alibaba.fastjson.JSON; -//import com.alibaba.fastjson.JSONArray; -//import com.alibaba.fastjson.JSONObject; -//import com.weaver.common.component.table.WeaTable; -//import com.weaver.common.component.table.column.WeaTableColumn; -//import com.weaver.common.elog.annotation.OperateType; -//import com.weaver.common.elog.enums.ElogConsts; -//import com.weaver.common.i18n.label.SystemEnv; -//import com.weaver.common.mybatis.util.DatabaseUtil; -//import com.weaver.common.security.util.SecurityUtil; -//import org.apache.commons.lang3.StringUtils; -//import org.slf4j.Logger; -//import org.slf4j.LoggerFactory; -// -//import java.sql.Clob; -//import java.util.*; -//import java.util.regex.Matcher; -//import java.util.regex.Pattern; -// -///** -// * @Date: 2022/5/18 19:34 -// * @Author: deli.xu -// * @Description: elog服务转换类 -// **/ -//public class ElogSeviceSwitchUtils { -// -// private static final Logger logger = LoggerFactory.getLogger(ElogSeviceSwitchUtils.class); -// // TODO 后续需要考虑多语言label写法 -// public static final Map moduleMap = new HashMap<>(); -// -// private static final Map> moduleFuctionMap = new HashMap<>(); -// -// static { -// /*moduleMap.put("elog", SystemEnv.getHtmlLabelName(62975, ElogSeviceUtils.currentLanguage(), "日志")); -// moduleMap.put("report", SystemEnv.getHtmlLabelName(62976, ElogSeviceUtils.currentLanguage(), "报表")); -// moduleMap.put("edc", SystemEnv.getHtmlLabelName(62977, ElogSeviceUtils.currentLanguage(), "数据中心")); -// moduleMap.put("hrm", SystemEnv.getHtmlLabelName(62978, ElogSeviceUtils.currentLanguage(), "人力资源")); -// moduleMap.put("crm", SystemEnv.getHtmlLabelName(62979, ElogSeviceUtils.currentLanguage(), "资产")); -// moduleMap.put("demo", SystemEnv.getHtmlLabelName(62980, ElogSeviceUtils.currentLanguage(), "示例")); -// moduleMap.put("attc", SystemEnv.getHtmlLabelName(62981, ElogSeviceUtils.currentLanguage(), "出勤打卡")); -// moduleMap.put("attm", SystemEnv.getHtmlLabelName(62982, ElogSeviceUtils.currentLanguage(), "出勤机")); -// moduleMap.put("attw", SystemEnv.getHtmlLabelName(62983, ElogSeviceUtils.currentLanguage(), "出勤报表")); -// moduleMap.put("auth", SystemEnv.getHtmlLabelName(62984, ElogSeviceUtils.currentLanguage(), "系统权限")); -// moduleMap.put("bank", SystemEnv.getHtmlLabelName(62985, ElogSeviceUtils.currentLanguage(), "银企直联")); -// moduleMap.put("bap", SystemEnv.getHtmlLabelName(62986, ElogSeviceUtils.currentLanguage(), "云办公")); -// moduleMap.put("base", SystemEnv.getHtmlLabelName(62987, ElogSeviceUtils.currentLanguage(), "应用管理")); -// moduleMap.put("batc", SystemEnv.getHtmlLabelName(62988, ElogSeviceUtils.currentLanguage(), "导入导出")); -// moduleMap.put("blog", SystemEnv.getHtmlLabelName(62989, ElogSeviceUtils.currentLanguage(), "日报微博")); -// moduleMap.put("cld", SystemEnv.getHtmlLabelName(62990, ElogSeviceUtils.currentLanguage(), "日程管理")); -// moduleMap.put("cmca", SystemEnv.getHtmlLabelName(62991, ElogSeviceUtils.currentLanguage(), "资金管理")); -// moduleMap.put("cmcl", SystemEnv.getHtmlLabelName(62992, ElogSeviceUtils.currentLanguage(), "线索管理")); -// moduleMap.put("cmco", SystemEnv.getHtmlLabelName(62993, ElogSeviceUtils.currentLanguage(), "联系人管理")); -// moduleMap.put("cmcp", SystemEnv.getHtmlLabelName(62994, ElogSeviceUtils.currentLanguage(), "对手管理")); -// moduleMap.put("cmcu", SystemEnv.getHtmlLabelName(62995, ElogSeviceUtils.currentLanguage(), "客户管理")); -// moduleMap.put("cmex", SystemEnv.getHtmlLabelName(62996, ElogSeviceUtils.currentLanguage(), "批量操作")); -// moduleMap.put("cmmk", SystemEnv.getHtmlLabelName(62997, ElogSeviceUtils.currentLanguage(), "营销管理")); -// moduleMap.put("cmor", SystemEnv.getHtmlLabelName(62998, ElogSeviceUtils.currentLanguage(), "订单管理")); -// moduleMap.put("cmpc", SystemEnv.getHtmlLabelName(62999, ElogSeviceUtils.currentLanguage(), "价格管理")); -// moduleMap.put("cmpr", SystemEnv.getHtmlLabelName(63000, ElogSeviceUtils.currentLanguage(), "产品管理")); -// moduleMap.put("cmpt", SystemEnv.getHtmlLabelName(63001, ElogSeviceUtils.currentLanguage(), "外部门户")); -// moduleMap.put("cmqu", SystemEnv.getHtmlLabelName(63002, ElogSeviceUtils.currentLanguage(), "报价管理")); -// moduleMap.put("cmsa", SystemEnv.getHtmlLabelName(63003, ElogSeviceUtils.currentLanguage(), "商机管理")); -// moduleMap.put("cmtr", SystemEnv.getHtmlLabelName(63004, ElogSeviceUtils.currentLanguage(), "合同管理")); -// moduleMap.put("comp", SystemEnv.getHtmlLabelName(63005, ElogSeviceUtils.currentLanguage(), "文档对比")); -// moduleMap.put("cs", SystemEnv.getHtmlLabelName(63006, ElogSeviceUtils.currentLanguage(), "云商店")); -// moduleMap.put("cowork", SystemEnv.getHtmlLabelName(63007, ElogSeviceUtils.currentLanguage(), "协作区")); -// moduleMap.put("dbs", SystemEnv.getHtmlLabelName(63008, ElogSeviceUtils.currentLanguage(), "文档公共模块")); -// moduleMap.put("dcad", SystemEnv.getHtmlLabelName(63009, ElogSeviceUtils.currentLanguage(), "数据中心运行")); -// moduleMap.put("dcap", SystemEnv.getHtmlLabelName(63010, ElogSeviceUtils.currentLanguage(), "数据中心分析开发配置")); -// moduleMap.put("dcrd", SystemEnv.getHtmlLabelName(63011, ElogSeviceUtils.currentLanguage(), "数据中心开发配置")); -// moduleMap.put("dcre", SystemEnv.getHtmlLabelName(63012, ElogSeviceUtils.currentLanguage(), "数据中心分析生产运行")); -// moduleMap.put("dcs", SystemEnv.getHtmlLabelName(63013, ElogSeviceUtils.currentLanguage(), "文档目录模块")); -// moduleMap.put("dds", SystemEnv.getHtmlLabelName(63014, ElogSeviceUtils.currentLanguage(), "文档模块")); -// moduleMap.put("dps", SystemEnv.getHtmlLabelName(63015, ElogSeviceUtils.currentLanguage(), "文档权限模块")); -// moduleMap.put("drle", SystemEnv.getHtmlLabelName(63016, ElogSeviceUtils.currentLanguage(), "数据规则库")); -// moduleMap.put("ds", SystemEnv.getHtmlLabelName(63017, ElogSeviceUtils.currentLanguage(), "数据安全")); -// moduleMap.put("dw_etl", SystemEnv.getHtmlLabelName(63018, ElogSeviceUtils.currentLanguage(), "ETL(抽取,转换,治理)")); -// moduleMap.put("dw_model", SystemEnv.getHtmlLabelName(63019, ElogSeviceUtils.currentLanguage(), "建模服务")); -// moduleMap.put("dw_process", SystemEnv.getHtmlLabelName(63020, ElogSeviceUtils.currentLanguage(), "计算服务")); -// moduleMap.put("dw_search", SystemEnv.getHtmlLabelName(63021, ElogSeviceUtils.currentLanguage(), "查询服务")); -// moduleMap.put("dw_sync", SystemEnv.getHtmlLabelName(63022, ElogSeviceUtils.currentLanguage(), "数据抽取")); -// moduleMap.put("eb", SystemEnv.getHtmlLabelName(63023, ElogSeviceUtils.currentLanguage(), "云桥")); -// moduleMap.put("ebda", SystemEnv.getHtmlLabelName(62987, ElogSeviceUtils.currentLanguage(), "应用管理")); -// moduleMap.put("ebdd", SystemEnv.getHtmlLabelName(63024, ElogSeviceUtils.currentLanguage(), "页面设计")); -// moduleMap.put("ebdf", SystemEnv.getHtmlLabelName(63025, ElogSeviceUtils.currentLanguage(), "表单服务")); -// moduleMap.put("ebdp", SystemEnv.getHtmlLabelName(63026, ElogSeviceUtils.currentLanguage(), "页面管理")); -// moduleMap.put("ecod", SystemEnv.getHtmlLabelName(63027, ElogSeviceUtils.currentLanguage(), "ecode")); -// moduleMap.put("ei", SystemEnv.getHtmlLabelName(63028, ElogSeviceUtils.currentLanguage(), "数据导出导入")); -// moduleMap.put("em", SystemEnv.getHtmlLabelName(63029, ElogSeviceUtils.currentLanguage(), "移动相关")); -// moduleMap.put("es", SystemEnv.getHtmlLabelName(63030, ElogSeviceUtils.currentLanguage(), "微搜搜索")); -// moduleMap.put("esa", SystemEnv.getHtmlLabelName(63031, ElogSeviceUtils.currentLanguage(), "微搜文件分析")); -// moduleMap.put("esb", SystemEnv.getHtmlLabelName(63032, ElogSeviceUtils.currentLanguage(), "ESB")); -// moduleMap.put("esch", SystemEnv.getHtmlLabelName(63033, ElogSeviceUtils.currentLanguage(), "计划任务")); -// moduleMap.put("esd", SystemEnv.getHtmlLabelName(63034, ElogSeviceUtils.currentLanguage(), "微搜索引数据")); -// moduleMap.put("exfo", SystemEnv.getHtmlLabelName(63035, ElogSeviceUtils.currentLanguage(), "excel函数引擎")); -// moduleMap.put("fbdg", SystemEnv.getHtmlLabelName(63036, ElogSeviceUtils.currentLanguage(), "预算编制")); -// moduleMap.put("fdt", SystemEnv.getHtmlLabelName(63037, ElogSeviceUtils.currentLanguage(), "表单数据")); -// moduleMap.put("fexs", SystemEnv.getHtmlLabelName(63038, ElogSeviceUtils.currentLanguage(), "费用管理")); -// moduleMap.put("file", SystemEnv.getHtmlLabelName(63039, ElogSeviceUtils.currentLanguage(), "文件服务")); -// moduleMap.put("finc", SystemEnv.getHtmlLabelName(63040, ElogSeviceUtils.currentLanguage(), "微报账")); -// moduleMap.put("fnar", SystemEnv.getHtmlLabelName(63041, ElogSeviceUtils.currentLanguage(), "财务报表")); -// moduleMap.put("fomo", SystemEnv.getHtmlLabelName(63042, ElogSeviceUtils.currentLanguage(), "表单监控")); -// moduleMap.put("form", SystemEnv.getHtmlLabelName(63043, ElogSeviceUtils.currentLanguage(), "表单服务")); -// moduleMap.put("frpt", SystemEnv.getHtmlLabelName(63043, ElogSeviceUtils.currentLanguage(), "业务表单")); -// moduleMap.put("fvou", SystemEnv.getHtmlLabelName(63044, ElogSeviceUtils.currentLanguage(), "凭证集成")); -// moduleMap.put("hp", SystemEnv.getHtmlLabelName(63045, ElogSeviceUtils.currentLanguage(), "门户")); -// moduleMap.put("hr", SystemEnv.getHtmlLabelName(63046, ElogSeviceUtils.currentLanguage(), "人事档案")); -// moduleMap.put("ic", SystemEnv.getHtmlLabelName(63047, ElogSeviceUtils.currentLanguage(), "集成服务")); -// moduleMap.put("il", SystemEnv.getHtmlLabelName(63048, ElogSeviceUtils.currentLanguage(), "集成登录")); -// moduleMap.put("im", SystemEnv.getHtmlLabelName(63049, ElogSeviceUtils.currentLanguage(), "IM相关服务")); -// moduleMap.put("inc", SystemEnv.getHtmlLabelName(63050, ElogSeviceUtils.currentLanguage(), "发票云服务")); -// moduleMap.put("iua", SystemEnv.getHtmlLabelName(63051, ElogSeviceUtils.currentLanguage(), "统一认证")); -// moduleMap.put("iut", SystemEnv.getHtmlLabelName(63052, ElogSeviceUtils.currentLanguage(), "统一待办")); -// moduleMap.put("mail", SystemEnv.getHtmlLabelName(63053, ElogSeviceUtils.currentLanguage(), "邮件服务")); -// moduleMap.put("mc", SystemEnv.getHtmlLabelName(63054, ElogSeviceUtils.currentLanguage(), "消息服务")); -// moduleMap.put("mt", SystemEnv.getHtmlLabelName(63055, ElogSeviceUtils.currentLanguage(), "会议管理")); -// moduleMap.put("my", SystemEnv.getHtmlLabelName(63056, ElogSeviceUtils.currentLanguage(), "关注&收藏&标签")); -// moduleMap.put("odoc", SystemEnv.getHtmlLabelName(63057, ElogSeviceUtils.currentLanguage(), "公文管理")); -// moduleMap.put("odoc_exchange", SystemEnv.getHtmlLabelName(63058, ElogSeviceUtils.currentLanguage(), "公文交换平台")); -// moduleMap.put("open", SystemEnv.getHtmlLabelName(63059, ElogSeviceUtils.currentLanguage(), "开放平台")); -// moduleMap.put("pr", SystemEnv.getHtmlLabelName(63060, ElogSeviceUtils.currentLanguage(), "工作画像")); -// moduleMap.put("proj", SystemEnv.getHtmlLabelName(63061, ElogSeviceUtils.currentLanguage(), "项目管理")); -// moduleMap.put("prt", SystemEnv.getHtmlLabelName(63062, ElogSeviceUtils.currentLanguage(), "打印服务")); -// moduleMap.put("pspt", SystemEnv.getHtmlLabelName(63063, ElogSeviceUtils.currentLanguage(), "系统登录")); -// moduleMap.put("rptc", SystemEnv.getHtmlLabelName(63064, ElogSeviceUtils.currentLanguage(), "数据协作")); -// moduleMap.put("rpts", SystemEnv.getHtmlLabelName(63065, ElogSeviceUtils.currentLanguage(), "上报调查")); -// moduleMap.put("sala", SystemEnv.getHtmlLabelName(63066, ElogSeviceUtils.currentLanguage(), "薪资管理")); -// moduleMap.put("sign", SystemEnv.getHtmlLabelName(63067, ElogSeviceUtils.currentLanguage(), "印控中心")); -// moduleMap.put("sms", SystemEnv.getHtmlLabelName(63068, ElogSeviceUtils.currentLanguage(), "短信")); -// moduleMap.put("task", SystemEnv.getHtmlLabelName(63069, ElogSeviceUtils.currentLanguage(), "任务管理")); -// moduleMap.put("tnt", SystemEnv.getHtmlLabelName(63070, ElogSeviceUtils.currentLanguage(), "租户管理")); -// moduleMap.put("wf", SystemEnv.getHtmlLabelName(63071, ElogSeviceUtils.currentLanguage(), "路径定义")); -// moduleMap.put("wfc", SystemEnv.getHtmlLabelName(63072, ElogSeviceUtils.currentLanguage(), "流程流转")); -// moduleMap.put("wfr", SystemEnv.getHtmlLabelName(63073, ElogSeviceUtils.currentLanguage(), "流程规则路由")); -// moduleMap.put("wrgm", SystemEnv.getHtmlLabelName(63074, ElogSeviceUtils.currentLanguage(), "目标管理")); -// moduleMap.put("wrgp", SystemEnv.getHtmlLabelName(63075, ElogSeviceUtils.currentLanguage(), "绩效考核")); -// moduleMap.put("wrpr", SystemEnv.getHtmlLabelName(63076, ElogSeviceUtils.currentLanguage(), "计划报告")); -// moduleMap.put("doc", SystemEnv.getHtmlLabelName(63077, ElogSeviceUtils.currentLanguage(), "文档服务")); -// moduleMap.put("placard", SystemEnv.getHtmlLabelName(63078, ElogSeviceUtils.currentLanguage(), "团队公告")); -// moduleMap.put("fna", SystemEnv.getHtmlLabelName(135042, ElogSeviceUtils.currentLanguage(), "云报销")); -// moduleMap.put("meeting", SystemEnv.getHtmlLabelName(63080, ElogSeviceUtils.currentLanguage(), "会议")); -// moduleMap.put("wfp", SystemEnv.getHtmlLabelName(63081, ElogSeviceUtils.currentLanguage(), "流程")); -// moduleMap.put("portal", SystemEnv.getHtmlLabelName(63045, ElogSeviceUtils.currentLanguage(), "门户")); -// moduleMap.put("workreport", SystemEnv.getHtmlLabelName(63082, ElogSeviceUtils.currentLanguage(), "工作报告")); -// moduleMap.put("goal", SystemEnv.getHtmlLabelName(63074, ElogSeviceUtils.currentLanguage(), "目标管理")); -// moduleMap.put("performance", SystemEnv.getHtmlLabelName(63075, ElogSeviceUtils.currentLanguage(), "绩效考核")); -// moduleMap.put("intlogin", SystemEnv.getHtmlLabelName(63083, ElogSeviceUtils.currentLanguage(), "集成登录设置")); -// moduleMap.put("i18n", SystemEnv.getHtmlLabelName(64559, ElogSeviceUtils.currentLanguage(), "国际化")); -// moduleMap.put("timecard", SystemEnv.getHtmlLabelName(63085, ElogSeviceUtils.currentLanguage(), "出勤")); -// moduleMap.put("market", SystemEnv.getHtmlLabelName(63086, ElogSeviceUtils.currentLanguage(), "营销")); -// moduleMap.put("excelformula", SystemEnv.getHtmlLabelName(64560, ElogSeviceUtils.currentLanguage(), "函数服务")); -// moduleMap.put("ic_ldap", SystemEnv.getHtmlLabelName(70081, ElogSeviceUtils.currentLanguage(), "Ldap集成")); -// moduleMap.put("iut_c_c", SystemEnv.getHtmlLabelName(70303, ElogSeviceUtils.currentLanguage(), "统一待办推送设置")); -// moduleMap.put("plan", SystemEnv.getHtmlLabelName(70303, ElogSeviceUtils.currentLanguage(), "计划报告")); -// moduleMap.put("document", SystemEnv.getHtmlLabelName(34218, ElogSeviceUtils.currentLanguage(), "文档")); -// moduleMap.put("taskCustStatus", SystemEnv.getHtmlLabelName(73988, ElogSeviceUtils.currentLanguage(), "任务状态")); -// moduleMap.put("project", SystemEnv.getHtmlLabelName(55158, ElogSeviceUtils.currentLanguage(), "项目")); -// moduleMap.put("calendar", SystemEnv.getHtmlLabelName(74186, ElogSeviceUtils.currentLanguage(), "日历")); -// moduleMap.put("web", SystemEnv.getHtmlLabelName(75598, ElogSeviceUtils.currentLanguage(), "浏览")); -// moduleMap.put("formdatareport", SystemEnv.getHtmlLabelName(76068, ElogSeviceUtils.currentLanguage(), "来自上报数据")); -// moduleMap.put("mainline", SystemEnv.getHtmlLabelName(31898, ElogSeviceUtils.currentLanguage(), "主线")); -// moduleMap.put("customer", SystemEnv.getHtmlLabelName(32726, ElogSeviceUtils.currentLanguage(), "客户")); -// moduleMap.put("contract", SystemEnv.getHtmlLabelName(32864, ElogSeviceUtils.currentLanguage(), "合同")); -// moduleMap.put("group", SystemEnv.getHtmlLabelName(19426, ElogSeviceUtils.currentLanguage(), "分组")); -// moduleMap.put("workflow", SystemEnv.getHtmlLabelName(81851, ElogSeviceUtils.currentLanguage(), "工作流程")); -// moduleMap.put("biaoge", SystemEnv.getHtmlLabelName(30919, ElogSeviceUtils.currentLanguage(), "表格")); -// moduleMap.put("clue", SystemEnv.getHtmlLabelName(28908, ElogSeviceUtils.currentLanguage(), "线索")); -// moduleMap.put("competitor", SystemEnv.getHtmlLabelName(81852, ElogSeviceUtils.currentLanguage(), "竞争对手")); -// moduleMap.put("kpiFlow", SystemEnv.getHtmlLabelName(81853, ElogSeviceUtils.currentLanguage(), "kpil流程")); -// moduleMap.put("mainlineCustStatus", SystemEnv.getHtmlLabelName(81854, ElogSeviceUtils.currentLanguage(), "主线客户状态")); -// moduleMap.put("marketactivity", SystemEnv.getHtmlLabelName(34221, ElogSeviceUtils.currentLanguage(), "市场活动")); -// moduleMap.put("mtPhase", SystemEnv.getHtmlLabelName(81855, ElogSeviceUtils.currentLanguage(), "mt阶段")); -// moduleMap.put("production", SystemEnv.getHtmlLabelName(29329, ElogSeviceUtils.currentLanguage(), "产品")); -// moduleMap.put("quote", SystemEnv.getHtmlLabelName(34231, ElogSeviceUtils.currentLanguage(), "报价")); -// moduleMap.put("saleChance", SystemEnv.getHtmlLabelName(32863, ElogSeviceUtils.currentLanguage(), "商机")); -// moduleMap.put("orderform", SystemEnv.getHtmlLabelName(34230, ElogSeviceUtils.currentLanguage(), "订单")); -// moduleMap.put("contact", SystemEnv.getHtmlLabelName(32711, ElogSeviceUtils.currentLanguage(), "联系人")); -// moduleMap.put("price", SystemEnv.getHtmlLabelName(31922, ElogSeviceUtils.currentLanguage(), "价格")); -// moduleMap.put("capital", SystemEnv.getHtmlLabelName(83428, ElogSeviceUtils.currentLanguage(), "资金")); -// moduleMap.put("ice", SystemEnv.getHtmlLabelName(94360, ElogSeviceUtils.currentLanguage(), "日程会议集成")); -// moduleMap.put("ic_hr", SystemEnv.getHtmlLabelName(84284, ElogSeviceUtils.currentLanguage(), "HR同步")); -// moduleMap.put("intunifyauth", SystemEnv.getHtmlLabelName(84467, ElogSeviceUtils.currentLanguage(), "统一认证接入管理")); -// moduleMap.put("signcenter", SystemEnv.getHtmlLabelName(84691, ElogSeviceUtils.currentLanguage(), "电子签")); -// moduleMap.put("iut_s_c", SystemEnv.getHtmlLabelName(91503, ElogSeviceUtils.currentLanguage(), "统一待办-异构系统")); -// moduleMap.put("iut_s_c1", SystemEnv.getHtmlLabelName(91503, ElogSeviceUtils.currentLanguage(), "统一待办-应用系统")); -// moduleMap.put("iut_s_c2", SystemEnv.getHtmlLabelName(91503, ElogSeviceUtils.currentLanguage(), "统一待办中心")); -// moduleMap.put("iut_s_c3", SystemEnv.getHtmlLabelName(91503, ElogSeviceUtils.currentLanguage(), "统一待办-应用系统-流程类型")); -// moduleMap.put("ic_mail", SystemEnv.getHtmlLabelName(100715, ElogSeviceUtils.currentLanguage(), "邮箱集成")); -// moduleMap.put("hrsa", SystemEnv.getHtmlLabelName(105038, ElogSeviceUtils.currentLanguage(), "薪酬管理")); -// moduleMap.put("icc", SystemEnv.getHtmlLabelName(113884, ElogSeviceUtils.currentLanguage(), "转换规则")); -// moduleMap.put("basicserver", SystemEnv.getHtmlLabelName(113885, ElogSeviceUtils.currentLanguage(), "整体基础")); -// moduleMap.put("dw", SystemEnv.getHtmlLabelName(115549, ElogSeviceUtils.currentLanguage(), "数据仓库")); -// moduleMap.put("msg", SystemEnv.getHtmlLabelName(115563, ElogSeviceUtils.currentLanguage(), "工作消息")); -// moduleMap.put("intunifybase", SystemEnv.getHtmlLabelName(115599, ElogSeviceUtils.currentLanguage(), "统一认证服务")); -// moduleMap.put("esearch", SystemEnv.getHtmlLabelName(21694, ElogSeviceUtils.currentLanguage(), "全文检索")); -// moduleMap.put("iaauthserver", SystemEnv.getHtmlLabelName(115603, ElogSeviceUtils.currentLanguage(), "统一认证注册应用")); -// moduleMap.put("excel", SystemEnv.getHtmlLabelName(115543, ElogSeviceUtils.currentLanguage(), "excel函数")); -// moduleMap.put("scene", SystemEnv.getHtmlLabelName(115539, ElogSeviceUtils.currentLanguage(), "绘图")); -// moduleMap.put("bcw", SystemEnv.getHtmlLabelName(115651, ElogSeviceUtils.currentLanguage(), "公共模块")); -// moduleMap.put("folder", SystemEnv.getHtmlLabelName(10734, ElogSeviceUtils.currentLanguage(), "文件夹")); -// moduleMap.put("pdfcnv", SystemEnv.getHtmlLabelName(115957, ElogSeviceUtils.currentLanguage(), "PDF转换服务")); -// moduleMap.put("ebform", SystemEnv.getHtmlLabelName(121462, ElogSeviceUtils.currentLanguage(), "e-Builder表单")); -// moduleMap.put("statistics", SystemEnv.getHtmlLabelName(17745, ElogSeviceUtils.currentLanguage(), "自定义统计")); -// moduleMap.put("edcapp", SystemEnv.getHtmlLabelName(121631, ElogSeviceUtils.currentLanguage(), "多级填报")); -// -// */ -// -// moduleMap.put("elog", 62975); -// moduleMap.put("report", 62976); -// moduleMap.put("edc", 52689); -// moduleMap.put("hrm", 62978); -// moduleMap.put("crm", 62979); -// moduleMap.put("demo", 62980); -// moduleMap.put("attc", 62981); -// moduleMap.put("attm", 62982); -// moduleMap.put("attw", 62983); -// moduleMap.put("auth", 62984); -// moduleMap.put("bank", 62985); -// moduleMap.put("bap", 62986); -// moduleMap.put("base", 62987); -// moduleMap.put("batc", 62988); -// moduleMap.put("blog", 62989); -// moduleMap.put("cld", 62990); -// moduleMap.put("cmca", 62991); -// moduleMap.put("cmcl", 62992); -// moduleMap.put("cmco", 62993); -// moduleMap.put("cmcp", 62994); -// moduleMap.put("cmcu", 62995); -// moduleMap.put("cmex", 62996); -// moduleMap.put("cmmk", 62997); -// moduleMap.put("cmor", 62998); -// moduleMap.put("cmpc", 62999); -// moduleMap.put("cmpr", 63000); -// moduleMap.put("cmpt", 63001); -// moduleMap.put("cmqu", 63002); -// moduleMap.put("cmsa", 63003); -// moduleMap.put("cmtr", 63004); -// moduleMap.put("comp", 63005); -// moduleMap.put("cs", 63006); -// moduleMap.put("cowork", 63007); -// moduleMap.put("dbs", 63008); -// moduleMap.put("dcad", 63009); -// moduleMap.put("dcap", 63010); -// moduleMap.put("dcrd", 63011); -// moduleMap.put("dcre", 63012); -// moduleMap.put("dcs", 63013); -// moduleMap.put("dds", 63014); -// moduleMap.put("dps", 63015); -// moduleMap.put("drle", 63016); -// moduleMap.put("ds", 63017); -// moduleMap.put("dw_etl", 63018); -// moduleMap.put("dw_model", 63019); -// moduleMap.put("dw_process", 63020); -// moduleMap.put("dw_search", 63021); -// moduleMap.put("dw_sync", 63022); -// moduleMap.put("eb", 63023); -// moduleMap.put("ebda", 62987); -// moduleMap.put("ebdd", 63024); -// moduleMap.put("ebdf", 63025); -// moduleMap.put("ebdp", 63026); -// moduleMap.put("ecod", 63027); -// moduleMap.put("ei", 63028); -// moduleMap.put("em", 63029); -// moduleMap.put("es", 63030); -// moduleMap.put("esa", 63031); -// moduleMap.put("esb", 63032); -// moduleMap.put("esch", 63033); -// moduleMap.put("esd", 63034); -// moduleMap.put("exfo", 63035); -// moduleMap.put("fbdg", 63036); -// moduleMap.put("fdt",63037); -// moduleMap.put("fexs", 63038); -// moduleMap.put("file", 63039); -// moduleMap.put("finc", 63040); -// moduleMap.put("fnar", 63041); -// moduleMap.put("fomo", 63042); -// moduleMap.put("form", 63043); -// moduleMap.put("frpt", 63043); -// moduleMap.put("fvou", 63044); -// moduleMap.put("hp", 63045); -// moduleMap.put("hr", 63046); -// moduleMap.put("ic", 63047); -// moduleMap.put("il", 63048); -// moduleMap.put("im", 63049); -// moduleMap.put("inc", 63050); -// moduleMap.put("iua", 63051); -// moduleMap.put("iut", 63052); -// moduleMap.put("mail", 63053); -// moduleMap.put("mc", 63054); -// moduleMap.put("mt", 63055); -// moduleMap.put("my", 63056); -// moduleMap.put("odoc", 63057); -// moduleMap.put("odoc_exchange", 63058); -// moduleMap.put("open", 63059); -// moduleMap.put("pr", 63060); -// moduleMap.put("proj", 63061); -// moduleMap.put("prt", 63062); -// moduleMap.put("pspt", 63063); -// moduleMap.put("rptc", 63064); -// moduleMap.put("rpts", 63065); -// moduleMap.put("sala", 63066); -// moduleMap.put("sign", 63067); -// moduleMap.put("sms", 63068); -// moduleMap.put("task", 63069); -// moduleMap.put("tnt", 63070); -// moduleMap.put("wf", 63071); -// moduleMap.put("wfc", 63072); -// moduleMap.put("wfr", 63073); -// moduleMap.put("wrgm", 63074); -// moduleMap.put("wrgp", 63075); -// moduleMap.put("wrpr", 63076); -// moduleMap.put("doc", 63077); -// moduleMap.put("placard", 63078); -// moduleMap.put("fna", 135042); -// moduleMap.put("meeting", 63080); -// moduleMap.put("wfp", 63081); -// moduleMap.put("portal", 63045); -// moduleMap.put("workreport", 63082); -// moduleMap.put("goal", 63074); -// moduleMap.put("performance", 63075); -// moduleMap.put("intlogin", 63083); -// moduleMap.put("i18n", 64559); -// moduleMap.put("timecard", 63085); -// moduleMap.put("market", 63086); -// moduleMap.put("excelformula", 64560); -// moduleMap.put("ebatch", 69280); -// moduleMap.put("ic_ldap", 70081); -// moduleMap.put("iut_c_c", 96493); -// moduleMap.put("plan", 63076); -// moduleMap.put("document", 34218); -// moduleMap.put("taskCustStatus", 73988); -// moduleMap.put("calendar", 74186); -// moduleMap.put("batch", 69280); -// moduleMap.put("project", 55158); -// moduleMap.put("web", 75598); -// moduleMap.put("formdatareport", 76068); -// moduleMap.put("mainline", 31898); -// moduleMap.put("customer", 32726); -// moduleMap.put("contract", 32864); -// moduleMap.put("group", 19426); -// moduleMap.put("workflow", 81851); -// moduleMap.put("biaoge", 30919); -// moduleMap.put("clue", 28908); -// moduleMap.put("competitor", 81852); -// moduleMap.put("kpiFlow", 81853); -// moduleMap.put("mainlineCustStatus", 81854); -// moduleMap.put("marketactivity", 34221); -// moduleMap.put("mtPhase", 81855); -// moduleMap.put("production", 29329); -// moduleMap.put("quote", 34231); -// moduleMap.put("saleChance", 32863); -// moduleMap.put("orderform", 34230); -// moduleMap.put("contact", 32711); -// moduleMap.put("price", 31922); -// moduleMap.put("capital", 83428); -// moduleMap.put("ice", 87722); -// moduleMap.put("ic_hr", 84284); -// moduleMap.put("intunifyauth", 84508); -// moduleMap.put("signcenter", 84691); -// moduleMap.put("iut_s_c", 91503); -// moduleMap.put("iut_s_c1", 95218); -// moduleMap.put("iut_s_c2", 95219); -// moduleMap.put("iut_s_c3", 95220); -// moduleMap.put("iut_c_log", 96494); -// moduleMap.put("ic_mail", 100715); -// moduleMap.put("hrsa", 105038); -// moduleMap.put("icc", 113884); -// moduleMap.put("basicserver", 113885); -// moduleMap.put("dw", 115549); -// moduleMap.put("msg", 115563); -// moduleMap.put("intunifybase", 115599); -// moduleMap.put("esearch", 21694); -// moduleMap.put("iaauthserver", 115603); -// moduleMap.put("excel", 115543); -// moduleMap.put("scene", 115539); -// moduleMap.put("bcw", 115651); -// moduleMap.put("folder", 10734); -// moduleMap.put("pdfcnv", 115957); -// moduleMap.put("login", 63063); -// moduleMap.put("ebform", 121462); -// moduleMap.put("statistics", 17745); -// moduleMap.put("edcapp", 121631); -// moduleMap.put("cusapp", 16381); -// moduleMap.put("e10-allinone-base", 141083); -// moduleMap.put("voice", 142713); -// moduleMap.put("filter", 147832); -// moduleMap.put("ias", 146674); -// moduleMap.put("device", 153666); -// moduleMap.put("meetingTopic", 180274); -// moduleMap.put("meetingService", 180276); -// moduleMap.put("meetingDecision", 180277); -// moduleMap.put("meetingSign", 180278); -// moduleMap.put("meetingSignSet", 61601); -// moduleMap.put("meetingMember", 180280); -// moduleMap.put("meetingShare", 180281); -// moduleMap.put("int", 40031); -// moduleMap.put("print", 160051); -// moduleMap.put("wcwIconUpdate", 182661); -// moduleMap.put("wcwIconRelease", 183123); -// moduleMap.put("wcwIconUse", 183124); -// moduleMap.put("wcw", 29385); -// moduleMap.put("component", 115651); -// moduleMap.put("ic_exchange", 87722); -// moduleMap.put("iut_c_c", 240048); -// moduleMap.put("iut_c_set", 240049); -// -// Map elogMap = new HashMap<>(); -// Map reportMap = new HashMap<>(); -// Map edcMap = new HashMap<>(); -// Map hrmMap = new HashMap<>(); -// Map crmMap = new HashMap<>(); -// Map demoMap = new HashMap<>(); -// -// moduleFuctionMap.put("elog", elogMap); -// moduleFuctionMap.put("report", reportMap); -// moduleFuctionMap.put("edc", edcMap); -// moduleFuctionMap.put("hrm", hrmMap); -// moduleFuctionMap.put("crm", crmMap); -// moduleFuctionMap.put("demo", demoMap); -// -// -// -// elogMap.put("operator", "日志操作"); -// elogMap.put("reportcusinfo","报表自定义"); -// edcMap.put("dataset","数据集合"); -// -// demoMap.put("reportcusinfo","报表自定义字段"); -// } -// -// /** -// * 获取模块名称 -// * @param module -// * @return -// */ -// public static String getModuleName(String module) { +package com.engine.salary.elog.util; + +import cn.hutool.core.map.CaseInsensitiveMap; +import com.alibaba.druid.proxy.jdbc.ClobProxyImpl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.cloudstore.eccom.pc.table.WeaTable; +import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.engine.salary.elog.annotation.OperateType; +import com.engine.salary.elog.enums.ElogConsts; +import com.engine.salary.util.SalaryI18nUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import weaver.conn.RecordSet; + +import java.sql.Clob; +import java.util.*; + +/** + * @Date: 2022/5/18 19:34 + * @Author: deli.xu + * @Description: elog服务转换类 + **/ +public class ElogSeviceSwitchUtils { + + private static final Logger logger = LoggerFactory.getLogger(ElogSeviceSwitchUtils.class); + // TODO 后续需要考虑多语言label写法 + public static final Map moduleMap = new HashMap<>(); + + private static final Map> moduleFuctionMap = new HashMap<>(); + + static { + /*moduleMap.put("elog", SalaryI18nUtil.getI18nLabel(62975, ElogSeviceUtils.currentLanguage(), "日志")); + moduleMap.put("report", SalaryI18nUtil.getI18nLabel(62976, ElogSeviceUtils.currentLanguage(), "报表")); + moduleMap.put("edc", SalaryI18nUtil.getI18nLabel(62977, ElogSeviceUtils.currentLanguage(), "数据中心")); + moduleMap.put("hrm", SalaryI18nUtil.getI18nLabel(62978, ElogSeviceUtils.currentLanguage(), "人力资源")); + moduleMap.put("crm", SalaryI18nUtil.getI18nLabel(62979, ElogSeviceUtils.currentLanguage(), "资产")); + moduleMap.put("demo", SalaryI18nUtil.getI18nLabel(62980, ElogSeviceUtils.currentLanguage(), "示例")); + moduleMap.put("attc", SalaryI18nUtil.getI18nLabel(62981, ElogSeviceUtils.currentLanguage(), "出勤打卡")); + moduleMap.put("attm", SalaryI18nUtil.getI18nLabel(62982, ElogSeviceUtils.currentLanguage(), "出勤机")); + moduleMap.put("attw", SalaryI18nUtil.getI18nLabel(62983, ElogSeviceUtils.currentLanguage(), "出勤报表")); + moduleMap.put("auth", SalaryI18nUtil.getI18nLabel(62984, ElogSeviceUtils.currentLanguage(), "系统权限")); + moduleMap.put("bank", SalaryI18nUtil.getI18nLabel(62985, ElogSeviceUtils.currentLanguage(), "银企直联")); + moduleMap.put("bap", SalaryI18nUtil.getI18nLabel(62986, ElogSeviceUtils.currentLanguage(), "云办公")); + moduleMap.put("base", SalaryI18nUtil.getI18nLabel(62987, ElogSeviceUtils.currentLanguage(), "应用管理")); + moduleMap.put("batc", SalaryI18nUtil.getI18nLabel(62988, ElogSeviceUtils.currentLanguage(), "导入导出")); + moduleMap.put("blog", SalaryI18nUtil.getI18nLabel(62989, ElogSeviceUtils.currentLanguage(), "日报微博")); + moduleMap.put("cld", SalaryI18nUtil.getI18nLabel(62990, ElogSeviceUtils.currentLanguage(), "日程管理")); + moduleMap.put("cmca", SalaryI18nUtil.getI18nLabel(62991, ElogSeviceUtils.currentLanguage(), "资金管理")); + moduleMap.put("cmcl", SalaryI18nUtil.getI18nLabel(62992, ElogSeviceUtils.currentLanguage(), "线索管理")); + moduleMap.put("cmco", SalaryI18nUtil.getI18nLabel(62993, ElogSeviceUtils.currentLanguage(), "联系人管理")); + moduleMap.put("cmcp", SalaryI18nUtil.getI18nLabel(62994, ElogSeviceUtils.currentLanguage(), "对手管理")); + moduleMap.put("cmcu", SalaryI18nUtil.getI18nLabel(62995, ElogSeviceUtils.currentLanguage(), "客户管理")); + moduleMap.put("cmex", SalaryI18nUtil.getI18nLabel(62996, ElogSeviceUtils.currentLanguage(), "批量操作")); + moduleMap.put("cmmk", SalaryI18nUtil.getI18nLabel(62997, ElogSeviceUtils.currentLanguage(), "营销管理")); + moduleMap.put("cmor", SalaryI18nUtil.getI18nLabel(62998, ElogSeviceUtils.currentLanguage(), "订单管理")); + moduleMap.put("cmpc", SalaryI18nUtil.getI18nLabel(62999, ElogSeviceUtils.currentLanguage(), "价格管理")); + moduleMap.put("cmpr", SalaryI18nUtil.getI18nLabel(63000, ElogSeviceUtils.currentLanguage(), "产品管理")); + moduleMap.put("cmpt", SalaryI18nUtil.getI18nLabel(63001, ElogSeviceUtils.currentLanguage(), "外部门户")); + moduleMap.put("cmqu", SalaryI18nUtil.getI18nLabel(63002, ElogSeviceUtils.currentLanguage(), "报价管理")); + moduleMap.put("cmsa", SalaryI18nUtil.getI18nLabel(63003, ElogSeviceUtils.currentLanguage(), "商机管理")); + moduleMap.put("cmtr", SalaryI18nUtil.getI18nLabel(63004, ElogSeviceUtils.currentLanguage(), "合同管理")); + moduleMap.put("comp", SalaryI18nUtil.getI18nLabel(63005, ElogSeviceUtils.currentLanguage(), "文档对比")); + moduleMap.put("cs", SalaryI18nUtil.getI18nLabel(63006, ElogSeviceUtils.currentLanguage(), "云商店")); + moduleMap.put("cowork", SalaryI18nUtil.getI18nLabel(63007, ElogSeviceUtils.currentLanguage(), "协作区")); + moduleMap.put("dbs", SalaryI18nUtil.getI18nLabel(63008, ElogSeviceUtils.currentLanguage(), "文档公共模块")); + moduleMap.put("dcad", SalaryI18nUtil.getI18nLabel(63009, ElogSeviceUtils.currentLanguage(), "数据中心运行")); + moduleMap.put("dcap", SalaryI18nUtil.getI18nLabel(63010, ElogSeviceUtils.currentLanguage(), "数据中心分析开发配置")); + moduleMap.put("dcrd", SalaryI18nUtil.getI18nLabel(63011, ElogSeviceUtils.currentLanguage(), "数据中心开发配置")); + moduleMap.put("dcre", SalaryI18nUtil.getI18nLabel(63012, ElogSeviceUtils.currentLanguage(), "数据中心分析生产运行")); + moduleMap.put("dcs", SalaryI18nUtil.getI18nLabel(63013, ElogSeviceUtils.currentLanguage(), "文档目录模块")); + moduleMap.put("dds", SalaryI18nUtil.getI18nLabel(63014, ElogSeviceUtils.currentLanguage(), "文档模块")); + moduleMap.put("dps", SalaryI18nUtil.getI18nLabel(63015, ElogSeviceUtils.currentLanguage(), "文档权限模块")); + moduleMap.put("drle", SalaryI18nUtil.getI18nLabel(63016, ElogSeviceUtils.currentLanguage(), "数据规则库")); + moduleMap.put("ds", SalaryI18nUtil.getI18nLabel(63017, ElogSeviceUtils.currentLanguage(), "数据安全")); + moduleMap.put("dw_etl", SalaryI18nUtil.getI18nLabel(63018, ElogSeviceUtils.currentLanguage(), "ETL(抽取,转换,治理)")); + moduleMap.put("dw_model", SalaryI18nUtil.getI18nLabel(63019, ElogSeviceUtils.currentLanguage(), "建模服务")); + moduleMap.put("dw_process", SalaryI18nUtil.getI18nLabel(63020, ElogSeviceUtils.currentLanguage(), "计算服务")); + moduleMap.put("dw_search", SalaryI18nUtil.getI18nLabel(63021, ElogSeviceUtils.currentLanguage(), "查询服务")); + moduleMap.put("dw_sync", SalaryI18nUtil.getI18nLabel(63022, ElogSeviceUtils.currentLanguage(), "数据抽取")); + moduleMap.put("eb", SalaryI18nUtil.getI18nLabel(63023, ElogSeviceUtils.currentLanguage(), "云桥")); + moduleMap.put("ebda", SalaryI18nUtil.getI18nLabel(62987, ElogSeviceUtils.currentLanguage(), "应用管理")); + moduleMap.put("ebdd", SalaryI18nUtil.getI18nLabel(63024, ElogSeviceUtils.currentLanguage(), "页面设计")); + moduleMap.put("ebdf", SalaryI18nUtil.getI18nLabel(63025, ElogSeviceUtils.currentLanguage(), "表单服务")); + moduleMap.put("ebdp", SalaryI18nUtil.getI18nLabel(63026, ElogSeviceUtils.currentLanguage(), "页面管理")); + moduleMap.put("ecod", SalaryI18nUtil.getI18nLabel(63027, ElogSeviceUtils.currentLanguage(), "ecode")); + moduleMap.put("ei", SalaryI18nUtil.getI18nLabel(63028, ElogSeviceUtils.currentLanguage(), "数据导出导入")); + moduleMap.put("em", SalaryI18nUtil.getI18nLabel(63029, ElogSeviceUtils.currentLanguage(), "移动相关")); + moduleMap.put("es", SalaryI18nUtil.getI18nLabel(63030, ElogSeviceUtils.currentLanguage(), "微搜搜索")); + moduleMap.put("esa", SalaryI18nUtil.getI18nLabel(63031, ElogSeviceUtils.currentLanguage(), "微搜文件分析")); + moduleMap.put("esb", SalaryI18nUtil.getI18nLabel(63032, ElogSeviceUtils.currentLanguage(), "ESB")); + moduleMap.put("esch", SalaryI18nUtil.getI18nLabel(63033, ElogSeviceUtils.currentLanguage(), "计划任务")); + moduleMap.put("esd", SalaryI18nUtil.getI18nLabel(63034, ElogSeviceUtils.currentLanguage(), "微搜索引数据")); + moduleMap.put("exfo", SalaryI18nUtil.getI18nLabel(63035, ElogSeviceUtils.currentLanguage(), "excel函数引擎")); + moduleMap.put("fbdg", SalaryI18nUtil.getI18nLabel(63036, ElogSeviceUtils.currentLanguage(), "预算编制")); + moduleMap.put("fdt", SalaryI18nUtil.getI18nLabel(63037, ElogSeviceUtils.currentLanguage(), "表单数据")); + moduleMap.put("fexs", SalaryI18nUtil.getI18nLabel(63038, ElogSeviceUtils.currentLanguage(), "费用管理")); + moduleMap.put("file", SalaryI18nUtil.getI18nLabel(63039, ElogSeviceUtils.currentLanguage(), "文件服务")); + moduleMap.put("finc", SalaryI18nUtil.getI18nLabel(63040, ElogSeviceUtils.currentLanguage(), "微报账")); + moduleMap.put("fnar", SalaryI18nUtil.getI18nLabel(63041, ElogSeviceUtils.currentLanguage(), "财务报表")); + moduleMap.put("fomo", SalaryI18nUtil.getI18nLabel(63042, ElogSeviceUtils.currentLanguage(), "表单监控")); + moduleMap.put("form", SalaryI18nUtil.getI18nLabel(63043, ElogSeviceUtils.currentLanguage(), "表单服务")); + moduleMap.put("frpt", SalaryI18nUtil.getI18nLabel(63043, ElogSeviceUtils.currentLanguage(), "业务表单")); + moduleMap.put("fvou", SalaryI18nUtil.getI18nLabel(63044, ElogSeviceUtils.currentLanguage(), "凭证集成")); + moduleMap.put("hp", SalaryI18nUtil.getI18nLabel(63045, ElogSeviceUtils.currentLanguage(), "门户")); + moduleMap.put("hr", SalaryI18nUtil.getI18nLabel(63046, ElogSeviceUtils.currentLanguage(), "人事档案")); + moduleMap.put("ic", SalaryI18nUtil.getI18nLabel(63047, ElogSeviceUtils.currentLanguage(), "集成服务")); + moduleMap.put("il", SalaryI18nUtil.getI18nLabel(63048, ElogSeviceUtils.currentLanguage(), "集成登录")); + moduleMap.put("im", SalaryI18nUtil.getI18nLabel(63049, ElogSeviceUtils.currentLanguage(), "IM相关服务")); + moduleMap.put("inc", SalaryI18nUtil.getI18nLabel(63050, ElogSeviceUtils.currentLanguage(), "发票云服务")); + moduleMap.put("iua", SalaryI18nUtil.getI18nLabel(63051, ElogSeviceUtils.currentLanguage(), "统一认证")); + moduleMap.put("iut", SalaryI18nUtil.getI18nLabel(63052, ElogSeviceUtils.currentLanguage(), "统一待办")); + moduleMap.put("mail", SalaryI18nUtil.getI18nLabel(63053, ElogSeviceUtils.currentLanguage(), "邮件服务")); + moduleMap.put("mc", SalaryI18nUtil.getI18nLabel(63054, ElogSeviceUtils.currentLanguage(), "消息服务")); + moduleMap.put("mt", SalaryI18nUtil.getI18nLabel(63055, ElogSeviceUtils.currentLanguage(), "会议管理")); + moduleMap.put("my", SalaryI18nUtil.getI18nLabel(63056, ElogSeviceUtils.currentLanguage(), "关注&收藏&标签")); + moduleMap.put("odoc", SalaryI18nUtil.getI18nLabel(63057, ElogSeviceUtils.currentLanguage(), "公文管理")); + moduleMap.put("odoc_exchange", SalaryI18nUtil.getI18nLabel(63058, ElogSeviceUtils.currentLanguage(), "公文交换平台")); + moduleMap.put("open", SalaryI18nUtil.getI18nLabel(63059, ElogSeviceUtils.currentLanguage(), "开放平台")); + moduleMap.put("pr", SalaryI18nUtil.getI18nLabel(63060, ElogSeviceUtils.currentLanguage(), "工作画像")); + moduleMap.put("proj", SalaryI18nUtil.getI18nLabel(63061, ElogSeviceUtils.currentLanguage(), "项目管理")); + moduleMap.put("prt", SalaryI18nUtil.getI18nLabel(63062, ElogSeviceUtils.currentLanguage(), "打印服务")); + moduleMap.put("pspt", SalaryI18nUtil.getI18nLabel(63063, ElogSeviceUtils.currentLanguage(), "系统登录")); + moduleMap.put("rptc", SalaryI18nUtil.getI18nLabel(63064, ElogSeviceUtils.currentLanguage(), "数据协作")); + moduleMap.put("rpts", SalaryI18nUtil.getI18nLabel(63065, ElogSeviceUtils.currentLanguage(), "上报调查")); + moduleMap.put("sala", SalaryI18nUtil.getI18nLabel(63066, ElogSeviceUtils.currentLanguage(), "薪资管理")); + moduleMap.put("sign", SalaryI18nUtil.getI18nLabel(63067, ElogSeviceUtils.currentLanguage(), "印控中心")); + moduleMap.put("sms", SalaryI18nUtil.getI18nLabel(63068, ElogSeviceUtils.currentLanguage(), "短信")); + moduleMap.put("task", SalaryI18nUtil.getI18nLabel(63069, ElogSeviceUtils.currentLanguage(), "任务管理")); + moduleMap.put("tnt", SalaryI18nUtil.getI18nLabel(63070, ElogSeviceUtils.currentLanguage(), "租户管理")); + moduleMap.put("wf", SalaryI18nUtil.getI18nLabel(63071, ElogSeviceUtils.currentLanguage(), "路径定义")); + moduleMap.put("wfc", SalaryI18nUtil.getI18nLabel(63072, ElogSeviceUtils.currentLanguage(), "流程流转")); + moduleMap.put("wfr", SalaryI18nUtil.getI18nLabel(63073, ElogSeviceUtils.currentLanguage(), "流程规则路由")); + moduleMap.put("wrgm", SalaryI18nUtil.getI18nLabel(63074, ElogSeviceUtils.currentLanguage(), "目标管理")); + moduleMap.put("wrgp", SalaryI18nUtil.getI18nLabel(63075, ElogSeviceUtils.currentLanguage(), "绩效考核")); + moduleMap.put("wrpr", SalaryI18nUtil.getI18nLabel(63076, ElogSeviceUtils.currentLanguage(), "计划报告")); + moduleMap.put("doc", SalaryI18nUtil.getI18nLabel(63077, ElogSeviceUtils.currentLanguage(), "文档服务")); + moduleMap.put("placard", SalaryI18nUtil.getI18nLabel(63078, ElogSeviceUtils.currentLanguage(), "团队公告")); + moduleMap.put("fna", SalaryI18nUtil.getI18nLabel(135042, ElogSeviceUtils.currentLanguage(), "云报销")); + moduleMap.put("meeting", SalaryI18nUtil.getI18nLabel(63080, ElogSeviceUtils.currentLanguage(), "会议")); + moduleMap.put("wfp", SalaryI18nUtil.getI18nLabel(63081, ElogSeviceUtils.currentLanguage(), "流程")); + moduleMap.put("portal", SalaryI18nUtil.getI18nLabel(63045, ElogSeviceUtils.currentLanguage(), "门户")); + moduleMap.put("workreport", SalaryI18nUtil.getI18nLabel(63082, ElogSeviceUtils.currentLanguage(), "工作报告")); + moduleMap.put("goal", SalaryI18nUtil.getI18nLabel(63074, ElogSeviceUtils.currentLanguage(), "目标管理")); + moduleMap.put("performance", SalaryI18nUtil.getI18nLabel(63075, ElogSeviceUtils.currentLanguage(), "绩效考核")); + moduleMap.put("intlogin", SalaryI18nUtil.getI18nLabel(63083, ElogSeviceUtils.currentLanguage(), "集成登录设置")); + moduleMap.put("i18n", SalaryI18nUtil.getI18nLabel(64559, ElogSeviceUtils.currentLanguage(), "国际化")); + moduleMap.put("timecard", SalaryI18nUtil.getI18nLabel(63085, ElogSeviceUtils.currentLanguage(), "出勤")); + moduleMap.put("market", SalaryI18nUtil.getI18nLabel(63086, ElogSeviceUtils.currentLanguage(), "营销")); + moduleMap.put("excelformula", SalaryI18nUtil.getI18nLabel(64560, ElogSeviceUtils.currentLanguage(), "函数服务")); + moduleMap.put("ic_ldap", SalaryI18nUtil.getI18nLabel(70081, ElogSeviceUtils.currentLanguage(), "Ldap集成")); + moduleMap.put("iut_c_c", SalaryI18nUtil.getI18nLabel(70303, ElogSeviceUtils.currentLanguage(), "统一待办推送设置")); + moduleMap.put("plan", SalaryI18nUtil.getI18nLabel(70303, ElogSeviceUtils.currentLanguage(), "计划报告")); + moduleMap.put("document", SalaryI18nUtil.getI18nLabel(34218, ElogSeviceUtils.currentLanguage(), "文档")); + moduleMap.put("taskCustStatus", SalaryI18nUtil.getI18nLabel(73988, ElogSeviceUtils.currentLanguage(), "任务状态")); + moduleMap.put("project", SalaryI18nUtil.getI18nLabel(55158, ElogSeviceUtils.currentLanguage(), "项目")); + moduleMap.put("calendar", SalaryI18nUtil.getI18nLabel(74186, ElogSeviceUtils.currentLanguage(), "日历")); + moduleMap.put("web", SalaryI18nUtil.getI18nLabel(75598, ElogSeviceUtils.currentLanguage(), "浏览")); + moduleMap.put("formdatareport", SalaryI18nUtil.getI18nLabel(76068, ElogSeviceUtils.currentLanguage(), "来自上报数据")); + moduleMap.put("mainline", SalaryI18nUtil.getI18nLabel(31898, ElogSeviceUtils.currentLanguage(), "主线")); + moduleMap.put("customer", SalaryI18nUtil.getI18nLabel(32726, ElogSeviceUtils.currentLanguage(), "客户")); + moduleMap.put("contract", SalaryI18nUtil.getI18nLabel(32864, ElogSeviceUtils.currentLanguage(), "合同")); + moduleMap.put("group", SalaryI18nUtil.getI18nLabel(19426, ElogSeviceUtils.currentLanguage(), "分组")); + moduleMap.put("workflow", SalaryI18nUtil.getI18nLabel(81851, ElogSeviceUtils.currentLanguage(), "工作流程")); + moduleMap.put("biaoge", SalaryI18nUtil.getI18nLabel(30919, ElogSeviceUtils.currentLanguage(), "表格")); + moduleMap.put("clue", SalaryI18nUtil.getI18nLabel(28908, ElogSeviceUtils.currentLanguage(), "线索")); + moduleMap.put("competitor", SalaryI18nUtil.getI18nLabel(81852, ElogSeviceUtils.currentLanguage(), "竞争对手")); + moduleMap.put("kpiFlow", SalaryI18nUtil.getI18nLabel(81853, ElogSeviceUtils.currentLanguage(), "kpil流程")); + moduleMap.put("mainlineCustStatus", SalaryI18nUtil.getI18nLabel(81854, ElogSeviceUtils.currentLanguage(), "主线客户状态")); + moduleMap.put("marketactivity", SalaryI18nUtil.getI18nLabel(34221, ElogSeviceUtils.currentLanguage(), "市场活动")); + moduleMap.put("mtPhase", SalaryI18nUtil.getI18nLabel(81855, ElogSeviceUtils.currentLanguage(), "mt阶段")); + moduleMap.put("production", SalaryI18nUtil.getI18nLabel(29329, ElogSeviceUtils.currentLanguage(), "产品")); + moduleMap.put("quote", SalaryI18nUtil.getI18nLabel(34231, ElogSeviceUtils.currentLanguage(), "报价")); + moduleMap.put("saleChance", SalaryI18nUtil.getI18nLabel(32863, ElogSeviceUtils.currentLanguage(), "商机")); + moduleMap.put("orderform", SalaryI18nUtil.getI18nLabel(34230, ElogSeviceUtils.currentLanguage(), "订单")); + moduleMap.put("contact", SalaryI18nUtil.getI18nLabel(32711, ElogSeviceUtils.currentLanguage(), "联系人")); + moduleMap.put("price", SalaryI18nUtil.getI18nLabel(31922, ElogSeviceUtils.currentLanguage(), "价格")); + moduleMap.put("capital", SalaryI18nUtil.getI18nLabel(83428, ElogSeviceUtils.currentLanguage(), "资金")); + moduleMap.put("ice", SalaryI18nUtil.getI18nLabel(94360, ElogSeviceUtils.currentLanguage(), "日程会议集成")); + moduleMap.put("ic_hr", SalaryI18nUtil.getI18nLabel(84284, ElogSeviceUtils.currentLanguage(), "HR同步")); + moduleMap.put("intunifyauth", SalaryI18nUtil.getI18nLabel(84467, ElogSeviceUtils.currentLanguage(), "统一认证接入管理")); + moduleMap.put("signcenter", SalaryI18nUtil.getI18nLabel(84691, ElogSeviceUtils.currentLanguage(), "电子签")); + moduleMap.put("iut_s_c", SalaryI18nUtil.getI18nLabel(91503, ElogSeviceUtils.currentLanguage(), "统一待办-异构系统")); + moduleMap.put("iut_s_c1", SalaryI18nUtil.getI18nLabel(91503, ElogSeviceUtils.currentLanguage(), "统一待办-应用系统")); + moduleMap.put("iut_s_c2", SalaryI18nUtil.getI18nLabel(91503, ElogSeviceUtils.currentLanguage(), "统一待办中心")); + moduleMap.put("iut_s_c3", SalaryI18nUtil.getI18nLabel(91503, ElogSeviceUtils.currentLanguage(), "统一待办-应用系统-流程类型")); + moduleMap.put("ic_mail", SalaryI18nUtil.getI18nLabel(100715, ElogSeviceUtils.currentLanguage(), "邮箱集成")); + moduleMap.put("hrsa", SalaryI18nUtil.getI18nLabel(105038, ElogSeviceUtils.currentLanguage(), "薪酬管理")); + moduleMap.put("icc", SalaryI18nUtil.getI18nLabel(113884, ElogSeviceUtils.currentLanguage(), "转换规则")); + moduleMap.put("basicserver", SalaryI18nUtil.getI18nLabel(113885, ElogSeviceUtils.currentLanguage(), "整体基础")); + moduleMap.put("dw", SalaryI18nUtil.getI18nLabel(115549, ElogSeviceUtils.currentLanguage(), "数据仓库")); + moduleMap.put("msg", SalaryI18nUtil.getI18nLabel(115563, ElogSeviceUtils.currentLanguage(), "工作消息")); + moduleMap.put("intunifybase", SalaryI18nUtil.getI18nLabel(115599, ElogSeviceUtils.currentLanguage(), "统一认证服务")); + moduleMap.put("esearch", SalaryI18nUtil.getI18nLabel(21694, ElogSeviceUtils.currentLanguage(), "全文检索")); + moduleMap.put("iaauthserver", SalaryI18nUtil.getI18nLabel(115603, ElogSeviceUtils.currentLanguage(), "统一认证注册应用")); + moduleMap.put("excel", SalaryI18nUtil.getI18nLabel(115543, ElogSeviceUtils.currentLanguage(), "excel函数")); + moduleMap.put("scene", SalaryI18nUtil.getI18nLabel(115539, ElogSeviceUtils.currentLanguage(), "绘图")); + moduleMap.put("bcw", SalaryI18nUtil.getI18nLabel(115651, ElogSeviceUtils.currentLanguage(), "公共模块")); + moduleMap.put("folder", SalaryI18nUtil.getI18nLabel(10734, ElogSeviceUtils.currentLanguage(), "文件夹")); + moduleMap.put("pdfcnv", SalaryI18nUtil.getI18nLabel(115957, ElogSeviceUtils.currentLanguage(), "PDF转换服务")); + moduleMap.put("ebform", SalaryI18nUtil.getI18nLabel(121462, ElogSeviceUtils.currentLanguage(), "e-Builder表单")); + moduleMap.put("statistics", SalaryI18nUtil.getI18nLabel(17745, ElogSeviceUtils.currentLanguage(), "自定义统计")); + moduleMap.put("edcapp", SalaryI18nUtil.getI18nLabel(121631, ElogSeviceUtils.currentLanguage(), "多级填报")); + + */ + + moduleMap.put("elog", 62975); + moduleMap.put("report", 62976); + moduleMap.put("edc", 52689); + moduleMap.put("hrm", 62978); + moduleMap.put("crm", 62979); + moduleMap.put("demo", 62980); + moduleMap.put("attc", 62981); + moduleMap.put("attm", 62982); + moduleMap.put("attw", 62983); + moduleMap.put("auth", 62984); + moduleMap.put("bank", 62985); + moduleMap.put("bap", 62986); + moduleMap.put("base", 62987); + moduleMap.put("batc", 62988); + moduleMap.put("blog", 62989); + moduleMap.put("cld", 62990); + moduleMap.put("cmca", 62991); + moduleMap.put("cmcl", 62992); + moduleMap.put("cmco", 62993); + moduleMap.put("cmcp", 62994); + moduleMap.put("cmcu", 62995); + moduleMap.put("cmex", 62996); + moduleMap.put("cmmk", 62997); + moduleMap.put("cmor", 62998); + moduleMap.put("cmpc", 62999); + moduleMap.put("cmpr", 63000); + moduleMap.put("cmpt", 63001); + moduleMap.put("cmqu", 63002); + moduleMap.put("cmsa", 63003); + moduleMap.put("cmtr", 63004); + moduleMap.put("comp", 63005); + moduleMap.put("cs", 63006); + moduleMap.put("cowork", 63007); + moduleMap.put("dbs", 63008); + moduleMap.put("dcad", 63009); + moduleMap.put("dcap", 63010); + moduleMap.put("dcrd", 63011); + moduleMap.put("dcre", 63012); + moduleMap.put("dcs", 63013); + moduleMap.put("dds", 63014); + moduleMap.put("dps", 63015); + moduleMap.put("drle", 63016); + moduleMap.put("ds", 63017); + moduleMap.put("dw_etl", 63018); + moduleMap.put("dw_model", 63019); + moduleMap.put("dw_process", 63020); + moduleMap.put("dw_search", 63021); + moduleMap.put("dw_sync", 63022); + moduleMap.put("eb", 63023); + moduleMap.put("ebda", 62987); + moduleMap.put("ebdd", 63024); + moduleMap.put("ebdf", 63025); + moduleMap.put("ebdp", 63026); + moduleMap.put("ecod", 63027); + moduleMap.put("ei", 63028); + moduleMap.put("em", 63029); + moduleMap.put("es", 63030); + moduleMap.put("esa", 63031); + moduleMap.put("esb", 63032); + moduleMap.put("esch", 63033); + moduleMap.put("esd", 63034); + moduleMap.put("exfo", 63035); + moduleMap.put("fbdg", 63036); + moduleMap.put("fdt", 63037); + moduleMap.put("fexs", 63038); + moduleMap.put("file", 63039); + moduleMap.put("finc", 63040); + moduleMap.put("fnar", 63041); + moduleMap.put("fomo", 63042); + moduleMap.put("form", 63043); + moduleMap.put("frpt", 63043); + moduleMap.put("fvou", 63044); + moduleMap.put("hp", 63045); + moduleMap.put("hr", 63046); + moduleMap.put("ic", 63047); + moduleMap.put("il", 63048); + moduleMap.put("im", 63049); + moduleMap.put("inc", 63050); + moduleMap.put("iua", 63051); + moduleMap.put("iut", 63052); + moduleMap.put("mail", 63053); + moduleMap.put("mc", 63054); + moduleMap.put("mt", 63055); + moduleMap.put("my", 63056); + moduleMap.put("odoc", 63057); + moduleMap.put("odoc_exchange", 63058); + moduleMap.put("open", 63059); + moduleMap.put("pr", 63060); + moduleMap.put("proj", 63061); + moduleMap.put("prt", 63062); + moduleMap.put("pspt", 63063); + moduleMap.put("rptc", 63064); + moduleMap.put("rpts", 63065); + moduleMap.put("sala", 63066); + moduleMap.put("sign", 63067); + moduleMap.put("sms", 63068); + moduleMap.put("task", 63069); + moduleMap.put("tnt", 63070); + moduleMap.put("wf", 63071); + moduleMap.put("wfc", 63072); + moduleMap.put("wfr", 63073); + moduleMap.put("wrgm", 63074); + moduleMap.put("wrgp", 63075); + moduleMap.put("wrpr", 63076); + moduleMap.put("doc", 63077); + moduleMap.put("placard", 63078); + moduleMap.put("fna", 135042); + moduleMap.put("meeting", 63080); + moduleMap.put("wfp", 63081); + moduleMap.put("portal", 63045); + moduleMap.put("workreport", 63082); + moduleMap.put("goal", 63074); + moduleMap.put("performance", 63075); + moduleMap.put("intlogin", 63083); + moduleMap.put("i18n", 64559); + moduleMap.put("timecard", 63085); + moduleMap.put("market", 63086); + moduleMap.put("excelformula", 64560); + moduleMap.put("ebatch", 69280); + moduleMap.put("ic_ldap", 70081); + moduleMap.put("iut_c_c", 96493); + moduleMap.put("plan", 63076); + moduleMap.put("document", 34218); + moduleMap.put("taskCustStatus", 73988); + moduleMap.put("calendar", 74186); + moduleMap.put("batch", 69280); + moduleMap.put("project", 55158); + moduleMap.put("web", 75598); + moduleMap.put("formdatareport", 76068); + moduleMap.put("mainline", 31898); + moduleMap.put("customer", 32726); + moduleMap.put("contract", 32864); + moduleMap.put("group", 19426); + moduleMap.put("workflow", 81851); + moduleMap.put("biaoge", 30919); + moduleMap.put("clue", 28908); + moduleMap.put("competitor", 81852); + moduleMap.put("kpiFlow", 81853); + moduleMap.put("mainlineCustStatus", 81854); + moduleMap.put("marketactivity", 34221); + moduleMap.put("mtPhase", 81855); + moduleMap.put("production", 29329); + moduleMap.put("quote", 34231); + moduleMap.put("saleChance", 32863); + moduleMap.put("orderform", 34230); + moduleMap.put("contact", 32711); + moduleMap.put("price", 31922); + moduleMap.put("capital", 83428); + moduleMap.put("ice", 87722); + moduleMap.put("ic_hr", 84284); + moduleMap.put("intunifyauth", 84508); + moduleMap.put("signcenter", 84691); + moduleMap.put("iut_s_c", 91503); + moduleMap.put("iut_s_c1", 95218); + moduleMap.put("iut_s_c2", 95219); + moduleMap.put("iut_s_c3", 95220); + moduleMap.put("iut_c_log", 96494); + moduleMap.put("ic_mail", 100715); + moduleMap.put("hrsa", 105038); + moduleMap.put("icc", 113884); + moduleMap.put("basicserver", 113885); + moduleMap.put("dw", 115549); + moduleMap.put("msg", 115563); + moduleMap.put("intunifybase", 115599); + moduleMap.put("esearch", 21694); + moduleMap.put("iaauthserver", 115603); + moduleMap.put("excel", 115543); + moduleMap.put("scene", 115539); + moduleMap.put("bcw", 115651); + moduleMap.put("folder", 10734); + moduleMap.put("pdfcnv", 115957); + moduleMap.put("login", 63063); + moduleMap.put("ebform", 121462); + moduleMap.put("statistics", 17745); + moduleMap.put("edcapp", 121631); + moduleMap.put("cusapp", 16381); + moduleMap.put("e10-allinone-base", 141083); + moduleMap.put("voice", 142713); + moduleMap.put("filter", 147832); + moduleMap.put("ias", 146674); + moduleMap.put("device", 153666); + moduleMap.put("meetingTopic", 180274); + moduleMap.put("meetingService", 180276); + moduleMap.put("meetingDecision", 180277); + moduleMap.put("meetingSign", 180278); + moduleMap.put("meetingSignSet", 61601); + moduleMap.put("meetingMember", 180280); + moduleMap.put("meetingShare", 180281); + moduleMap.put("int", 40031); + moduleMap.put("print", 160051); + moduleMap.put("wcwIconUpdate", 182661); + moduleMap.put("wcwIconRelease", 183123); + moduleMap.put("wcwIconUse", 183124); + moduleMap.put("wcw", 29385); + moduleMap.put("component", 115651); + moduleMap.put("ic_exchange", 87722); + moduleMap.put("iut_c_c", 240048); + moduleMap.put("iut_c_set", 240049); + + Map elogMap = new HashMap<>(); + Map reportMap = new HashMap<>(); + Map edcMap = new HashMap<>(); + Map hrmMap = new HashMap<>(); + Map crmMap = new HashMap<>(); + Map demoMap = new HashMap<>(); + + moduleFuctionMap.put("elog", elogMap); + moduleFuctionMap.put("report", reportMap); + moduleFuctionMap.put("edc", edcMap); + moduleFuctionMap.put("hrm", hrmMap); + moduleFuctionMap.put("crm", crmMap); + moduleFuctionMap.put("demo", demoMap); + + + elogMap.put("operator", "日志操作"); + elogMap.put("reportcusinfo", "报表自定义"); + edcMap.put("dataset", "数据集合"); + + demoMap.put("reportcusinfo", "报表自定义字段"); + } + + /** + * 获取模块名称 + * + * @param module + * @return + */ + public static String getModuleName(String module) { // String modulename = ElogSeviceUtils.null2String(moduleMap.get(module), module); -// -// return ElogSeviceUtils.isLongValue(modulename) ? SystemEnv.getHtmlLabelName(ElogSeviceUtils.getLongValue(modulename),modulename) : modulename; -// } -// -// /** -// * 获取模块名称 -// * @param module -// * @return -// */ -// public static String getModuleNamePapi(String module) { +// return ElogSeviceUtils.isLongValue(modulename) ? SalaryI18nUtil.getI18nLabel(ElogSeviceUtils.getLongValue(modulename), modulename) : modulename; + return module; + } + + /** + * 获取模块名称 + * + * @param module + * @return + */ + public static String getModuleNamePapi(String module) { // String modulename = ElogSeviceUtils.null2String(moduleMap.get(module), module); -// -// return ElogSeviceUtils.isLongValue(modulename) ? SystemEnv.getHtmlLabelName(ElogSeviceUtils.getLongValue(modulename),modulename) : modulename; -// } -// -// -// /** -// * 获取方法名称 -// * @param module -// * @param function -// * @return -// */ -// public static String getFunctionName(String module, String function) { +// return ElogSeviceUtils.isLongValue(modulename) ? SalaryI18nUtil.getI18nLabel(ElogSeviceUtils.getLongValue(modulename), modulename) : modulename; + return module; + } + + + /** + * 获取方法名称 + * + * @param module + * @param function + * @return + */ + public static String getFunctionName(String module, String function) { // Map functionMap = moduleFuctionMap.get(module); // -// if(functionMap != null) -// function = ElogSeviceUtils.null2String(functionMap.get(function),function); +// if (functionMap != null) +// function = ElogSeviceUtils.null2String(functionMap.get(function), function); // -// return ElogSeviceUtils.isLongValue(function) ? SystemEnv.getHtmlLabelName(ElogSeviceUtils.getLongValue(function),function) : function; -// } -// -// public static void switchValues(List resultMap, List recordColumns) { -// -// switchValues(resultMap,recordColumns,false); -// -// } -// -// -// public static void switchValues(List list,List recordColumns, boolean islocal) { -//// if(!islocal) { -//// changKey2Lower(list); -//// } -// for(Map map : list) { -// Iterator> iterator = map.entrySet().iterator(); -// while (iterator.hasNext()) { -// Map.Entry next = iterator.next(); -// for (String recordColumn : recordColumns) { -// if (next.getKey().equals(recordColumn) && next.getValue() instanceof String) { -// map.put(next.getKey(), transfi18Method(next.getValue())); -// } -// } -// } -// map.put("modulenamespan", getModuleName(map.get("modulename"))); -// //map.put("functionnamespan", getFunctionName(map.get("modulename"), map.get("functionname"))); -// //switchDatabaseField(map); +// return ElogSeviceUtils.isLongValue(function) ? SalaryI18nUtil.getI18nLabel(ElogSeviceUtils.getLongValue(function), function) : function; + return function; + } + + public static void switchValues(List resultMap, List recordColumns) { + + switchValues(resultMap, recordColumns, false); + + } + + + public static void switchValues(List list, List recordColumns, boolean islocal) { +// if(!islocal) { +// changKey2Lower(list); // } -// -// } -// -// public static void switchDatabaseField(Map map) { -// map.put("date", map.get("log_date")); -// map.put("operator", map.get("log_operator")); -// map.put("result", map.get("log_result")); -// } -// -// /** -// * 转换数据成多语言 -// * @param lists -// */ -// public static List transfLanguageData(List lists) { -// if (lists != null && lists.size() > 0) { -// for (Map map : lists) { -// if (map != null) { -// Iterator> iterator = map.entrySet().iterator(); -// while (iterator.hasNext()) { -// Map.Entry entry = iterator.next(); -// if (entry.getValue() instanceof Integer ||entry.getValue() instanceof Long||entry.getValue()instanceof String) { -// map.put(entry.getKey(), transfLanguageLableid(ElogSeviceUtils.getLongValue(entry.getValue().toString()),entry.getValue().toString())); -// }else{ -// map.put(entry.getKey(), entry.getValue()); -// } -// } -// } -// } -// } -// return lists; -// } -// -// public static String transfi18Method(String str) { -// if ("新增".equals(str)){ -// return transfLanguageLableid(63252l,str); -// } else if ("查看".equals(str)) { -// return transfLanguageLableid(55172l,str); -// }else if ("修改".equals(str)) { -// return transfLanguageLableid(63253l,str); -// }else if ("更新".equals(str)) { -// return transfLanguageLableid(29540l,str); -// }else if ("删除".equals(str)) { -// return transfLanguageLableid(63254l,str); -// }else if (StringUtils.isNumeric(str) && str.length()< 10) { -// return transfLanguageLableid(Long.parseLong(str),str); -// }else { -// return str; -// } -// } -// -// public static String transfLanguageLableid(Long lableid) { -// return SystemEnv.getHtmlLabelName(lableid, lableid.toString()); -// } -// -// /** -// * 转换多语言 -// * @param lableid -// * @param def -// * @return -// */ -// public static String transfLanguageLableid(Long lableid,String def) { -// return SystemEnv.getHtmlLabelName(lableid, def); -// } -// -// -// /** -// * 日志本地服务-更新明细转换 -// * -// * @param mainlist -// * @param list -// * @return -// */ -// public static Map switchChangeValue(List mainlist, List list) { -// Map res = new HashMap<>(); -// StringBuilder valuesChange = new StringBuilder(); -// List valuesChanges = new ArrayList<>(); -// String values = ""; -// String operatetypeName = ""; -// int oldCount = 0; -// int newCount = 0; -// String operatetype = ""; -// CaseInsensitiveMap map = null; -// if (list != null && list.size() > 0) { -// for (Map hashmap : list) { -// map = new CaseInsensitiveMap<>(hashmap); -// Object obj = map.get("operatetype"); -// if (obj != null) { -// operatetype = obj.toString(); -// } -// } -// } -// if (mainlist != null && mainlist.size() > 0) { -// for (Map hashMap : mainlist) { -// map = new CaseInsensitiveMap<>(hashMap); -// Object isdetail = map.get("isdetail"); -// if (isdetail != null) { -// if (StringUtils.isBlank(isdetail.toString())||!"0".equals(isdetail.toString())){ -// continue; -// } -// }else{ -// continue; -// } -// Object oldvalue = map.get("oldvalue"); -// if (oldvalue != null) { -// if (StringUtils.isNotBlank(oldvalue.toString())) { -// oldCount++; -// } -// } -// -// Object newvalue = map.get("newvalue"); -// if (newvalue != null) { -// if (StringUtils.isNotBlank(newvalue.toString())) { -// newCount++; -// } -// } -// -// } -// } -// CaseInsensitiveMap jo = null; -// for(int i = 0 ; i < mainlist.size(); i++) { -// Map jomap = mainlist.get(i); -// jo = new CaseInsensitiveMap<>(jomap); -// String fieldName = jo.get("fielddesc"); -// String oldvalue = obj2String(jo.get("oldvalue")); -// String oldrealvalue = obj2String(jo.get("oldrealvalue")); -// String newValue = obj2String(jo.get("newvalue")); -// String newrealvalue = obj2String(jo.get("newrealvalue")); -// // oracle.sql.CLOB类型处理 -// jomap.put("oldvalue", oldvalue); -// jomap.put("oldrealvalue", oldrealvalue); -// jomap.put("newvalue", newValue); -// jomap.put("newrealvalue", newrealvalue); -// -// String fieldNameLabelId = jo.get("fieldnamelabelid"); -// if (StringUtils.isNotBlank(fieldNameLabelId)&&StringUtils.isNumeric(fieldNameLabelId)) { -// fieldName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldNameLabelId),fieldName); -// } else if (StringUtils.isNotBlank(fieldNameLabelId)&&!StringUtils.isNumeric(fieldNameLabelId) && !"-1".equals(fieldNameLabelId)) { -// fieldName = fieldNameLabelId; -// } else if (StringUtils.isNotBlank(fieldName)&&StringUtils.isNumeric(fieldName)) { -// fieldName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldName),fieldName); -// } -// if (StringUtils.isNotBlank(oldrealvalue)&&StringUtils.isNumeric(oldrealvalue)) { -// oldvalue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(oldrealvalue),oldvalue); -// }else if (StringUtils.isNotBlank(oldrealvalue)&&!StringUtils.isNumeric(oldrealvalue)) { -// oldvalue = oldrealvalue; -// } -// if (StringUtils.isNotBlank(newrealvalue)&&StringUtils.isNumeric(newrealvalue)) { -// newValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(newrealvalue),newValue); -// }else if (StringUtils.isNotBlank(newrealvalue)&&!StringUtils.isNumeric(newrealvalue)) { -// newValue = newrealvalue; -// } -// -// //oldvalue,newValue 避免xss漏洞 分别进行转义 + for (Map map : list) { + Iterator> iterator = map.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry next = iterator.next(); + for (String recordColumn : recordColumns) { + if (next.getKey().equals(recordColumn) && next.getValue() instanceof String) { + map.put(next.getKey(), transfi18Method(next.getValue())); + } + } + } + map.put("modulenamespan", getModuleName(map.get("modulename"))); + //map.put("functionnamespan", getFunctionName(map.get("modulename"), map.get("functionname"))); + //switchDatabaseField(map); + } + + } + + public static void switchDatabaseField(Map map) { + map.put("date", map.get("log_date")); + map.put("operator", map.get("log_operator")); + map.put("result", map.get("log_result")); + } + + /** + * 转换数据成多语言 + * + * @param lists + */ + public static List transfLanguageData(List lists) { + if (lists != null && lists.size() > 0) { + for (Map map : lists) { + if (map != null) { + Iterator> iterator = map.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + if (entry.getValue() instanceof Integer || entry.getValue() instanceof Long || entry.getValue() instanceof String) { + map.put(entry.getKey(), transfLanguageLableid(ElogSeviceUtils.getLongValue(entry.getValue().toString()), entry.getValue().toString())); + } else { + map.put(entry.getKey(), entry.getValue()); + } + } + } + } + } + return lists; + } + + public static String transfi18Method(String str) { + if ("新增".equals(str)) { + return transfLanguageLableid(63252l, str); + } else if ("查看".equals(str)) { + return transfLanguageLableid(55172l, str); + } else if ("修改".equals(str)) { + return transfLanguageLableid(63253l, str); + } else if ("更新".equals(str)) { + return transfLanguageLableid(29540l, str); + } else if ("删除".equals(str)) { + return transfLanguageLableid(63254l, str); + } else if (StringUtils.isNumeric(str) && str.length() < 10) { + return transfLanguageLableid(Long.parseLong(str), str); + } else { + return str; + } + } + + public static String transfLanguageLableid(Long lableid) { + return SalaryI18nUtil.getI18nLabel(Integer.parseInt(lableid.toString()), lableid.toString()); + } + + /** + * 转换多语言 + * + * @param lableid + * @param def + * @return + */ + public static String transfLanguageLableid(Long lableid, String def) { + return SalaryI18nUtil.getI18nLabel(Integer.parseInt(lableid.toString()), def); + } + + + /** + * 日志本地服务-更新明细转换 + * + * @param mainlist + * @param list + * @return + */ + public static Map switchChangeValue(List mainlist, List list) { + Map res = new HashMap<>(); + StringBuilder valuesChange = new StringBuilder(); + List valuesChanges = new ArrayList<>(); + String values = ""; + String operatetypeName = ""; + int oldCount = 0; + int newCount = 0; + String operatetype = ""; + CaseInsensitiveMap map = null; + if (list != null && list.size() > 0) { + for (Map hashmap : list) { + map = new CaseInsensitiveMap<>(hashmap); + Object obj = map.get("operatetype"); + if (obj != null) { + operatetype = obj.toString(); + } + } + } + if (mainlist != null && mainlist.size() > 0) { + for (Map hashMap : mainlist) { + map = new CaseInsensitiveMap<>(hashMap); + Object isdetail = map.get("isdetail"); + if (isdetail != null) { + if (StringUtils.isBlank(isdetail.toString()) || !"0".equals(isdetail.toString())) { + continue; + } + } else { + continue; + } + Object oldvalue = map.get("oldvalue"); + if (oldvalue != null) { + if (StringUtils.isNotBlank(oldvalue.toString())) { + oldCount++; + } + } + + Object newvalue = map.get("newvalue"); + if (newvalue != null) { + if (StringUtils.isNotBlank(newvalue.toString())) { + newCount++; + } + } + + } + } + CaseInsensitiveMap jo = null; + for (int i = 0; i < mainlist.size(); i++) { + Map jomap = mainlist.get(i); + jo = new CaseInsensitiveMap<>(jomap); + String fieldName = jo.get("fielddesc"); + String oldvalue = obj2String(jo.get("oldvalue")); + String oldrealvalue = obj2String(jo.get("oldrealvalue")); + String newValue = obj2String(jo.get("newvalue")); + String newrealvalue = obj2String(jo.get("newrealvalue")); + // oracle.sql.CLOB类型处理 + jomap.put("oldvalue", oldvalue); + jomap.put("oldrealvalue", oldrealvalue); + jomap.put("newvalue", newValue); + jomap.put("newrealvalue", newrealvalue); + + String fieldNameLabelId = jo.get("fieldnamelabelid"); + if (StringUtils.isNotBlank(fieldNameLabelId) && StringUtils.isNumeric(fieldNameLabelId)) { + fieldName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldNameLabelId), fieldName); + } else if (StringUtils.isNotBlank(fieldNameLabelId) && !StringUtils.isNumeric(fieldNameLabelId) && !"-1".equals(fieldNameLabelId)) { + fieldName = fieldNameLabelId; + } else if (StringUtils.isNotBlank(fieldName) && StringUtils.isNumeric(fieldName)) { + fieldName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldName), fieldName); + } + if (StringUtils.isNotBlank(oldrealvalue) && StringUtils.isNumeric(oldrealvalue)) { + oldvalue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(oldrealvalue), oldvalue); + } else if (StringUtils.isNotBlank(oldrealvalue) && !StringUtils.isNumeric(oldrealvalue)) { + oldvalue = oldrealvalue; + } + if (StringUtils.isNotBlank(newrealvalue) && StringUtils.isNumeric(newrealvalue)) { + newValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(newrealvalue), newValue); + } else if (StringUtils.isNotBlank(newrealvalue) && !StringUtils.isNumeric(newrealvalue)) { + newValue = newrealvalue; + } + + //oldvalue,newValue 避免xss漏洞 分别进行转义 // oldvalue = StringConversionForXSS(oldvalue); // newValue = StringConversionForXSS(newValue); -// -// if (oldCount != 0) { -// valuesChanges.add(String.format(valueChangeFormat(), fieldName, oldvalue, newValue)); -// -// } else if (oldCount == 0 || newCount==0 || operatetype.startsWith(OperateType.add)||operatetype.startsWith(OperateType.delete)) { -// valuesChanges.add(String.format(valueChangeNewFormat(), fieldName, newValue)); -// -// } else { -// valuesChanges.add(String.format(valueChangeFormat(), fieldName, oldvalue, newValue)); -// } -// //} -// /*if (valuesChange.length() > 3) { -// values = valuesChange.substring(0, valuesChange.length() - 3); -// }*/ -// } -// -// res.put("valueschanges", valuesChanges); -// res.put("detailcontexts", mainlist); -// return res; -// } -// -// private static String obj2String(Object o) { -// if (o == null) { -// return ""; -// } -// if (o instanceof String) { -// return (String) o; -// } -// return JSON.toJSONString(o); -// } -// -// /** -// * 服务中心结果集转换 -// */ -// public static void switchChangeValues(List list) { -// CaseInsensitiveMap map = null; -// for(Map hashMap : list) { -// map = new CaseInsensitiveMap<>(hashMap); -// int count = 0; -// StringBuilder valuesChange = new StringBuilder(); -// List valuesChanges = new ArrayList(); -// Object detailContexts = map.get("detailcontexts"); -// if(detailContexts != null) { -// JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(detailContexts)); -// for(int i = 0 ; i < jsonArray.size(); i++) { -// JSONObject jo = jsonArray.getJSONObject(i); -// String isDetail = jo.getString("isDetail"); -// if (StringUtils.isBlank(isDetail)||!"0".equals(isDetail)){ -// continue; -// } -// String oldvalue = jo.getString("oldValue"); -// if (StringUtils.isNotBlank(oldvalue)) { -// count++; -// } -// } -// } -// -// if(detailContexts != null) { -// JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(detailContexts)); -// for(int i = 0 ; i < jsonArray.size(); i++) { -// JSONObject jo = jsonArray.getJSONObject(i); -// String isDetail = jo.getString("isDetail"); -// if (StringUtils.isBlank(isDetail)||!"0".equals(isDetail)){ -// continue; -// } -// String fieldName = jo.getString("fieldDesc"); -// String oldvalue = jo.getString("oldValue"); -// String oldrealvalue = jo.getString("oldRealValue"); -// String newValue = jo.getString("newValue"); -// String newrealvalue = jo.getString("newRealValue"); -// String fieldNameLabelId = jo.getString("fieldNameLabelId"); -// if (StringUtils.isNotBlank(fieldNameLabelId)&&StringUtils.isNumeric(fieldNameLabelId)) { -// fieldName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldNameLabelId)); -// } -// if (StringUtils.isNotBlank(oldrealvalue)&&StringUtils.isNumeric(oldrealvalue)) { -// oldvalue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(oldrealvalue)); -// } -// if (StringUtils.isNotBlank(newrealvalue)&&StringUtils.isNumeric(newrealvalue)) { -// newValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(newrealvalue)); -// } -// if (count == 0) { -// valuesChanges.add(String.format(valueChangeNewFormat(), fieldName, newValue)); -// } else { -// valuesChanges.add(String.format(valueChangeFormat(), fieldName, oldvalue, newValue)); -// } -// -// } -// /*String values = ""; -// if (valuesChange.length() > 3) { -// values = valuesChange.substring(0, valuesChange.length() - 3); -// }*/ -// -// map.put("valueschanges", valuesChanges); -// } -// -// } -// } -// -// public static String valueChangeNewFormat(){ -// return "【%s】:%s"; -// } -// public static String valueChangeFormat(){ -// return "【%s】:"+SystemEnv.getHtmlLabelName(61695,"由")+ -// "[%s] "+SystemEnv.getHtmlLabelName(61697,"改为")+" [%s]"; -// } -// -// public static void changKey2Lower(List list) { -// -// List newList = new ArrayList<>(); -// for(Map orgMap : list) { -// Map resultMap = new HashMap<>(); -// -// if (orgMap == null || orgMap.isEmpty()) { -// newList.add(resultMap); -// continue; -// } -// -// Set keySet = orgMap.keySet(); -// for (String key : keySet) { -// resultMap.put(key != null ? key.toLowerCase() : "", orgMap.get(key)); -// } -// newList.add(resultMap); -// } -// list.clear(); -// list.addAll(newList); -// } -// -// /** -// * 查看详细表的数据 -// * @param list -// */ -// public static Map switchDetailChangeValue(List list) { -// Map res = new HashMap<>(); -// List> lists = new ArrayList<>(); -// HashMap repeatTableName = new HashMap<>(); -// CaseInsensitiveMap map = null; -// for (Map hashMap : list) { -// map = new CaseInsensitiveMap<>(hashMap); -// List detailmap = new ArrayList<>(); -// HashMap detailoldMap= new HashMap<>(); -// detailoldMap.put("operator",SystemEnv.getHtmlLabelName(63248,"操作(旧)")); -// detailoldMap.put("dataid",map.get("dataid")); -// HashMap detailnewMap= new HashMap<>(); -// detailnewMap.put("operator",SystemEnv.getHtmlLabelName(63249,"操作(新)")); -// detailnewMap.put("dataid",map.get("dataid")); -// detailmap.add(detailoldMap); -// detailmap.add(detailnewMap); -// WeaTable wea = new WeaTable(); -// wea.getColumns().add(new WeaTableColumn(SystemEnv.getHtmlLabelName(63250,"操作"), "operator", "5%")); + + if (oldCount != 0) { + valuesChanges.add(String.format(valueChangeFormat(), fieldName, oldvalue, newValue)); + + } else if (oldCount == 0 || newCount == 0 || operatetype.startsWith(OperateType.add) || operatetype.startsWith(OperateType.delete)) { + valuesChanges.add(String.format(valueChangeNewFormat(), fieldName, newValue)); + + } else { + valuesChanges.add(String.format(valueChangeFormat(), fieldName, oldvalue, newValue)); + } + //} + /*if (valuesChange.length() > 3) { + values = valuesChange.substring(0, valuesChange.length() - 3); + }*/ + } + + res.put("valueschanges", valuesChanges); + res.put("detailcontexts", mainlist); + return res; + } + + private static String obj2String(Object o) { + if (o == null) { + return ""; + } + if (o instanceof String) { + return (String) o; + } + return JSON.toJSONString(o); + } + + /** + * 服务中心结果集转换 + */ + public static void switchChangeValues(List list) { + CaseInsensitiveMap map = null; + for (Map hashMap : list) { + map = new CaseInsensitiveMap<>(hashMap); + int count = 0; + StringBuilder valuesChange = new StringBuilder(); + List valuesChanges = new ArrayList(); + Object detailContexts = map.get("detailcontexts"); + if (detailContexts != null) { + JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(detailContexts)); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jo = jsonArray.getJSONObject(i); + String isDetail = jo.getString("isDetail"); + if (StringUtils.isBlank(isDetail) || !"0".equals(isDetail)) { + continue; + } + String oldvalue = jo.getString("oldValue"); + if (StringUtils.isNotBlank(oldvalue)) { + count++; + } + } + } + + if (detailContexts != null) { + JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(detailContexts)); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jo = jsonArray.getJSONObject(i); + String isDetail = jo.getString("isDetail"); + if (StringUtils.isBlank(isDetail) || !"0".equals(isDetail)) { + continue; + } + String fieldName = jo.getString("fieldDesc"); + String oldvalue = jo.getString("oldValue"); + String oldrealvalue = jo.getString("oldRealValue"); + String newValue = jo.getString("newValue"); + String newrealvalue = jo.getString("newRealValue"); + String fieldNameLabelId = jo.getString("fieldNameLabelId"); + if (StringUtils.isNotBlank(fieldNameLabelId) && StringUtils.isNumeric(fieldNameLabelId)) { + fieldName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldNameLabelId)); + } + if (StringUtils.isNotBlank(oldrealvalue) && StringUtils.isNumeric(oldrealvalue)) { + oldvalue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(oldrealvalue)); + } + if (StringUtils.isNotBlank(newrealvalue) && StringUtils.isNumeric(newrealvalue)) { + newValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(newrealvalue)); + } + if (count == 0) { + valuesChanges.add(String.format(valueChangeNewFormat(), fieldName, newValue)); + } else { + valuesChanges.add(String.format(valueChangeFormat(), fieldName, oldvalue, newValue)); + } + + } + /*String values = ""; + if (valuesChange.length() > 3) { + values = valuesChange.substring(0, valuesChange.length() - 3); + }*/ + + map.put("valueschanges", valuesChanges); + } + + } + } + + public static String valueChangeNewFormat() { + return "【%s】:%s"; + } + + public static String valueChangeFormat() { + return "【%s】:" + SalaryI18nUtil.getI18nLabel(61695, "由") + + "[%s] " + SalaryI18nUtil.getI18nLabel(61697, "改为") + " [%s]"; + } + + public static void changKey2Lower(List list) { + + List newList = new ArrayList<>(); + for (Map orgMap : list) { + Map resultMap = new HashMap<>(); + + if (orgMap == null || orgMap.isEmpty()) { + newList.add(resultMap); + continue; + } + + Set keySet = orgMap.keySet(); + for (String key : keySet) { + resultMap.put(key != null ? key.toLowerCase() : "", orgMap.get(key)); + } + newList.add(resultMap); + } + list.clear(); + list.addAll(newList); + } + + /** + * 查看详细表的数据 + * + * @param list + */ + public static Map switchDetailChangeValue(List list) { + Map res = new HashMap<>(); + List> lists = new ArrayList<>(); + HashMap repeatTableName = new HashMap<>(); + CaseInsensitiveMap map = null; + for (Map hashMap : list) { + map = new CaseInsensitiveMap<>(hashMap); + List detailmap = new ArrayList<>(); + HashMap detailoldMap = new HashMap<>(); + detailoldMap.put("operator", SalaryI18nUtil.getI18nLabel(63248, "操作(旧)")); + detailoldMap.put("dataid", map.get("dataid")); + HashMap detailnewMap = new HashMap<>(); + detailnewMap.put("operator", SalaryI18nUtil.getI18nLabel(63249, "操作(新)")); + detailnewMap.put("dataid", map.get("dataid")); + detailmap.add(detailoldMap); + detailmap.add(detailnewMap); + WeaTable wea = new WeaTable(); + wea.getColumns().add(new WeaTableColumn("5%",SalaryI18nUtil.getI18nLabel(63250, "操作"), "operator")); // wea.getColumns().add(new WeaTableColumn("dataid", "dataid", true)); -// Object tablename = map.get("tablename"); -// Object tablenamelabelid = map.get("tablenamelabelid"); -// if (tablenamelabelid != null) { -// if (StringUtils.isNotBlank(tablenamelabelid.toString())&&StringUtils.isNumeric(tablenamelabelid.toString())) { -// tablename = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(tablenamelabelid.toString())); -// } -// } -// Map m = new HashMap<>(); -// if (tablename!=null&&StringUtils.isNotBlank(tablename.toString())) { -// String temptablename = repeatTableName.get(tablename.toString()); -// if (tablename.toString().equals(temptablename)) { -// continue; -// } -// repeatTableName.put(tablename.toString(), tablename.toString()); -// m.put("tablename", tablename.toString()); -// m.put("detailmap", detailmap); -// m.put("column", wea); -// lists.add(m); -// } else { -// tablename = tablename!=null?tablename:""; -// String temptablename = repeatTableName.get(tablename.toString()); -// if (tablename.toString().equals(temptablename)) { -// continue; -// } -// repeatTableName.put(tablename.toString(), tablename.toString()); -// m.put("tablename", ""); -// m.put("detailmap", detailmap); -// m.put("column", wea); -// lists.add(m); -// } -// } -// -// for (Map hashMap : list) { -// map = new CaseInsensitiveMap<>(hashMap); -// Object isDetail = map.get("isdetail"); -// if (isDetail != null) { -// if ("0".equals(isDetail.toString())) { -// continue; -// } -// } else { -// continue; -// } -// String title = ""; -// String dataIndex = ""; -// String oldValue = ""; -// String newValue = ""; -// String tableName = ""; -// String dataId = ""; -// -// Object fieldDesc = map.get("fielddesc"); -// if (fieldDesc != null) { -// if (StringUtils.isNotBlank(fieldDesc.toString())) { -// title = fieldDesc.toString(); -// } -// } -// -// Object fieldnamelabelid = map.get("fieldnamelabelid"); -// if (fieldnamelabelid != null) { -// if (StringUtils.isNotBlank(fieldnamelabelid.toString())&&StringUtils.isNumeric(fieldnamelabelid.toString())) { -// title = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldnamelabelid.toString())); -// } -// } -// -// Object fieldName = map.get("fieldname"); -// if (fieldName != null) { -// if (StringUtils.isNotBlank(fieldName.toString())) { -// dataIndex = fieldName.toString(); -// } -// } -// Object oValue = map.get("oldvalue"); -// if (oValue != null) { -// if (StringUtils.isNotBlank(oValue.toString())) { -// oldValue = oValue.toString(); -// } -// } -// Object nValue = map.get("newvalue"); -// if (nValue != null) { -// if (StringUtils.isNotBlank(nValue.toString())) { -// newValue = nValue.toString(); -// } -// } -// Object oldRealValue = map.get("oldrealvalue"); -// if (oldRealValue != null) { -// if (StringUtils.isNotBlank(oldRealValue.toString())&&StringUtils.isNumeric(oldRealValue.toString())) { -// oldValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(oldRealValue.toString())); -// } -// } -// -// Object newrealvalue = map.get("newrealvalue"); -// if (newrealvalue != null) { -// if (StringUtils.isNotBlank(newrealvalue.toString())&&StringUtils.isNumeric(newrealvalue.toString())) { -// newValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(newrealvalue.toString())); -// } -// } -// -// Object tablename = map.get("tablename"); -// if (StringUtils.isNotBlank(tablename.toString())) { -// tableName = tablename.toString(); -// } else { -// tableName = ""; -// } -// Object tablenamelabelid = map.get("tablenamelabelid"); -// if (tablenamelabelid != null) { -// if (tablenamelabelid != null) { -// if (StringUtils.isNotBlank(tablenamelabelid.toString())&&StringUtils.isNumeric(tablenamelabelid.toString())) { -// tableName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(tablenamelabelid.toString())); -// } -// } -// } -// Object dataid = map.get("dataid"); -// if (StringUtils.isNotBlank(dataid.toString())) { -// dataId = dataid.toString(); -// } else { -// dataId = ""; -// } -// for (Map m : lists) { -// Object o = m.get("tablename"); -// if (o != null) { -// if (tableName.equals(o)) { -// List details = (List) m.get("detailmap"); -// List newDetails = new ArrayList<>(); -// if (details != null && details.size() > 0) { -// for (Map detail : details) { -// Object data_id = detail.get("dataid"); -// if (data_id != null) { -// if (dataId.equals(data_id)) { -// Object operator = detail.get("operator"); -// if (operator != null) { -// if (SystemEnv.getHtmlLabelName(63248, "操作(旧)").equals(operator.toString())) { -// detail.put(dataIndex, oldValue); -// } else if (SystemEnv.getHtmlLabelName(63249, "操作(新)").equals(operator.toString())) { -// detail.put(dataIndex, newValue); -// } -// } -// }else{ -// if (newDetails.size() > 2) { -// for (Map newDetail : newDetails) { -// if (dataId.equals(newDetail.get("dataid"))) { -// Object operator = detail.get("operator"); -// if (operator != null) { -// if (SystemEnv.getHtmlLabelName(63248, "操作(旧)").equals(operator.toString())) { -// detail.put(dataIndex, oldValue); -// } else if (SystemEnv.getHtmlLabelName(63249, "操作(新)").equals(operator.toString())) { -// detail.put(dataIndex, newValue); -// } -// } -// }else{ -// HashMap detailoldMap= new HashMap<>(); -// detailoldMap.put("operator",SystemEnv.getHtmlLabelName(63248,"操作(旧)")); -// detailoldMap.put("dataid",map.get("dataid")); -// detailoldMap.put(dataIndex, oldValue); -// HashMap detailnewMap= new HashMap<>(); -// detailnewMap.put("operator",SystemEnv.getHtmlLabelName(63249,"操作(新)")); -// detailnewMap.put("dataid",map.get("dataid")); -// detailnewMap.put(dataIndex, newValue); -// newDetails.add(detailoldMap); -// newDetails.add(detailnewMap); -// } -// } -// }else if (newDetails.size() == 0) { -// int count = 0; -// for (Map mapdetail : details) { -// Object dataid_ = mapdetail.get("dataid"); -// if (dataid_ != null && dataid_.equals(dataId)) { -// count++; -// } -// } -// if (count == 0) { -// HashMap detailoldMap= new HashMap<>(); -// detailoldMap.put("operator",SystemEnv.getHtmlLabelName(63248,"操作(旧)")); -// detailoldMap.put("dataid",map.get("dataid")); -// detailoldMap.put(dataIndex, oldValue); -// HashMap detailnewMap= new HashMap<>(); -// detailnewMap.put("operator",SystemEnv.getHtmlLabelName(63249,"操作(新)")); -// detailnewMap.put("dataid",map.get("dataid")); -// detailnewMap.put(dataIndex, newValue); -// newDetails.add(detailoldMap); -// newDetails.add(detailnewMap); -// } -// } -// } -// } -// } -// } -// if (newDetails.size() > 0) { -// details.addAll(newDetails); -// newDetails.clear(); -// } -// -// WeaTable column = (WeaTable) m.get("column"); -// if (column != null) { -// List columns = column.getColumns(); -// if (columns != null && columns.size() > 0) { -// Boolean flag = true; -// for (Object object : columns) { -// WeaTableColumn weaTableColumn = JSONObject.parseObject(JSON.toJSONString(object), WeaTableColumn.class); -// if (weaTableColumn != null) { -// String title1 = weaTableColumn.getTitle(); -// if (title.equals(title1)) { -// flag = false; -// break; -// } -// } -// } -// if (flag) { -// column.getColumns().add(new WeaTableColumn(title, dataIndex, "5%")); -// m.put("column", column); -// } -// } -// } -// } -// } -// } -// } -// res.put("detail", lists); -// return res; -// } -// -// -// public static void switchDetailChangeValues(List list) { -// for (Map map : list) { -// Map repeatTableName = new HashMap<>(); -// List detailContexts = (List) map.get("detailcontexts"); -// List lists = new ArrayList<>(); -// if (detailContexts != null) { -// for (Map detailContext : detailContexts) { -// List detailmap = new ArrayList<>(); -// HashMap detailoldMap = new HashMap<>(); -// detailoldMap.put("operator", SystemEnv.getHtmlLabelName(63248,"操作(旧)")); -// detailoldMap.put("dataid",detailContext.get("dataid")); -// HashMap detailnewMap = new HashMap<>(); -// detailnewMap.put("operator", SystemEnv.getHtmlLabelName(63249,"操作(新)")); -// detailnewMap.put("dataid",detailContext.get("dataid")); -// detailmap.add(detailoldMap); -// detailmap.add(detailnewMap); -// WeaTable wea = new WeaTable(); -// wea.getColumns().add(new WeaTableColumn(SystemEnv.getHtmlLabelName(63250,"操作"), "operator", "5%")); + Object tablename = map.get("tablename"); + Object tablenamelabelid = map.get("tablenamelabelid"); + if (tablenamelabelid != null) { + if (StringUtils.isNotBlank(tablenamelabelid.toString()) && StringUtils.isNumeric(tablenamelabelid.toString())) { + tablename = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(tablenamelabelid.toString())); + } + } + Map m = new HashMap<>(); + if (tablename != null && StringUtils.isNotBlank(tablename.toString())) { + String temptablename = repeatTableName.get(tablename.toString()); + if (tablename.toString().equals(temptablename)) { + continue; + } + repeatTableName.put(tablename.toString(), tablename.toString()); + m.put("tablename", tablename.toString()); + m.put("detailmap", detailmap); + m.put("column", wea); + lists.add(m); + } else { + tablename = tablename != null ? tablename : ""; + String temptablename = repeatTableName.get(tablename.toString()); + if (tablename.toString().equals(temptablename)) { + continue; + } + repeatTableName.put(tablename.toString(), tablename.toString()); + m.put("tablename", ""); + m.put("detailmap", detailmap); + m.put("column", wea); + lists.add(m); + } + } + + for (Map hashMap : list) { + map = new CaseInsensitiveMap<>(hashMap); + Object isDetail = map.get("isdetail"); + if (isDetail != null) { + if ("0".equals(isDetail.toString())) { + continue; + } + } else { + continue; + } + String title = ""; + String dataIndex = ""; + String oldValue = ""; + String newValue = ""; + String tableName = ""; + String dataId = ""; + + Object fieldDesc = map.get("fielddesc"); + if (fieldDesc != null) { + if (StringUtils.isNotBlank(fieldDesc.toString())) { + title = fieldDesc.toString(); + } + } + + Object fieldnamelabelid = map.get("fieldnamelabelid"); + if (fieldnamelabelid != null) { + if (StringUtils.isNotBlank(fieldnamelabelid.toString()) && StringUtils.isNumeric(fieldnamelabelid.toString())) { + title = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldnamelabelid.toString())); + } + } + + Object fieldName = map.get("fieldname"); + if (fieldName != null) { + if (StringUtils.isNotBlank(fieldName.toString())) { + dataIndex = fieldName.toString(); + } + } + Object oValue = map.get("oldvalue"); + if (oValue != null) { + if (StringUtils.isNotBlank(oValue.toString())) { + oldValue = oValue.toString(); + } + } + Object nValue = map.get("newvalue"); + if (nValue != null) { + if (StringUtils.isNotBlank(nValue.toString())) { + newValue = nValue.toString(); + } + } + Object oldRealValue = map.get("oldrealvalue"); + if (oldRealValue != null) { + if (StringUtils.isNotBlank(oldRealValue.toString()) && StringUtils.isNumeric(oldRealValue.toString())) { + oldValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(oldRealValue.toString())); + } + } + + Object newrealvalue = map.get("newrealvalue"); + if (newrealvalue != null) { + if (StringUtils.isNotBlank(newrealvalue.toString()) && StringUtils.isNumeric(newrealvalue.toString())) { + newValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(newrealvalue.toString())); + } + } + + Object tablename = map.get("tablename"); + if (StringUtils.isNotBlank(tablename.toString())) { + tableName = tablename.toString(); + } else { + tableName = ""; + } + Object tablenamelabelid = map.get("tablenamelabelid"); + if (tablenamelabelid != null) { + if (tablenamelabelid != null) { + if (StringUtils.isNotBlank(tablenamelabelid.toString()) && StringUtils.isNumeric(tablenamelabelid.toString())) { + tableName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(tablenamelabelid.toString())); + } + } + } + Object dataid = map.get("dataid"); + if (StringUtils.isNotBlank(dataid.toString())) { + dataId = dataid.toString(); + } else { + dataId = ""; + } + for (Map m : lists) { + Object o = m.get("tablename"); + if (o != null) { + if (tableName.equals(o)) { + List details = (List) m.get("detailmap"); + List newDetails = new ArrayList<>(); + if (details != null && details.size() > 0) { + for (Map detail : details) { + Object data_id = detail.get("dataid"); + if (data_id != null) { + if (dataId.equals(data_id)) { + Object operator = detail.get("operator"); + if (operator != null) { + if (SalaryI18nUtil.getI18nLabel(63248, "操作(旧)").equals(operator.toString())) { + detail.put(dataIndex, oldValue); + } else if (SalaryI18nUtil.getI18nLabel(63249, "操作(新)").equals(operator.toString())) { + detail.put(dataIndex, newValue); + } + } + } else { + if (newDetails.size() > 2) { + for (Map newDetail : newDetails) { + if (dataId.equals(newDetail.get("dataid"))) { + Object operator = detail.get("operator"); + if (operator != null) { + if (SalaryI18nUtil.getI18nLabel(63248, "操作(旧)").equals(operator.toString())) { + detail.put(dataIndex, oldValue); + } else if (SalaryI18nUtil.getI18nLabel(63249, "操作(新)").equals(operator.toString())) { + detail.put(dataIndex, newValue); + } + } + } else { + HashMap detailoldMap = new HashMap<>(); + detailoldMap.put("operator", SalaryI18nUtil.getI18nLabel(63248, "操作(旧)")); + detailoldMap.put("dataid", map.get("dataid")); + detailoldMap.put(dataIndex, oldValue); + HashMap detailnewMap = new HashMap<>(); + detailnewMap.put("operator", SalaryI18nUtil.getI18nLabel(63249, "操作(新)")); + detailnewMap.put("dataid", map.get("dataid")); + detailnewMap.put(dataIndex, newValue); + newDetails.add(detailoldMap); + newDetails.add(detailnewMap); + } + } + } else if (newDetails.size() == 0) { + int count = 0; + for (Map mapdetail : details) { + Object dataid_ = mapdetail.get("dataid"); + if (dataid_ != null && dataid_.equals(dataId)) { + count++; + } + } + if (count == 0) { + HashMap detailoldMap = new HashMap<>(); + detailoldMap.put("operator", SalaryI18nUtil.getI18nLabel(63248, "操作(旧)")); + detailoldMap.put("dataid", map.get("dataid")); + detailoldMap.put(dataIndex, oldValue); + HashMap detailnewMap = new HashMap<>(); + detailnewMap.put("operator", SalaryI18nUtil.getI18nLabel(63249, "操作(新)")); + detailnewMap.put("dataid", map.get("dataid")); + detailnewMap.put(dataIndex, newValue); + newDetails.add(detailoldMap); + newDetails.add(detailnewMap); + } + } + } + } + } + } + if (newDetails.size() > 0) { + details.addAll(newDetails); + newDetails.clear(); + } + + WeaTable column = (WeaTable) m.get("column"); + if (column != null) { + List columns = column.getColumns(); + if (columns != null && columns.size() > 0) { + Boolean flag = true; + for (Object object : columns) { + WeaTableColumn weaTableColumn = JSONObject.parseObject(JSON.toJSONString(object), WeaTableColumn.class); + if (weaTableColumn != null) { + String title1 = weaTableColumn.getText(); + if (title.equals(title1)) { + flag = false; + break; + } + } + } + if (flag) { + column.getColumns().add(new WeaTableColumn(title, dataIndex, "5%")); + m.put("column", column); + } + } + } + } + } + } + } + res.put("detail", lists); + return res; + } + + + public static void switchDetailChangeValues(List list) { + for (Map map : list) { + Map repeatTableName = new HashMap<>(); + List detailContexts = (List) map.get("detailcontexts"); + List lists = new ArrayList<>(); + if (detailContexts != null) { + for (Map detailContext : detailContexts) { + List detailmap = new ArrayList<>(); + HashMap detailoldMap = new HashMap<>(); + detailoldMap.put("operator", SalaryI18nUtil.getI18nLabel(63248, "操作(旧)")); + detailoldMap.put("dataid", detailContext.get("dataid")); + HashMap detailnewMap = new HashMap<>(); + detailnewMap.put("operator", SalaryI18nUtil.getI18nLabel(63249, "操作(新)")); + detailnewMap.put("dataid", detailContext.get("dataid")); + detailmap.add(detailoldMap); + detailmap.add(detailnewMap); + WeaTable wea = new WeaTable(); + wea.getColumns().add(new WeaTableColumn(SalaryI18nUtil.getI18nLabel(63250, "操作"), "operator", "5%")); // wea.getColumns().add(new WeaTableColumn("dataid", "dataid", true)); -// Object tableName = detailContext.get("tableName"); -// Object tablenamelabelid = detailContext.get("tableNameLabelId"); -// if (tablenamelabelid != null) { -// if (StringUtils.isNotBlank(tablenamelabelid.toString())&&StringUtils.isNumeric(tablenamelabelid.toString())) { -// tableName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(tablenamelabelid.toString())); -// } -// } -// Map m = new HashMap<>(); -// if (StringUtils.isNotBlank(tableName.toString())) { -// String temptablename = repeatTableName.get(tableName.toString()); -// if (tableName.toString().equals(temptablename)) { -// continue; -// } -// repeatTableName.put(tableName.toString(), tableName.toString()); -// m.put("tablename", tableName.toString()); -// m.put("detailmap", detailmap); -// m.put("column", wea); -// lists.add(m); -// map.put("detail", lists); -// } else { -// String temptablename = repeatTableName.get(tableName.toString()); -// if (tableName.toString().equals(temptablename)) { -// continue; -// } -// repeatTableName.put(tableName.toString(), tableName.toString()); -// m.put("tablename", ""); -// m.put("detailmap", detailmap); -// m.put("column", wea); -// lists.add(m); -// map.put("detail", lists); -// } -// } -// } -// List details = (List) map.get("detail"); -// if (details != null) { -// int size = details.size(); -// int start = 0; -// while (start < size) { -// start++; -// -// for (int i = 0; i < size; i++) { -// Map detail = details.get(i); -// -// //for (Map detail : details) { -// if (details.size() > size) { -// break; -// } -// for (Map detailContext : detailContexts) { -// Object isDetail = detailContext.get("isDetail"); -// if (isDetail != null) { -// if ("0".equals(isDetail.toString())) { -// continue; -// } -// } else { -// continue; -// } -// String title = ""; -// String dataIndex = ""; -// String oldValue = ""; -// String newValue = ""; -// String tableName = ""; -// String dataId = ""; -// Object fieldDesc = detailContext.get("fieldDesc"); -// if (StringUtils.isNotBlank(fieldDesc.toString())) { -// title = fieldDesc.toString(); -// } -// Object fieldnamelabelid = detailContext.get("fieldNameLabelId"); -// if (fieldnamelabelid != null) { -// if (StringUtils.isNotBlank(fieldnamelabelid.toString())&&StringUtils.isNumeric(fieldnamelabelid.toString())) { -// title = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldnamelabelid.toString())); -// } -// } -// Object fieldName = detailContext.get("fieldName"); -// if (StringUtils.isNotBlank(fieldName.toString())) { -// dataIndex = fieldName.toString(); -// } -// Object oValue = detailContext.get("oldValue"); -// if (StringUtils.isNotBlank(oValue.toString())) { -// oldValue = oValue.toString(); -// } -// Object nValue = detailContext.get("newValue"); -// if (StringUtils.isNotBlank(nValue.toString())) { -// newValue = nValue.toString(); -// } -// Object oldRealValue = detailContext.get("oldRealValue"); -// if (oldRealValue != null) { -// if (StringUtils.isNotBlank(oldRealValue.toString())&&StringUtils.isNumeric(oldRealValue.toString())) { -// oldValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(oldRealValue.toString())); -// } -// } -// -// Object newrealvalue = detailContext.get("newRealValue"); -// if (newrealvalue != null) { -// if (StringUtils.isNotBlank(newrealvalue.toString())&&StringUtils.isNumeric(newrealvalue.toString())) { -// newValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(newrealvalue.toString())); -// } -// } -// Object tablename = detailContext.get("tableName"); -// if (StringUtils.isNotBlank(tablename.toString())) { -// tableName = tablename.toString(); -// } else { -// tableName = ""; -// } -// Object tablenamelabelid = detailContext.get("tableNameLabelId"); -// if (tablenamelabelid != null) { -// if (tablenamelabelid != null) { -// if (StringUtils.isNotBlank(tablenamelabelid.toString())&&StringUtils.isNumeric(tablenamelabelid.toString())) { -// tableName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(tablenamelabelid.toString())); -// } -// } -// } -// Object dataid = detailContext.get("dataid"); -// if (StringUtils.isNotBlank(dataid.toString())) { -// dataId = dataid.toString(); -// } else { -// dataId = ""; -// } -// Object detailtablename = detail.get("tablename"); -// if (detailtablename != null) { -// if (tableName.equals(detailtablename.toString())) { -// List detailmap = (List) detail.get("detailmap"); -// List newDetails = new ArrayList<>(); -// if (detailmap != null && detailmap.size() > 0) { -// for (Map d : detailmap) { -// Object data_id = d.get("dataid"); -// if (data_id != null) { -// if (dataId.equals(data_id)) { -// Object operator = d.get("operator"); -// if (operator != null) { -// if (SystemEnv.getHtmlLabelName(63248, "操作(旧)").equals(operator.toString())) { -// d.put(dataIndex, oldValue); -// } else if (SystemEnv.getHtmlLabelName(63249, "操作(新)").equals(operator.toString())) { -// d.put(dataIndex, newValue); -// } -// } -// }else{ -// if (newDetails.size() > 2) { -// for (Map newDetail : newDetails) { -// if (dataId.equals(newDetail.get("dataid"))) { -// Object operator = d.get("operator"); -// if (operator != null) { -// if (SystemEnv.getHtmlLabelName(63248, "操作(旧)").equals(operator.toString())) { -// d.put(dataIndex, oldValue); -// } else if (SystemEnv.getHtmlLabelName(63249, "操作(新)").equals(operator.toString())) { -// d.put(dataIndex, newValue); -// } -// } -// }else{ -// HashMap detailoldMap= new HashMap<>(); -// detailoldMap.put("operator",SystemEnv.getHtmlLabelName(63248,"操作(旧)")); -// detailoldMap.put("dataid",detailContext.get("dataid")); -// detailoldMap.put(dataIndex, oldValue); -// HashMap detailnewMap= new HashMap<>(); -// detailnewMap.put("operator",SystemEnv.getHtmlLabelName(63249,"操作(新)")); -// detailnewMap.put("dataid",detailContext.get("dataid")); -// detailnewMap.put(dataIndex, newValue); -// newDetails.add(detailoldMap); -// newDetails.add(detailnewMap); -// } -// } -// }else if (newDetails.size() == 0) { -// int count = 0; -// for (Map mapdetail : detailmap) { -// Object dataid_ = mapdetail.get("dataid"); -// if (dataid_ != null && dataid_.equals(dataId)) { -// count++; -// } -// } -// if (count == 0) { -// HashMap detailoldMap= new HashMap<>(); -// detailoldMap.put("operator",SystemEnv.getHtmlLabelName(63248,"操作(旧)")); -// detailoldMap.put("dataid",detailContext.get("dataid")); -// detailoldMap.put(dataIndex, oldValue); -// HashMap detailnewMap= new HashMap<>(); -// detailnewMap.put("operator",SystemEnv.getHtmlLabelName(63249,"操作(新)")); -// detailnewMap.put("dataid",detailContext.get("dataid")); -// detailnewMap.put(dataIndex, newValue); -// newDetails.add(detailoldMap); -// newDetails.add(detailnewMap); -// } -// } -// } -// } -// } -// } -// if (newDetails.size() > 0) { -// details.addAll(newDetails); -// newDetails.clear(); -// //detailmap = new ArrayList<>(); -// //detail.put("detailmap", detailmap); -// } -// -// WeaTable column = (WeaTable) detail.get("column"); -// if (column != null) { -// List columns = column.getColumns(); -// if (columns != null && columns.size() > 0) { -// Boolean flag = true; -// for (Object object : columns) { -// WeaTableColumn weaTableColumn = JSONObject.parseObject(JSON.toJSONString(object), WeaTableColumn.class); -// if (weaTableColumn != null) { -// String title1 = weaTableColumn.getTitle(); -// if (title.equals(title1)) { -// flag = false; -// break; -// }else{ -// flag = true; -// } -// } -// } -// if (flag) { -// column.getColumns().add(new WeaTableColumn(title, dataIndex, "5%")); -// detail.put("column", column); -// } -// } -// } -// } -// } -// } -// } -// } -// } -// } -// } -// -// public static List getSwitchDatabaseData(List list) { -// if (ElogConsts.ORACLE.equalsIgnoreCase(DatabaseUtil.getDatabaseId()) || ElogConsts.SQLSERVER.equalsIgnoreCase(DatabaseUtil.getDatabaseId())) { -// List arrayList = new ArrayList<>(); -// for (Map map : list) { -// Set en = map.entrySet(); -// Map hashMap = new HashMap<>(); -// for (Map.Entry entry : en) { -// Object key = entry.getKey(); -// Object val = null; -// if ("PARAMS".equalsIgnoreCase(key.toString())||"CUSTOMINFO".equalsIgnoreCase(key.toString()) -// || entry.getValue() instanceof ClobProxyImpl || entry.getValue() instanceof Clob) { -// val = JSONObject.toJSON(entry.getValue()); -// }else{ -// val = entry.getValue(); -// } -// hashMap.put(key.toString().toLowerCase(),val ); -// } -// switchDatabaseField(hashMap); -// arrayList.add(hashMap); -// } -// return arrayList; -// }else{ -// for (Map map : list) { -// switchDatabaseField(map); -// } -// return list; -// } -// } -// -// public static List getSwitchDatabaseAnalysisData(List list,Map keys) { -// if (!ElogConsts.MYSQL.equalsIgnoreCase(DatabaseUtil.getDatabaseId())) { -// List arrayList = new ArrayList<>(); -// -// for (Map map : list) { -// Set en = map.entrySet(); -// Map hashMap = new HashMap<>(); -// for (Map.Entry entry : en) { -// Object key = entry.getKey(); -// Object val = entry.getValue(); -// if (key.toString().equalsIgnoreCase(keys.get(key.toString().toLowerCase()))){ -// key = keys.get(key.toString().toLowerCase()); -// }else { -// key = key.toString().toLowerCase(); -// } -// hashMap.put(key.toString(),val ); -// } -// arrayList.add(hashMap); -// } -// return arrayList; -// } -// return list; -// } -// -// /** -// * 获取多个模块名称 -// * @param modules -// * @return -// */ -// public static Map getModuleNames(List modules) { -// Map hashMap = new HashMap<>(); -// if (modules == null || modules.size() == 0) { -// return hashMap; -// } -// for (String module : modules) { -// String modulenum = ElogSeviceUtils.null2String(moduleMap.get(module), module); -// String modulename = ElogSeviceUtils.isLongValue(modulenum) ? SystemEnv.getHtmlLabelName(ElogSeviceUtils.getLongValue(modulenum), modulenum) : modulenum; -// hashMap.put(module, modulename); -// } -// return hashMap; -// -// } -// + Object tableName = detailContext.get("tableName"); + Object tablenamelabelid = detailContext.get("tableNameLabelId"); + if (tablenamelabelid != null) { + if (StringUtils.isNotBlank(tablenamelabelid.toString()) && StringUtils.isNumeric(tablenamelabelid.toString())) { + tableName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(tablenamelabelid.toString())); + } + } + Map m = new HashMap<>(); + if (StringUtils.isNotBlank(tableName.toString())) { + String temptablename = repeatTableName.get(tableName.toString()); + if (tableName.toString().equals(temptablename)) { + continue; + } + repeatTableName.put(tableName.toString(), tableName.toString()); + m.put("tablename", tableName.toString()); + m.put("detailmap", detailmap); + m.put("column", wea); + lists.add(m); + map.put("detail", lists); + } else { + String temptablename = repeatTableName.get(tableName.toString()); + if (tableName.toString().equals(temptablename)) { + continue; + } + repeatTableName.put(tableName.toString(), tableName.toString()); + m.put("tablename", ""); + m.put("detailmap", detailmap); + m.put("column", wea); + lists.add(m); + map.put("detail", lists); + } + } + } + List details = (List) map.get("detail"); + if (details != null) { + int size = details.size(); + int start = 0; + while (start < size) { + start++; + + for (int i = 0; i < size; i++) { + Map detail = details.get(i); + + //for (Map detail : details) { + if (details.size() > size) { + break; + } + for (Map detailContext : detailContexts) { + Object isDetail = detailContext.get("isDetail"); + if (isDetail != null) { + if ("0".equals(isDetail.toString())) { + continue; + } + } else { + continue; + } + String title = ""; + String dataIndex = ""; + String oldValue = ""; + String newValue = ""; + String tableName = ""; + String dataId = ""; + Object fieldDesc = detailContext.get("fieldDesc"); + if (StringUtils.isNotBlank(fieldDesc.toString())) { + title = fieldDesc.toString(); + } + Object fieldnamelabelid = detailContext.get("fieldNameLabelId"); + if (fieldnamelabelid != null) { + if (StringUtils.isNotBlank(fieldnamelabelid.toString()) && StringUtils.isNumeric(fieldnamelabelid.toString())) { + title = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldnamelabelid.toString())); + } + } + Object fieldName = detailContext.get("fieldName"); + if (StringUtils.isNotBlank(fieldName.toString())) { + dataIndex = fieldName.toString(); + } + Object oValue = detailContext.get("oldValue"); + if (StringUtils.isNotBlank(oValue.toString())) { + oldValue = oValue.toString(); + } + Object nValue = detailContext.get("newValue"); + if (StringUtils.isNotBlank(nValue.toString())) { + newValue = nValue.toString(); + } + Object oldRealValue = detailContext.get("oldRealValue"); + if (oldRealValue != null) { + if (StringUtils.isNotBlank(oldRealValue.toString()) && StringUtils.isNumeric(oldRealValue.toString())) { + oldValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(oldRealValue.toString())); + } + } + + Object newrealvalue = detailContext.get("newRealValue"); + if (newrealvalue != null) { + if (StringUtils.isNotBlank(newrealvalue.toString()) && StringUtils.isNumeric(newrealvalue.toString())) { + newValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(newrealvalue.toString())); + } + } + Object tablename = detailContext.get("tableName"); + if (StringUtils.isNotBlank(tablename.toString())) { + tableName = tablename.toString(); + } else { + tableName = ""; + } + Object tablenamelabelid = detailContext.get("tableNameLabelId"); + if (tablenamelabelid != null) { + if (tablenamelabelid != null) { + if (StringUtils.isNotBlank(tablenamelabelid.toString()) && StringUtils.isNumeric(tablenamelabelid.toString())) { + tableName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(tablenamelabelid.toString())); + } + } + } + Object dataid = detailContext.get("dataid"); + if (StringUtils.isNotBlank(dataid.toString())) { + dataId = dataid.toString(); + } else { + dataId = ""; + } + Object detailtablename = detail.get("tablename"); + if (detailtablename != null) { + if (tableName.equals(detailtablename.toString())) { + List detailmap = (List) detail.get("detailmap"); + List newDetails = new ArrayList<>(); + if (detailmap != null && detailmap.size() > 0) { + for (Map d : detailmap) { + Object data_id = d.get("dataid"); + if (data_id != null) { + if (dataId.equals(data_id)) { + Object operator = d.get("operator"); + if (operator != null) { + if (SalaryI18nUtil.getI18nLabel(63248, "操作(旧)").equals(operator.toString())) { + d.put(dataIndex, oldValue); + } else if (SalaryI18nUtil.getI18nLabel(63249, "操作(新)").equals(operator.toString())) { + d.put(dataIndex, newValue); + } + } + } else { + if (newDetails.size() > 2) { + for (Map newDetail : newDetails) { + if (dataId.equals(newDetail.get("dataid"))) { + Object operator = d.get("operator"); + if (operator != null) { + if (SalaryI18nUtil.getI18nLabel(63248, "操作(旧)").equals(operator.toString())) { + d.put(dataIndex, oldValue); + } else if (SalaryI18nUtil.getI18nLabel(63249, "操作(新)").equals(operator.toString())) { + d.put(dataIndex, newValue); + } + } + } else { + HashMap detailoldMap = new HashMap<>(); + detailoldMap.put("operator", SalaryI18nUtil.getI18nLabel(63248, "操作(旧)")); + detailoldMap.put("dataid", detailContext.get("dataid")); + detailoldMap.put(dataIndex, oldValue); + HashMap detailnewMap = new HashMap<>(); + detailnewMap.put("operator", SalaryI18nUtil.getI18nLabel(63249, "操作(新)")); + detailnewMap.put("dataid", detailContext.get("dataid")); + detailnewMap.put(dataIndex, newValue); + newDetails.add(detailoldMap); + newDetails.add(detailnewMap); + } + } + } else if (newDetails.size() == 0) { + int count = 0; + for (Map mapdetail : detailmap) { + Object dataid_ = mapdetail.get("dataid"); + if (dataid_ != null && dataid_.equals(dataId)) { + count++; + } + } + if (count == 0) { + HashMap detailoldMap = new HashMap<>(); + detailoldMap.put("operator", SalaryI18nUtil.getI18nLabel(63248, "操作(旧)")); + detailoldMap.put("dataid", detailContext.get("dataid")); + detailoldMap.put(dataIndex, oldValue); + HashMap detailnewMap = new HashMap<>(); + detailnewMap.put("operator", SalaryI18nUtil.getI18nLabel(63249, "操作(新)")); + detailnewMap.put("dataid", detailContext.get("dataid")); + detailnewMap.put(dataIndex, newValue); + newDetails.add(detailoldMap); + newDetails.add(detailnewMap); + } + } + } + } + } + } + if (newDetails.size() > 0) { + details.addAll(newDetails); + newDetails.clear(); + //detailmap = new ArrayList<>(); + //detail.put("detailmap", detailmap); + } + + WeaTable column = (WeaTable) detail.get("column"); + if (column != null) { + List columns = column.getColumns(); + if (columns != null && columns.size() > 0) { + Boolean flag = true; + for (Object object : columns) { + WeaTableColumn weaTableColumn = JSONObject.parseObject(JSON.toJSONString(object), WeaTableColumn.class); + if (weaTableColumn != null) { + String title1 = weaTableColumn.getText(); + if (title.equals(title1)) { + flag = false; + break; + } else { + flag = true; + } + } + } + if (flag) { + column.getColumns().add(new WeaTableColumn(title, dataIndex, "5%")); + detail.put("column", column); + } + } + } + } + } + } + } + } + } + } + } + + public static List getSwitchDatabaseData(List list) { + String databaseId = new RecordSet().getDBType(); + if (ElogConsts.ORACLE.equalsIgnoreCase(databaseId) || ElogConsts.SQLSERVER.equalsIgnoreCase(databaseId)) { + List arrayList = new ArrayList<>(); + for (Map map : list) { + Set en = map.entrySet(); + Map hashMap = new HashMap<>(); + for (Map.Entry entry : en) { + Object key = entry.getKey(); + Object val = null; + if ("PARAMS".equalsIgnoreCase(key.toString()) || "CUSTOMINFO".equalsIgnoreCase(key.toString()) + || entry.getValue() instanceof ClobProxyImpl || entry.getValue() instanceof Clob) { + val = JSONObject.toJSON(entry.getValue()); + } else { + val = entry.getValue(); + } + hashMap.put(key.toString().toLowerCase(), val); + } + switchDatabaseField(hashMap); + arrayList.add(hashMap); + } + return arrayList; + } else { + for (Map map : list) { + switchDatabaseField(map); + } + return list; + } + } + + public static List getSwitchDatabaseAnalysisData(List list, Map keys) { + String databaseId = new RecordSet().getDBType(); + if (!ElogConsts.MYSQL.equalsIgnoreCase(databaseId)) { + List arrayList = new ArrayList<>(); + + for (Map map : list) { + Set en = map.entrySet(); + Map hashMap = new HashMap<>(); + for (Map.Entry entry : en) { + Object key = entry.getKey(); + Object val = entry.getValue(); + if (key.toString().equalsIgnoreCase(keys.get(key.toString().toLowerCase()))) { + key = keys.get(key.toString().toLowerCase()); + } else { + key = key.toString().toLowerCase(); + } + hashMap.put(key.toString(), val); + } + arrayList.add(hashMap); + } + return arrayList; + } + return list; + } + + /** + * 获取多个模块名称 + * + * @param modules + * @return + */ + public static Map getModuleNames(List modules) { + Map hashMap = new HashMap<>(); + if (modules == null || modules.size() == 0) { + return hashMap; + } + for (String module : modules) { + String modulenum = ElogSeviceUtils.null2String(moduleMap.get(module), module); + String modulename = ElogSeviceUtils.isLongValue(modulenum) ? SalaryI18nUtil.getI18nLabel(Integer.parseInt(modulenum), modulenum) : modulenum; + hashMap.put(module, modulename); + } + return hashMap; + + } + // private static String StringConversionForXSS(String str) { // if (StringUtils.isBlank(str)) // return str; @@ -1348,47 +1355,48 @@ // return SecurityUtil.encodeForHtml(str, true); // // } -// -// -// /** -// * 判断是否为json字符串 -// * -// * @param content -// * @return -// */ -// public static boolean isJSONString(String content) { -// if (StringUtils.isEmpty(content)) { -// return false; -// } -// if (!content.startsWith("{") || !content.endsWith("}")) { -// if (!content.startsWith("[") || !content.endsWith("]")) { -// return false; -// } -// } -// try { -// JSONObject.parse(content); -// return true; -// } catch (Exception e) { -// return false; -// } -// } -// public static List getNameModule(String module) { -// if(StringUtils.isBlank(module)){ -// return new ArrayList<>(); -// } -// Map> dataMap = new HashMap<>(); -// moduleMap.forEach( (k,v)->{ -// List list=new ArrayList<>(); -// Integer moduleCode = moduleMap.get(k); -// String htmlLabelName = SystemEnv.getHtmlLabelName(moduleCode.longValue(), ""); -// if(dataMap.containsKey(htmlLabelName)){ -// list= dataMap.get(htmlLabelName); -// list .add(k); -// }else { -// list.add(k); -// } -// dataMap.put(htmlLabelName,list); -// }); -// return Objects.isNull(dataMap.get(module))?Arrays.asList(module):dataMap.get(module); -// } -//} + + + /** + * 判断是否为json字符串 + * + * @param content + * @return + */ + public static boolean isJSONString(String content) { + if (StringUtils.isEmpty(content)) { + return false; + } + if (!content.startsWith("{") || !content.endsWith("}")) { + if (!content.startsWith("[") || !content.endsWith("]")) { + return false; + } + } + try { + JSONObject.parse(content); + return true; + } catch (Exception e) { + return false; + } + } + + public static List getNameModule(String module) { + if (StringUtils.isBlank(module)) { + return new ArrayList<>(); + } + Map> dataMap = new HashMap<>(); + moduleMap.forEach((k, v) -> { + List list = new ArrayList<>(); + Integer moduleCode = moduleMap.get(k); + String htmlLabelName = SalaryI18nUtil.getI18nLabel(moduleCode, ""); + if (dataMap.containsKey(htmlLabelName)) { + list = dataMap.get(htmlLabelName); + list.add(k); + } else { + list.add(k); + } + dataMap.put(htmlLabelName, list); + }); + return Objects.isNull(dataMap.get(module)) ? Arrays.asList(module) : dataMap.get(module); + } +} diff --git a/src/com/engine/salary/elog/util/ElogSeviceUtils.java b/src/com/engine/salary/elog/util/ElogSeviceUtils.java index 3ee65acaa..58ca9ec31 100644 --- a/src/com/engine/salary/elog/util/ElogSeviceUtils.java +++ b/src/com/engine/salary/elog/util/ElogSeviceUtils.java @@ -1,18 +1,11 @@ package com.engine.salary.elog.util; -import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.elog.enums.FromTerminalType; -import com.weaver.common.component.table.page.Page; -import com.weaver.common.security.util.SecurityUtil; -import com.weaver.framework.log4j2.constant.ApmConstant; -import com.weaver.framework.rpc.context.impl.TenantRpcContext; -import com.weaver.framework.web.constant.EteamsConstant; import org.apache.commons.lang3.StringUtils; -import org.apache.dubbo.rpc.RpcContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.io.ByteArrayInputStream; @@ -231,14 +224,14 @@ public class ElogSeviceUtils { - /** - * 获取request请求 - * - * @return - */ - public static HttpServletRequest getRequest() { - return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); - } +// /** +// * 获取request请求 +// * +// * @return +// */ +// public static HttpServletRequest getRequest() { +// return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); +// } /** * 将对象转换程字符串 @@ -263,14 +256,14 @@ public class ElogSeviceUtils { } } - public static Page getPage() { - HttpServletRequest request = getRequest(); - String num = request.getParameter("pageNum"); - String size = request.getParameter("pageSize"); - - Page page = new Page(ElogSeviceUtils.getIntValue(num, 1), ElogSeviceUtils.getIntValue(size, 10)); - return page; - } +// public static Page getPage() { +// HttpServletRequest request = getRequest(); +// String num = request.getParameter("pageNum"); +// String size = request.getParameter("pageSize"); +// +// Page page = new Page(ElogSeviceUtils.getIntValue(num, 1), ElogSeviceUtils.getIntValue(size, 10)); +// return page; +// } // public static void main(String[] args) { // //System.out.println(getTableName("select", "from")); @@ -317,22 +310,10 @@ public class ElogSeviceUtils { } public static String getTenantKey() { - - String tenantKey = TenantRpcContext.getTenantKey(); - if (StringUtils.isNotBlank(tenantKey)) { - return tenantKey; - } - - return ""; + return SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY; } public static String getEmployeeId() { - - String employeeId = TenantRpcContext.getEmployeeId(); - if (StringUtils.isNotBlank(employeeId)) { - return employeeId; - } - return ""; } @@ -358,37 +339,37 @@ public class ElogSeviceUtils { // return ""; // } - /** - * 获取rpc信息(客户端ip和来源设备) - * - * @param context - */ - public static void initRpcInfo(LoggerContext context) { - String device = ""; - String clientIp = ""; - String traceId = ""; - try { - device = RpcContext.getContext().getAttachment(EteamsConstant.DEVICE); - clientIp = RpcContext.getContext().getAttachment(EteamsConstant.CLIENT_IP); - traceId = RpcContext.getContext().getAttachment(ApmConstant.TRACE_ID); - logger.info("rpc调用获取到 device:{},clientIp:{},traceId:{}", device, clientIp, traceId); - } catch (Exception e) { - logger.error("Exception", e); - } - if (StringUtils.isEmpty(context.getDevice()) && StringUtils.isNotEmpty(device)) { - context.setDevice(device); - } - if (StringUtils.isEmpty(context.getFromTerminal()) && StringUtils.isNotEmpty(device)) { - context.setFromTerminal(getFromTerminal(device)); - } - - if (StringUtils.isEmpty(context.getClientIp()) && StringUtils.isNotEmpty(clientIp)) { - context.setClientIp(clientIp); - } - if (StringUtils.isEmpty(context.getBelongMainId()) && StringUtils.isNotEmpty(traceId)) { - context.setBelongMainId(traceId); - } - } +// /** +// * 获取rpc信息(客户端ip和来源设备) +// * +// * @param context +// */ +// public static void initRpcInfo(LoggerContext context) { +// String device = ""; +// String clientIp = ""; +// String traceId = ""; +// try { +// device = RpcContext.getContext().getAttachment(EteamsConstant.DEVICE); +// clientIp = RpcContext.getContext().getAttachment(EteamsConstant.CLIENT_IP); +// traceId = RpcContext.getContext().getAttachment(ApmConstant.TRACE_ID); +// logger.info("rpc调用获取到 device:{},clientIp:{},traceId:{}", device, clientIp, traceId); +// } catch (Exception e) { +// logger.error("Exception", e); +// } +// if (StringUtils.isEmpty(context.getDevice()) && StringUtils.isNotEmpty(device)) { +// context.setDevice(device); +// } +// if (StringUtils.isEmpty(context.getFromTerminal()) && StringUtils.isNotEmpty(device)) { +// context.setFromTerminal(getFromTerminal(device)); +// } +// +// if (StringUtils.isEmpty(context.getClientIp()) && StringUtils.isNotEmpty(clientIp)) { +// context.setClientIp(clientIp); +// } +// if (StringUtils.isEmpty(context.getBelongMainId()) && StringUtils.isNotEmpty(traceId)) { +// context.setBelongMainId(traceId); +// } +// } public static String getFromTerminal(String device) { String setFT = ""; @@ -477,7 +458,7 @@ public class ElogSeviceUtils { if (count > 2) { return filterVal; } - value = SecurityUtil.ecodeForSql(value); +// value = SecurityUtil.ecodeForSql(value); return value; } diff --git a/src/com/engine/salary/elog/util/ElogUtils.java b/src/com/engine/salary/elog/util/ElogUtils.java index 077593ee6..38edd827d 100644 --- a/src/com/engine/salary/elog/util/ElogUtils.java +++ b/src/com/engine/salary/elog/util/ElogUtils.java @@ -2,7 +2,7 @@ package com.engine.salary.elog.util; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; -import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.elog.enums.FromTerminalType; import com.engine.salary.elog.threadlocal.ElogThreadLocal; import org.apache.commons.lang3.StringUtils; diff --git a/src/com/engine/salary/elog/util/FieldNameMap.java b/src/com/engine/salary/elog/util/FieldNameMap.java new file mode 100644 index 000000000..dcde0258c --- /dev/null +++ b/src/com/engine/salary/elog/util/FieldNameMap.java @@ -0,0 +1,94 @@ +package com.engine.salary.elog.util; + +import org.apache.commons.lang3.StringUtils; + +import java.util.HashMap; +import java.util.Map; + +/** + * @ClassName: FieldNameMap + * @Description TODO + * @Author tanghj + * @Date 2021/3/31 14:27 + */ +public class FieldNameMap { + + private static Map mainFieldNameMap = new HashMap<>(); + + private static Map detailFieldNameMap = new HashMap<>(); + + private static Map> mainCusFieldNameMap = new HashMap<>(); + + private static Map> detailCusFieldNameMap = new HashMap<>(); + + + public static void setMainFieldName(Map fieldNameMap) { + mainFieldNameMap.putAll(fieldNameMap); + } + + public static void setDetailFieldName(Map fieldNameMap) { + detailFieldNameMap.putAll(fieldNameMap); + } + + public static void setMainCusFieldName(String module, String function, Map fieldNameMap) { + mainCusFieldNameMap.put(getKey(module, function), fieldNameMap); + } + + public static void setDetailCusFieldName(String module, String function, Map fieldNameMap) { + detailCusFieldNameMap.put(getKey(module, function), fieldNameMap); + } + + + public static String getMainFieldNameMap(String module, String function, String key) { + + String str = key.toLowerCase(); + if(mainFieldNameMap.containsKey(str)) { + return StringUtils.isNotEmpty(mainFieldNameMap.get(str)) ? mainFieldNameMap.get(str) : key; + } else { + return getMainCusFieldNameMap(module, function,key); + } + } + + public static String getDetailFieldNameMap(String module, String function, String key) { + key = key.toLowerCase(); + if(detailFieldNameMap.containsKey(key)) { + return StringUtils.isNotEmpty(detailFieldNameMap.get(key)) ? detailFieldNameMap.get(key) : key; + } else { + return getDetailCusFieldNameMap(module, function, key); + } + } + + public static String getMainCusFieldNameMap(String module, String function, String key) { + + if(mainCusFieldNameMap.containsKey(getKey(module, function))) { + if(mainCusFieldNameMap.get(getKey(module, function)).containsKey(key)) { + return StringUtils.isNotEmpty(mainCusFieldNameMap.get(getKey(module, function)).get(key)) ? + mainCusFieldNameMap.get(getKey(module, function)).get(key) : + key; + } else { + return key; + } + } else { + return key; + } + } + + public static String getDetailCusFieldNameMap(String module, String function, String key) { + + if(detailCusFieldNameMap.containsKey(getKey(module, function))) { + if(detailCusFieldNameMap.get(getKey(module, function)).containsKey(key)) { + return StringUtils.isNotEmpty(detailCusFieldNameMap.get(getKey(module, function)).get(key)) ? + detailCusFieldNameMap.get(getKey(module, function)).get(key) : + key; + } else { + return key; + } + } else { + return key; + } + } + + private static String getKey(String module, String function) { + return module + "@" + function; + } +} diff --git a/src/com/engine/salary/elog/util/LoggerTemplate.java b/src/com/engine/salary/elog/util/LoggerTemplate.java index f3fca954a..c457291df 100644 --- a/src/com/engine/salary/elog/util/LoggerTemplate.java +++ b/src/com/engine/salary/elog/util/LoggerTemplate.java @@ -7,9 +7,9 @@ import com.alibaba.fastjson.serializer.SerializerFeature; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.elog.annotation.ElogTransform; import com.engine.salary.elog.async.LoggerMessageListener; -import com.engine.salary.elog.dto.LoggerContext; -import com.engine.salary.elog.dto.LoggerDetailContext; -import com.engine.salary.elog.dto.TableChangeBean; +import com.engine.salary.elog.entity.dto.LoggerContext; +import com.engine.salary.elog.entity.dto.LoggerDetailContext; +import com.engine.salary.elog.entity.dto.TableChangeBean; import dm.jdbc.util.IdGenerator; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/src/com/engine/salary/elog/web/LoggerTableController.java b/src/com/engine/salary/elog/web/LoggerTableController.java index 279bffdfe..b2969f833 100644 --- a/src/com/engine/salary/elog/web/LoggerTableController.java +++ b/src/com/engine/salary/elog/web/LoggerTableController.java @@ -1,178 +1,187 @@ package com.engine.salary.elog.web; -import com.weaver.common.authority.annotation.WeaPermission; -import com.weaver.common.base.entity.result.WeaResult; -import com.weaver.common.batch.entity.BatchDocumentMessage; -import com.weaver.common.component.table.WeaTable; -import com.weaver.common.elog.service.ApplicationContextProvider; -import com.weaver.common.elog.service.ILoggerTableService; -import com.weaver.common.elog.service.impl.LoggerTableService; -import com.weaver.framework.spring.annotation.AopClass; -import io.swagger.annotations.Api; +import com.engine.common.util.ServiceUtil; +import com.engine.salary.elog.entity.param.ELogGetLogParam; +import com.engine.salary.elog.service.ILoggerTableService; +import com.engine.salary.elog.service.impl.LoggerTableService; +import com.engine.salary.util.ResponseResult; +import com.engine.salary.util.page.PageInfo; import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import org.apache.ibatis.annotations.Param; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestParam; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; import java.util.List; import java.util.Map; public class LoggerTableController { - @Autowired - @Qualifier("loggerTableService") - private LoggerTableService loggerTableService; - - @ApiOperation("获取日志") - @RequestMapping(path = "getLogs", method = {RequestMethod.GET, RequestMethod.POST}) - @WeaPermission(publicPermission = true) - public WeaResult getLogs(@RequestBody(required = false) @ApiParam("数据") String data){ - - WeaTable weaTable = loggerTableService.queryLogs(data); - return WeaResult.success(weaTable); - } - - @ApiOperation("获取日志(卡片)") - @RequestMapping(path = "getCardLogs", method = {RequestMethod.GET, RequestMethod.POST}) - @WeaPermission(publicPermission = true) - public WeaResult>> carddatas(@RequestBody(required = false) @ApiParam("数据") String data){ - List> list = loggerTableService.queryCardLogList(data); - return WeaResult.success(list); - } - - @ApiOperation("获取单条操作记录的更新明细") - @RequestMapping(path = "getDetailChanges", method = {RequestMethod.GET, RequestMethod.POST}) - @WeaPermission(publicPermission = true) - public WeaResult>> getDetailChanges(@PathVariable("module") @ApiParam("服务(模块)名")String module, - @PathVariable("function") @ApiParam("方法名")String function, - @RequestParam("mainid") @ApiParam("主键id") String mainid, - @RequestParam("detailTransMethod") @ApiParam("转换方法") String detailTransMethod) { - return WeaResult.success(loggerTableService.getDetailChanges(module, function,mainid,detailTransMethod)); + private ILoggerTableService getLoggerTableService(User user) { + return ServiceUtil.getService(LoggerTableService.class, user); } /** - * 获取单条操作记录的更新明细(分页) - * @param module 服务(模块)名 - * @param function 方法名 - * @param mainid 主键id - * @param detailTransMethod 转换方法 - * @param current 页码 - * @param pageSize 每页条数 - * @return WeaTable + * 获取日志 + * + * @param request + * @param response + * @param data + * @return */ - @ApiOperation("获取单条操作记录的更新明细(分页)") - @RequestMapping(path = "getDetailChangePages", method = {RequestMethod.GET, RequestMethod.POST}) - @WeaPermission(publicPermission = true) - public WeaResult getDetailChangePages(@PathVariable("module") @ApiParam("服务(模块)名")String module, - @PathVariable("function") @ApiParam("方法名")String function, - @RequestParam("mainid") @ApiParam("主键id") String mainid, - @RequestParam("detailTransMethod") @ApiParam("转换方法") String detailTransMethod, - @RequestParam("page") @ApiParam("页码") String current, - @RequestParam("pageSize") @ApiParam("每页条数") String pageSize) { - return WeaResult.success(loggerTableService.getDetailChangePages(module, function,mainid,detailTransMethod,current,pageSize)); + @POST + @Path("/getLogs") + @Produces(MediaType.APPLICATION_JSON) + public String getLogs(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody String data) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getLoggerTableService(user)::queryLogs, data); + } + + @ApiOperation("获取日志(卡片)") + @POST + @Path("/getCardLogs") + @Produces(MediaType.APPLICATION_JSON) + public String carddatas(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody String data) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>>(user).run(getLoggerTableService(user)::queryCardLogList, data); + } +// +// @ApiOperation("获取单条操作记录的更新明细") +// @RequestMapping(path = "getDetailChanges", method = {RequestMethod.GET, RequestMethod.POST}) +// @WeaPermission(publicPermission = true) +// public WeaResult>> getDetailChanges(@PathVariable("module") @ApiParam("服务(模块)名") String module, +// @PathVariable("function") @ApiParam("方法名") String function, +// @RequestParam("mainid") @ApiParam("主键id") String mainid, +// @RequestParam("detailTransMethod") @ApiParam("转换方法") String detailTransMethod) { +// return WeaResult.success(getLoggerTableService(user).getDetailChanges(module, function, mainid, detailTransMethod)); +// } +// @ApiOperation("获取单条操作记录的更新明细") +// @POST +// @Path("/getDetailChanges") +// @Produces(MediaType.APPLICATION_JSON) +// public String getDetailChanges(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody String data) { +// User user = HrmUserVarify.getUser(request, response); +// return new ResponseResult>>(user).run(getLoggerTableService(user)::getDetailChanges, data); +// } +// +// /** +// * 获取单条操作记录的更新明细(分页) +// * +// * @param module 服务(模块)名 +// * @param function 方法名 +// * @param mainid 主键id +// * @param detailTransMethod 转换方法 +// * @param current 页码 +// * @param pageSize 每页条数 +// * @return WeaTable +// */ +// @ApiOperation("获取单条操作记录的更新明细(分页)") +// @RequestMapping(path = "getDetailChangePages", method = {RequestMethod.GET, RequestMethod.POST}) +// @WeaPermission(publicPermission = true) +// public WeaResult getDetailChangePages(@PathVariable("module") @ApiParam("服务(模块)名") String module, +// @PathVariable("function") @ApiParam("方法名") String function, +// @RequestParam("mainid") @ApiParam("主键id") String mainid, +// @RequestParam("detailTransMethod") @ApiParam("转换方法") String detailTransMethod, +// @RequestParam("page") @ApiParam("页码") String current, +// @RequestParam("pageSize") @ApiParam("每页条数") String pageSize) { +// return WeaResult.success(getLoggerTableService(user).getDetailChangePages(module, function, mainid, detailTransMethod, current, pageSize)); +// } + + /** + * 获取日志列表 + * @param request + * @param response + * @param param + * @return + */ + @POST + @Path("/datas") + @Produces(MediaType.APPLICATION_JSON) + public String datas(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody ELogGetLogParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getLoggerTableService(user)::queryLogList, param); } - @ApiOperation("获取日志列表") - @RequestMapping(path = "datas", method = {RequestMethod.GET, RequestMethod.POST}) - @WeaPermission(publicPermission = true) - public WeaResult>> datas(@PathVariable("module") @ApiParam("服务(模块)名")String module, - @PathVariable("function") @ApiParam("方法名")String function, - @Param("pageSize") @ApiParam("每页多少数据")String pageSize, - @Param("current") @ApiParam("当前页")String current, - @ApiParam("查询条件") String condition){ - - if("datasecurity".equals(module) && "auditLog".equals(function)) { - try { - ILoggerTableService tableService = ApplicationContextProvider.getBean("auditLogService", ILoggerTableService.class); - if(tableService != null){ - List> list = tableService.queryLogList(module, function, current, pageSize, condition); - return WeaResult.success(list); - } - } catch ( Exception e) { - - } - } - List> list = loggerTableService.queryLogList(module, function, current, pageSize, condition); - return WeaResult.success(list); - } - - @ApiOperation("获取日志总数") - @RequestMapping(path = "counts", method = {RequestMethod.GET, RequestMethod.POST}) - @WeaPermission(publicPermission = true) - public WeaResult> counts(@PathVariable("module") @ApiParam("服务(模块)名") String module, - @PathVariable("function") @ApiParam("方法名")String function){ - return WeaResult.success(loggerTableService.countLog(module,function), "success"); - } - - @ApiOperation("获取明细日志列表") - @RequestMapping(path = "detaildatas", method = {RequestMethod.GET, RequestMethod.POST}) - @WeaPermission(publicPermission = true) - public WeaResult>> detaildatas(@PathVariable("module") @ApiParam("服务(模块)名")String module, - @PathVariable("function") @ApiParam("方法名")String function, - @Param("pageSize") @ApiParam("每页多少数据")String pageSize, - @Param("current") @ApiParam("当前页")String current, - @Param("mainId") @ApiParam("主表id") String mainId, - @ApiParam("查询条件") String condition){ - - if("datasecurity".equals(module) && "auditLog".equals(function)) { - try { - ILoggerTableService tableService = ApplicationContextProvider.getBean("auditLogService", ILoggerTableService.class); - if(tableService != null){ - List> list = tableService.queryDetailLogList(module, function, current, pageSize, condition, mainId); - return WeaResult.success(list); - } - } catch ( Exception e) { - - } - } - List> list = loggerTableService.queryDetailLogList(module, function, current, pageSize, condition, mainId); - return WeaResult.success(list); - } - - @ApiOperation("获取日志总数") - @RequestMapping(path = "detailcounts", method = {RequestMethod.GET, RequestMethod.POST}) - @WeaPermission(publicPermission = true) - public WeaResult> detailcounts(@PathVariable("module") @ApiParam("服务(模块)名") String module, - @PathVariable("function") @ApiParam("方法名")String function, - @Param("mainId") @ApiParam("主表id") String mainId){ - return WeaResult.success(loggerTableService.countDestailLog(module,function, mainId), "success"); - } - - @ApiOperation("根据traceId获取链路列表") - @RequestMapping(path = "queryLogTraceInfo", method = {RequestMethod.GET, RequestMethod.POST}) - @WeaPermission(publicPermission = true) - public WeaResult queryLogTraceInfo(@PathVariable("module") @ApiParam("服务(模块)名") String module, - @PathVariable("function") @ApiParam("方法名")String function, - @Param("traceId") @ApiParam("traceId") String traceId, - @Param("currentPage") @ApiParam("currentPage") Integer currentPage, - @Param("pageSize") @ApiParam("pageSize") Integer pageSize, - @Param("traceTransMethod") @ApiParam("traceTransMethod") String traceTransMethod - ){ - - if("datasecurity".equals(module) && "auditLog".equals(function)) { - try { - ILoggerTableService tableService = ApplicationContextProvider.getBean("auditLogService", ILoggerTableService.class); - if(tableService != null){ - return WeaResult.success(tableService.queryElogTraceInfo(traceId,module,function,currentPage,pageSize,traceTransMethod ), "success"); - } - } catch ( Exception e) { - - } - } - - return WeaResult.success(loggerTableService.queryElogTraceInfo(traceId,module,function,currentPage,pageSize,traceTransMethod ), "success"); - } - - @ApiOperation("日志下载") - @RequestMapping(path = "downloadLog", method = {RequestMethod.GET, RequestMethod.POST}) - @WeaPermission(publicPermission = true) - public WeaResult downloadLog(@RequestBody(required = false) @ApiParam("数据") String data){ - - BatchDocumentMessage message = loggerTableService.downloadLog(data); - return WeaResult.success(message); - } +// @ApiOperation("获取日志总数") +// @RequestMapping(path = "counts", method = {RequestMethod.GET, RequestMethod.POST}) +// @WeaPermission(publicPermission = true) +// public WeaResult> counts(@PathVariable("module") @ApiParam("服务(模块)名") String module, +// @PathVariable("function") @ApiParam("方法名") String function) { +// return WeaResult.success(getLoggerTableService(user).countLog(module, function), "success"); +// } +// +// @ApiOperation("获取明细日志列表") +// @RequestMapping(path = "detaildatas", method = {RequestMethod.GET, RequestMethod.POST}) +// @WeaPermission(publicPermission = true) +// public WeaResult>> detaildatas(@PathVariable("module") @ApiParam("服务(模块)名") String module, +// @PathVariable("function") @ApiParam("方法名") String function, +// @Param("pageSize") @ApiParam("每页多少数据") String pageSize, +// @Param("current") @ApiParam("当前页") String current, +// @Param("mainId") @ApiParam("主表id") String mainId, +// @ApiParam("查询条件") String condition) { +// +// if ("datasecurity".equals(module) && "auditLog".equals(function)) { +// try { +// ILoggerTableService tableService = ApplicationContextProvider.getBean("auditLogService", ILoggerTableService.class); +// if (tableService != null) { +// List> list = tableService.queryDetailLogList(module, function, current, pageSize, condition, mainId); +// return WeaResult.success(list); +// } +// } catch (Exception e) { +// +// } +// } +// List> list = getLoggerTableService(user).queryDetailLogList(module, function, current, pageSize, condition, mainId); +// return WeaResult.success(list); +// } +// +// @ApiOperation("获取日志总数") +// @RequestMapping(path = "detailcounts", method = {RequestMethod.GET, RequestMethod.POST}) +// @WeaPermission(publicPermission = true) +// public WeaResult> detailcounts(@PathVariable("module") @ApiParam("服务(模块)名") String module, +// @PathVariable("function") @ApiParam("方法名") String function, +// @Param("mainId") @ApiParam("主表id") String mainId) { +// return WeaResult.success(getLoggerTableService(user).countDestailLog(module, function, mainId), "success"); +// } +// +// @ApiOperation("根据traceId获取链路列表") +// @RequestMapping(path = "queryLogTraceInfo", method = {RequestMethod.GET, RequestMethod.POST}) +// @WeaPermission(publicPermission = true) +// public WeaResult queryLogTraceInfo(@PathVariable("module") @ApiParam("服务(模块)名") String module, +// @PathVariable("function") @ApiParam("方法名") String function, +// @Param("traceId") @ApiParam("traceId") String traceId, +// @Param("currentPage") @ApiParam("currentPage") Integer currentPage, +// @Param("pageSize") @ApiParam("pageSize") Integer pageSize, +// @Param("traceTransMethod") @ApiParam("traceTransMethod") String traceTransMethod +// ) { +// +// if ("datasecurity".equals(module) && "auditLog".equals(function)) { +// try { +// ILoggerTableService tableService = ApplicationContextProvider.getBean("auditLogService", ILoggerTableService.class); +// if (tableService != null) { +// return WeaResult.success(tableService.queryElogTraceInfo(traceId, module, function, currentPage, pageSize, traceTransMethod), "success"); +// } +// } catch (Exception e) { +// +// } +// } +// +// return WeaResult.success(getLoggerTableService(user).queryElogTraceInfo(traceId, module, function, currentPage, pageSize, traceTransMethod), "success"); +// } +// +// @ApiOperation("日志下载") +// @RequestMapping(path = "downloadLog", method = {RequestMethod.GET, RequestMethod.POST}) +// @WeaPermission(publicPermission = true) +// public WeaResult downloadLog(@RequestBody(required = false) @ApiParam("数据") String data) { +// +// BatchDocumentMessage message = getLoggerTableService(user).downloadLog(data); +// return WeaResult.success(message); +// } } diff --git a/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.java b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.java index 5171e2641..c5547e753 100644 --- a/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.java +++ b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.java @@ -1,6 +1,6 @@ package com.engine.salary.mapper.elog; -import com.engine.salary.elog.dto.TableColumnBean; +import com.engine.salary.elog.entity.dto.TableColumnBean; import org.apache.ibatis.annotations.Param; import java.util.List; diff --git a/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml index a0410827b..03e4028ea 100644 --- a/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml +++ b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml @@ -297,7 +297,7 @@ - SELECT COLUMN_NAME columnName, DATA_TYPE dataTypeStr, @@ -312,13 +312,13 @@ table_name = #{tableName} and TABLE_SCHEMA = (select database()) - select * from pg_tables where tableowner = (select current_user) and tablename = #{tableName} - SELECT COLUMN_NAME columnName FROM @@ -326,7 +326,7 @@ where TABLE_NAME=UPPER(#{tableName}) - SELECT COLUMN_NAME columnName FROM diff --git a/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.java b/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.java index 6a969c83e..eda527efa 100644 --- a/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.java +++ b/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.java @@ -1,8 +1,8 @@ package com.engine.salary.mapper.elog; -import com.engine.salary.elog.dto.LoggerContext; -import com.engine.salary.elog.dto.LoggerDetailContext; +import com.engine.salary.elog.entity.dto.LoggerContext; +import com.engine.salary.elog.entity.dto.LoggerDetailContext; import org.apache.ibatis.annotations.Param; import java.util.List; diff --git a/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.java b/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.java index 56dddcd45..70807d832 100644 --- a/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.java +++ b/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.java @@ -1,7 +1,8 @@ package com.engine.salary.mapper.elog; -import com.engine.salary.elog.dto.LoggerContext; -import com.engine.salary.elog.dto.LoggerDetailContext; +import com.engine.salary.elog.entity.dto.LoggerContext; +import com.engine.salary.elog.entity.dto.ReadInfoEntity; +import com.github.pagehelper.Page; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -15,22 +16,204 @@ import java.util.Map; */ public interface LocalElogDaoMapper { - int insertElogContext(@Param(value = "logContent") LoggerContext loggerContext, - @Param(value = "params") String params, - @Param(value = "cusColumns") String cusColumns, - @Param(value = "cusValus") String cusValus, - @Param(value = "tableName") String tableName); - List> queryElogList(@Param(value = "logContent") LoggerContext loggerContext, - @Param("limit") String limit, - @Param(value = "tableName") String tableName); + List> queryCardElogList(@Param(value = "logContent") LoggerContext loggerContext, + @Param("limit") String limit, + @Param(value = "tableName") String tableName, + @Param(value = "conditionSql") String conditionSql); + + List queryElogList(@Param(value = "page") Page page, + @Param(value = "logContent") LoggerContext loggerContext, + @Param("limit") String limit, + @Param(value = "tableName") String tableName, + @Param(value = "conditionSql") String conditionSql, + @Param(value = "columns") String columns); + + List queryElogListPapi(@Param(value = "page") Page page, + @Param(value = "logContent") LoggerContext loggerContext, + @Param("limit") String limit, + @Param(value = "tableName") String tableName, + @Param(value = "conditionSql") String conditionSql, + @Param(value = "columns") String columns); + + // @WeaDataPermission(mainDataTable = "#{mainDataTable}", +// permissionId = "#{permissionId}", +// permissionType = "#{permissionType}", +// mainDataTableAlias = "#{mainDataTableAlias}", +// primaryKey = "#{primaryKey}", +// permissionTargetId = "#{permissionTargetId}", +// permissionConfigSourceId = "#{permissionConfigSourceId}", +// permissionExcept = "true") + List queryElogList(@Param(value = "page") Page page, @Param(value = "logContent") LoggerContext loggerContext, + @Param("limit") String limit, + @Param(value = "tableName") String tableName, + @Param(value = "conditionSql") String conditionSql, + @Param(value = "mainDataTable") String mainDataTable, + @Param(value = "permissionId") String permissionId, + @Param(value = "permissionType") String permissionType, + @Param(value = "mainDataTableAlias") String mainDataTableAlias, + @Param(value = "primaryKey") String primaryKey, + @Param(value = "permissionTargetId") String permissionTargetId, + @Param(value = "permissionConfigSourceId") String permissionConfigSourceId, + @Param(value = "columns") String columns + ); + + // @WeaDataPermission(mainDataTable = "#{mainDataTable}", +// permissionId = "#{permissionId}", +// permissionType = "#{permissionType}", +// mainDataTableAlias = "#{mainDataTableAlias}", +// primaryKey = "#{primaryKey}", +// permissionExcept = "true") + List queryElogListPapi(@Param(value = "page") Page page, @Param(value = "logContent") LoggerContext loggerContext, + @Param("limit") String limit, + @Param(value = "tableName") String tableName, + @Param(value = "conditionSql") String conditionSql, + @Param(value = "mainDataTable") String mainDataTable, + @Param(value = "permissionId") String permissionId, + @Param(value = "permissionType") String permissionType, + @Param(value = "mainDataTableAlias") String mainDataTableAlias, + @Param(value = "primaryKey") String primaryKey, + @Param(value = "columns") String columns + ); + + List queryAllChanges(@Param(value = "tableName") String tableName, @Param("mainid") String mainid); Map elogCount(@Param(value = "logContent") LoggerContext loggerContext, - @Param(value = "tableName") String tableName); + @Param(value = "tableName") String tableName, + @Param(value = "conditionSql") String conditionSql); - int insertElogDetail(@Param(value = "detailContext") LoggerDetailContext loggerDetailContext, - @Param(value = "mainid") String mainid, - @Param(value = "cusColumns") String cusColumns, - @Param(value = "cusValus") String cusValus, - @Param(value = "detailTableName") String tableName); + Map elogCountPapi(@Param(value = "logContent") LoggerContext loggerContext, + @Param(value = "tableName") String tableName, + @Param(value = "conditionSql") String conditionSql); + + + // @WeaDataPermission(mainDataTable = "#{mainDataTable}", +// permissionId = "#{permissionId}", +// permissionType = "#{permissionType}", +// mainDataTableAlias = "#{mainDataTableAlias}", +// primaryKey = "#{primaryKey}", +// permissionTargetId = "#{permissionTargetId}", +// permissionConfigSourceId = "#{permissionConfigSourceId}", +// permissionExcept = "true") + Map elogCountByMorePermission(@Param(value = "logContent") LoggerContext loggerContext, + @Param(value = "tableName") String tableName, + @Param(value = "conditionSql") String conditionSql, + @Param(value = "mainDataTable") String mainDataTable, + @Param(value = "permissionId") String permissionId, + @Param(value = "permissionType") String permissionType, + @Param(value = "mainDataTableAlias") String mainDataTableAlias, + @Param(value = "primaryKey") String primaryKey, + @Param(value = "permissionTargetId") String permissionTargetId, + @Param(value = "permissionConfigSourceId") String permissionConfigSourceId); + + // @WeaDataPermission(mainDataTable = "#{mainDataTable}", +// permissionId = "#{permissionId}", +// permissionType = "#{permissionType}", +// mainDataTableAlias = "#{mainDataTableAlias}", +// primaryKey = "#{primaryKey}", +// permissionTargetId = "#{permissionTargetId}", +// permissionConfigSourceId = "#{permissionConfigSourceId}", +// permissionCount = "count(*)", +// permissionExcept = "true") + Long elogCountOnlyNum(@Param(value = "logContent") LoggerContext loggerContext, + @Param(value = "tableName") String tableName, + @Param(value = "conditionSql") String conditionSql, + @Param(value = "mainDataTable") String mainDataTable, + @Param(value = "permissionId") String permissionId, + @Param(value = "permissionType") String permissionType, + @Param(value = "mainDataTableAlias") String mainDataTableAlias, + @Param(value = "primaryKey") String primaryKey, + @Param(value = "permissionTargetId") String permissionTargetId, + @Param(value = "permissionConfigSourceId") String permissionConfigSourceId); + + + // @WeaDataPermission(mainDataTable = "#{mainDataTable}", +// permissionId = "#{permissionId}", +// permissionType = "#{permissionType}", +// mainDataTableAlias = "#{mainDataTableAlias}", +// primaryKey = "#{primaryKey}", +// permissionExcept = "true") + Map elogCount(@Param(value = "logContent") LoggerContext loggerContext, + @Param(value = "tableName") String tableName, + @Param(value = "conditionSql") String conditionSql, + @Param(value = "mainDataTable") String mainDataTable, + @Param(value = "permissionId") String permissionId, + @Param(value = "permissionType") String permissionType, + @Param(value = "mainDataTableAlias") String mainDataTableAlias, + @Param(value = "primaryKey") String primaryKey); + + // @WeaDataPermission(mainDataTable = "#{mainDataTable}", +// permissionId = "#{permissionId}", +// permissionType = "#{permissionType}", +// mainDataTableAlias = "#{mainDataTableAlias}", +// primaryKey = "#{primaryKey}", +// permissionExcept = "true") + Map elogCountPapi(@Param(value = "logContent") LoggerContext loggerContext, + @Param(value = "tableName") String tableName, + @Param(value = "conditionSql") String conditionSql, + @Param(value = "mainDataTable") String mainDataTable, + @Param(value = "permissionId") String permissionId, + @Param(value = "permissionType") String permissionType, + @Param(value = "mainDataTableAlias") String mainDataTableAlias, + @Param(value = "primaryKey") String primaryKey); + + + List queryDetailElogList(@Param(value = "logContent") LoggerContext loggerContext, + @Param("limit") String limit, + @Param(value = "tableName") String tableName, + @Param(value = "conditionSql") String conditionSql); + + Map elogDetailCount(@Param(value = "logContent") LoggerContext loggerContext, + @Param(value = "tableName") String tableName, + @Param(value = "conditionSql") String conditionSql); + +// List queryOperators(@Param(value = "tableName") String tableName, +// @Param(value = "targetId") String targetId, +// @Param(value = "operateType") String operateType); + + List queryReadInfoOperators(@Param(value = "tableName") String tableName, + @Param(value = "targetId") String targetId, + @Param(value = "operateType") String operateType, + @Param(value = "flag") Boolean flag); + + List queryReadInfoDateOperators(@Param(value = "tableName") String tableName, + @Param(value = "targetId") String targetId, + @Param(value = "operateType") String operateType, + @Param(value = "flag") Boolean flag, + @Param(value = "startDate") String startDate, + @Param(value = "endDate") String endDate); + + List queryAllMainData(@Param(value = "tableName") String tableName, @Param("uuid") String uuid); + + List queryAllMainChanges(@Param(value = "tableName") String tableName, @Param("mainid") String mainid); + + List queryAllDetailChanges(@Param(value = "tableName") String tableName, @Param("mainid") String mainid); + + Integer queryElogContextById(@Param(value = "id") Long id, + @Param(value = "tableName") String tableName); + + List queryElogTraceInfo(@Param(value = "traceId") String traceId, + @Param(value = "tableName") String tableName, + @Param(value = "offset") Integer offset, + @Param(value = "pageSize") Integer pageSize); + + int queryElogTraceInfoCount(@Param(value = "traceId") String traceId, + @Param(value = "tableName") String tableName); + + List queryLogInfoByCustom(@Param(value = "tableName") String tableName, + @Param(value = "sql") String sql); + + List queryAllChangesData(@Param("tableName") String tableName, @Param("mainid") String mainid); + + List queryTenantKeyOperators(@Param(value = "tableName") String tableName, + @Param(value = "tenantKey") String tenantKey, + @Param(value = "targetId") String targetId, + @Param(value = "operateType") String operateType, + @Param(value = "flag") Boolean flag); + + List queryAllChangesDataPages(@Param("tableName") String tableName, + @Param("mainid") String mainid, + @Param(value = "page") Page page); + + Integer queryAllChangesPageCounts(@Param("tableName") String tableName, @Param("mainid") String mainid); } diff --git a/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.xml b/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.xml index 7349e7026..93c233896 100644 --- a/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.xml +++ b/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.xml @@ -2,40 +2,411 @@ - - - insert into ${tableName} (uuid, date, tenant_key, modulename, functionName, - operator, operatorname, targetid, targetname, interfacename, operatetype, operatedesc, - params, clientIp, groupnamelabel, redoservice, redocontext, cancelservice, cancelcontext, device, groupid - ${cusColumns}) - values - (#{logContent.uuid}, #{logContent.date}, - #{logContent.tenant_key}, #{logContent.moduleName}, #{logContent.functionName}, #{logContent.operator}, #{logContent.operatorName}, #{logContent.targetId} - , #{logContent.targetName}, #{logContent.interfaceName}, #{logContent.operateType}, #{logContent.operatedesc}, - #{params}, #{logContent.clientIp}, #{logContent.groupNameLabel}, #{logContent.redoService}, - #{logContent.redoContext}, #{logContent.cancelService}, #{logContent.cancelContext}, #{logContent.device}, #{logContent.groupId} - ${cusValus}) - - + + + + + + + + + + + + + + + + - - insert into ${detailTableName} (mainid, uuid, tablename, fieldname, newvalue, oldvalue, - fielddesc, showorder - ${cusColumns}) - values( - #{mainid}, #{detailContext.uuid}, #{detailContext.tableName}, #{detailContext.fieldName}, #{detailContext.newValue}, - #{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder} - ${cusValus} - ) - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index a0da13747..56d4c84df 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -14,7 +14,6 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.po.SalarySobPO; -import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salaryacct.SalaryAcctEmployeeMapper; @@ -288,7 +287,7 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct List salaryAcctEmployeePOS = listByParam(queryParam); Set keySet = SalaryEntityUtil.properties(salaryAcctEmployeePOS, salaryAcctEmployeePO -> salaryAcctEmployeePO.getEmployeeId() + "-" + salaryAcctEmployeePO.getTaxAgentId()); List resultList = Lists.newArrayList(); - if(CollectionUtils.isNotEmpty(keySet)){ + if (CollectionUtils.isNotEmpty(keySet)) { lastMonthSalaryAcctEmployeePOMap.forEach((k, v) -> { if (!keySet.contains(k)) { resultList.add(v); @@ -556,19 +555,22 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct SalaryAcctEmployeePO lambdaQueryChainWrapper = SalaryAcctEmployeePO.builder().build(); // 个税扣缴义务人 - Collection taxAgentList = getTaxAgentService(user).listAllTaxAgents((long) user.getUID()); - if (CollectionUtils.isNotEmpty(taxAgentList)) { - List taxAgentIds = taxAgentList.stream().map(TaxAgentPO::getId).collect(Collectors.toList()); - // 有查询参数就取交集 - if (CollectionUtils.isNotEmpty(param.getTaxAgent())) { - List finalTaxAgentIds = taxAgentIds; - taxAgentIds = param.getTaxAgent().stream().filter(finalTaxAgentIds::contains).collect(Collectors.toList()); - lambdaQueryChainWrapper.setTaxAgentIds(CollectionUtils.isEmpty(taxAgentIds) ? Collections.singletonList(0L) : taxAgentIds); - } else { - lambdaQueryChainWrapper.setTaxAgentIds(taxAgentIds); - } - } else { - lambdaQueryChainWrapper.setTaxAgentIds(Collections.singletonList(0L)); +// Collection taxAgentList = getTaxAgentService(user).listAllTaxAgents((long) user.getUID()); +// if (CollectionUtils.isNotEmpty(taxAgentList)) { +// List taxAgentIds = taxAgentList.stream().map(TaxAgentPO::getId).collect(Collectors.toList()); +// // 有查询参数就取交集 +// if (CollectionUtils.isNotEmpty(param.getTaxAgent())) { +// List finalTaxAgentIds = taxAgentIds; +// taxAgentIds = param.getTaxAgent().stream().filter(finalTaxAgentIds::contains).collect(Collectors.toList()); +// lambdaQueryChainWrapper.setTaxAgentIds(CollectionUtils.isEmpty(taxAgentIds) ? Collections.singletonList(0L) : taxAgentIds); +// } else { +// lambdaQueryChainWrapper.setTaxAgentIds(taxAgentIds); +// } +// } else { +// lambdaQueryChainWrapper.setTaxAgentIds(Collections.singletonList(0L)); +// } + if (CollectionUtils.isNotEmpty(param.getTaxAgent())) { + lambdaQueryChainWrapper.setTaxAgentIds(param.getTaxAgent()); } // 薪资所属月 diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index 0110994fa..14bec72f5 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -6,7 +6,7 @@ import com.engine.core.impl.Service; import com.engine.salary.biz.SalaryItemBiz; import com.engine.salary.biz.SysSalaryItemBiz; import com.engine.salary.config.SalaryElogConfig; -import com.engine.salary.elog.dto.LoggerContext; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.elog.util.LoggerTemplate; import com.engine.salary.entity.salaryformula.po.FormulaPO; import com.engine.salary.entity.salaryformula.po.FormulaVar; From 7d1ce983dd117ecd2a35e354b4f50f7dba3116de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 26 Dec 2023 17:49:50 +0800 Subject: [PATCH 09/64] =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/elog/annotation/ElogTransform.java | 1 + .../entity/param/GetDetailChangesParam.java | 29 +++++++++++++++ .../elog/service/ILoggerTableService.java | 3 +- .../elog/service/impl/LoggerTableService.java | 7 ++-- .../elog/web/LoggerTableController.java | 37 +++++++++++++------ .../entity/salaryitem/po/SalaryItemPO.java | 22 +++++++++++ 6 files changed, 82 insertions(+), 17 deletions(-) create mode 100644 src/com/engine/salary/elog/entity/param/GetDetailChangesParam.java diff --git a/src/com/engine/salary/elog/annotation/ElogTransform.java b/src/com/engine/salary/elog/annotation/ElogTransform.java index b876b18b2..120c41d8d 100644 --- a/src/com/engine/salary/elog/annotation/ElogTransform.java +++ b/src/com/engine/salary/elog/annotation/ElogTransform.java @@ -5,6 +5,7 @@ import java.lang.annotation.*; @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.TYPE}) +@Inherited public @interface ElogTransform { String tablename() default ""; diff --git a/src/com/engine/salary/elog/entity/param/GetDetailChangesParam.java b/src/com/engine/salary/elog/entity/param/GetDetailChangesParam.java new file mode 100644 index 000000000..aec15823d --- /dev/null +++ b/src/com/engine/salary/elog/entity/param/GetDetailChangesParam.java @@ -0,0 +1,29 @@ +package com.engine.salary.elog.entity.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class GetDetailChangesParam { + /** + * 服务(模块)名 + */ + String module; + /** + * 方法名 + */ + String function; + /** + * 主键id + */ + String mainid; + /** + * 转换方法 + */ + String detailTransMethod; +} diff --git a/src/com/engine/salary/elog/service/ILoggerTableService.java b/src/com/engine/salary/elog/service/ILoggerTableService.java index e59fde3fb..8657f0ea6 100644 --- a/src/com/engine/salary/elog/service/ILoggerTableService.java +++ b/src/com/engine/salary/elog/service/ILoggerTableService.java @@ -2,6 +2,7 @@ package com.engine.salary.elog.service; import com.cloudstore.eccom.pc.table.WeaTable; import com.engine.salary.elog.entity.param.ELogGetLogParam; +import com.engine.salary.elog.entity.param.GetDetailChangesParam; import com.engine.salary.util.page.PageInfo; import javax.servlet.http.HttpServletRequest; @@ -13,7 +14,7 @@ public interface ILoggerTableService { WeaTable queryLogsPapi(String data, HttpServletRequest request); - List getDetailChanges(String module, String function, String mainid,String transMethod); + List getDetailChanges(GetDetailChangesParam param); List getDetailChangesPapi(String module, String function, String mainid, String transMethod, HttpServletRequest request); diff --git a/src/com/engine/salary/elog/service/impl/LoggerTableService.java b/src/com/engine/salary/elog/service/impl/LoggerTableService.java index f81a8c0ab..217872e0c 100644 --- a/src/com/engine/salary/elog/service/impl/LoggerTableService.java +++ b/src/com/engine/salary/elog/service/impl/LoggerTableService.java @@ -14,6 +14,7 @@ import com.engine.salary.elog.entity.dto.FilterConditionDto; import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.elog.entity.dto.ShowColumsDto; import com.engine.salary.elog.entity.param.ELogGetLogParam; +import com.engine.salary.elog.entity.param.GetDetailChangesParam; import com.engine.salary.elog.enums.ElogConsts; import com.engine.salary.elog.service.ILoggerTableService; import com.engine.salary.elog.util.ElogServiceUtils; @@ -851,10 +852,8 @@ public class LoggerTableService extends Service implements ILoggerTableService { } @Override - public List> getDetailChanges(String module, String function, String mainid, String detailTransMethod) { - List> list = getDetailChangesMethod(module, function, mainid, detailTransMethod, null); - return list; - + public List> getDetailChanges(GetDetailChangesParam param) { + return getDetailChangesMethod(param.getModule(), param.getFunction(), param.getMainid(), param.getDetailTransMethod(), null); } /** diff --git a/src/com/engine/salary/elog/web/LoggerTableController.java b/src/com/engine/salary/elog/web/LoggerTableController.java index b2969f833..fe85d3045 100644 --- a/src/com/engine/salary/elog/web/LoggerTableController.java +++ b/src/com/engine/salary/elog/web/LoggerTableController.java @@ -2,11 +2,11 @@ package com.engine.salary.elog.web; import com.engine.common.util.ServiceUtil; import com.engine.salary.elog.entity.param.ELogGetLogParam; +import com.engine.salary.elog.entity.param.GetDetailChangesParam; import com.engine.salary.elog.service.ILoggerTableService; import com.engine.salary.elog.service.impl.LoggerTableService; import com.engine.salary.util.ResponseResult; import com.engine.salary.util.page.PageInfo; -import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.parameters.RequestBody; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -43,7 +43,14 @@ public class LoggerTableController { return new ResponseResult(user).run(getLoggerTableService(user)::queryLogs, data); } - @ApiOperation("获取日志(卡片)") + /** + * 获取日志(卡片) + * + * @param request + * @param response + * @param data + * @return + */ @POST @Path("/getCardLogs") @Produces(MediaType.APPLICATION_JSON) @@ -51,16 +58,21 @@ public class LoggerTableController { User user = HrmUserVarify.getUser(request, response); return new ResponseResult>>(user).run(getLoggerTableService(user)::queryCardLogList, data); } -// -// @ApiOperation("获取单条操作记录的更新明细") -// @RequestMapping(path = "getDetailChanges", method = {RequestMethod.GET, RequestMethod.POST}) -// @WeaPermission(publicPermission = true) -// public WeaResult>> getDetailChanges(@PathVariable("module") @ApiParam("服务(模块)名") String module, -// @PathVariable("function") @ApiParam("方法名") String function, -// @RequestParam("mainid") @ApiParam("主键id") String mainid, -// @RequestParam("detailTransMethod") @ApiParam("转换方法") String detailTransMethod) { -// return WeaResult.success(getLoggerTableService(user).getDetailChanges(module, function, mainid, detailTransMethod)); -// } + + /** + * 获取单条操作记录的更新明细 + * @param request + * @param response + * @param param + * @return + */ + @POST + @Path("/getDetailChanges") + @Produces(MediaType.APPLICATION_JSON) + public String getDetailChanges(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody GetDetailChangesParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getLoggerTableService(user)::getDetailChanges, param); + } // @ApiOperation("获取单条操作记录的更新明细") // @POST // @Path("/getDetailChanges") @@ -95,6 +107,7 @@ public class LoggerTableController { /** * 获取日志列表 + * * @param request * @param response * @param param diff --git a/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java b/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java index 3115f0efa..1514cc3c5 100644 --- a/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java +++ b/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.salaryitem.po; +import com.engine.salary.elog.annotation.ElogTransform; import com.engine.salary.enums.SalaryRoundingModeEnum; import com.engine.salary.enums.SalarySystemTypeEnum; import com.engine.salary.enums.SalaryValueTypeEnum; @@ -25,21 +26,25 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor //hrsa_salary_item +@ElogTransform(name = "薪资项目") public class SalaryItemPO { /** * 主键id */ + @ElogTransform(name = "主键id") private Long id; /** * 名称 */ + @ElogTransform(name = "名称") private String name; /** * 编号 */ + @ElogTransform(name = "编号") private String code; /** @@ -47,26 +52,31 @@ public class SalaryItemPO { * * @see SalarySystemTypeEnum */ + @ElogTransform(name = "是否是系统项目") private Integer systemType; /** * 系统薪资项目的id(是从哪个系统薪资项目复制过来的) */ + @ElogTransform(name = "系统薪资项目的id") private Long sysSalaryItemId; /** * 默认使用。0:默认不适用、1:默认使用 */ + @ElogTransform(name = "默认使用") private Integer useDefault; /** * 薪资档案引用。0:薪资档案未引用、1:薪资档案引用 */ + @ElogTransform(name = "薪资档案引用") private Integer useInEmployeeSalary; /** * 核算时隐藏 */ + @ElogTransform(name = "核算时隐藏") private Integer hideDefault; /** @@ -74,11 +84,13 @@ public class SalaryItemPO { * * @see SalaryRoundingModeEnum */ + @ElogTransform(name = "进位规则") private Integer roundingMode; /** * 保留的小数位数 */ + @ElogTransform(name = "保留的小数位数") private Integer pattern; /** @@ -86,6 +98,7 @@ public class SalaryItemPO { * * @see SalaryValueTypeEnum */ + @ElogTransform(name = "取值方式") private Integer valueType; /** @@ -93,46 +106,55 @@ public class SalaryItemPO { * * @see SalaryDataTypeEnum */ + @ElogTransform(name = "字段类型") private String dataType; /** * 公式 */ + @ElogTransform(name = "公式") private Long formulaId; /** * 备注 */ + @ElogTransform(name = "备注") private String description; /** * 是否可以编辑。0:不可编辑、1:可编辑 */ + @ElogTransform(name = "是否可以编辑") private Integer canEdit; /** * 租户key */ + @ElogTransform(name = "租户key") private String tenantKey; /** * 创建人id */ + @ElogTransform(name = "创建人id") private Long creator; /** * 是否删除 */ + @ElogTransform(name = "是否删除") private Integer deleteType; /** * 创建时间 */ + @ElogTransform(name = "创建时间") private Date createTime; /** * 更新时间 */ + @ElogTransform(name = "更新时间") private Date updateTime; //查询条件 From ed29be3701259010cbf4eda11dc9076b5c3309fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 26 Dec 2023 18:47:45 +0800 Subject: [PATCH 10/64] =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/elog/util/LoggerTemplate.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/com/engine/salary/elog/util/LoggerTemplate.java b/src/com/engine/salary/elog/util/LoggerTemplate.java index c457291df..8b5b6d377 100644 --- a/src/com/engine/salary/elog/util/LoggerTemplate.java +++ b/src/com/engine/salary/elog/util/LoggerTemplate.java @@ -15,7 +15,6 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.dubbo.common.utils.AnnotationUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import weaver.hrm.User; @@ -291,19 +290,12 @@ public class LoggerTemplate { if (changeBean.getNewValue() != null) { apiModel = changeBean.getNewValue().getClass().getAnnotation(ApiModel.class); tableTransform = changeBean.getNewValue().getClass().getAnnotation(ElogTransform.class); - //增加处理被动态代理对象注解的逻辑 - if (Objects.isNull(tableTransform)) { - tableTransform = AnnotationUtils.findAnnotation(changeBean.getNewValue().getClass(), ElogTransform.class); - } //fields = changeBean.getNewValue().getClass().getDeclaredFields(); fields = getAllFields(changeBean.getNewValue().getClass()); newJo = valueChange.getJSONObject("newValue"); } else { apiModel = changeBean.getOldValue().getClass().getAnnotation(ApiModel.class); tableTransform = changeBean.getOldValue().getClass().getAnnotation(ElogTransform.class); - if (Objects.isNull(tableTransform)) { - tableTransform = AnnotationUtils.findAnnotation(changeBean.getOldValue().getClass(), ElogTransform.class); - } //fields = changeBean.getOldValue().getClass().getDeclaredFields(); fields = getAllFields(changeBean.getOldValue().getClass()); } From e1ca39e8598591dd1b56728ea8b6acdeffd95e19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 23 Jan 2024 15:00:46 +0800 Subject: [PATCH 11/64] =?UTF-8?q?elog=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202401230403.sql | 8 ++++++++ resource/sqlupgrade/GS/sql202401230403.sql | 8 ++++++++ resource/sqlupgrade/JC/sql202401230403.sql | 8 ++++++++ resource/sqlupgrade/Mysql/sql202401230403.sql | 6 ++++++ resource/sqlupgrade/Oracle/sql202401230403.sql | 7 +++++++ resource/sqlupgrade/PG/sql202401230403.sql | 6 ++++++ resource/sqlupgrade/SQLServer/sql202401230403.sql | 7 +++++++ resource/sqlupgrade/ST/sql202401230403.sql | 8 ++++++++ 8 files changed, 58 insertions(+) create mode 100644 resource/sqlupgrade/DM/sql202401230403.sql create mode 100644 resource/sqlupgrade/GS/sql202401230403.sql create mode 100644 resource/sqlupgrade/JC/sql202401230403.sql create mode 100644 resource/sqlupgrade/Mysql/sql202401230403.sql create mode 100644 resource/sqlupgrade/Oracle/sql202401230403.sql create mode 100644 resource/sqlupgrade/PG/sql202401230403.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202401230403.sql create mode 100644 resource/sqlupgrade/ST/sql202401230403.sql diff --git a/resource/sqlupgrade/DM/sql202401230403.sql b/resource/sqlupgrade/DM/sql202401230403.sql new file mode 100644 index 000000000..9549b4a38 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202401230403.sql @@ -0,0 +1,8 @@ +CREATE TABLE hrsa_elog_version +( + id NUMBER(38,0) primary key NOT NULL, + mainTable varchar2(255), + version NUMBER(38,0) +); +/ + diff --git a/resource/sqlupgrade/GS/sql202401230403.sql b/resource/sqlupgrade/GS/sql202401230403.sql new file mode 100644 index 000000000..9549b4a38 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202401230403.sql @@ -0,0 +1,8 @@ +CREATE TABLE hrsa_elog_version +( + id NUMBER(38,0) primary key NOT NULL, + mainTable varchar2(255), + version NUMBER(38,0) +); +/ + diff --git a/resource/sqlupgrade/JC/sql202401230403.sql b/resource/sqlupgrade/JC/sql202401230403.sql new file mode 100644 index 000000000..9549b4a38 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202401230403.sql @@ -0,0 +1,8 @@ +CREATE TABLE hrsa_elog_version +( + id NUMBER(38,0) primary key NOT NULL, + mainTable varchar2(255), + version NUMBER(38,0) +); +/ + diff --git a/resource/sqlupgrade/Mysql/sql202401230403.sql b/resource/sqlupgrade/Mysql/sql202401230403.sql new file mode 100644 index 000000000..23e6f1e06 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202401230403.sql @@ -0,0 +1,6 @@ +CREATE TABLE hrsa_elog_version ( + id bigint(0) NOT NULL, + mainTable varchar(255) NULL, + version bigint(0) NULL, + PRIMARY KEY (id) USING BTREE +) ; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202401230403.sql b/resource/sqlupgrade/Oracle/sql202401230403.sql new file mode 100644 index 000000000..e0a34b233 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202401230403.sql @@ -0,0 +1,7 @@ +CREATE TABLE hrsa_elog_version +( + id NUMBER(38,0) primary key NOT NULL, + mainTable varchar2(255), + version NUMBER(38,0) +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202401230403.sql b/resource/sqlupgrade/PG/sql202401230403.sql new file mode 100644 index 000000000..23b66fe53 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202401230403.sql @@ -0,0 +1,6 @@ +CREATE TABLE hrsa_elog_version ( + id bigint NOT NULL, + version bigint NOT NULL, + mainTable varchar(255), + PRIMARY KEY (id) +); \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202401230403.sql b/resource/sqlupgrade/SQLServer/sql202401230403.sql new file mode 100644 index 000000000..16a1bb858 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202401230403.sql @@ -0,0 +1,7 @@ +create table hrsa_elog_version +( + id bigint primary key , + mainTable varchar(255), + version bigint +) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202401230403.sql b/resource/sqlupgrade/ST/sql202401230403.sql new file mode 100644 index 000000000..9549b4a38 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202401230403.sql @@ -0,0 +1,8 @@ +CREATE TABLE hrsa_elog_version +( + id NUMBER(38,0) primary key NOT NULL, + mainTable varchar2(255), + version NUMBER(38,0) +); +/ + From 5bf00a98aa2178c843df583abd127251315fce30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 24 Jan 2024 09:50:58 +0800 Subject: [PATCH 12/64] =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/elog/util/LoggerTemplate.java | 2 +- .../salaryacct/po/SalaryAcctEmployeePO.java | 14 +++ .../engine/salary/enums/OperateTypeEnum.java | 15 ++- .../salaryacct/SalaryAcctManager.java | 1 - .../impl/SalaryAcctEmployeeServiceImpl.java | 48 ++++----- .../impl/SalaryAcctExcelServiceImpl.java | 99 ++++++++++++------- .../impl/SalaryAcctRecordServiceImpl.java | 95 +++++++++--------- .../impl/SalaryAcctResultServiceImpl.java | 60 ++++++----- 8 files changed, 192 insertions(+), 142 deletions(-) diff --git a/src/com/engine/salary/elog/util/LoggerTemplate.java b/src/com/engine/salary/elog/util/LoggerTemplate.java index 8b5b6d377..a82021433 100644 --- a/src/com/engine/salary/elog/util/LoggerTemplate.java +++ b/src/com/engine/salary/elog/util/LoggerTemplate.java @@ -240,7 +240,7 @@ public class LoggerTemplate { } context.setTempParams(null); - String employeeId = Optional.ofNullable(context.getUser()).map(User::getUID).orElse(0).toString(); + String employeeId = Optional.ofNullable(context.getUser()).map(User::getUID).orElse(0).toString(); String tenantKey = SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY; String userName = Optional.ofNullable(context.getUser()).map(User::getUsername).orElse("").toString(); if (StringUtils.isEmpty(context.getOperator()) && StringUtils.isNotEmpty(employeeId)) { diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java index 7d6c82f58..55afc5d0b 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.salaryacct.po; import com.engine.salary.annotation.SalaryFormulaVar; +import com.engine.salary.elog.annotation.ElogTransform; import com.engine.salary.enums.datacollection.DataCollectionEmployeeTypeEnum; import lombok.AllArgsConstructor; import lombok.Builder; @@ -25,28 +26,33 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor //hrsa_salary_acct_emp +@ElogTransform(name = "薪资核算人员") public class SalaryAcctEmployeePO { /** * 主键id */ + @ElogTransform(name = "主键id") private Long id; /** * 薪资核算的id */ + @ElogTransform(name = "核算记录id") @SalaryFormulaVar(defaultLabel = "核算记录id", labelId = 86321, dataType = "number") private Long salaryAcctRecordId; /** * 薪资账套id */ + @ElogTransform(name = "薪资账套id") @SalaryFormulaVar(defaultLabel = "薪资账套id", labelId = 86321, dataType = "number") private Long salarySobId; /** * 人员id */ + @ElogTransform(name = "人员id") @SalaryFormulaVar(defaultLabel = "人员id", labelId = 86321, dataType = "number") private Long employeeId; @@ -55,43 +61,51 @@ public class SalaryAcctEmployeePO { * * @see DataCollectionEmployeeTypeEnum */ + @ElogTransform(name = "人员类型") private Integer employeeType; /** * 个税扣缴义务人id */ + @ElogTransform(name = "个税扣缴义务人id") @SalaryFormulaVar(defaultLabel = "个税扣缴义务人id", labelId = 86321, dataType = "number") private Long taxAgentId; /** * 薪资所属月 */ + @ElogTransform(name = "薪资所属月") @SalaryFormulaVar(defaultLabel = "薪资所属月", labelId = 86321, dataType = "string") private Date salaryMonth; /** * 租户key */ + @ElogTransform(name = "租户key") private String tenantKey; /** * 创建人id */ + @ElogTransform(name = "创建人id") private Long creator; /** * 是否删除 */ + @ElogTransform(name = "是否删除") private Integer deleteType; /** * 创建时间 */ + @ElogTransform(name = "创建时间") private Date createTime; /** * 更新时间 */ + @ElogTransform(name = "更新时间") private Date updateTime; //--------条件---------- diff --git a/src/com/engine/salary/enums/OperateTypeEnum.java b/src/com/engine/salary/enums/OperateTypeEnum.java index 142abd5f7..697e1aea6 100644 --- a/src/com/engine/salary/enums/OperateTypeEnum.java +++ b/src/com/engine/salary/enums/OperateTypeEnum.java @@ -1,15 +1,20 @@ package com.engine.salary.enums; /** - * @Description: 操作类型 - * @Author: wangxiangzhong - * @Date: 2021/11/1 13:17 - */ + * 操作类型 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public enum OperateTypeEnum { + READ("0", "查看"), ADD("1", "新增"), UPDATE("2", "更新"), - DELETE("4", "删除"); + DELETE("4", "删除"), + EXPORT("5", "导出"); private String value; diff --git a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java index 207bd1649..6b1943962 100644 --- a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java +++ b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java @@ -121,7 +121,6 @@ public class SalaryAcctManager extends Service { private SalaryAcctResultTempService getSalaryAcctResultTempService(User user) { return ServiceUtil.getService(SalaryAcctResultTempServiceImpl.class, user); } -// private LoggerTemplate salaryAcctRecordLoggerTemplate; private SIAccountService getSIAccountService(User user) { return ServiceUtil.getService(SIAccountServiceImpl.class, user); diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 56d4c84df..36cf1186f 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -4,7 +4,10 @@ import cn.hutool.core.date.DateUtil; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.elog.entity.dto.LoggerContext; +import com.engine.salary.elog.util.LoggerTemplate; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeCountDTO; @@ -14,6 +17,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.po.SalarySobPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salaryacct.SalaryAcctEmployeeMapper; @@ -51,9 +55,7 @@ import java.util.stream.Collectors; **/ @Slf4j public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcctEmployeeService { - - - private SalaryAcctEmployeeMapper salaryAcctEmployeeMapper; + private final LoggerTemplate salaryAcctRecordLoggerTemplate = SalaryElogConfig.salaryAcctRecordLoggerTemplate(); private SalaryAcctEmployeeMapper getSalaryAcctEmployeeMapper() { return MapperProxyFactory.getProxy(SalaryAcctEmployeeMapper.class); @@ -91,8 +93,6 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } -// private LoggerTemplate salaryAcctRecordLoggerTemplate; - private SalarySysConfMapper getSalarySysConfMapper() { return SqlProxyHandle.getProxy(SalarySysConfMapper.class); } @@ -394,15 +394,16 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct // 记录日志 -// String targetName = salarySobPO.getName() + ":" + SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth()); -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); -// loggerContext.setTargetName(targetName); -// loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98837, "添加薪资核算人员")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98837, "添加薪资核算人员") + ":" + targetName); -// loggerContext.setNewValueList(salaryAcctEmployeePOS); -// salaryAcctRecordLoggerTemplate.write(loggerContext); + String targetName = salarySobPO.getName() + ":" + SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98837, "添加薪资核算人员")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98837, "添加薪资核算人员") + ":" + targetName); + loggerContext.setNewValueList(salaryAcctEmployeePOS); + salaryAcctRecordLoggerTemplate.write(loggerContext); } @Override @@ -460,15 +461,16 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98769, "薪资账套不存在或已被删除")); } // 记录日志 -// String targetName = salarySobPO.getName() + ":" + SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth()); -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); -// loggerContext.setTargetName(targetName); -// loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98835, "删除薪资核算人员")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98835, "删除薪资核算人员") + ":" + targetName); -// loggerContext.setOldValueList(salaryAcctEmployeePOS); -// salaryAcctRecordLoggerTemplate.write(loggerContext); + String targetName = salarySobPO.getName() + ":" + SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98835, "删除薪资核算人员")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98835, "删除薪资核算人员") + ":" + targetName); + loggerContext.setOldValueList(salaryAcctEmployeePOS); + salaryAcctRecordLoggerTemplate.write(loggerContext); } @Override diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 8840d9302..0626e4aa2 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -5,8 +5,11 @@ import com.cloudstore.dev.api.util.Util_DataCache; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.component.WeaTableColumnGroup; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.constant.SalaryItemConstant; +import com.engine.salary.elog.entity.dto.LoggerContext; +import com.engine.salary.elog.util.LoggerTemplate; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.report.po.SalaryAcctResultReportPO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO; @@ -24,7 +27,9 @@ import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO; import com.engine.salary.entity.salarysob.po.SalarySobItemGroupPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; +import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.salaryaccounting.LockStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctResultDataSourceEnum; @@ -38,6 +43,7 @@ import com.engine.salary.sys.enums.OpenEnum; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.excel.ExcelParseHelper; @@ -81,12 +87,16 @@ import static com.engine.salary.util.excel.ExcelSupport.EXCEL_TYPE_XLSX; **/ @Slf4j public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExcelService { - + private final LoggerTemplate salaryAcctRecordLoggerTemplate = SalaryElogConfig.salaryAcctRecordLoggerTemplate(); private SalaryAcctRecordService getSalaryAcctRecordService(User user) { return (SalaryAcctRecordService) ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); } + private SalarySobService getSalarySobService(User user) { + return ServiceUtil.getService(SalarySobServiceImpl.class, user); + } + private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) { return (SalaryAcctEmployeeService) ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); } @@ -237,7 +247,20 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // 3.表数据 List> lists = convert2ExcelRow(salaryAcctEmployees); rows.addAll(lists); -// return ExcelUtil.genWorkbookV2(rows, sheetName); + + // 记录日志 + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId()); + SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId()); + String targetName = salarySobPO.getName() + ":" + SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98837, "导出环比增加人员")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98837, "导出环比增加人员") + ":" + targetName); + salaryAcctRecordLoggerTemplate.write(loggerContext); + return ExcelUtilPlus.genWorkbookV2(rows, sheetName); } @@ -289,10 +312,10 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc //判断是否按照自定义字段导出表头 List finalWeaTableColumns = new ArrayList<>(); - if (queryParam.getSalaryItemIds() != null ) { + if (queryParam.getSalaryItemIds() != null) { //获取人员基本信息字段(汇总) Collection> empFieldList = getSalarySobItemWrapper(user).empFieldList(); - List empFieldIdList= new ArrayList<>(); + List empFieldIdList = new ArrayList<>(); empFieldList.forEach(f -> empFieldIdList.add(f.get("id"))); // 必须选择导出所需的薪资项目 if (CollectionUtils.isEmpty(queryParam.getSalaryItemIds())) { @@ -311,7 +334,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc columnGroupItem.setChildren(childrenColumns); finalWeaTableColumns.add(columnGroupItem); } - } else if (empFieldIdList.contains(tableColumn.getColumn()) || headerRangeList.contains(tableColumn.getColumn())){ + } else if (empFieldIdList.contains(tableColumn.getColumn()) || headerRangeList.contains(tableColumn.getColumn())) { finalWeaTableColumns.add(columnGroupItem); } @@ -334,12 +357,12 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc if (openSum != null && StringUtils.isNotBlank(openSum.getConfValue()) && OpenEnum.parseByValue(openSum.getConfValue()) == OpenEnum.OPEN) { total = true; Map sumRow = getSalaryAcctResultService(user).sumRow(queryParam); - sumRow.forEach((k,v) -> { + sumRow.forEach((k, v) -> { if (NumberUtils.isCreatable(v.toString())) { - sumRow.put(k,new BigDecimal(v.toString())); + sumRow.put(k, new BigDecimal(v.toString())); } }); - if(sumRow !=null){ + if (sumRow != null) { sumRow.put("taxAgentName", "总计"); resultMapList.add(sumRow); } @@ -354,7 +377,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc for (WeaTableColumnGroup weaTableColumn : headerColumnGroup) { String fieldType = (String) map.getOrDefault(weaTableColumn.getColumn().toString() + DATA_TYPE_SUFFIX, StringUtils.EMPTY); if (StringUtils.equals("number", fieldType)) { - row.add(new BigDecimal(StringUtils.isBlank(map.get(weaTableColumn.getColumn()).toString()) ? "0" :map.get(weaTableColumn.getColumn()).toString())); + row.add(new BigDecimal(StringUtils.isBlank(map.get(weaTableColumn.getColumn()).toString()) ? "0" : map.get(weaTableColumn.getColumn()).toString())); } else { row.add(map.getOrDefault(weaTableColumn.getColumn(), StringUtils.EMPTY)); } @@ -380,7 +403,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc SalaryAcctRecordPO byId = getSalaryAcctRecordService(user).getById(salaryAcctRecordPO.getId()); boolean isBackCalc = Objects.equals(byId.getBackCalcStatus(), 1); // 查询薪资账套下的薪资项目+员工信息字段 - SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateWithItemHideBySalarySobId(salaryAcctRecordPO.getSalarySobId(),isBackCalc); + SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateWithItemHideBySalarySobId(salaryAcctRecordPO.getSalarySobId(), isBackCalc); // 构建薪资核算结果列表表头 List columnList = SalaryAcctResultBO.buildTableColumns(salarySobItemAggregateDTO, ListUtils.emptyIfNull(salaryAcctRecordPO.getLockSalaryItemIds())); // 获取固定列头数 @@ -450,27 +473,27 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc SalaryAcctResultBO.sortItem(salarySobItemPOMap); // 根据账套分组封装薪资项目的值 List itemsByGroup = new ArrayList<>(); - for(SalarySobItemGroupPO groupPO : salarySobItemGroupPOS){ - List groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(),Collections.emptyList()); + for (SalarySobItemGroupPO groupPO : salarySobItemGroupPOS) { + List groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(), Collections.emptyList()); List items = groupItems.stream() .map(salarySobItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() - .salaryItemId(salarySobItemPO.getSalaryItemId()) - .salaryItemName(Optional.ofNullable(salaryItemMap.get(salarySobItemPO.getSalaryItemId())).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY)) - .dataType(Optional.ofNullable(salaryItemMap.get(salarySobItemPO.getSalaryItemId())).map(SalaryItemPO::getDataType).orElse(SalaryDataTypeEnum.NUMBER.getValue())) - .build()) + .salaryItemId(salarySobItemPO.getSalaryItemId()) + .salaryItemName(Optional.ofNullable(salaryItemMap.get(salarySobItemPO.getSalaryItemId())).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY)) + .dataType(Optional.ofNullable(salaryItemMap.get(salarySobItemPO.getSalaryItemId())).map(SalaryItemPO::getDataType).orElse(SalaryDataTypeEnum.NUMBER.getValue())) + .build()) .collect(Collectors.toList()); itemsByGroup.add(SalaryAcctImportFieldDTO.ImportFieldByGroupDTO.builder() .salarySobItemGroupId(groupPO.getId()) .salarySobItemGroupName(groupPO.getName()) .salaryItems(items) - .sortedIndex(groupPO.getSortedIndex()).build() ); + .sortedIndex(groupPO.getSortedIndex()).build()); } // 未分类 List noGroupItems = salarySobItemPOMap.getOrDefault(0L, Collections.emptyList()); - if(CollectionUtils.isNotEmpty(noGroupItems)){ + if (CollectionUtils.isNotEmpty(noGroupItems)) { List items = noGroupItems.stream() - .map(salarySobItemPO ->SalaryAcctImportFieldDTO.ImportFieldDTO.builder() + .map(salarySobItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() .salaryItemId(salarySobItemPO.getSalaryItemId()) .salaryItemName(Optional.ofNullable(salaryItemMap.get(salarySobItemPO.getSalaryItemId())).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY)) .dataType(Optional.ofNullable(salaryItemMap.get(salarySobItemPO.getSalaryItemId())).map(SalaryItemPO::getDataType).orElse(SalaryDataTypeEnum.NUMBER.getValue())) @@ -510,7 +533,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // .collect(Collectors.toList()); // 缓存勾选 String cacheKey = user.getUID() + SalaryItemConstant.RESULT_IMPORT_FIELD_SIGN; - String cacheValue = (String)Util_DataCache.getObjVal(cacheKey); + String cacheValue = (String) Util_DataCache.getObjVal(cacheKey); List checkItems = JsonUtil.parseList(cacheValue, Long.class) == null ? new ArrayList<>() : JsonUtil.parseList(cacheValue, Long.class); // 转换成dto // return SalaryAcctImportFieldDTO.builder().formulaItems(formulaItems).sqlItems(sqlItems).inputItems(inputItems).checkItems(checkItems).build(); @@ -541,8 +564,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc SalaryAcctResultBO.sortItem(salarySobItemPOMap); // 根据账套分组封装薪资项目的值 List itemsByGroup = new ArrayList<>(); - for(SalarySobItemGroupPO groupPO : salarySobItemGroupPOS){ - List groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(),Collections.emptyList()); + for (SalarySobItemGroupPO groupPO : salarySobItemGroupPOS) { + List groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(), Collections.emptyList()); List items = groupItems.stream() .map(salarySobItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() .salaryItemId(salarySobItemPO.getSalaryItemId()) @@ -554,13 +577,13 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc .salarySobItemGroupId(groupPO.getId()) .salarySobItemGroupName(groupPO.getName()) .salaryItems(items) - .sortedIndex(groupPO.getSortedIndex()).build() ); + .sortedIndex(groupPO.getSortedIndex()).build()); } // 未分类 List noGroupItems = salarySobItemPOMap.getOrDefault(0L, Collections.emptyList()); - if(CollectionUtils.isNotEmpty(noGroupItems)){ + if (CollectionUtils.isNotEmpty(noGroupItems)) { List items = noGroupItems.stream() - .map(salarySobItemPO ->SalaryAcctImportFieldDTO.ImportFieldDTO.builder() + .map(salarySobItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() .salaryItemId(salarySobItemPO.getSalaryItemId()) .salaryItemName(Optional.ofNullable(salaryItemMap.get(salarySobItemPO.getSalaryItemId())).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY)) .build()) @@ -574,7 +597,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } // 缓存勾选 String cacheKey = user.getUID() + SalaryItemConstant.RESULT_EXPORT_FIELD_SIGN; - String cacheValue = (String)Util_DataCache.getObjVal(cacheKey); + String cacheValue = (String) Util_DataCache.getObjVal(cacheKey); List checkItems = JsonUtil.parseList(cacheValue, Long.class) == null ? new ArrayList<>() : JsonUtil.parseList(cacheValue, Long.class); // 转换成dto // return SalaryAcctImportFieldDTO.builder().formulaItems(formulaItems).sqlItems(sqlItems).inputItems(inputItems).checkItems(checkItems).build(); @@ -586,7 +609,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // ValidUtil.doValidator(param); // 从缓存中获取所选的薪资项目 String cacheKey = user.getUID() + SalaryItemConstant.RESULT_IMPORT_FIELD_SIGN; - String cacheValue = (String)Util_DataCache.getObjVal(cacheKey); + String cacheValue = (String) Util_DataCache.getObjVal(cacheKey); List checkItems = JsonUtil.parseList(cacheValue, Long.class) == null ? new ArrayList<>() : JsonUtil.parseList(cacheValue, Long.class); // 必须选择导入模板所需的薪资项目 if (CollectionUtils.isEmpty(checkItems)) { @@ -691,7 +714,6 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } - @Override public XSSFWorkbook exportComparisonResult(SalaryComparisonResultQueryParam queryParam) { ValidUtil.doValidator(queryParam); @@ -827,7 +849,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // 查询薪资核算所用的薪资账套的员工信息字段 List salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); List salarySobEmpFieldDTOS = new SalarySobItemAggregateBO().buildEmpField(salarySobEmpFieldPOS); - salarySobEmpFieldDTOS.stream().forEach(empField -> finalWeaTableColumns.add(new WeaTableColumnGroup("150", SalaryI18nUtil.getI18nLabel(0, empField.getFieldName()), SalaryI18nUtil.getI18nLabel(0, empField.getFieldName())))); + salarySobEmpFieldDTOS.stream().forEach(empField -> finalWeaTableColumns.add(new WeaTableColumnGroup("150", SalaryI18nUtil.getI18nLabel(0, empField.getFieldName()), SalaryI18nUtil.getI18nLabel(0, empField.getFieldName())))); for (WeaTableColumnGroup tableColumn : weaTableColumns) { WeaTableColumnGroup columnGroupItem = (WeaTableColumnGroup) tableColumn; if (columnGroupItem.getChildren() != null) { @@ -992,16 +1014,16 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // List headers = ExcelSupport.getSheetHeader(sheet, 0); List headers; // if (StringUtils.equals("importSalaryAcctResult", importType)) { - headers = ExcelSupport.getSheetHeader(sheet, 1); + headers = ExcelSupport.getSheetHeader(sheet, 1); // } else { // headers = ExcelSupport.getSheetHeader(sheet, 0); // } - // 处理数值 + // 处理数值 // List> data = ExcelParseHelper.parse2Map(sheet, 1); List> data; // if (StringUtils.equals("importSalaryAcctResult", importType)) { - data = ExcelParseHelper.parse2Map(sheet, 2, 1); + data = ExcelParseHelper.parse2Map(sheet, 2, 1); // } else { // data = ExcelParseHelper.parse2Map(sheet, 1); // } @@ -1248,7 +1270,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc getSalaryComparisonResultService(user).deleteBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); if (CollectionUtils.isNotEmpty(excelAcctResults)) { excelAcctResults.stream().forEach(result -> { - if(StringUtils.isEmpty(result.getResultValue())){ + if (StringUtils.isEmpty(result.getResultValue())) { result.setResultValue(" "); } }); @@ -1282,7 +1304,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } } SalarySysConfPO autoLock = getSalarySysConfService(user).getOneByCode(SalarySysConstant.EDIT_IMPORT_AUTO_LOCK); - if(autoLock != null && StringUtils.equals(autoLock.getConfValue(),"1")){ + if (autoLock != null && StringUtils.equals(autoLock.getConfValue(), "1")) { // 导入的列都自动锁定 SalaryAcctResultUpdateLockStatusParam updateLockStatusParam = SalaryAcctResultUpdateLockStatusParam.builder() .salaryItemIds(excelSalaryItemIds) @@ -1305,7 +1327,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } /** - * 存储薪资核算结果数据来源日志 + * 存储薪资核算结果数据来源日志 + * * @param salaryAcctResults */ private void handleSalaryAcctResultLog(List salaryAcctResults) { @@ -1315,14 +1338,14 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc List salaryAcctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, salaryItemIds); Long uid = Long.valueOf(user.getUID()); List needInsertList = SalaryAcctResultLogBO.buildSalaryAcctResultLog(salaryAcctResultList, uid, SalaryAcctResultDataSourceEnum.IMPORT); - if(CollectionUtils.isNotEmpty(needInsertList)){ + if (CollectionUtils.isNotEmpty(needInsertList)) { getSalaryAcctResultLogService(user).batchInsert(needInsertList); } } /** - * @description * @return void + * @description * @author Harryxzy * @date 2022/12/26 22:36 */ @@ -1330,7 +1353,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc Map> deleteMap = SalaryEntityUtil.group2Map(deleteResults, po -> po.getSalaryAcctEmpId() + "-" + po.getSalaryItemId()); salaryAcctResults.stream().forEach(result -> { List salaryAcctResultPOS = deleteMap.get(result.getSalaryAcctEmpId() + "-" + result.getSalaryItemId()); - if(salaryAcctResultPOS != null && salaryAcctResultPOS.size() > 0 ){ + if (salaryAcctResultPOS != null && salaryAcctResultPOS.size() > 0) { result.setOriginResultValue(salaryAcctResultPOS.get(0).getOriginResultValue()); } }); diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index d6924e489..1d3e300ef 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -4,9 +4,9 @@ import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.common.LocalDateRange; -import com.engine.salary.constant.SalaryDefaultTenantConstant; -import com.engine.salary.entity.datacollection.DataCollectionEmployee; -import com.engine.salary.entity.report.po.SalaryAcctResultReportPO; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; +import com.engine.salary.elog.util.LoggerTemplate; import com.engine.salary.entity.salaryBill.po.SalarySendPO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctRecordBO; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; @@ -15,8 +15,8 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; -import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -35,14 +35,11 @@ import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.ValidUtil; -import dm.jdbc.util.IdGenerator; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; -import java.time.YearMonth; import java.util.*; import java.util.stream.Collectors; @@ -55,7 +52,7 @@ import java.util.stream.Collectors; * @version 1.0 **/ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRecordService { - + private final LoggerTemplate salaryAcctRecordLoggerTemplate = SalaryElogConfig.salaryAcctRecordLoggerTemplate(); private SalaryAcctRecordMapper getSalaryAcctRecordMapper() { return MapperProxyFactory.getProxy(SalaryAcctRecordMapper.class); @@ -303,15 +300,16 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe // 初始化薪资核算人员 getSalaryAcctEmployeeService(user).initBySalaryAcctRecord(salaryAcctRecordPO); // 记录日志 -// String targetName = getLogTargetNameById(salaryAcctRecordPO.getId(), tenantKey); -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); -// loggerContext.setTargetName(targetName); -// loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98768, "新建薪资核算")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98768, "新建薪资核算") + ": " + targetName); -// loggerContext.setNewValues(salaryAcctRecordPO); -// salaryAcctRecordLoggerTemplate.write(loggerContext); + String targetName = getLogTargetNameById(salaryAcctRecordPO.getId()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98768, "新建薪资核算")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98768, "新建薪资核算") + ": " + targetName); + loggerContext.setNewValues(salaryAcctRecordPO); + salaryAcctRecordLoggerTemplate.write(loggerContext); // 返回薪资核算记录id return salaryAcctRecordPO.getId(); } @@ -534,18 +532,19 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe } // 记录日志 -// salaryAcctRecordPOS.forEach(salaryAcctRecordPO -> { -// SalarySobPO salarySobPO = salarySobPOMap.get(salaryAcctRecordPO.getSalarySobId()); -// String targetName = salarySobPO.getName() + SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth()); -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); -// loggerContext.setTargetName(targetName); -// loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98821, "删除薪资核算")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98821, "删除薪资核算") + ":" + targetName); -// loggerContext.setNewValues(salaryAcctRecordPO); -// salaryAcctRecordLoggerTemplate.write(loggerContext); -// }); + salaryAcctRecordPOS.forEach(salaryAcctRecordPO -> { + SalarySobPO salarySobPO = salarySobPOMap.get(salaryAcctRecordPO.getSalarySobId()); + String targetName = salarySobPO.getName() + SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98821, "删除薪资核算")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98821, "删除薪资核算") + ":" + targetName); + loggerContext.setNewValues(salaryAcctRecordPO); + salaryAcctRecordLoggerTemplate.write(loggerContext); + }); } @Override @@ -577,15 +576,16 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe // 记录日志 -// String targetName = getLogTargetNameById(salaryAcctRecordId); -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); -// loggerContext.setTargetName(targetName); -// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98817, "薪资核算归档")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98817, "薪资核算归档") + ": " + targetName); -// loggerContext.setNewValues(salaryAcctRecordPO); -// salaryAcctRecordLoggerTemplate.write(loggerContext); + String targetName = getLogTargetNameById(salaryAcctRecordId); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98817, "薪资核算归档")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98817, "薪资核算归档") + ": " + targetName); + loggerContext.setNewValues(salaryAcctRecordPO); + salaryAcctRecordLoggerTemplate.write(loggerContext); } @Override @@ -626,15 +626,16 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe // salaryAcctRecordPO.setUpdateTime(new Date()); // getSalaryAcctRecordMapper().updateIgnoreNull(salaryAcctRecordPO); // 记录日志 -// String targetName = getLogTargetNameById(salaryAcctRecordPO.getId(), tenantKey); -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); -// loggerContext.setTargetName(targetName); -// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98820, "重新核算")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98820, "重新核算") + ": " + targetName); -// loggerContext.setNewValues(salaryAcctRecordPO); -// salaryAcctRecordLoggerTemplate.write(loggerContext); + String targetName = getLogTargetNameById(salaryAcctRecordPO.getId()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98820, "重新核算")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98820, "重新核算") + ": " + targetName); + loggerContext.setNewValues(salaryAcctRecordPO); + salaryAcctRecordLoggerTemplate.write(loggerContext); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 5369fea9e..fef331259 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -4,7 +4,10 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.cache.SalaryCacheKey; import com.engine.salary.common.LocalDateRange; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.elog.entity.dto.LoggerContext; +import com.engine.salary.elog.util.LoggerTemplate; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; @@ -23,9 +26,10 @@ import com.engine.salary.entity.salarysob.dto.*; import com.engine.salary.entity.salarysob.po.*; import com.engine.salary.entity.taxagent.po.TaxAgentAdminPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.SalaryValueTypeEnum; -import com.engine.salary.enums.common.FilterEnum; import com.engine.salary.enums.UserStatusEnum; +import com.engine.salary.enums.common.FilterEnum; import com.engine.salary.enums.salaryaccounting.LockStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctResultDataSourceEnum; @@ -82,6 +86,7 @@ import java.util.stream.Collectors; **/ @Slf4j public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctResultService { + private final LoggerTemplate salaryAcctRecordLoggerTemplate = SalaryElogConfig.salaryAcctRecordLoggerTemplate(); private EncryptUtil encryptUtil = new EncryptUtil(); private SalaryAcctResultMapper getSalaryAcctResultMapper() { @@ -145,7 +150,6 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe private SalaryAcctResultTempService getSalaryAcctResultTempService(User user) { return ServiceUtil.getService(SalaryAcctResultTempServiceImpl.class, user); } -// private LoggerTemplate salaryAcctRecordLoggerTemplate; private SIAccountService getSIAccountService(User user) { return ServiceUtil.getService(SIAccountServiceImpl.class, user); @@ -355,7 +359,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe //其他条件 List otherConditions = queryParam.getOtherConditions(); - if(CollectionUtils.isNotEmpty(otherConditions)){ + if (CollectionUtils.isNotEmpty(otherConditions)) { List items = SalaryEntityUtil.properties(otherConditions, SalaryAcctResultQueryParam.OtherCondition::getItemId, Collectors.toList()); List list = listBySalaryAcctRecordIdsAndSalaryItemIds(Collections.singletonList(queryParam.getSalaryAcctRecordId()), items); for (int i = 0; i < otherConditions.size(); i++) { @@ -646,21 +650,22 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe saveSalaryAcctResultLog(salaryAcctResultPOSOld, salaryAcctResultPOS); // 查询操作日志的targetName -// String targetName = getSalaryAcctRecordService(user).getLogTargetNameById(salaryAcctEmployeePO.getSalaryAcctRecordId()); - // 查询人员信息 -// DataCollectionEmployee simpleEmployee = getSalaryEmployeeService(user).getEmployeeById(salaryAcctEmployeePO.getEmployeeId()); - // 查询个税扣缴义务人 -// TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(salaryAcctEmployeePO.getTaxAgentId()); - // 记录日志 -// String operateDesc = simpleEmployee.getUsername() + "(" + Optional.ofNullable(taxAgentPO).map(TaxAgentPO::getName).orElse(StringUtils.EMPTY) + ")"; -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId(String.valueOf(salaryAcctEmployeePO.getSalaryAcctRecordId())); -// loggerContext.setTargetName(targetName); -// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(95783, "编辑薪资核算结果") + ": " + operateDesc); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(95783, "编辑薪资核算结果") + ": " + operateDesc); -// loggerContext.setNewValueList(Lists.newArrayList(salaryAcctResultPOS)); -// salaryAcctRecordLoggerTemplate.write(loggerContext); + String targetName = getSalaryAcctRecordService(user).getLogTargetNameById(salaryAcctEmployeePO.getSalaryAcctRecordId()); +// 查询人员信息 + DataCollectionEmployee simpleEmployee = getSalaryEmployeeService(user).getEmployeeById(salaryAcctEmployeePO.getEmployeeId()); +// 查询个税扣缴义务人 + TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(salaryAcctEmployeePO.getTaxAgentId()); +// 记录日志 + String operateDesc = simpleEmployee.getUsername() + "(" + Optional.ofNullable(taxAgentPO).map(TaxAgentPO::getName).orElse(StringUtils.EMPTY) + ")"; + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(salaryAcctEmployeePO.getSalaryAcctRecordId())); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(95783, "编辑薪资核算结果") + ": " + operateDesc); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(95783, "编辑薪资核算结果") + ": " + operateDesc); + loggerContext.setNewValueList(Lists.newArrayList(salaryAcctResultPOS)); + salaryAcctRecordLoggerTemplate.write(loggerContext); } /** @@ -856,14 +861,15 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe }.start(); // 记录日志 // 查询操作日志的targetName -// String targetName = getSalaryAcctRecordService(user).getLogTargetNameById(calculateParam.getSalaryAcctRecordId()); -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId(String.valueOf(calculateParam.getSalaryAcctRecordId())); -// loggerContext.setTargetName(targetName); -// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(95783, "薪资核算")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(95783, "薪资核算")); -// salaryAcctRecordLoggerTemplate.write(loggerContext); + String targetName = getSalaryAcctRecordService(user).getLogTargetNameById(calculateParam.getSalaryAcctRecordId()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(calculateParam.getSalaryAcctRecordId())); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(95783, "薪资核算")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(95783, "薪资核算")); + salaryAcctRecordLoggerTemplate.write(loggerContext); } catch (Exception e) { log.info("薪资核算出错:{}", e.getMessage(), e); // throw new SalaryRunTimeException(e); @@ -1191,7 +1197,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe batchSave(needInsertList); // 报表入库前先删除 - getSalaryAcctReportService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(param.getIdList(), Collections.singletonList(param.getSalaryItemId()) ); + getSalaryAcctReportService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(param.getIdList(), Collections.singletonList(param.getSalaryItemId())); getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); } From a78a10cad6209cd656346cdf0c8211e6fc40be9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 29 Jan 2024 15:12:12 +0800 Subject: [PATCH 13/64] =?UTF-8?q?=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/elog/config/ELogTableChecker.java | 2 +- src/com/engine/salary/elog/service/impl/LocalElogService.java | 2 +- src/com/engine/salary/elog/util/LoggerTemplate.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/elog/config/ELogTableChecker.java b/src/com/engine/salary/elog/config/ELogTableChecker.java index 272da15a7..741dea65c 100644 --- a/src/com/engine/salary/elog/config/ELogTableChecker.java +++ b/src/com/engine/salary/elog/config/ELogTableChecker.java @@ -2,8 +2,8 @@ package com.engine.salary.elog.config; import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.mapper.elog.ElogTableCheckerMapper; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; -import dm.jdbc.util.IdGenerator; public class ELogTableChecker { diff --git a/src/com/engine/salary/elog/service/impl/LocalElogService.java b/src/com/engine/salary/elog/service/impl/LocalElogService.java index 3900f4727..404bea1db 100644 --- a/src/com/engine/salary/elog/service/impl/LocalElogService.java +++ b/src/com/engine/salary/elog/service/impl/LocalElogService.java @@ -8,8 +8,8 @@ import com.engine.salary.elog.enums.ElogConsts; import com.engine.salary.elog.service.ILocalElogService; import com.engine.salary.elog.util.ElogUtils; import com.engine.salary.mapper.elog.LocalElogAopDaoMapper; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; -import dm.jdbc.util.IdGenerator; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/com/engine/salary/elog/util/LoggerTemplate.java b/src/com/engine/salary/elog/util/LoggerTemplate.java index a82021433..842f72783 100644 --- a/src/com/engine/salary/elog/util/LoggerTemplate.java +++ b/src/com/engine/salary/elog/util/LoggerTemplate.java @@ -10,7 +10,7 @@ import com.engine.salary.elog.async.LoggerMessageListener; import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.elog.entity.dto.LoggerDetailContext; import com.engine.salary.elog.entity.dto.TableChangeBean; -import dm.jdbc.util.IdGenerator; +import com.engine.salary.util.db.IdGenerator; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import org.apache.commons.lang3.ArrayUtils; From 3a0646df9cdf336ccda192d986d294fd3772bd38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 29 Jan 2024 16:21:17 +0800 Subject: [PATCH 14/64] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/elog/entity/dto/ElogBean.java | 10 +++++----- .../salary/elog/service/impl/LoggerTableService.java | 2 +- src/com/engine/salary/elog/util/ElogServiceUtils.java | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/com/engine/salary/elog/entity/dto/ElogBean.java b/src/com/engine/salary/elog/entity/dto/ElogBean.java index b79b0f66e..84a24cfd9 100644 --- a/src/com/engine/salary/elog/entity/dto/ElogBean.java +++ b/src/com/engine/salary/elog/entity/dto/ElogBean.java @@ -16,7 +16,7 @@ public class ElogBean implements Serializable { private static final long serialVersionUID = 5357552376749564256L; private String module; private String function; - private String pageNum; + private String current; private String pageSize; private String dataset; private String searchMap; @@ -42,12 +42,12 @@ public class ElogBean implements Serializable { this.function = function; } - public String getPageNum() { - return pageNum; + public String getCurrent() { + return current; } - public void setPageNum(String pageNum) { - this.pageNum = pageNum; + public void setCurrent(String current) { + this.current = current; } public String getPageSize() { diff --git a/src/com/engine/salary/elog/service/impl/LoggerTableService.java b/src/com/engine/salary/elog/service/impl/LoggerTableService.java index 217872e0c..a40f63488 100644 --- a/src/com/engine/salary/elog/service/impl/LoggerTableService.java +++ b/src/com/engine/salary/elog/service/impl/LoggerTableService.java @@ -91,7 +91,7 @@ public class LoggerTableService extends Service implements ILoggerTableService { String function = elogBean.getFunction(); String searchMap = elogBean.getSearchMap(); String pageSize = elogBean.getPageSize(); - String pageNum = elogBean.getPageNum(); + String pageNum = elogBean.getCurrent(); String downloadSize = elogBean.getDownloadSize(); List filterConditionDtos = elogBean.getFilterConditionDtos(); String transMethod = elogBean.getTransMethod(); diff --git a/src/com/engine/salary/elog/util/ElogServiceUtils.java b/src/com/engine/salary/elog/util/ElogServiceUtils.java index e06225b36..fb2ecafc6 100644 --- a/src/com/engine/salary/elog/util/ElogServiceUtils.java +++ b/src/com/engine/salary/elog/util/ElogServiceUtils.java @@ -40,7 +40,7 @@ public class ElogServiceUtils { ElogBean elogBean = new ElogBean(); String module = datas.getString("module"); String function = datas.getString("function"); - String pageNum = datas.getString("pageNum"); + String pageNum = datas.getString("current"); String pageSize = datas.getString("pageSize"); String searchMap = datas.getString("searchMap"); String transMethod = datas.getString("transMethod"); @@ -53,7 +53,7 @@ public class ElogServiceUtils { Map authParamsJson = JSONObject.parseObject(authParams); elogBean.setModule(module); elogBean.setFunction(function); - elogBean.setPageNum(pageNum); + elogBean.setCurrent(pageNum); elogBean.setPageSize(pageSize); elogBean.setSearchMap(searchMap); elogBean.setTransMethod(transMethod); From a8bfe83030cbdf174974c3fc6a6aa409455a3dd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 30 Jan 2024 09:58:13 +0800 Subject: [PATCH 15/64] =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/biz/AddUpDeductionBiz.java | 64 +------ .../engine/salary/biz/AddUpSituationBiz.java | 16 -- .../engine/salary/biz/OtherDeductionBiz.java | 16 -- .../salary/config/SalaryElogConfig.java | 170 +++++------------- .../impl/AddUpDeductionServiceImpl.java | 61 ++++++- .../impl/AddUpSituationServiceImpl.java | 120 +++++++++---- .../impl/OtherDeductionServiceImpl.java | 67 ++++++- .../impl/SalaryAcctEmployeeServiceImpl.java | 6 +- .../impl/SalaryAcctExcelServiceImpl.java | 6 +- .../impl/SalaryAcctRecordServiceImpl.java | 10 +- .../impl/SalaryAcctResultServiceImpl.java | 5 +- .../service/impl/SalaryItemServiceImpl.java | 10 +- .../impl/SalarySobAdjustRuleServiceImpl.java | 25 ++- .../impl/SalarySobCheckRuleServiceImpl.java | 64 +++---- .../impl/SalarySobExtRangeServiceImpl.java | 2 - .../impl/SalarySobItemServiceImpl.java | 25 +-- .../impl/SalarySobRangeServiceImpl.java | 30 ++-- .../impl/SysSalaryItemServiceImpl.java | 29 +-- .../engine/salary/util/SalaryLoggerUtil.java | 139 +++++++------- 19 files changed, 433 insertions(+), 432 deletions(-) diff --git a/src/com/engine/salary/biz/AddUpDeductionBiz.java b/src/com/engine/salary/biz/AddUpDeductionBiz.java index 8b9ffa0a4..ef512160b 100644 --- a/src/com/engine/salary/biz/AddUpDeductionBiz.java +++ b/src/com/engine/salary/biz/AddUpDeductionBiz.java @@ -12,8 +12,8 @@ import org.apache.ibatis.session.SqlSession; import weaver.conn.mybatis.MyBatisFactory; import weaver.general.BaseBean; -import java.util.*; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.List; public class AddUpDeductionBiz extends BaseBean { @@ -145,67 +145,7 @@ public class AddUpDeductionBiz extends BaseBean { } - /** - * 处理导入数据 - * - * @param pos - */ - public void handleImportData(List pos) { - if (CollectionUtils.isEmpty(pos)) { - return; - } - AddUpDeduction po = pos.get(0); - // 多条相同人的则以第一条为准,如果逆序排列(用于重复的则以最后一条为准)Collections.reverse(pos); - // 去重(通过记录的唯一条件(申报月份,人员id,个税扣缴义务人id)拼接) - List finalPos = pos.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getEmployeeId() + "-" + f.getTaxAgentId()))), ArrayList::new)); - // 查询已有数据 - List list = listSome(AddUpDeduction.builder().declareMonth(po.getDeclareMonth()).build()); - // 待修改的 本地已存在则更新【交集】 - List updateList = list.stream().map(m -> { - Optional optional = finalPos.stream().filter(p -> (p.getEmployeeId() + "-" + p.getTaxAgentId()).equals(m.getEmployeeId() + "-" + m.getTaxAgentId())).findFirst(); - AddUpDeduction temp = null; - if (optional.isPresent()) { - temp = optional.get(); - // 换成本地库的id - temp.setId(m.getId()); - } - return temp; - }).filter(Objects::nonNull).collect(Collectors.toList()); - // 待新增的 导入比本地多,则新增【差集(导入 - local)】 - List saveList = finalPos.stream().map(m -> { - Optional optional = list.stream().filter(p -> (p.getEmployeeId() + "-" + p.getTaxAgentId()).equals(m.getEmployeeId() + "-" + m.getTaxAgentId())).findFirst(); - AddUpDeduction temp = null; - if (!optional.isPresent()) { - temp = m; - } - return temp; - }).filter(Objects::nonNull).collect(Collectors.toList()); - // 修改 - if (CollectionUtils.isNotEmpty(updateList)) { - batchUpdate(updateList); - } - // 保存 - if (CollectionUtils.isNotEmpty(saveList)) { - batchSave(saveList); - } - // 记录操作日志 -// saveList.addAll(updateList); -// -// if (CollectionUtils.isNotEmpty(saveList)) { -// LoggerContext loggerContext = new LoggerContext(); -// loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), 100351, "导入累计专项附加扣除")); -// loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), 100351, "导入累计专项附加扣除")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), 100351, "导入累计专项附加扣除")); -// loggerContext.setNewValueList(saveList); -// loggerContext.setTenant_key(message.getTenantKey()); -// loggerContext.setOperator(message.getUserId().toString()); -// loggerContext.setOperatorName(message.getOpreator()); -// loggerContext.setClientIp(message.getClientIp()); -// addUpDeductionLoggerTemplate.write(loggerContext); -// } - } public void batchDeleteByIDS(List ids) { diff --git a/src/com/engine/salary/biz/AddUpSituationBiz.java b/src/com/engine/salary/biz/AddUpSituationBiz.java index e1fbdb901..b3d47b935 100644 --- a/src/com/engine/salary/biz/AddUpSituationBiz.java +++ b/src/com/engine/salary/biz/AddUpSituationBiz.java @@ -185,22 +185,6 @@ public class AddUpSituationBiz extends BaseBean { if (CollectionUtils.isNotEmpty(saveList)) { batchSave(saveList); } - // 记录操作日志 -// saveList.addAll(updateList); -// -// if (CollectionUtils.isNotEmpty(saveList)) { -// LoggerContext loggerContext = new LoggerContext(); -// loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), 100351, "导入累计专项附加扣除")); -// loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), 100351, "导入累计专项附加扣除")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), 100351, "导入累计专项附加扣除")); -// loggerContext.setNewValueList(saveList); -// loggerContext.setTenant_key(message.getTenantKey()); -// loggerContext.setOperator(message.getUserId().toString()); -// loggerContext.setOperatorName(message.getOpreator()); -// loggerContext.setClientIp(message.getClientIp()); -// AddUpSituationLoggerTemplate.write(loggerContext); -// } } diff --git a/src/com/engine/salary/biz/OtherDeductionBiz.java b/src/com/engine/salary/biz/OtherDeductionBiz.java index 1b107764c..5a843f8ee 100644 --- a/src/com/engine/salary/biz/OtherDeductionBiz.java +++ b/src/com/engine/salary/biz/OtherDeductionBiz.java @@ -169,22 +169,6 @@ public class OtherDeductionBiz extends BaseBean { if (CollectionUtils.isNotEmpty(saveList)) { batchSave(saveList); } - // 记录操作日志 -// saveList.addAll(updateList); -// -// if (CollectionUtils.isNotEmpty(saveList)) { -// LoggerContext loggerContext = new LoggerContext(); -// loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), 100351, "导入累计专项附加扣除")); -// loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), 100351, "导入累计专项附加扣除")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), 100351, "导入累计专项附加扣除")); -// loggerContext.setNewValueList(saveList); -// loggerContext.setTenant_key(message.getTenantKey()); -// loggerContext.setOperator(message.getUserId().toString()); -// loggerContext.setOperatorName(message.getOpreator()); -// loggerContext.setClientIp(message.getClientIp()); -// addUpDeductionLoggerTemplate.write(loggerContext); -// } } diff --git a/src/com/engine/salary/config/SalaryElogConfig.java b/src/com/engine/salary/config/SalaryElogConfig.java index 7156eeff4..9f72846ea 100644 --- a/src/com/engine/salary/config/SalaryElogConfig.java +++ b/src/com/engine/salary/config/SalaryElogConfig.java @@ -18,289 +18,219 @@ public class SalaryElogConfig { * * @return */ - public static LoggerTemplate taxRateLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "taxrate"); - } + public final static LoggerTemplate taxRateLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "taxrate"); /** * 薪资项目 * * @return */ - public static LoggerTemplate salaryItemLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "salaryitem"); - } + public static LoggerTemplate salaryItemLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "salaryitem"); /** * 个税扣缴义务人 * * @return */ - public static LoggerTemplate taxAgentLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "taxagent"); - } + public static LoggerTemplate taxAgentLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "taxagent"); - public static LoggerTemplate siCategoryLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "siCategory"); - } + public static LoggerTemplate siCategoryLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "siCategory"); - public static LoggerTemplate siSchemeLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "siScheme"); - } + public static LoggerTemplate siSchemeLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "siScheme"); - public static LoggerTemplate totalSchemeLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "totalScheme"); - } + public static LoggerTemplate totalSchemeLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "totalScheme"); /** * 累计情况 * * @return */ - public static LoggerTemplate addUpSituationLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "addupsituation"); - } + public static LoggerTemplate addUpSituationLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "addupsituation"); /** * 累计专项附加扣除 * * @return */ - public static LoggerTemplate addUpDeductionLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "addupdeduction"); - } + public static LoggerTemplate addUpDeductionLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "addupdeduction"); /** * 其他免税扣除 * * @return */ - public static LoggerTemplate otherDeductionLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "otherdeduction"); - } + public static LoggerTemplate otherDeductionLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "otherdeduction"); /** * 减税 * * @return */ - public static LoggerTemplate derateDeductionLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "deratededuction"); - } + public static LoggerTemplate derateDeductionLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "deratededuction"); /** * 税延养老保险 * * @return */ - public static LoggerTemplate endowmentInsuranceLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "endowmentinsurance"); - } + public static LoggerTemplate endowmentInsuranceLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "endowmentinsurance"); /** * 税延养老保险 * * @return */ - public static LoggerTemplate freeIncomeLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "freeincome"); - } + public static LoggerTemplate freeIncomeLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "freeincome"); /** * 捐赠免税 * * @return */ - public static LoggerTemplate grantDonationLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "grantdonation"); - } + public static LoggerTemplate grantDonationLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "grantdonation"); /** * 捐赠免税 * * @return */ - public static LoggerTemplate healthInsuranceLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "healthinsurance"); - } + public static LoggerTemplate healthInsuranceLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "healthinsurance"); /** * 其他免税扣除 * * @return */ - public static LoggerTemplate otherDerateDeductionLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "otherderatededuction"); - } + public static LoggerTemplate otherDerateDeductionLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "otherderatededuction"); /** * 考勤引用 * * @return */ - public static LoggerTemplate attendQuoteLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "attendquote"); - } + public static LoggerTemplate attendQuoteLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "attendquote"); /** * 考勤引用字段管理 * * @return */ - public static LoggerTemplate attendQuoteFieldLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "attendfield"); - } + public static LoggerTemplate attendQuoteFieldLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "attendfield"); /** * 考勤引用字段设置 * * @return */ - public static LoggerTemplate attendQuoteFieldSettingLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "attendfieldset"); - } + public static LoggerTemplate attendQuoteFieldSettingLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "attendfieldset"); /** * 薪资账套 * * @return */ - public static LoggerTemplate salarySobLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "salarysob"); - } + public static LoggerTemplate salarySobLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "salarysob"); /** * 薪资核算 * * @return */ - public static LoggerTemplate salaryAcctRecordLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "acctrecord"); - } - + public static LoggerTemplate salaryAcctRecordLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "acctrecord"); /** * 个税申报表 * * @return */ - public static LoggerTemplate taxDeclarationLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "taxdecla"); - } + public static LoggerTemplate taxDeclarationLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "taxdecla"); /** * 福利档案 * * @return */ - public static LoggerTemplate siArchivesLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "siarchives"); - } + public static LoggerTemplate siArchivesLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "siarchives"); /** * 社保规则 */ - public static LoggerTemplate archiveRuleLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "archiverule"); - } + public static LoggerTemplate archiveRuleLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "archiverule"); /** * 代缴机构 * * @return */ - public static LoggerTemplate paymentAgencyLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "paymentagency"); - } + public static LoggerTemplate paymentAgencyLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "paymentagency"); /** * 福利核算 * * @return */ - public static LoggerTemplate siAccountLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "siaccount"); - } + public static LoggerTemplate siAccountLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "siaccount"); /** * 工资单模板 * * @return */ - public static LoggerTemplate salaryTemplateLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "salarytemplate"); - } + public static LoggerTemplate salaryTemplateLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "salarytemplate"); /** * 工资单发放 * * @return */ - public static LoggerTemplate salarySendLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "salarysend"); - } + public static LoggerTemplate salarySendLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "salarysend"); /** * 外部人员 * * @return */ - public static LoggerTemplate extEmployeeLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "extemployee"); - } + public static LoggerTemplate extEmployeeLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "extemployee"); /** * 薪资档案 * * @return */ - public static LoggerTemplate salaryArchiveLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "salaryarchive"); - } + public static LoggerTemplate salaryArchiveLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "salaryarchive"); /** * 薪资档案-字段 * * @return */ - public static LoggerTemplate salaryArchiveFieldLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "salarcfield"); - } - + public static LoggerTemplate salaryArchiveFieldLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "salarcfield"); /** * 薪资档案-薪资项目调整 * * @return */ - public static LoggerTemplate salaryArchiveItemAdjustLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "salarcitemadj"); - } + public static LoggerTemplate salaryArchiveItemAdjustLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "salarcitemadj"); /** * 薪资档案-批量调薪 * * @return */ - public static LoggerTemplate salaryArchiveBatchAdjustLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "salarcbatadj"); - } + public static LoggerTemplate salaryArchiveBatchAdjustLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "salarcbatadj"); /** * 自定义业务数据设置 * * @return */ - public static LoggerTemplate customDataSetLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "customdataset"); - } + public static LoggerTemplate customDataSetLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "customdataset"); /** * 自定义业务数据 * * @return */ - public static LoggerTemplate customDataLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "customdata"); - } + public static LoggerTemplate customDataLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "customdata"); /** @@ -308,63 +238,49 @@ public class SalaryElogConfig { * * @return */ - public static LoggerTemplate employeeDeclareLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "empdeclare"); - } + public static LoggerTemplate employeeDeclareLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "empdeclare"); /** * 单位扣款账号 * * @return */ - public static LoggerTemplate withholdAccountLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "whaccount"); - } + public static LoggerTemplate withholdAccountLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "whaccount"); /** * 银行报盘 * * @return */ - public static LoggerTemplate bankOfferLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "bankoffer"); - } + public static LoggerTemplate bankOfferLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "bankoffer"); /** * 银行报盘模板 * * @return */ - public static LoggerTemplate bankOfferTemplateLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "botemplate"); - } + public static LoggerTemplate bankOfferTemplateLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "botemplate"); /** * 薪酬体系标准(岗薪制) * * @return */ - public static LoggerTemplate postSalaryLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "postsalary"); - } + public static LoggerTemplate postSalaryLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "postsalary"); /** * 银行报盘模板 * * @return */ - public static LoggerTemplate taxFreeDetailLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "taxfreedetail"); - } + public static LoggerTemplate taxFreeDetailLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "taxfreedetail"); /** * 最优年终奖计税方案 * * @return */ - public static LoggerTemplate annualBonusPlanLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "annualplan"); - } + public static LoggerTemplate annualBonusPlanLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "annualplan"); /** * 最优年终奖计税方案-累计情况 @@ -372,7 +288,5 @@ public class SalaryElogConfig { * * @return */ - public static LoggerTemplate annualBonusLoggerTemplate() { - return LoggerTemplateBuilder.build("hrsa", "annualbonus"); - } + public static LoggerTemplate annualBonusLoggerTemplate = LoggerTemplateBuilder.build("hrsa", "annualbonus"); } diff --git a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java index bb0242cf4..ee208bf2d 100644 --- a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java @@ -11,6 +11,8 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.AddUpDeductionBiz; import com.engine.salary.common.LocalDateRange; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.AddUpDeduction; import com.engine.salary.entity.datacollection.DataCollectionEmployee; @@ -27,6 +29,7 @@ import com.engine.salary.entity.taxagent.bo.TaxAgentBO; import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeDTO; import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -385,7 +388,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction } } //入库 - addUpDeductionBiz.handleImportData(eligibleData); + handleImportData(eligibleData); apidatas.put("successCount", successCount); apidatas.put("errorCount", errorCount); apidatas.put("errorData", errorData); @@ -396,6 +399,60 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction return apidatas; } + public void handleImportData(List pos) { + if (CollectionUtils.isEmpty(pos)) { + return; + } + AddUpDeductionBiz addUpDeductionBiz = new AddUpDeductionBiz(); + AddUpDeduction po = pos.get(0); + // 多条相同人的则以第一条为准,如果逆序排列(用于重复的则以最后一条为准)Collections.reverse(pos); + // 去重(通过记录的唯一条件(申报月份,人员id,个税扣缴义务人id)拼接) + List finalPos = pos.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getEmployeeId() + "-" + f.getTaxAgentId()))), ArrayList::new)); + // 查询已有数据 + List list = addUpDeductionBiz.listSome(AddUpDeduction.builder().declareMonth(po.getDeclareMonth()).build()); + // 待修改的 本地已存在则更新【交集】 + List updateList = list.stream().map(m -> { + Optional optional = finalPos.stream().filter(p -> (p.getEmployeeId() + "-" + p.getTaxAgentId()).equals(m.getEmployeeId() + "-" + m.getTaxAgentId())).findFirst(); + AddUpDeduction temp = null; + if (optional.isPresent()) { + temp = optional.get(); + // 换成本地库的id + temp.setId(m.getId()); + } + return temp; + }).filter(Objects::nonNull).collect(Collectors.toList()); + // 待新增的 导入比本地多,则新增【差集(导入 - local)】 + List saveList = finalPos.stream().map(m -> { + Optional optional = list.stream().filter(p -> (p.getEmployeeId() + "-" + p.getTaxAgentId()).equals(m.getEmployeeId() + "-" + m.getTaxAgentId())).findFirst(); + AddUpDeduction temp = null; + if (!optional.isPresent()) { + temp = m; + } + return temp; + }).filter(Objects::nonNull).collect(Collectors.toList()); + + // 修改 + if (CollectionUtils.isNotEmpty(updateList)) { + addUpDeductionBiz.batchUpdate(updateList); + } + // 保存 + if (CollectionUtils.isNotEmpty(saveList)) { + addUpDeductionBiz.batchSave(saveList); + } + // 记录操作日志 + saveList.addAll(updateList); + + if (CollectionUtils.isNotEmpty(saveList)) { + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(100351, "新增累计专项附加扣除")); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(100351, "新增累计专项附加扣除")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(100351, "新增累计专项附加扣除")); + loggerContext.setNewValueList(saveList); + SalaryElogConfig.addUpDeductionLoggerTemplate.write(loggerContext); + } + } @Override public void editAddUpDeduction(AddUpDeductionRecordParam addUpDeduction) { @@ -529,7 +586,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction addUpDeduction.setAddUpInfantCare(Util.null2String(addUpDeductionRecordParam.getAddUpInfantCare())); insertData.add(addUpDeduction); //入库 - addUpDeductionBiz.handleImportData(insertData); + handleImportData(insertData); } @Override diff --git a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java index e4965928c..ecc029dbb 100644 --- a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java @@ -8,6 +8,8 @@ import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.AddUpSituationBiz; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.AddUpSituation; import com.engine.salary.entity.datacollection.DataCollectionEmployee; @@ -20,6 +22,7 @@ import com.engine.salary.entity.datacollection.param.AddUpSituationQueryParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.datacollection.AddUpSituationMapper; @@ -274,7 +277,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation // excel标题 final List title = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "入职日期", "累计收入额", "累计减除费用", "累计社保个人合计", "累计公积金个人合计", "累计子女教育", "累计继续教育", "累计住房贷款利息", "累计住房租金", "累计赡养老人", - "累计大病医疗", "累计企业(职业)年金及其他福利", "累计其他扣除", "累计免税收入", "累计准予扣除的捐赠额", "累计减免税额", "累计已预扣预缴税额", "累计婴幼儿照护","累计个人养老金"); + "累计大病医疗", "累计企业(职业)年金及其他福利", "累计其他扣除", "累计免税收入", "累计准予扣除的捐赠额", "累计减免税额", "累计已预扣预缴税额", "累计婴幼儿照护", "累计个人养老金"); //排序配置 OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); @@ -340,7 +343,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation //excel标题 List title = Arrays.asList("姓名", "税款所属期", "个税扣缴义务人", "部门", "手机号", "工号", "累计收入额", "累计减除费用", "累计社保个人合计", "累计公积金个人合计", "累计子女教育", "累计继续教育", "累计住房贷款利息", "累计住房租金", "累计赡养老人", "累计大病医疗", "累计企业(职业)年金及其他福利", - "累计其他扣除", "累计免税收入", "累计准予扣除的捐赠额", "累计减免税额", "累计已预扣预缴税额", "累计婴幼儿照护","累计个人养老金"); + "累计其他扣除", "累计免税收入", "累计准予扣除的捐赠额", "累计减免税额", "累计已预扣预缴税额", "累计婴幼儿照护", "累计个人养老金"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM"); //查询详细信息 @@ -609,7 +612,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation // 获取已经核算的数据(获取税款所属期下一个月的数据) YearMonth nextTaxYearMonth = SalaryDateUtil.String2YearMonth(taxYearMonthStr); String nextTaxYearMonthStr = taxYearMonthStr; - if( !Objects.equals(nextTaxYearMonth.getMonthValue(),12) ){ + if (!Objects.equals(nextTaxYearMonth.getMonthValue(), 12)) { nextTaxYearMonth = nextTaxYearMonth.plusMonths(1); nextTaxYearMonthStr = nextTaxYearMonth.format(SalaryDateUtil.MONTH_FORMATTER); } @@ -693,7 +696,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation errorMessageMap.put("message", rowIndex + "员工信息不存在或者存在多个员工"); errorData.add(errorMessageMap); errorSum += 1; - }else { + } else { Long employeeId = CollectionUtils.isNotEmpty(employeeSameIds) && employeeSameIds.size() == 1 ? employeeSameIds.get(0).getEmployeeId() : null; po.setEmployeeId(employeeId); } @@ -744,7 +747,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation // } // 判断是否有核算过 - if (CollectionUtils.isNotEmpty(salaryAcctEmployees) && !Objects.equals(taxYearMonthStr.split("-")[1], "12") ) { + if (CollectionUtils.isNotEmpty(salaryAcctEmployees) && !Objects.equals(taxYearMonthStr.split("-")[1], "12")) { Optional optionalAcctEmp = salaryAcctEmployees.stream().filter(f -> f.getEmployeeId().equals(po.getEmployeeId()) && f.getTaxAgentId().equals(po.getTaxAgentId())).findFirst(); boolean isExist = list.stream().anyMatch(f -> f.getEmployeeId().equals(po.getEmployeeId()) && f.getTaxAgentId().equals(po.getTaxAgentId())); if (optionalAcctEmp.isPresent() && isExist) { @@ -815,7 +818,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation } //入库 - biz.handleImportData(eligibleData); + handleImportData(eligibleData); apidatas.put("successCount", successCount); apidatas.put("errorCount", errorCount); @@ -827,6 +830,61 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation return apidatas; } + public void handleImportData(List pos) { + if (CollectionUtils.isEmpty(pos)) { + return; + } + AddUpSituationBiz biz = new AddUpSituationBiz(); + AddUpSituation po = pos.get(0); + // 多条相同人的则以第一条为准,如果逆序排列(用于重复的则以最后一条为准)Collections.reverse(pos); + // 去重(通过记录的唯一条件(申报月份,人员id,个税扣缴义务人id)拼接) + List finalPos = pos.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getEmployeeId() + "-" + f.getTaxAgentId()))), ArrayList::new)); + // 查询已有数据 + List list = biz.listSome(AddUpSituation.builder().taxYearMonth(po.getTaxYearMonth()).build()); + // 待修改的 本地已存在则更新【交集】 + List updateList = list.stream().map(m -> { + Optional optional = finalPos.stream().filter(p -> (p.getEmployeeId() + "-" + p.getTaxAgentId()).equals(m.getEmployeeId() + "-" + m.getTaxAgentId())).findFirst(); + AddUpSituation temp = null; + if (optional.isPresent()) { + temp = optional.get(); + // 换成本地库的id + temp.setId(m.getId()); + } + return temp; + }).filter(Objects::nonNull).collect(Collectors.toList()); + // 待新增的 导入比本地多,则新增【差集(导入 - local)】 + List saveList = finalPos.stream().map(m -> { + Optional optional = list.stream().filter(p -> (p.getEmployeeId() + "-" + p.getTaxAgentId()).equals(m.getEmployeeId() + "-" + m.getTaxAgentId())).findFirst(); + AddUpSituation temp = null; + if (!optional.isPresent()) { + temp = m; + } + return temp; + }).filter(Objects::nonNull).collect(Collectors.toList()); + + // 修改 + if (CollectionUtils.isNotEmpty(updateList)) { + biz.batchUpdate(updateList); + } + // 保存 + if (CollectionUtils.isNotEmpty(saveList)) { + batchSave(saveList); + } +// 记录操作日志 + saveList.addAll(updateList); + + if (CollectionUtils.isNotEmpty(saveList)) { + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(100351, "新增累计专项附加扣除")); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(100351, "新增累计专项附加扣除")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(100351, "新增累计专项附加扣除")); + loggerContext.setNewValueList(saveList); + SalaryElogConfig.addUpSituationLoggerTemplate.write(loggerContext); + } + } + private void checkImportParam(AddUpSituationImportParam importParam) { @@ -846,8 +904,8 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation } /** - * @description 编辑数据 * @return void + * @description 编辑数据 * @author Harryxzy * @date 2022/10/27 21:32 */ @@ -860,12 +918,12 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation // 获取所有个税扣缴义务人 Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); AddUpSituation byId = biz.getById(addUpSituationParam.getId()); - if(byId == null){ + if (byId == null) { throw new SalaryRunTimeException("该数据不存在!"); } Long taxAgentId = byId.getTaxAgentId(); - boolean canEdit = taxAgentList.stream().anyMatch(t -> Objects.equals(t.getTaxAgentId() , taxAgentId)); - if(!canEdit){ + boolean canEdit = taxAgentList.stream().anyMatch(t -> Objects.equals(t.getTaxAgentId(), taxAgentId)); + if (!canEdit) { //没有编辑权限 throw new SalaryRunTimeException("该个税扣缴义务人无权限编辑此数据!"); } @@ -873,14 +931,14 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation // 获取已经核算的数据(获取税款所属期下一个月的数据) YearMonth nextTaxYearMonth = SalaryDateUtil.String2YearMonth(taxYearMonthStr); String nextTaxYearMonthStr = taxYearMonthStr; - if( !Objects.equals(nextTaxYearMonth.getMonthValue(),12) ){ + if (!Objects.equals(nextTaxYearMonth.getMonthValue(), 12)) { nextTaxYearMonth = nextTaxYearMonth.plusMonths(1); nextTaxYearMonthStr = nextTaxYearMonth.format(SalaryDateUtil.MONTH_FORMATTER); } List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeDataByTaxYearMonth(nextTaxYearMonthStr); // 判断是否有核算过 - if (CollectionUtils.isNotEmpty(salaryAcctEmployees) && !Objects.equals(taxYearMonthStr.split("-")[1], "12")) { + if (CollectionUtils.isNotEmpty(salaryAcctEmployees) && !Objects.equals(taxYearMonthStr.split("-")[1], "12")) { Optional optionalAcctEmp = salaryAcctEmployees.stream().filter(f -> f.getEmployeeId().equals(addUpSituationParam.getEmployeeId()) && f.getTaxAgentId().equals(addUpSituationParam.getTaxAgentId())).findFirst(); if (optionalAcctEmp.isPresent()) { throw new SalaryRunTimeException("该年月这条数据已经核算过,不可进行编辑!"); @@ -903,8 +961,8 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation } /** - * @description 新建数据 * @return void + * @description 新建数据 * @author Harryxzy * @date 2022/10/27 22:04 */ @@ -947,8 +1005,8 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - boolean employeeSameId = employees.stream().anyMatch(e -> Objects.equals(e.getEmployeeId() , addUpSituationParam.getEmployeeId())); - if(!employeeSameId){ + boolean employeeSameId = employees.stream().anyMatch(e -> Objects.equals(e.getEmployeeId(), addUpSituationParam.getEmployeeId())); + if (!employeeSameId) { throw new SalaryRunTimeException("员工信息不存在"); } po.setEmployeeId(addUpSituationParam.getEmployeeId()); @@ -967,7 +1025,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation } } - // fixme 分权判断,若员工离职后,不在扣缴义务人范围内,会有异常 + // fixme 分权判断,若员工离职后,不在扣缴义务人范围内,会有异常 // if (openDevolution) { // Optional optionalTaxAgentEmp = taxAgentEmployees.stream().filter(f -> f.getEmployeeId().equals(po.getEmployeeId())).findFirst(); // if (!optionalTaxAgentEmp.isPresent()) { @@ -1036,7 +1094,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation insertList.add(po); //入库 - biz.handleImportData(insertList); + handleImportData(insertList); } @Override @@ -1055,15 +1113,15 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(format); // 判断是否有核算过 List deleteList = new ArrayList<>(); - for(int i=0; i first = taxAgentList.stream().filter(m -> Objects.equals(m.getTaxAgentId() , byId.getTaxAgentId())).findFirst(); - if(!first.isPresent()){ + Optional first = taxAgentList.stream().filter(m -> Objects.equals(m.getTaxAgentId(), byId.getTaxAgentId())).findFirst(); + if (!first.isPresent()) { throw new SalaryRunTimeException("个税扣缴义务人不存在或不在权限范围内"); } // 判断用户是否存在 @@ -1089,23 +1147,23 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation AddUpSituationBiz biz = new AddUpSituationBiz(); Date declareMonthDate = new Date(); try { - declareMonthDate = (sdf.parse(declareMonthStr+"-01")); - }catch (Exception e){ + declareMonthDate = (sdf.parse(declareMonthStr + "-01")); + } catch (Exception e) { throw new SalaryRunTimeException("日期异常"); } AddUpSituation queryParam = null; - if(deleteParam.getTaxAgentId() != null && !deleteParam.getTaxAgentId().isEmpty()){ + if (deleteParam.getTaxAgentId() != null && !deleteParam.getTaxAgentId().isEmpty()) { // 设置了个税扣缴义务人 Long taxAgentId = SalaryEntityUtil.string2Long(deleteParam.getTaxAgentId()); - boolean canDelete = taxAgentIds.stream().anyMatch(t -> Objects.equals(t , taxAgentId)); - if(!canDelete){ + boolean canDelete = taxAgentIds.stream().anyMatch(t -> Objects.equals(t, taxAgentId)); + if (!canDelete) { throw new SalaryRunTimeException("个税扣缴义务人不存在或不在权限范围内!"); } ArrayList tai = new ArrayList<>(); tai.add(taxAgentId); - queryParam = AddUpSituation.builder().taxYearMonth(declareMonthDate).taxAgentIds(tai).build(); - }else { + queryParam = AddUpSituation.builder().taxYearMonth(declareMonthDate).taxAgentIds(tai).build(); + } else { queryParam = AddUpSituation.builder().taxYearMonth(declareMonthDate).taxAgentIds(taxAgentIds).build(); } @@ -1115,7 +1173,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation String format = salaryMonthDate.plusMonths(1).atStartOfDay().format(DateTimeFormatter.ofPattern("yyyy-MM")); // 获取已经核算的数据 List employees = getAddUpDeductionService(user).getAccountedEmployeeData(format); - for(AddUpSituation item : list){ + for (AddUpSituation item : list) { if (CollectionUtils.isNotEmpty(employees)) { Optional optionalAcctEmp = employees.stream().filter(f -> f.getEmployeeId().equals(item.getEmployeeId()) && f.getTaxAgentId().equals(item.getTaxAgentId())).findFirst(); if (optionalAcctEmp.isPresent()) { @@ -1137,11 +1195,11 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation ids.add(addUpSituationParam.getId()); AddUpSituationQueryParam build = AddUpSituationQueryParam.builder().ids(ids).build(); List list = biz.recordList(build); - if(list == null || list.size()==0){ + if (list == null || list.size() == 0) { throw new SalaryRunTimeException("该数据不存在!"); } String taxAgentName = list.get(0).getTaxAgentName(); - if(!taxAgentNames.contains(taxAgentName)){ + if (!taxAgentNames.contains(taxAgentName)) { throw new SalaryRunTimeException("您无权查看该数据!"); } return list.get(0); diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index dbe2e113b..e8cd2de13 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -5,7 +5,9 @@ import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.OtherDeductionBiz; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.dto.OtherDeductionListDTO; @@ -15,6 +17,7 @@ import com.engine.salary.entity.datacollection.po.OtherDeductionPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.datacollection.OtherDeductionMapper; @@ -370,6 +373,66 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction return apidatas; } + /** + * 处理导入数据 + * + * @param pos + */ + public void handleImportData(List pos) { + if (CollectionUtils.isEmpty(pos)) { + return; + } + OtherDeductionBiz otherDeductionBiz = new OtherDeductionBiz(); + OtherDeductionPO po = pos.get(0); + // 多条相同人的则以第一条为准,如果逆序排列(用于重复的则以最后一条为准)Collections.reverse(pos); + // 去重(通过记录的唯一条件(申报月份,人员id,个税扣缴义务人id)拼接) + List finalPos = pos.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getEmployeeId() + "-" + f.getTaxAgentId()))), ArrayList::new)); + // 查询已有数据 + List list = otherDeductionBiz.listSome(OtherDeductionPO.builder().declareMonth(po.getDeclareMonth()).build()); + // 待修改的 本地已存在则更新【交集】 + List updateList = list.stream().map(m -> { + Optional optional = finalPos.stream().filter(p -> (p.getEmployeeId() + "-" + p.getTaxAgentId()).equals(m.getEmployeeId() + "-" + m.getTaxAgentId())).findFirst(); + OtherDeductionPO temp = null; + if (optional.isPresent()) { + temp = optional.get(); + // 换成本地库的id + temp.setId(m.getId()); + } + return temp; + }).filter(Objects::nonNull).collect(Collectors.toList()); + // 待新增的 导入比本地多,则新增【差集(导入 - local)】 + List saveList = finalPos.stream().map(m -> { + Optional optional = list.stream().filter(p -> (p.getEmployeeId() + "-" + p.getTaxAgentId()).equals(m.getEmployeeId() + "-" + m.getTaxAgentId())).findFirst(); + OtherDeductionPO temp = null; + if (!optional.isPresent()) { + temp = m; + } + return temp; + }).filter(Objects::nonNull).collect(Collectors.toList()); + + // 修改 + if (CollectionUtils.isNotEmpty(updateList)) { + otherDeductionBiz.batchUpdate(updateList); + } + // 保存 + if (CollectionUtils.isNotEmpty(saveList)) { + otherDeductionBiz.batchSave(saveList); + } + // 记录操作日志 + saveList.addAll(updateList); + + if (CollectionUtils.isNotEmpty(saveList)) { + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel( 100351, "新增累计专项附加扣除")); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 100351, "新增计专项附加扣除")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 100351, "新增累计专项附加扣除")); + loggerContext.setNewValueList(saveList); + SalaryElogConfig.addUpDeductionLoggerTemplate.write(loggerContext); + } + } + private void checkImportParam(OtherDeductionImportParam importParam) { //excel文件id String imageId = Util.null2String(importParam.getImageId()); @@ -513,7 +576,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction */ private List> getExcelRowDetailList(OtherDeductionQueryParam param) { //excel标题 - List title = Arrays.asList("姓名", "申报月份", "个税扣缴义务人", "部门", "手机号", "工号", "商业健康保险", "税延养老保险", "其他", "准予扣除的捐赠额","个人养老金"); + List title = Arrays.asList("姓名", "申报月份", "个税扣缴义务人", "部门", "手机号", "工号", "商业健康保险", "税延养老保险", "其他", "准予扣除的捐赠额", "个人养老金"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM"); //查询详细信息 @@ -676,7 +739,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } insertData.add(po); //入库 - OtherDeductionBiz.handleImportData(insertData); + handleImportData(insertData); } @Override diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 36cf1186f..b6ca36e33 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -7,7 +7,6 @@ import com.engine.core.impl.Service; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.elog.entity.dto.LoggerContext; -import com.engine.salary.elog.util.LoggerTemplate; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeCountDTO; @@ -55,7 +54,6 @@ import java.util.stream.Collectors; **/ @Slf4j public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcctEmployeeService { - private final LoggerTemplate salaryAcctRecordLoggerTemplate = SalaryElogConfig.salaryAcctRecordLoggerTemplate(); private SalaryAcctEmployeeMapper getSalaryAcctEmployeeMapper() { return MapperProxyFactory.getProxy(SalaryAcctEmployeeMapper.class); @@ -403,7 +401,7 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98837, "添加薪资核算人员")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98837, "添加薪资核算人员") + ":" + targetName); loggerContext.setNewValueList(salaryAcctEmployeePOS); - salaryAcctRecordLoggerTemplate.write(loggerContext); + SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); } @Override @@ -470,7 +468,7 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98835, "删除薪资核算人员")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98835, "删除薪资核算人员") + ":" + targetName); loggerContext.setOldValueList(salaryAcctEmployeePOS); - salaryAcctRecordLoggerTemplate.write(loggerContext); + SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); } @Override diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index a4c1a8512..3ce380565 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -9,7 +9,6 @@ import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.constant.SalaryItemConstant; import com.engine.salary.elog.entity.dto.LoggerContext; -import com.engine.salary.elog.util.LoggerTemplate; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.report.po.SalaryAcctResultReportPO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO; @@ -46,6 +45,7 @@ import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.excel.ExcelParseHelper; import com.engine.salary.util.excel.ExcelSupport; import com.engine.salary.util.excel.ExcelUtilPlus; @@ -55,7 +55,6 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.wbi.util.Util; -import com.engine.salary.util.db.IdGenerator; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; @@ -87,7 +86,6 @@ import static com.engine.salary.util.excel.ExcelSupport.EXCEL_TYPE_XLSX; **/ @Slf4j public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExcelService { - private final LoggerTemplate salaryAcctRecordLoggerTemplate = SalaryElogConfig.salaryAcctRecordLoggerTemplate(); private SalaryAcctRecordService getSalaryAcctRecordService(User user) { return (SalaryAcctRecordService) ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); @@ -259,7 +257,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98837, "导出环比增加人员")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98837, "导出环比增加人员") + ":" + targetName); - salaryAcctRecordLoggerTemplate.write(loggerContext); + SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); return ExcelUtilPlus.genWorkbookV2(rows, sheetName); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index 1d3e300ef..c13e6ca71 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -6,7 +6,6 @@ import com.engine.core.impl.Service; import com.engine.salary.common.LocalDateRange; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.elog.entity.dto.LoggerContext; -import com.engine.salary.elog.util.LoggerTemplate; import com.engine.salary.entity.salaryBill.po.SalarySendPO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctRecordBO; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; @@ -52,7 +51,6 @@ import java.util.stream.Collectors; * @version 1.0 **/ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRecordService { - private final LoggerTemplate salaryAcctRecordLoggerTemplate = SalaryElogConfig.salaryAcctRecordLoggerTemplate(); private SalaryAcctRecordMapper getSalaryAcctRecordMapper() { return MapperProxyFactory.getProxy(SalaryAcctRecordMapper.class); @@ -309,7 +307,7 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98768, "新建薪资核算")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98768, "新建薪资核算") + ": " + targetName); loggerContext.setNewValues(salaryAcctRecordPO); - salaryAcctRecordLoggerTemplate.write(loggerContext); + SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); // 返回薪资核算记录id return salaryAcctRecordPO.getId(); } @@ -543,7 +541,7 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98821, "删除薪资核算")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98821, "删除薪资核算") + ":" + targetName); loggerContext.setNewValues(salaryAcctRecordPO); - salaryAcctRecordLoggerTemplate.write(loggerContext); + SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); }); } @@ -585,7 +583,7 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98817, "薪资核算归档")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98817, "薪资核算归档") + ": " + targetName); loggerContext.setNewValues(salaryAcctRecordPO); - salaryAcctRecordLoggerTemplate.write(loggerContext); + SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); } @Override @@ -635,7 +633,7 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98820, "重新核算")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98820, "重新核算") + ": " + targetName); loggerContext.setNewValues(salaryAcctRecordPO); - salaryAcctRecordLoggerTemplate.write(loggerContext); + SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 2f5bd2403..d0527642e 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -86,7 +86,6 @@ import java.util.stream.Collectors; **/ @Slf4j public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctResultService { - private final LoggerTemplate salaryAcctRecordLoggerTemplate = SalaryElogConfig.salaryAcctRecordLoggerTemplate(); private EncryptUtil encryptUtil = new EncryptUtil(); private SalaryAcctResultMapper getSalaryAcctResultMapper() { @@ -665,7 +664,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(95783, "编辑薪资核算结果") + ": " + operateDesc); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(95783, "编辑薪资核算结果") + ": " + operateDesc); loggerContext.setNewValueList(Lists.newArrayList(salaryAcctResultPOS)); - salaryAcctRecordLoggerTemplate.write(loggerContext); + SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); } /** @@ -869,7 +868,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(95783, "薪资核算")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(95783, "薪资核算")); - salaryAcctRecordLoggerTemplate.write(loggerContext); + SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); } catch (Exception e) { log.info("薪资核算出错:{}", e.getMessage(), e); // throw new SalaryRunTimeException(e); diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index db4639b2c..c43393c10 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -7,7 +7,6 @@ import com.engine.salary.biz.SalaryItemBiz; import com.engine.salary.biz.SysSalaryItemBiz; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.elog.entity.dto.LoggerContext; -import com.engine.salary.elog.util.LoggerTemplate; import com.engine.salary.entity.salaryformula.po.FormulaPO; import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; @@ -80,9 +79,6 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService return ServiceUtil.getService(SalarySobServiceImpl.class, user); } - private LoggerTemplate salaryItemLoggerTemplate = SalaryElogConfig.salaryItemLoggerTemplate(); - - private SysSalaryItemBiz sysSalaryItemBiz = new SysSalaryItemBiz(); // @Autowired // private LoggerTemplate salaryItemLoggerTemplate; @@ -217,7 +213,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98329, "新建薪资项目")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98329, "新建薪资项目") + ": " + salaryItemPO.getName()); loggerContext.setNewValues(salaryItemPO); - salaryItemLoggerTemplate.write(loggerContext); + SalaryElogConfig.salaryItemLoggerTemplate.write(loggerContext); } @Override @@ -301,7 +297,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(93892, "编辑薪资项目") + ": " + newSalaryItemPO.getName()); loggerContext.setOldValues(salaryItemPO); loggerContext.setNewValues(newSalaryItemPO); - salaryItemLoggerTemplate.write(loggerContext); + SalaryElogConfig.salaryItemLoggerTemplate.write(loggerContext); } private void changeName(SalaryItemPO salaryItemPO, String oldName, String newName, String itemPrefix, String fieldNamePrefix) { @@ -365,7 +361,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98323, "删除薪资项目")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98323, "删除薪资项目") + ": " + salaryItemPO.getName()); loggerContext.setOldValues(salaryItemPO); - salaryItemLoggerTemplate.write(loggerContext); + SalaryElogConfig.salaryItemLoggerTemplate.write(loggerContext); }); } diff --git a/src/com/engine/salary/service/impl/SalarySobAdjustRuleServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobAdjustRuleServiceImpl.java index 989fc9ce7..c068f377d 100644 --- a/src/com/engine/salary/service/impl/SalarySobAdjustRuleServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobAdjustRuleServiceImpl.java @@ -2,10 +2,13 @@ package com.engine.salary.service.impl; import com.engine.core.impl.Service; import com.engine.salary.biz.SalarySobAdjustRuleBiz; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.entity.salarysob.bo.SalarySobAdjustRuleBO; import com.engine.salary.entity.salarysob.param.SalarySobAdjustRuleSaveParam; import com.engine.salary.entity.salarysob.po.SalarySobAdjustRulePO; import com.engine.salary.entity.salarysob.po.SalarySobPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salarysob.SalarySobAdjustRuleMapper; import com.engine.salary.mapper.salarysob.SalarySobMapper; @@ -40,7 +43,6 @@ public class SalarySobAdjustRuleServiceImpl extends Service implements SalarySob return MapperProxyFactory.getProxy(SalarySobAdjustRuleMapper.class); } -// private LoggerTemplate salarySobLoggerTemplate; @Override public List listBySalarySobId(Long salarySobId) { @@ -76,20 +78,13 @@ public class SalarySobAdjustRuleServiceImpl extends Service implements SalarySob salarySobAdjustRuleMapper.batchInsert(salarySobAdjustRulePOS); } // 记录日志 -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId(String.valueOf(salarySobPO.getId())); -// loggerContext.setTargetName(salarySobPO.getName()); -// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98614, "保存调薪计薪规则")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98614, "保存调薪计薪规则")); -// salarySobLoggerTemplate.write(loggerContext); -// } catch (Exception e) { -// sqlSession.rollback(); -// throw new SalaryRunTimeException(e); -// }finally { -// sqlSession.commit(); -// sqlSession.close(); -// } + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(String.valueOf(salarySobPO.getId())); + loggerContext.setTargetName(salarySobPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98614, "保存调薪计薪规则")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98614, "保存调薪计薪规则")); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); } @Override diff --git a/src/com/engine/salary/service/impl/SalarySobCheckRuleServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobCheckRuleServiceImpl.java index 58f90b4e2..7d22fe009 100644 --- a/src/com/engine/salary/service/impl/SalarySobCheckRuleServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobCheckRuleServiceImpl.java @@ -3,12 +3,15 @@ package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.SalarySobCheckRuleBiz; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.entity.salarysob.bo.SalarySobCheckRuleBO; import com.engine.salary.entity.salarysob.param.SalarySobCheckRuleQueryParam; import com.engine.salary.entity.salarysob.param.SalarySobCheckRuleSaveParam; import com.engine.salary.entity.salarysob.param.UpdateCheckRuleFormulaParam; import com.engine.salary.entity.salarysob.po.SalarySobCheckRulePO; import com.engine.salary.entity.salarysob.po.SalarySobPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.SalarySobCheckRuleService; import com.engine.salary.service.SalarySobService; @@ -37,7 +40,6 @@ public class SalarySobCheckRuleServiceImpl extends Service implements SalarySobC private SalarySobService getSalarySobService(User user) { return (SalarySobService) ServiceUtil.getService(SalarySobServiceImpl.class, user); } -// private LoggerTemplate salarySobLoggerTemplate; @Override public SalarySobCheckRulePO getById(Long id) { @@ -84,15 +86,15 @@ public class SalarySobCheckRuleServiceImpl extends Service implements SalarySobC SalarySobCheckRulePO salarySobCheckRulePO = SalarySobCheckRuleBO.convert2PO(saveParam, (long) user.getUID()); // 保存 salarySobCheckRuleMapper.insert(salarySobCheckRulePO); - //todo 记录日志 -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId("" + salarySobPO.getId()); -// loggerContext.setTargetName(salarySobPO.getName()); -// loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(93872, "添加校验规则")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(93872, "添加校验规则") + ": " + salarySobCheckRulePO.getName()); -// loggerContext.setNewValues(salarySobCheckRulePO); -// salarySobLoggerTemplate.write(loggerContext); + //记录日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId("" + salarySobPO.getId()); + loggerContext.setTargetName(salarySobPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(93872, "添加校验规则")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(93872, "添加校验规则") + ": " + salarySobCheckRulePO.getName()); + loggerContext.setNewValues(salarySobCheckRulePO); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); } @Override @@ -129,15 +131,16 @@ public class SalarySobCheckRuleServiceImpl extends Service implements SalarySobC newSalarySobCheckRulePO.setUpdateTime(new Date()); salarySobCheckRuleMapper.updateById(newSalarySobCheckRulePO); //todo 记录日志 -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId("" + salarySobPO.getId()); -// loggerContext.setTargetName(salarySobPO.getName()); -// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(93870, "编辑校验规则")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(93870, "编辑校验规则") + ": " + newSalarySobCheckRulePO.getName()); -// loggerContext.setOldValues(salarySobCheckRulePO); -// loggerContext.setNewValues(newSalarySobCheckRulePO); -// salarySobLoggerTemplate.write(loggerContext); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salarySobPO.getId()); + loggerContext.setTargetName(salarySobPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(93870, "编辑校验规则")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(93870, "编辑校验规则") + ": " + newSalarySobCheckRulePO.getName()); + loggerContext.setOldValues(salarySobCheckRulePO); + loggerContext.setNewValues(newSalarySobCheckRulePO); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); } @Override @@ -175,17 +178,18 @@ public class SalarySobCheckRuleServiceImpl extends Service implements SalarySobC // 将薪资账套list转换成map Map salarySobPOMap = SalaryEntityUtil.convert2Map(salarySobPOS, SalarySobPO::getId); //todo 记录日志 -// salarySobCheckRulePOS.forEach(salarySobCheckRulePO -> { -// SalarySobPO salarySobPO = salarySobPOMap.get(salarySobCheckRulePO.getSalarySobId()); -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId("" + salarySobPO.getId()); -// loggerContext.setTargetName(salarySobPO.getName()); -// loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98646, "删除校验规则")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98646, "删除校验规则") + ": " + salarySobCheckRulePO.getName()); -// loggerContext.setOldValues(salarySobCheckRulePO); -// salarySobLoggerTemplate.write(loggerContext); -// }); + salarySobCheckRulePOS.forEach(salarySobCheckRulePO -> { + SalarySobPO salarySobPO = salarySobPOMap.get(salarySobCheckRulePO.getSalarySobId()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salarySobPO.getId()); + loggerContext.setTargetName(salarySobPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98646, "删除校验规则")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98646, "删除校验规则") + ": " + salarySobCheckRulePO.getName()); + loggerContext.setOldValues(salarySobCheckRulePO); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); + }); } @Override diff --git a/src/com/engine/salary/service/impl/SalarySobExtRangeServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobExtRangeServiceImpl.java index 78d313366..e959b3fd6 100644 --- a/src/com/engine/salary/service/impl/SalarySobExtRangeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobExtRangeServiceImpl.java @@ -59,8 +59,6 @@ public class SalarySobExtRangeServiceImpl extends Service implements SalarySobEx return SqlProxyHandle.getProxy(SalarySobExtRangeMapper.class); } -// private ComInfoCache comInfoCache; -// private LoggerTemplate salarySobLoggerTemplate; @Override public List listByIds(Collection ids) { diff --git a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java index 268912117..216e6499e 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -6,7 +6,9 @@ import com.engine.salary.biz.SalarySobBiz; import com.engine.salary.biz.SalarySobItemBiz; import com.engine.salary.biz.SalarySobItemGroupBiz; import com.engine.salary.biz.SalarySobItemHideBiz; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO; @@ -15,6 +17,7 @@ import com.engine.salary.entity.salarysob.dto.SalarySobItemFormDTO; import com.engine.salary.entity.salarysob.param.SalarySobItemSaveParam; import com.engine.salary.entity.salarysob.po.*; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salarysob.SalarySobDefaultItemMapper; @@ -23,9 +26,9 @@ import com.engine.salary.mapper.salarysob.SalarySobItemMapper; import com.engine.salary.service.*; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.valid.ValidUtil; -import com.engine.salary.util.db.IdGenerator; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -93,7 +96,6 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe private SalarySobDefaultItemMapper getSalarySobDefaultItemMapper() { return MapperProxyFactory.getProxy(SalarySobDefaultItemMapper.class); } -// private LoggerTemplate salarySobLoggerTemplate; @Override public List list() { @@ -260,14 +262,17 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe //保存 saveSobItem(saveParam); - //todo 记录日志 -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId("" + salarySobPO.getId()); -// loggerContext.setTargetName(salarySobPO.getName()); -// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98613, "编辑薪资账套薪资项目")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98613, "编辑薪资账套薪资项目")); -// salarySobLoggerTemplate.write(loggerContext); + SalarySobPO salarySob = salarySobBiz.getById(salarySobId); + + // 记录日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salarySob.getId()); + loggerContext.setTargetName(salarySob.getName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98613, "编辑薪资账套薪资项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98613, "编辑薪资账套薪资项目")); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); } /** diff --git a/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java index 257ab6d72..ef2caa4d8 100644 --- a/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java @@ -6,6 +6,8 @@ import com.engine.core.impl.Service; import com.engine.hrm.biz.OrganizationShowSetBiz; import com.engine.salary.biz.SalarySobRangeBiz; import com.engine.salary.biz.SpecialAddDeductionBiz; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.hrm.DeptInfo; import com.engine.salary.entity.hrm.PositionInfo; @@ -20,6 +22,7 @@ import com.engine.salary.entity.salarysob.param.SalarySobRangeSaveParam; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.salarysob.po.SalarySobRangePO; import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.salarysob.SalaryEmployeeStatusEnum; import com.engine.salary.enums.salarysob.TargetTypeEnum; @@ -87,10 +90,6 @@ public class SalarySobRangeServiceImpl extends Service implements SalarySobRange private SalarySobExtRangeMapper getSalarySobExtRangeMapper() { return SqlProxyHandle.getProxy(SalarySobExtRangeMapper.class); } - -// private ComInfoCache comInfoCache; -// private LoggerTemplate salarySobLoggerTemplate; - @Override public List listByIds(Collection ids) { if (CollectionUtils.isEmpty(ids)) { @@ -185,17 +184,18 @@ public class SalarySobRangeServiceImpl extends Service implements SalarySobRange if (CollectionUtils.isNotEmpty(result.getNeedUpdateSalarySobRanges())) { result.getNeedUpdateSalarySobRanges().forEach(e -> salarySobRangeBiz.updateById(e)); } - // todo 记录日志 -// String operateTypeName = Objects.equals(saveParam.getIncludeType(), NumberUtils.INTEGER_ONE) ? -// SalaryI18nUtil.getI18nLabel(98601, "关联人员范围新增对象") : SalaryI18nUtil.getI18nLabel(98602, "从范围中排除新增对象"); -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId("" + salarySobPO.getId()); -// loggerContext.setTargetName(salarySobPO.getName()); -// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); -// loggerContext.setOperateTypeName(operateTypeName); -// loggerContext.setOperatedesc(operateTypeName); -// loggerContext.setNewValues(saveParam); -// salarySobLoggerTemplate.write(loggerContext); + //记录日志 + String operateTypeName = Objects.equals(saveParam.getIncludeType(), 1) ? + SalaryI18nUtil.getI18nLabel(98601, "关联人员范围新增对象") : SalaryI18nUtil.getI18nLabel(98602, "从范围中排除新增对象"); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salarySobPO.getId()); + loggerContext.setTargetName(salarySobPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(operateTypeName); + loggerContext.setOperatedesc(operateTypeName); + loggerContext.setNewValues(saveParam); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); } @Override diff --git a/src/com/engine/salary/service/impl/SysSalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SysSalaryItemServiceImpl.java index 2c0f56bb0..18f1500ab 100644 --- a/src/com/engine/salary/service/impl/SysSalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SysSalaryItemServiceImpl.java @@ -3,9 +3,12 @@ package com.engine.salary.service.impl; import com.engine.core.impl.Service; import com.engine.salary.biz.SalaryItemBiz; import com.engine.salary.biz.SysSalaryItemBiz; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.entity.salaryitem.bo.SysSalaryItemBO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.SalarySystemTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salaryitem.SysSalaryItemMapper; @@ -30,7 +33,6 @@ import java.util.Set; * @version 1.0 **/ public class SysSalaryItemServiceImpl extends Service implements SysSalaryItemService { - private SysSalaryItemBiz sysSalaryItemMapper = new SysSalaryItemBiz(); private SalaryItemBiz salaryItemService = new SalaryItemBiz(); @@ -87,19 +89,20 @@ public class SysSalaryItemServiceImpl extends Service implements SysSalaryItemSe throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98350, "已经添加过的系统薪资项目不能重复添加")); } // 保存 - List salaryItems = SysSalaryItemBO.convert2SalaryItemPO(sysSalaryItemPOS,(long)user.getUID()); + List salaryItems = SysSalaryItemBO.convert2SalaryItemPO(sysSalaryItemPOS, (long) user.getUID()); salaryItemService.batchSave(salaryItems); - //todo 记录日志 -// sysSalaryItemPOS.forEach(sysSalaryItemPO -> { -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId(String.valueOf(sysSalaryItemPO.getId())); -// loggerContext.setTargetName(sysSalaryItemPO.getName()); -// loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(93891, "添加系统薪资项目")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(93891, "添加系统薪资项目") + ": " + sysSalaryItemPO.getName()); -// loggerContext.setNewValues(sysSalaryItemPO); -// salaryItemLoggerTemplate.write(loggerContext); -// }); + // 记录日志 + sysSalaryItemPOS.forEach(sysSalaryItemPO -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(sysSalaryItemPO.getId())); + loggerContext.setTargetName(sysSalaryItemPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(93891, "添加系统薪资项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(93891, "添加系统薪资项目") + ": " + sysSalaryItemPO.getName()); + loggerContext.setNewValues(sysSalaryItemPO); + SalaryElogConfig.salaryItemLoggerTemplate.write(loggerContext); + }); } @Override diff --git a/src/com/engine/salary/util/SalaryLoggerUtil.java b/src/com/engine/salary/util/SalaryLoggerUtil.java index e8d0c60de..e6d49943f 100644 --- a/src/com/engine/salary/util/SalaryLoggerUtil.java +++ b/src/com/engine/salary/util/SalaryLoggerUtil.java @@ -1,73 +1,80 @@ package com.engine.salary.util; +import com.engine.salary.elog.entity.dto.LoggerContext; +import com.engine.salary.elog.util.LoggerTemplate; +import com.engine.salary.enums.OperateTypeEnum; + /** - * @Description: 操作日志工具类 - * @Author: wangxiangzhong - * @Date: 2021/11/1 11:31 - */ + * 操作日志工具类 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalaryLoggerUtil { -// /** -// * 记录单个对象新增操作日志 -// * @param loggerTemplate -// * @param targetId -// * @param targetName -// * @param operateTypeName -// * @param operatedesc -// * @param newValues -// */ -// public static void recordAddSingleLog(LoggerTemplate loggerTemplate, Long targetId, String targetName, String operateTypeName, String operatedesc, Object newValues) { -// recoreSingleLog(loggerTemplate, targetId, targetName, OperateTypeEnum.ADD.getValue(), operateTypeName, operatedesc, null, newValues); -// } -// -// /** -// * 记录单个对象修改操作日志 -// * @param loggerTemplate -// * @param targetId -// * @param targetName -// * @param operateTypeName -// * @param operatedesc -// * @param oldValues -// * @param newValues -// */ -// public static void recordUpdateSingleLog(LoggerTemplate loggerTemplate, Long targetId, String targetName, String operateTypeName, String operatedesc, Object oldValues, Object newValues) { -// recoreSingleLog(loggerTemplate, targetId, targetName, OperateTypeEnum.UPDATE.getValue(), operateTypeName, operatedesc, oldValues, newValues); -// } -// -// /** -// * 记录单个对象删除操作日志 -// * @param loggerTemplate -// * @param targetId -// * @param targetName -// * @param operateTypeName -// * @param operatedesc -// * @param oldValues -// */ -// public static void recordDeleteSingleLog(LoggerTemplate loggerTemplate, Long targetId, String targetName, String operateTypeName, String operatedesc, Object oldValues) { -// recoreSingleLog(loggerTemplate, targetId, targetName, OperateTypeEnum.DELETE.getValue(), operateTypeName, operatedesc, oldValues, null); -// } -// -// /** -// * 记录单个对象日志 -// * @param loggerTemplate -// * @param targetId -// * @param targetName -// * @param operateType -// * @param operateTypeName -// * @param operatedesc -// * @param oldValues -// * @param newValues -// */ -// private static void recoreSingleLog(LoggerTemplate loggerTemplate, Long targetId, String targetName, String operateType, String operateTypeName, String operatedesc, Object oldValues, Object newValues) { -// LoggerContext loggerContext = new LoggerContext(); -// loggerContext.setTargetId(String.valueOf(targetId)); -// loggerContext.setTargetName(targetName); -// loggerContext.setOperateType(operateType); -// loggerContext.setOperateTypeName(operateTypeName); -// loggerContext.setOperatedesc(operatedesc); -// loggerContext.setOldValues(oldValues); -// loggerContext.setNewValues(newValues); -// loggerTemplate.write(loggerContext); -// } + /** + * 记录单个对象新增操作日志 + * @param loggerTemplate + * @param targetId + * @param targetName + * @param operateTypeName + * @param operatedesc + * @param newValues + */ + public static void recordAddSingleLog(LoggerTemplate loggerTemplate, Long targetId, String targetName, String operateTypeName, String operatedesc, Object newValues) { + recoreSingleLog(loggerTemplate, targetId, targetName, OperateTypeEnum.ADD.getValue(), operateTypeName, operatedesc, null, newValues); + } + + /** + * 记录单个对象修改操作日志 + * @param loggerTemplate + * @param targetId + * @param targetName + * @param operateTypeName + * @param operatedesc + * @param oldValues + * @param newValues + */ + public static void recordUpdateSingleLog(LoggerTemplate loggerTemplate, Long targetId, String targetName, String operateTypeName, String operatedesc, Object oldValues, Object newValues) { + recoreSingleLog(loggerTemplate, targetId, targetName, OperateTypeEnum.UPDATE.getValue(), operateTypeName, operatedesc, oldValues, newValues); + } + + /** + * 记录单个对象删除操作日志 + * @param loggerTemplate + * @param targetId + * @param targetName + * @param operateTypeName + * @param operatedesc + * @param oldValues + */ + public static void recordDeleteSingleLog(LoggerTemplate loggerTemplate, Long targetId, String targetName, String operateTypeName, String operatedesc, Object oldValues) { + recoreSingleLog(loggerTemplate, targetId, targetName, OperateTypeEnum.DELETE.getValue(), operateTypeName, operatedesc, oldValues, null); + } + + /** + * 记录单个对象日志 + * @param loggerTemplate + * @param targetId + * @param targetName + * @param operateType + * @param operateTypeName + * @param operatedesc + * @param oldValues + * @param newValues + */ + private static void recoreSingleLog(LoggerTemplate loggerTemplate, Long targetId, String targetName, String operateType, String operateTypeName, String operatedesc, Object oldValues, Object newValues) { + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setTargetId(String.valueOf(targetId)); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(operateType); + loggerContext.setOperateTypeName(operateTypeName); + loggerContext.setOperatedesc(operatedesc); + loggerContext.setOldValues(oldValues); + loggerContext.setNewValues(newValues); + loggerTemplate.write(loggerContext); + } } From b6f7281cbd3e42637c3a9c75dca0435ada6a765c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 30 Jan 2024 14:17:06 +0800 Subject: [PATCH 16/64] =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalarySobRangeServiceImpl.java | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java index ef2caa4d8..0e30a3fd9 100644 --- a/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java @@ -209,21 +209,22 @@ public class SalarySobRangeServiceImpl extends Service implements SalarySobRange // 删除薪资账套的人员范围 salarySobRangeBiz.deleteByIds(ids); // 查询薪资账套 -// Set salarySobIds = SalaryEntityUtil.properties(salarySobRangePOS, SalarySobRangePO::getSalarySobId); -// List salarySobPOS = getSalarySobService(user).listByIds(salarySobIds); -// // 是"关联人员范围"还是"从范围中排除" -// Integer includeType = salarySobRangePOS.get(0).getIncludeType(); -// // todo 记录日志 -// String operateTypeName = Objects.equals(includeType, NumberUtils.INTEGER_ONE) ? -// SalaryI18nUtil.getI18nLabel(98605, "关联人员范围删除对象") : SalaryI18nUtil.getI18nLabel(98606, "从范围中排除删除对象"); -// salarySobPOS.forEach(salarySobPO -> { -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId("" + salarySobPO.getId()); -// loggerContext.setTargetName(salarySobPO.getName()); -// loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); -// loggerContext.setOperateTypeName(operateTypeName); -// loggerContext.setOperatedesc(operateTypeName); -// }); + Set salarySobIds = SalaryEntityUtil.properties(salarySobRangePOS, SalarySobRangePO::getSalarySobId); + List salarySobPOS = getSalarySobService(user).listByIds(salarySobIds); + // 是"关联人员范围"还是"从范围中排除" + Integer includeType = salarySobRangePOS.get(0).getIncludeType(); + //记录日志 + String operateTypeName = Objects.equals(includeType, 1) ? + SalaryI18nUtil.getI18nLabel(98605, "关联人员范围删除对象") : SalaryI18nUtil.getI18nLabel(98606, "从范围中排除删除对象"); + salarySobPOS.forEach(salarySobPO -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salarySobPO.getId()); + loggerContext.setTargetName(salarySobPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(operateTypeName); + loggerContext.setOperatedesc(operateTypeName); + }); } @Override From 335964e2df8e6178547f9188fe6a0b7b5fe8ef0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 30 Jan 2024 17:21:13 +0800 Subject: [PATCH 17/64] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E6=97=A0=E6=95=88?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../annotation/handle/ElogTableScanner.java | 312 +++++++++--------- 1 file changed, 156 insertions(+), 156 deletions(-) diff --git a/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java b/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java index a024d3478..709e8e0cb 100644 --- a/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java +++ b/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java @@ -1,156 +1,156 @@ -package com.engine.salary.elog.annotation.handle; - -import com.engine.salary.elog.annotation.ElogField; -import com.engine.salary.elog.annotation.ElogTable; -import com.engine.salary.elog.entity.dto.DataTypeEnum; -import com.engine.salary.elog.entity.dto.TableColumnBean; -import com.engine.salary.elog.util.ElogUtils; -import lombok.extern.slf4j.Slf4j; -import org.reflections.Reflections; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.lang.reflect.Field; -import java.util.*; -import java.util.stream.Collectors; - -/** - * @ClassName: ElogTableScanner - * @Description 日志操作表扫描 - * @Author tanghj - * @Date 2021/3/12 13:31 - */ -@Slf4j -public class ElogTableScanner { - private Logger logger = LoggerFactory.getLogger(this.getClass()); - -// private TableCheckerMapper tableCheckerMapper; - -// @Override - public void run() throws Exception { - - // todo 需要考虑集群下,控制一台机器来跑 - scanElogTable(); - - } - - private void scanElogTable() { - // todo 是否还需要扫描Elog(因为可能不需要本地存储) ELogDetailTable, -// Map tableBeans = this.applicationContext.getBeansWithAnnotation(ElogTable.class); - Reflections reflections = new Reflections("com.engine.salary.elog"); - Set> tableBeans = reflections.getTypesAnnotatedWith(ElogTable.class); - - - List baseColumns = new ArrayList<>(); - - Map> tableColumns = elogTableHandle(tableBeans,baseColumns); - - for(String tableName : tableColumns.keySet()) { - - // todo 需要处理明细表,如果没有直接初始化原始明细表,如果有加上自定义的 - List columns = tableColumns.get(tableName); - if(columns == null) { - columns = baseColumns; - } else { - columns.addAll(baseColumns); - } - tableCheck(tableName, columns); - } - - } - - private Map> elogTableHandle(Set> tableBeans, List baseColumns) { - Map> tableMap = new HashMap<>(); - for (Class aClass :tableBeans) {//遍历每个controller层 - - List list = new ArrayList<>(); - - ElogTable elogTable = aClass.getAnnotation(ElogTable.class); - - List fields = Arrays.asList(aClass.getDeclaredFields());//获取方法 - for (Field f : fields) { - - ElogField field = f.getAnnotation(ElogField.class); - if(field == null) { - continue; - } - - TableColumnBean tableColumnBean = new TableColumnBean(); - - tableColumnBean.setColumnName(f.getName()); - tableColumnBean.setColumnComment(field.comment()); - tableColumnBean.setColumnDefault(field.defaultValue()); - tableColumnBean.setFieldLength(field.length()); - tableColumnBean.setDataType(field.dataType()); - tableColumnBean.setNullable(field.isNull()); - list.add(tableColumnBean); - } - if(!ElogUtils.BASE_TABLE.equals(elogTable.module())) { - tableMap.put(ElogUtils.getTableName(elogTable.module(), elogTable.function()), list); - } else { - baseColumns.addAll(list); - } - } - - return tableMap; - } - - private void tableCheck(String tableName, List columns) { - List oldColumns = new ArrayList<>(); -// List oldColumns = tableCheckerMapper.getTableStructure(tableName); - - // 表不存在 - if(oldColumns == null || oldColumns.size() == 0) { - createTable(tableName,columns ); - } else { - Map newcolMap = new HashMap<>(); - Map oldcolMap = new HashMap<>(); - - columns.stream().forEach(tableColumnBean -> newcolMap.put(tableColumnBean.getColumnName().toLowerCase(), tableColumnBean)); - oldColumns.stream().forEach(tableColumnBean -> { - tableColumnBean.setDataType(ElogUtils.getEnumFromString(DataTypeEnum.class, tableColumnBean.getDataTypeStr())); - tableColumnBean.setNullable("YES".equalsIgnoreCase(tableColumnBean.getIsNullableStr())); - oldcolMap.put(tableColumnBean.getColumnName().toLowerCase(), tableColumnBean); - }); - // 只增加或者修改,不删除字段 - for(String key : newcolMap.keySet()) { - if(oldcolMap.containsKey(key)) { - // 字段变动则修改 - if(!(newcolMap.get(key).toSql()).equals(oldcolMap.get(key).toSql())) - this.modifyColumn(tableName, newcolMap.get(key)); - } else { - this.addColumn(tableName, newcolMap.get(key)); - } - } - } - - } - - private void createTable(String tableName, List columns) { - StringBuilder sb = new StringBuilder("create table ").append(tableName).append(" ( "); - sb.append(columns.stream().map( bean -> bean.toSql()).collect(Collectors.joining(","))); - sb.append(")"); - logger.info("创建sql:{}",sb.toString()); -// tableCheckerMapper.createElogTable(sb.toString()); - } - - private void addColumn(String tableName, TableColumnBean tableColumnBean) { - StringBuilder sb = new StringBuilder("alter table ") - .append(tableName).append(" ") - .append(" add ") - .append(" column ") - .append(tableColumnBean.toSql()); - logger.info("新增字段sql:{}",sb.toString()); -// tableCheckerMapper.createElogTable(sb.toString()); - } - - private void modifyColumn(String tableName, TableColumnBean tableColumnBean) { - StringBuilder sb = new StringBuilder("alter table ") - .append(tableName).append(" ") - .append(" modify ") - .append(" column ") - .append(tableColumnBean.toSql()); - logger.info("修改字段sql:{}",sb.toString()); -// tableCheckerMapper.createElogTable(sb.toString()); - } -} +//package com.engine.salary.elog.annotation.handle; +// +//import com.engine.salary.elog.annotation.ElogField; +//import com.engine.salary.elog.annotation.ElogTable; +//import com.engine.salary.elog.entity.dto.DataTypeEnum; +//import com.engine.salary.elog.entity.dto.TableColumnBean; +//import com.engine.salary.elog.util.ElogUtils; +//import lombok.extern.slf4j.Slf4j; +//import org.reflections.Reflections; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +// +//import java.lang.reflect.Field; +//import java.util.*; +//import java.util.stream.Collectors; +// +///** +// * @ClassName: ElogTableScanner +// * @Description 日志操作表扫描 +// * @Author tanghj +// * @Date 2021/3/12 13:31 +// */ +//@Slf4j +//public class ElogTableScanner { +// private Logger logger = LoggerFactory.getLogger(this.getClass()); +// +//// private TableCheckerMapper tableCheckerMapper; +// +//// @Override +// public void run() throws Exception { +// +// // todo 需要考虑集群下,控制一台机器来跑 +// scanElogTable(); +// +// } +// +// private void scanElogTable() { +// // todo 是否还需要扫描Elog(因为可能不需要本地存储) ELogDetailTable, +//// Map tableBeans = this.applicationContext.getBeansWithAnnotation(ElogTable.class); +// Reflections reflections = new Reflections("com.engine.salary.elog"); +// Set> tableBeans = reflections.getTypesAnnotatedWith(ElogTable.class); +// +// +// List baseColumns = new ArrayList<>(); +// +// Map> tableColumns = elogTableHandle(tableBeans,baseColumns); +// +// for(String tableName : tableColumns.keySet()) { +// +// // todo 需要处理明细表,如果没有直接初始化原始明细表,如果有加上自定义的 +// List columns = tableColumns.get(tableName); +// if(columns == null) { +// columns = baseColumns; +// } else { +// columns.addAll(baseColumns); +// } +// tableCheck(tableName, columns); +// } +// +// } +// +// private Map> elogTableHandle(Set> tableBeans, List baseColumns) { +// Map> tableMap = new HashMap<>(); +// for (Class aClass :tableBeans) {//遍历每个controller层 +// +// List list = new ArrayList<>(); +// +// ElogTable elogTable = aClass.getAnnotation(ElogTable.class); +// +// List fields = Arrays.asList(aClass.getDeclaredFields());//获取方法 +// for (Field f : fields) { +// +// ElogField field = f.getAnnotation(ElogField.class); +// if(field == null) { +// continue; +// } +// +// TableColumnBean tableColumnBean = new TableColumnBean(); +// +// tableColumnBean.setColumnName(f.getName()); +// tableColumnBean.setColumnComment(field.comment()); +// tableColumnBean.setColumnDefault(field.defaultValue()); +// tableColumnBean.setFieldLength(field.length()); +// tableColumnBean.setDataType(field.dataType()); +// tableColumnBean.setNullable(field.isNull()); +// list.add(tableColumnBean); +// } +// if(!ElogUtils.BASE_TABLE.equals(elogTable.module())) { +// tableMap.put(ElogUtils.getTableName(elogTable.module(), elogTable.function()), list); +// } else { +// baseColumns.addAll(list); +// } +// } +// +// return tableMap; +// } +// +// private void tableCheck(String tableName, List columns) { +// List oldColumns = new ArrayList<>(); +//// List oldColumns = tableCheckerMapper.getTableStructure(tableName); +// +// // 表不存在 +// if(oldColumns == null || oldColumns.size() == 0) { +// createTable(tableName,columns ); +// } else { +// Map newcolMap = new HashMap<>(); +// Map oldcolMap = new HashMap<>(); +// +// columns.stream().forEach(tableColumnBean -> newcolMap.put(tableColumnBean.getColumnName().toLowerCase(), tableColumnBean)); +// oldColumns.stream().forEach(tableColumnBean -> { +// tableColumnBean.setDataType(ElogUtils.getEnumFromString(DataTypeEnum.class, tableColumnBean.getDataTypeStr())); +// tableColumnBean.setNullable("YES".equalsIgnoreCase(tableColumnBean.getIsNullableStr())); +// oldcolMap.put(tableColumnBean.getColumnName().toLowerCase(), tableColumnBean); +// }); +// // 只增加或者修改,不删除字段 +// for(String key : newcolMap.keySet()) { +// if(oldcolMap.containsKey(key)) { +// // 字段变动则修改 +// if(!(newcolMap.get(key).toSql()).equals(oldcolMap.get(key).toSql())) +// this.modifyColumn(tableName, newcolMap.get(key)); +// } else { +// this.addColumn(tableName, newcolMap.get(key)); +// } +// } +// } +// +// } +// +// private void createTable(String tableName, List columns) { +// StringBuilder sb = new StringBuilder("create table ").append(tableName).append(" ( "); +// sb.append(columns.stream().map( bean -> bean.toSql()).collect(Collectors.joining(","))); +// sb.append(")"); +// logger.info("创建sql:{}",sb.toString()); +//// tableCheckerMapper.createElogTable(sb.toString()); +// } +// +// private void addColumn(String tableName, TableColumnBean tableColumnBean) { +// StringBuilder sb = new StringBuilder("alter table ") +// .append(tableName).append(" ") +// .append(" add ") +// .append(" column ") +// .append(tableColumnBean.toSql()); +// logger.info("新增字段sql:{}",sb.toString()); +//// tableCheckerMapper.createElogTable(sb.toString()); +// } +// +// private void modifyColumn(String tableName, TableColumnBean tableColumnBean) { +// StringBuilder sb = new StringBuilder("alter table ") +// .append(tableName).append(" ") +// .append(" modify ") +// .append(" column ") +// .append(tableColumnBean.toSql()); +// logger.info("修改字段sql:{}",sb.toString()); +//// tableCheckerMapper.createElogTable(sb.toString()); +// } +//} From 9074fb46fcd41e55b34e9c65e5779c2f2d6832ee Mon Sep 17 00:00:00 2001 From: sy Date: Fri, 2 Feb 2024 15:23:26 +0800 Subject: [PATCH 18/64] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88=EF=BC=8CSIArchivesBiz?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E8=BF=81=E7=A7=BB=E5=88=B0=E5=AF=B9=E5=BA=94?= =?UTF-8?q?=E6=98=AF=E5=AE=9E=E7=8E=B0=E7=B1=BB=EF=BC=8C=E5=B9=B6=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=B0=83=E7=94=A8=E6=96=B9=E7=9B=B8=E5=85=B3=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cmd/siarchives/SIArchivesTipsCmd.java | 18 +- .../salary/service/SIArchivesService.java | 32 +- .../service/impl/ColumnBuildServiceImpl.java | 19 +- .../service/impl/RecordsBuildServiceImpl.java | 43 +- .../impl/SIAComparisonResultServiceImpl.java | 16 +- .../service/impl/SIAccountServiceImpl.java | 47 +- .../service/impl/SIArchivesServiceImpl.java | 2569 ++++++++++++++++- .../service/impl/SIExportServiceImpl.java | 45 +- .../service/impl/SIImportServiceImpl.java | 16 +- .../service/impl/SISchemeServiceImpl.java | 101 +- .../AutoSyncResignationEmpArchiveJob.java | 11 +- 11 files changed, 2766 insertions(+), 151 deletions(-) diff --git a/src/com/engine/salary/cmd/siarchives/SIArchivesTipsCmd.java b/src/com/engine/salary/cmd/siarchives/SIArchivesTipsCmd.java index 561a395a4..5d4eea819 100644 --- a/src/com/engine/salary/cmd/siarchives/SIArchivesTipsCmd.java +++ b/src/com/engine/salary/cmd/siarchives/SIArchivesTipsCmd.java @@ -3,9 +3,13 @@ package com.engine.salary.cmd.siarchives; import com.engine.common.biz.AbstractCommonCommand; import com.engine.common.entity.BizLogContext; import com.engine.core.interceptor.CommandContext; -import com.engine.salary.biz.SIArchivesBiz; +import com.engine.salary.mapper.siarchives.SocialSchemeMapper; +import com.engine.salary.util.SalaryAssert; +import org.apache.ibatis.session.SqlSession; +import weaver.conn.mybatis.MyBatisFactory; import weaver.hrm.User; +import java.util.List; import java.util.Map; /** @@ -28,8 +32,16 @@ public class SIArchivesTipsCmd extends AbstractCommonCommand @Override public Map execute(CommandContext commandContext) { - SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); - siArchivesBiz.tips(); + + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SocialSchemeMapper socialSchemeMapper = sqlSession.getMapper(SocialSchemeMapper.class); + List employeeIds = socialSchemeMapper.tips(); + SalaryAssert.isEmpty(employeeIds, "当前有离职人员档案存在福利缴纳起始月,未维护福利最后缴纳月,请尽快处理"); + + } finally { + sqlSession.close(); + } return null; } } diff --git a/src/com/engine/salary/service/SIArchivesService.java b/src/com/engine/salary/service/SIArchivesService.java index 7f2f31866..4f98cc742 100644 --- a/src/com/engine/salary/service/SIArchivesService.java +++ b/src/com/engine/salary/service/SIArchivesService.java @@ -1,11 +1,11 @@ package com.engine.salary.service; +import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.salary.entity.siarchives.dto.InsuranceArchivesBaseHistoryDTO; import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam; import com.engine.salary.entity.siarchives.param.InsuranceArchivesSaveParam; import com.engine.salary.entity.siarchives.param.SIArchiveBaseHistoryListParam; -import com.engine.salary.entity.siarchives.po.InsuranceArchivesBaseInfoPO; -import com.engine.salary.entity.siarchives.po.InsuranceArchivesEmployeePO; +import com.engine.salary.entity.siarchives.po.*; import com.engine.salary.util.page.PageInfo; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -124,4 +124,32 @@ public interface SIArchivesService { PageInfo getAdjustHistoryList(SIArchiveBaseHistoryListParam param); PageInfo historyListByEmployeeIdAndOperator(SIArchiveBaseHistoryListParam param); + + List> buildTableData(List insuranceArchivesEmployeePOS); + + List buildWeaTableColumns(List insuranceArchivesEmployeePOS); + + boolean isDiffWelBase(); + + List payInsuranceIds(Long socialSchemeId, Integer paymentScope); + + List payInsuranceIds(Long socialSchemeId); + + List getSocialByEmployeeIds(List employeeIds); + List getFundByEmployeeIds(List employeeIds); + List getOtherByEmployeeIds(List employeeIds); + + Map buildBatchAccount(List ids, Long paymentOrganization); + + Boolean checkWelBaseLimit(Long primaryId, String paymentBaseString, Integer paymentScope); + + String checkAndBuildWelBaseWithLimit(Long primaryId, String paymentBaseString, Integer paymentScope); + + List dealSocialBaseAdjustInfoList(List adjustList, Long creator); + List dealFundBaseAdjustInfoList(List adjustList, Long creator); + List dealOtherBaseAdjustInfoList(List adjustList, Long creator); + + void batchInsertAdjustHistory(List adjustHistoryList); + + List listEndDateIsNull(List employeeIds); } diff --git a/src/com/engine/salary/service/impl/ColumnBuildServiceImpl.java b/src/com/engine/salary/service/impl/ColumnBuildServiceImpl.java index 5312f1c51..a03f1e529 100644 --- a/src/com/engine/salary/service/impl/ColumnBuildServiceImpl.java +++ b/src/com/engine/salary/service/impl/ColumnBuildServiceImpl.java @@ -4,8 +4,8 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.cloudstore.eccom.constant.WeaBoolAttr; import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.biz.SIArchivesBiz; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; import com.engine.salary.entity.siaccount.po.InsuranceAccountInspectPO; import com.engine.salary.entity.siarchives.po.InsuranceArchivesAccountPO; @@ -17,9 +17,11 @@ import com.engine.salary.enums.siaccount.PaymentStatusEnum; import com.engine.salary.enums.sicategory.WelfareTypeEnum; import com.engine.salary.mapper.sicategory.ICategoryMapper; import com.engine.salary.service.ColumnBuildService; +import com.engine.salary.service.SIArchivesService; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import org.apache.commons.lang3.StringUtils; +import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; @@ -32,11 +34,16 @@ import java.util.stream.Collectors; **/ public class ColumnBuildServiceImpl extends Service implements ColumnBuildService { - private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); +// private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); private ICategoryMapper getICategoryMapper() { return MapperProxyFactory.getProxy(ICategoryMapper.class); } + + public SIArchivesService getSIArchivesService(User user) { + return ServiceUtil.getService(SIArchivesServiceImpl.class, user); + } + @Override public List buildCommonColumnsWithStyle(List pos, Long employeeId, String tenantKey, Integer paymentStatus) { List list = new ArrayList<>(); @@ -125,7 +132,8 @@ public class ColumnBuildServiceImpl extends Service implements ColumnBuildServic } private Map> buildPaymentTitle(List pos, Map categoryIdNameMap, Long employeeId, String tenantKey) { - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); Set socailIds = new HashSet<>(); Set fundIds = new HashSet<>(); Set otherIds = new HashSet<>(); @@ -440,9 +448,10 @@ public class ColumnBuildServiceImpl extends Service implements ColumnBuildServic @Override public List buildInspectColumns(List pos, Long paymentOrganization) { List list = new ArrayList<>(); - SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); + List employeeIds = pos.stream().map(InsuranceAccountInspectPO::getEmployeeId).collect(Collectors.toList()); - Map insuranceArchivesAccountPOMap = siArchivesBiz.buildBatchAccount(employeeIds, paymentOrganization); +// Map insuranceArchivesAccountPOMap = siArchivesBiz.buildBatchAccount(employeeIds, paymentOrganization); + Map insuranceArchivesAccountPOMap = getSIArchivesService(user).buildBatchAccount(employeeIds, paymentOrganization); Map categoryIdNameMap = getICategoryMapper().listAll().stream().collect(Collectors.toMap(ICategoryPO -> String.valueOf(ICategoryPO.getId()), ICategoryPO::getInsuranceName)); Map> columns = buildInspectTableTitle(new ArrayList<>(insuranceArchivesAccountPOMap.values()), categoryIdNameMap); WeaTableColumn weaTableNameColumn = new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 85429, "姓名"), "userName"); diff --git a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java index a18ca32e0..2976579d4 100644 --- a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java +++ b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java @@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.biz.SIArchivesBiz; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; import com.engine.salary.entity.siaccount.po.InsuranceAccountInspectPO; @@ -21,6 +20,7 @@ import com.engine.salary.mapper.datacollection.EmployMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeMapper; import com.engine.salary.mapper.taxagent.TaxAgentMapper; import com.engine.salary.service.RecordsBuildService; +import com.engine.salary.service.SIArchivesService; import com.engine.salary.service.SalaryEmployeeService; import com.engine.salary.util.SalaryAssert; import com.engine.salary.util.SalaryDateUtil; @@ -62,11 +62,16 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } - private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); +// private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); + + public SIArchivesService getSIArchivesService(User user) { + return ServiceUtil.getService(SIArchivesServiceImpl.class, user); + } @Override public List> buildCommonRecords(List list, Long employeeId) { - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); List> result = new ArrayList<>(); if (CollectionUtils.isEmpty(list)) { return result; @@ -114,7 +119,8 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (welBaseDiffSign) { if (socialJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); socialJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "socialPerBase", v); @@ -125,7 +131,8 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ }); if (socialComJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); socialComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "socialComBase", v); @@ -135,7 +142,8 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ } else { if (socialJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getSocialSchemeId()); socialJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "socialBase", v); @@ -158,7 +166,8 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (welBaseDiffSign) { if (fundJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); fundJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "fundPerBase", v); @@ -169,7 +178,8 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ }); if (fundComJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); fundComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "fundComBase", v); @@ -179,7 +189,8 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ } else { if (fundJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId()); fundJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "fundBase", v); @@ -200,7 +211,8 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (welBaseDiffSign) { if (otherJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); otherJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "otherPerBase", v); @@ -211,7 +223,8 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ }); if (otherComJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); otherComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "otherComBase", v); @@ -221,7 +234,8 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ } else { if (otherJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId()); otherJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "otherBase", v); @@ -311,7 +325,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ @Override public List> buildInspectRecords(List list, Long paymentOrganization) { List> result = new ArrayList<>(); - SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); + if (CollectionUtils.isEmpty(list)) { return result; } @@ -325,7 +339,8 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ return result; } Map collect = employeeByIds.stream().collect(Collectors.toMap(DataCollectionEmployee::getEmployeeId, Function.identity())); - Map insuranceArchivesAccountPOMap = siArchivesBiz.buildBatchAccount(employeeIds, paymentOrganization); +// Map insuranceArchivesAccountPOMap = siArchivesBiz.buildBatchAccount(employeeIds, paymentOrganization); + Map insuranceArchivesAccountPOMap = getSIArchivesService(user).buildBatchAccount(employeeIds, paymentOrganization); list.forEach(item -> { Map record = new HashMap<>(); DataCollectionEmployee simpleEmployee = collect.get(item.getEmployeeId()) == null ? new DataCollectionEmployee() : collect.get(item.getEmployeeId()); diff --git a/src/com/engine/salary/service/impl/SIAComparisonResultServiceImpl.java b/src/com/engine/salary/service/impl/SIAComparisonResultServiceImpl.java index 389e4ef2b..05512c23c 100644 --- a/src/com/engine/salary/service/impl/SIAComparisonResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAComparisonResultServiceImpl.java @@ -2,7 +2,6 @@ package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.biz.SIArchivesBiz; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.siaccount.bo.InsuranceComparisonResultBO; import com.engine.salary.entity.siaccount.dto.InsuranceComparisonResultListDTO; @@ -19,19 +18,18 @@ import com.engine.salary.mapper.siarchives.InsuranceBaseInfoMapper; import com.engine.salary.mapper.sicategory.ICategoryMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeDetailMapper; import com.engine.salary.service.SIAComparisonResultService; +import com.engine.salary.service.SIArchivesService; import com.engine.salary.service.SISchemeService; import com.engine.salary.sys.entity.vo.OrderRuleVO; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.db.MapperProxyFactory; -import com.engine.salary.util.excel.ExcelUtil; import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.Column; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.Lists; -import com.wbi.util.Util; import org.apache.commons.lang3.BooleanUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.User; @@ -47,7 +45,7 @@ import java.util.stream.Collectors; public class SIAComparisonResultServiceImpl extends Service implements SIAComparisonResultService { private EncryptUtil encryptUtil = new EncryptUtil(); - private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); +// private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); private InsuranceExportMapper getInsuranceExportMapper() { return MapperProxyFactory.getProxy(InsuranceExportMapper.class); @@ -73,6 +71,10 @@ public class SIAComparisonResultServiceImpl extends Service implements SIACompar return ServiceUtil.getService(SISchemeServiceImpl.class, user); } + public SIArchivesService getSIArchivesService(User user) { + return ServiceUtil.getService(SIArchivesServiceImpl.class, user); + } + /** * 根据列表查询条件查询线下对比结果(分页) */ @@ -144,7 +146,8 @@ public class SIAComparisonResultServiceImpl extends Service implements SIACompar */ private InsuranceComparisonResultListDTO listByParam(boolean needPage, InsuranceComparisonResultQueryParam queryParam) { - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); //排序配置 OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); @@ -232,7 +235,8 @@ public class SIAComparisonResultServiceImpl extends Service implements SIACompar } private Set welfareInfo() { - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); Set info = new HashSet<>(); List listAll = getICategoryMapper().listAll(); diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 857196426..08b7fc624 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -103,7 +103,7 @@ import static com.engine.salary.util.excel.ExcelSupport.EXCEL_TYPE_XLSX; public class SIAccountServiceImpl extends Service implements SIAccountService { - private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); +// private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); private EncryptUtil encryptUtil = new EncryptUtil(); @@ -227,6 +227,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { return MapperProxyFactory.getProxy(SIAccountUtilMapper.class); } + public SIArchivesService getSIArchivesService(User user) { + return ServiceUtil.getService(SIArchivesServiceImpl.class, user); + } + @Override public Map listPage(InsuranceAccountBatchParam queryParam) { Long employeeId = (long) user.getUID(); @@ -761,13 +765,15 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { PageInfo pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), insuranceArchivesEmployeePOS, InsuranceArchivesEmployeePO.class); - List> records = siArchivesBiz.buildTableData(insuranceArchivesEmployeePOS); +// List> records = siArchivesBiz.buildTableData(insuranceArchivesEmployeePOS); + List> records = getSIArchivesService(user).buildTableData(insuranceArchivesEmployeePOS); PageInfo> pageInfos = new PageInfo<>(records); pageInfos.setTotal(pageInfo.getTotal()); pageInfos.setPageNum(param.getCurrent()); pageInfos.setPageSize(param.getPageSize()); - List weaTableColumns = siArchivesBiz.buildWeaTableColumns(insuranceArchivesEmployeePOS, employeeId); +// List weaTableColumns = siArchivesBiz.buildWeaTableColumns(insuranceArchivesEmployeePOS, employeeId); + List weaTableColumns = getSIArchivesService(user).buildWeaTableColumns(insuranceArchivesEmployeePOS); WeaTable table = new WeaTable(); table.setPageUID(UUID.randomUUID().toString()); @@ -2349,7 +2355,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } public Map> createWelColumnMap(InsuranceAccountDetailParam param) { - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); //查询线上福利核算记录 InsuranceExportParam insuranceExportParam = new InsuranceExportParam(); insuranceExportParam.setBillMonth(param.getBillMonth()); @@ -2496,7 +2503,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } public Map welColumnNameCodeMap(InsuranceAccountDetailParam param) { - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); //查询线上福利核算记录 InsuranceExportParam insuranceExportParam = new InsuranceExportParam(); insuranceExportParam.setBillMonth(param.getBillMonth()); @@ -2821,7 +2829,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { * @param baseMap excel导入的对比数据 */ private ExcelInsuranceDetailPO handleExcelInsuranceDetail(String billMonth, Long employeeId, Long paymentOrganization, Map baseMap, Map welColumnNameCodeMap) { - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); ExcelInsuranceDetailPO excelInsuranceDetailPO = new ExcelInsuranceDetailPO(); excelInsuranceDetailPO.setId(IdGenerator.generate()); @@ -4452,7 +4461,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List empIdsInPayMonthRange = listCanPayEmpIds(param.getPaymentOrganization(), param.getBillMonth()); empIds = empIds.stream().filter(f->canAccountIds.contains(f) && empIdsInPayMonthRange.contains(f)).collect(Collectors.toList()); - List socials = siArchivesBiz.getSocialByEmployeeIds(empIds); +// List socials = siArchivesBiz.getSocialByEmployeeIds(empIds); + List socials = getSIArchivesService(user).getSocialByEmployeeIds(empIds); //过滤出目标个税扣缴义务人相关信息 socials = socials.stream().filter(f -> f.getPaymentOrganization().equals(param.getPaymentOrganization())).collect(Collectors.toList()); List emp1 = socials.stream() @@ -4461,7 +4471,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { .map(InsuranceArchivesSocialSchemePO::getEmployeeId) .collect(Collectors.toList()); - List funds = siArchivesBiz.getFundByEmployeeIds(empIds); +// List funds = siArchivesBiz.getFundByEmployeeIds(empIds); + List funds = getSIArchivesService(user).getFundByEmployeeIds(empIds); //过滤出目标个税扣缴义务人相关信息 funds = funds.stream().filter(f -> f.getPaymentOrganization().equals(param.getPaymentOrganization())).collect(Collectors.toList()); List emp2 = funds.stream() @@ -4470,7 +4481,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { .map(InsuranceArchivesFundSchemePO::getEmployeeId) .collect(Collectors.toList()); - List others = siArchivesBiz.getOtherByEmployeeIds(empIds); +// List others = siArchivesBiz.getOtherByEmployeeIds(empIds); + List others = getSIArchivesService(user).getOtherByEmployeeIds(empIds); //过滤出目标个税扣缴义务人相关信息 others = others.stream().filter(f -> f.getPaymentOrganization().equals(param.getPaymentOrganization())).collect(Collectors.toList()); List emp3 = others.stream() @@ -4534,8 +4546,9 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } public void siCommonAccount(String billMonth, List ids, Long paymentOrganization) { - SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); - Map insuranceArchivesAccountPOS = siArchivesBiz.buildBatchAccount(ids, paymentOrganization); + +// Map insuranceArchivesAccountPOS = siArchivesBiz.buildBatchAccount(ids, paymentOrganization); + Map insuranceArchivesAccountPOS = getSIArchivesService(user).buildBatchAccount(ids, paymentOrganization); List list = new ArrayList<>(); int count = 0; for (Map.Entry entry : insuranceArchivesAccountPOS.entrySet()) { @@ -4597,7 +4610,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } public InsuranceAccountDetailPO accountOther(InsuranceAccountDetailPO insuranceAccountDetailPO, InsuranceArchivesAccountPO accountPO, String billMonth) { - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); if (accountPO.getOther() != null) { InsuranceArchivesOtherSchemePO otherPO = accountPO.getOther(); insuranceAccountDetailPO.setOtherPayOrg(otherPO.getPaymentOrganization()); @@ -4759,7 +4773,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { public InsuranceAccountDetailPO accountFund(InsuranceAccountDetailPO insuranceAccountDetailPO, InsuranceArchivesAccountPO accountPO, String billMonth) { - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); if (accountPO.getFund() != null) { InsuranceArchivesFundSchemePO fundPO = accountPO.getFund(); insuranceAccountDetailPO.setFundPayOrg(fundPO.getPaymentOrganization()); @@ -4922,7 +4937,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { public InsuranceAccountDetailPO accountSocial(InsuranceAccountDetailPO insuranceAccountDetailPO, InsuranceArchivesAccountPO accountPO, String billMonth) { - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); if (accountPO.getSocial() != null) { InsuranceArchivesSocialSchemePO socialPO = accountPO.getSocial(); insuranceAccountDetailPO.setSocialPayOrg(socialPO.getPaymentOrganization()); @@ -5498,7 +5514,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { */ public String accountSupplement(List baseList, List employeeIds, Long paymentOrganization) { //(k,v) k-员工id v-员工对应的福利档案数据 - Map longInsuranceArchivesAccountPOMap = siArchivesBiz.buildBatchAccount(employeeIds, paymentOrganization); +// Map longInsuranceArchivesAccountPOMap = siArchivesBiz.buildBatchAccount(employeeIds, paymentOrganization); + Map longInsuranceArchivesAccountPOMap = getSIArchivesService(user).buildBatchAccount(employeeIds, paymentOrganization); //核算结果集 List pos = new ArrayList<>(); baseList.forEach(baseParam -> { diff --git a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java index 641118a29..29859d236 100644 --- a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java @@ -1,63 +1,94 @@ package com.engine.salary.service.impl; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; +import com.api.browser.bean.SearchConditionGroup; +import com.api.browser.bean.SearchConditionItem; +import com.api.browser.bean.SearchConditionOption; +import com.api.browser.util.ConditionFactory; +import com.api.browser.util.ConditionType; import com.cloudstore.dev.api.util.Util_DataCache; +import com.cloudstore.eccom.pc.table.WeaTable; +import com.cloudstore.eccom.pc.table.WeaTableCheckboxpopedom; import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.biz.SIArchivesBiz; +import com.engine.salary.biz.SICategoryBiz; +import com.engine.salary.biz.SISchemeBiz; import com.engine.salary.cmd.siarchives.SIArchivesTipsCmd; +import com.engine.salary.common.SalaryContext; +import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.encrypt.EncryptUtil; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.siarchives.bo.InsuranceArchivesBO; import com.engine.salary.entity.siarchives.bo.InsuranceArchivesBaseInfoBO; -import com.engine.salary.entity.siarchives.dto.InsuranceArchivesBaseHistoryDTO; -import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam; -import com.engine.salary.entity.siarchives.param.InsuranceArchivesSaveParam; -import com.engine.salary.entity.siarchives.param.SIArchiveBaseHistoryListParam; +import com.engine.salary.entity.siarchives.dto.*; +import com.engine.salary.entity.siarchives.param.*; import com.engine.salary.entity.siarchives.po.*; +import com.engine.salary.entity.sicategory.po.ICategoryPO; +import com.engine.salary.entity.sischeme.po.InsuranceSchemeDetailPO; +import com.engine.salary.entity.sischeme.po.InsuranceSchemePO; import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeDTO; import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; import com.engine.salary.entity.taxagent.po.TaxAgentEmpChangePO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.UserStatusEnum; +import com.engine.salary.enums.datacollection.DataCollectionEmployeeTypeEnum; import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum; import com.engine.salary.enums.siaccount.EmployeeStatusEnum; -import com.engine.salary.enums.sicategory.DeleteTypeEnum; -import com.engine.salary.enums.sicategory.NonPaymentEnum; -import com.engine.salary.enums.sicategory.PaymentScopeEnum; -import com.engine.salary.enums.sicategory.WelfareTypeEnum; +import com.engine.salary.enums.sicategory.*; import com.engine.salary.enums.taxagent.TaxAgentEmpChangeModuleEnum; import com.engine.salary.exception.SalaryRunTimeException; -import com.engine.salary.mapper.siarchives.FundSchemeMapper; -import com.engine.salary.mapper.siarchives.InsuranceBaseInfoMapper; -import com.engine.salary.mapper.siarchives.OtherSchemeMapper; -import com.engine.salary.mapper.siarchives.SocialSchemeMapper; +import com.engine.salary.mapper.siarchives.*; +import com.engine.salary.mapper.sicategory.ICategoryMapper; +import com.engine.salary.mapper.sischeme.InsuranceSchemeDetailMapper; +import com.engine.salary.mapper.sischeme.InsuranceSchemeMapper; +import com.engine.salary.mapper.taxagent.TaxAgentMapper; import com.engine.salary.service.SIArchivesService; +import com.engine.salary.service.SalaryEmployeeService; import com.engine.salary.service.TaxAgentEmpChangeService; import com.engine.salary.service.TaxAgentService; import com.engine.salary.sys.constant.SalarySysConstant; import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.entity.vo.OrderRuleVO; +import com.engine.salary.sys.enums.OpenEnum; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; -import com.engine.salary.util.SalaryEntityUtil; -import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.*; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.excel.ExcelUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; +import com.engine.salary.wrapper.TaxAgentWrapper; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.session.SqlSession; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.BeanUtils; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StopWatch; +import weaver.conn.mybatis.MyBatisFactory; import weaver.general.BaseBean; import weaver.general.Util; import weaver.hrm.User; +import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; +import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; +import static com.engine.salary.sys.constant.SalarySysConstant.WEL_BASE_AUTO_ADJUST; +import static com.engine.salary.sys.constant.SalarySysConstant.WEL_BASE_DIFF_BY_PER_AND_COM; + /** * @Author weaver_cl * @Description: @@ -70,7 +101,7 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService private final Boolean isLog = "true".equals(baseBean.getPropValue("hrmSalary", "log")); - private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); +// private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); private EncryptUtil encryptUtil = new EncryptUtil(); @@ -102,6 +133,22 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService return MapperProxyFactory.getProxy(OtherSchemeMapper.class); } + private TaxAgentMapper getTaxAgentMapper() { + return MapperProxyFactory.getProxy(TaxAgentMapper.class); + } + + private InsuranceSchemeDetailMapper getInsuranceSchemeDetailMapper() { + return MapperProxyFactory.getProxy(InsuranceSchemeDetailMapper.class); + } + + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + + private TaxAgentWrapper getTaxAgentWrapper(User user) { + return ServiceUtil.getService(TaxAgentWrapper.class, user); + } + @Override public Map getTips(Map params) { return commandExecutor.execute(new SIArchivesTipsCmd(params, user)); @@ -114,20 +161,20 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService Collection taxAgentPOS = getTaxAgentService(user).listAllTaxAgentsAsAdmin(currentEmployeeId); Map apidatas = new HashMap<>(16); - SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); - siArchivesBiz.setNeedAuth(needAuth); - siArchivesBiz.setTaxAgentPOS(taxAgentPOS); +// SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); +//// siArchivesBiz.setNeedAuth(needAuth); +//// siArchivesBiz.setTaxAgentPOS(taxAgentPOS); WelfareTypeEnum welfareTypeEnum = (WelfareTypeEnum) params.get("welfareTypeEnum"); Long employeeId = Long.valueOf(Util.null2String(params.get("employeeId"))); Long paymentOrganization = welfareTypeEnum != null ? Long.valueOf(Util.null2String(params.get("paymentOrganization"))) : null; - apidatas = siArchivesBiz.getBaseForm(welfareTypeEnum, employeeId, (long) user.getUID(), user, paymentOrganization); +// apidatas = siArchivesBiz.getBaseForm(welfareTypeEnum, employeeId, (long) user.getUID(), user, paymentOrganization); + apidatas = getBaseForm(welfareTypeEnum, employeeId, paymentOrganization, taxAgentPOS); return apidatas; } @Override public Map getPaymentForm(Map params) { Map apidatas = new HashMap<>(16); - SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); WelfareTypeEnum welfareTypeEnum = (WelfareTypeEnum) params.get("welfareTypeEnum"); Long employeeId = Long.valueOf(Util.null2String(params.get("employeeId"))); String schemeIdStr = Util.null2String(params.get("schemeId")); @@ -136,16 +183,31 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService if (StringUtils.isNotBlank(schemeIdStr)) { schemeId = Long.valueOf(schemeIdStr); } - - apidatas = siArchivesBiz.getPaymentForm(user, welfareTypeEnum, employeeId, (long) user.getUID(), schemeId, paymentOrganization); +// apidatas = siArchivesBiz.getPaymentForm(user, welfareTypeEnum, employeeId, (long) user.getUID(), schemeId, paymentOrganization); + apidatas = getPaymentForm(user, welfareTypeEnum, employeeId, schemeId, paymentOrganization); return apidatas; } @Override public String insert(InsuranceArchivesSaveParam param) { - SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); - siArchivesBiz.insert(param, user); + SalaryAssert.notNull(param.getWelfareType(), "福利类型为空"); + //判断是否要区分个人和单位福利基数 + SalarySysConfPO welBaseDiff = getSalarySysConfService(user).getOneByCode(WEL_BASE_DIFF_BY_PER_AND_COM); + boolean welBaseDiffSign = welBaseDiff != null && welBaseDiff.getConfValue().equals(OpenEnum.OPEN.getValue()); + switch (param.getWelfareType()) { + case SOCIAL_SECURITY: + socialSave(param, user, welBaseDiffSign); + break; + case ACCUMULATION_FUND: + fundSave(param, user, welBaseDiffSign); + break; + case OTHER: + otherSave(param, user, welBaseDiffSign); + break; + default: + throw new SalaryRunTimeException("福利类型不存在"); + } return null; } @@ -187,8 +249,8 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService } Map apidatas = new HashMap<>(16); - SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); - apidatas = siArchivesBiz.listPage(param, (long) user.getUID()); +// apidatas = siArchivesBiz.listPage(param, (long) user.getUID()); + apidatas = listPage(param, (long) user.getUID()); log.info("各操作计时 {}", sw.prettyPrint()); return apidatas; @@ -200,8 +262,7 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService */ private void handleHistoryData(long currentEmployeeId) { //如果触发历史数据处理,则进行一次全量增员 - if (siArchivesBiz.createOldInsuranceBaseInfo(currentEmployeeId)) { - + if (createOldInsuranceBaseInfo(currentEmployeeId)) { //批量增员 List allBaseInfoList = getInsuranceBaseInfoMapper().listAll(); Collection stayAddIds = allBaseInfoList.stream().filter(f->f.getRunStatus().equals(EmployeeStatusEnum.STAY_ADD.getValue())) @@ -576,8 +637,8 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService @Override public Map getSearchCondition(Map param) { Map apidatas = new HashMap<>(16); - SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); - apidatas = siArchivesBiz.getSearchCondition(user); +// apidatas = siArchivesBiz.getSearchCondition(user); + apidatas = getSearchCondition(); return apidatas; } @@ -607,8 +668,10 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService if (insuranceArchivesEmployeePOS == null) { insuranceArchivesEmployeePOS = new ArrayList<>(); } - List> records = siArchivesBiz.buildTableData(insuranceArchivesEmployeePOS); - List columns = siArchivesBiz.buildWeaTableColumns(insuranceArchivesEmployeePOS, user.getUID()); +// List> records = siArchivesBiz.buildTableData(insuranceArchivesEmployeePOS); + List> records = buildTableData(insuranceArchivesEmployeePOS); +// List columns = siArchivesBiz.buildWeaTableColumns(insuranceArchivesEmployeePOS, user.getUID()); + List columns = buildWeaTableColumns(insuranceArchivesEmployeePOS); //工作簿list List> excelSheetData = new ArrayList<>(); @@ -1185,7 +1248,8 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService if (param.getWelfareTypeEnum() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "参数错误")); } - List adjustHistoryDTOS = siArchivesBiz.getAdjustHistoryList(param.getPaymentOrganization(), param.getEmployeeId()); +// List adjustHistoryDTOS = siArchivesBiz.getAdjustHistoryList(param.getPaymentOrganization(), param.getEmployeeId()); + List adjustHistoryDTOS = getAdjustHistoryList(param.getPaymentOrganization(), param.getEmployeeId()); List targetHistory = adjustHistoryDTOS.stream() .filter(f -> f.getWelfareType().equals(param.getWelfareTypeEnum().getValue())).collect(Collectors.toList()); @@ -1199,7 +1263,8 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService @Override public PageInfo historyListByEmployeeIdAndOperator(SIArchiveBaseHistoryListParam param) { - List adjustHistoryDTOS = siArchivesBiz.getBaseHistoryByEmployeeIdAndOperator(param.getOperator(), param.getEmployeeId()); +// List adjustHistoryDTOS = siArchivesBiz.getBaseHistoryByEmployeeIdAndOperator(param.getOperator(), param.getEmployeeId()); + List adjustHistoryDTOS = getBaseHistoryByEmployeeIdAndOperator(param.getOperator(), param.getEmployeeId()); // 分权逻辑 Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); @@ -1303,9 +1368,9 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService .adjustBeforeComBaseJson(toUpdateOtherInfo.getOtherPaymentComBaseString()) .build(); List adjustHistoryList = new ArrayList<>(); - adjustHistoryList.addAll(siArchivesBiz.createAdjustInfo(socialAdjustInfo, (long) user.getUID())); - adjustHistoryList.addAll(siArchivesBiz.createAdjustInfo(fundAdjustInfo, (long) user.getUID())); - adjustHistoryList.addAll(siArchivesBiz.createAdjustInfo(otherAdjustInfo, (long) user.getUID())); + adjustHistoryList.addAll(createAdjustInfo(socialAdjustInfo, (long) user.getUID())); + adjustHistoryList.addAll(createAdjustInfo(fundAdjustInfo, (long) user.getUID())); + adjustHistoryList.addAll(createAdjustInfo(otherAdjustInfo, (long) user.getUID())); //更新字段 toUpdateBaseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); @@ -1345,7 +1410,8 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService getFundSchemeMapper().updateById(toUpdateFundInfo); getOtherSchemeMapper().updateById(toUpdateOtherInfo); //基数调整记录入库 - siArchivesBiz.batchInsertAdjustHistory(adjustHistoryList, (long) user.getUID()); +// siArchivesBiz.batchInsertAdjustHistory(adjustHistoryList, (long) user.getUID()); + batchInsertAdjustHistory(adjustHistoryList); Map resultMap = new HashMap<>(2); String resultMsg = "操作成功"; @@ -1355,4 +1421,2429 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService resultMap.put("msg", resultMsg); return resultMap; } + + /*****以下代码为SIArchivesBiz中逻辑迁移,旨在减少Biz类的使用*****/ + /** + * 判断是否需要生成历史福利档案基本信息 + */ + public Boolean createOldInsuranceBaseInfo(Long creator) { + + + log.info("判断是否需要生成历史数据"); + List nowBaseInfoList = getInsuranceBaseInfoMapper().getInsuranceBaseInfoList(); + if (nowBaseInfoList.size() == 0) { + StopWatch sw = new StopWatch(); + log.info("福利档案基础信息表为空,开始生成历史数据:"); + //处理公积金、其他福利档案中个税扣缴义务人为空的情况 + sw.start("处理公积金、其他福利档案中个税扣缴义务人为空的情况"); + List socialList = getSocialSchemeMapper().listAll(); + List fundList = getFundSchemeMapper().listAll(); + List otherList = getOtherSchemeMapper().listAll(); + + List updateFundList = new ArrayList<>(); + List updateOtherList = new ArrayList<>(); + for (InsuranceArchivesSocialSchemePO socialSchemePO : socialList) { + List toDealFundList = fundList.stream().filter(f -> f.getEmployeeId().equals(socialSchemePO.getEmployeeId()) && f.getPaymentOrganization() == null).collect(Collectors.toList()); + if (toDealFundList.size() > 0) { + InsuranceArchivesFundSchemePO toDealFundPO = toDealFundList.get(0); + toDealFundPO.setPaymentOrganization(socialSchemePO.getPaymentOrganization()); + updateFundList.add(toDealFundPO); + } + + List toDealOtherList = otherList.stream().filter(f -> f.getEmployeeId().equals(socialSchemePO.getEmployeeId()) && f.getPaymentOrganization() == null).collect(Collectors.toList()); + if (toDealOtherList.size() > 0) { + InsuranceArchivesOtherSchemePO toDealOtherPO = toDealOtherList.get(0); + toDealOtherPO.setPaymentOrganization(socialSchemePO.getPaymentOrganization()); + updateOtherList.add(toDealOtherPO); + + } + + } + log.info("重置个税扣缴义务人id的公积金档案数:{}", updateFundList.size()); + log.info("重置个税扣缴义务人id的其他福利档案数:{}", updateOtherList.size()); + //更新公积金和其他福利档案 + updateFundList.forEach(getFundSchemeMapper()::updateById); + updateOtherList.forEach(getOtherSchemeMapper()::updateById); + sw.stop(); + + sw.start("处理待入库的历史福利档案基础信息并入库"); + List addBaseInfoList = new ArrayList<>(); + + List oldBaseInfoList = getInsuranceBaseInfoMapper().getInsuranceBaseInfoListByInsuranceDetail(null); + log.info("获取待生成的历史福利档案基础信息条数:{}", oldBaseInfoList.size()); + //去重 + oldBaseInfoList = oldBaseInfoList.stream() + .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getPaymentOrganization() + "-" + f.getEmployeeId()))), ArrayList::new)); + log.info("去重后的待生成历史福利档案基础信息条数:{}", oldBaseInfoList.size()); + if (oldBaseInfoList.size() > 0) { + //设置基本信息表字段 + for (InsuranceArchivesBaseInfoPO po : oldBaseInfoList) { + po.setId(IdGenerator.generate()); + po.setCreateTime(new Date()); + po.setDeleteType(0); + po.setCreator(creator); + po.setRunStatus(EmployeeStatusEnum.STAY_ADD.getValue()); + po.setUpdateTime(new Date()); + po.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); + + addBaseInfoList.add(po); + } + //将历史基本信息入库 + List> partition = Lists.partition(addBaseInfoList, 50); + partition.forEach(getInsuranceBaseInfoMapper()::batchSave); + + sw.stop(); + log.info("各操作计时 {}", sw.prettyPrint()); + return true; + }else { + return false; + } + + + } else { + return false; + } + + } + @Override + public List> buildTableData(List insuranceArchivesEmployeePOS) { + return buildTableData(insuranceArchivesEmployeePOS, false); + } + + /** + * @param insuranceArchivesEmployeePOS + * @return + */ + public List> buildTableData(List insuranceArchivesEmployeePOS, boolean export) { + + boolean welBaseDiffSign = isDiffWelBase(); + + List taxAgentPOS = getTaxAgentMapper().listAll(); + Map longTaxAgentPOMap = SalaryEntityUtil.convert2Map(taxAgentPOS, TaxAgentPO::getId); + + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + List> records = new ArrayList<>(); + try { + InsuranceSchemeMapper insuranceSchemeMapper = sqlSession.getMapper(InsuranceSchemeMapper.class); + + Map socialSchemePOMap = encryptUtil.decryptList(this.getSocialByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS), InsuranceArchivesSocialSchemePO.class) + .stream().collect(Collectors.toMap(InsuranceArchivesSocialSchemePO::getId, Function.identity())); + + Map fundSchemePOMap = encryptUtil.decryptList(this.getFundByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS), InsuranceArchivesFundSchemePO.class) + .stream().collect(Collectors.toMap(InsuranceArchivesFundSchemePO::getId, Function.identity())); + List otherByEmployeeList = this.getOtherByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS); + encryptUtil.decryptList(otherByEmployeeList, InsuranceArchivesOtherSchemePO.class); + Map otherSchemePOMap = otherByEmployeeList + .stream().collect(Collectors.toMap(InsuranceArchivesOtherSchemePO::getId, Function.identity())); + insuranceArchivesEmployeePOS.forEach(item -> { + InsuranceArchivesSocialSchemePO socialItem = socialSchemePOMap.get(item.getSocialId()); + InsuranceArchivesFundSchemePO fundItem = fundSchemePOMap.get(item.getFundId()); + InsuranceArchivesOtherSchemePO otherItem = otherSchemePOMap.get(item.getOtherId()); + Map map = new HashMap<>(); + map.put("employeeName", item.getUserName()); + map.put("paymentOrganizationName", longTaxAgentPOMap.get(item.getPaymentOrganization()) != null ? longTaxAgentPOMap.get(item.getPaymentOrganization()).getName() : ""); + map.put("employeeId", item.getEmployeeId()); + map.put("departmentName", item.getDepartmentName()); + map.put("subcompanyName", item.getSubcompanyName()); + map.put("departmentId", item.getDepartmentId()); + map.put("jobNum", item.getJobNum()); + map.put("companystartdate", item.getCompanystartdate()); + map.put("dismissdate", item.getDimissionDate()); + map.put("mobile", item.getTelephone()); + map.put("siSchemeId", item.getSiSchemeId()); + map.put("fundSchemeId", item.getFundSchemeId()); + map.put("otherSchemeId", item.getOtherSchemeId()); + map.put("status", item.getUserStatus() != null ? UserStatusEnum.getDefaultLabelByValue(item.getUserStatus()) : ""); + map.put("baseInfo", item.getBaseInfoId()); + map.put("paymentOrganization", item.getPaymentOrganization()); + if (socialItem != null) { + map.put("socialName", insuranceSchemeMapper.querySchemeName(socialItem.getSocialSchemeId())); + Map socialJson = JSON.parseObject(socialItem.getSocialPaymentBaseString(), new TypeReference>() { + }); + if (welBaseDiffSign) { + if (socialJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(socialItem.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + socialJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k + "per", v); + } + }); + } + Map socialComJson = JSON.parseObject(socialItem.getSocialPaymentComBaseString(), new TypeReference>() { + }); + if (socialComJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(socialItem.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + socialComJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k + "com", v); + } + }); + } + } else { + if (socialJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(socialItem.getSocialSchemeId()); + socialJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k, v); + } + }); + } + } + + map.put("socialAccount", socialItem.getSocialAccount()); + map.put("socialStartTime", socialItem.getSocialStartTime()); + map.put("socialEndTime", socialItem.getSocialEndTime()); + } + if (fundItem != null) { + map.put("fundName", insuranceSchemeMapper.querySchemeName(fundItem.getFundSchemeId())); + map.put("fundAccount", fundItem.getFundAccount()); + Map fundJson = JSON.parseObject(fundItem.getFundPaymentBaseString(), new TypeReference>() { + }); + if (welBaseDiffSign) { + if (fundJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(fundItem.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + fundJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k + "per", v); + } + }); + } + Map fundComJson = JSON.parseObject(fundItem.getFundPaymentComBaseString(), new TypeReference>() { + }); + if (fundComJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(fundItem.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + fundComJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k + "com", v); + } + }); + } + } else { + if (fundJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(fundItem.getFundSchemeId()); + fundJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k, v); + } + }); + } + } + + map.put("supplementFundAccount", fundItem.getSupplementFundAccount()); + map.put("fundStartTime", fundItem.getFundStartTime()); + map.put("fundEndTime", fundItem.getFundEndTime()); + + } + if (otherItem != null) { + map.put("otherName", insuranceSchemeMapper.querySchemeName(otherItem.getOtherSchemeId())); + Map otherJson = JSON.parseObject(otherItem.getOtherPaymentBaseString(), new TypeReference>() { + }); + if (welBaseDiffSign) { + if (otherJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(otherItem.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + otherJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k + "per", v); + } + }); + } + Map otherComJson = JSON.parseObject(otherItem.getOtherPaymentComBaseString(), new TypeReference>() { + }); + if (otherComJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(otherItem.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + otherComJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k + "com", v); + } + }); + } + } else { + if (otherJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(otherItem.getOtherSchemeId()); + otherJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k, v); + } + }); + } + } + + map.put("otherStartTime", otherItem.getOtherStartTime()); + map.put("otherEndTime", otherItem.getOtherEndTime()); + } + records.add(map); + }); + return records; + + } finally { + sqlSession.close(); + } + } + + @Override + public boolean isDiffWelBase() { + User user = (User) SalaryContext.get().getValue("user"); + //判断是否要区分个人和单位福利基数 + SalarySysConfPO welBaseDiff = getSalarySysConfService(user).getOneByCode(WEL_BASE_DIFF_BY_PER_AND_COM); + + return welBaseDiff != null && welBaseDiff.getConfValue().equals(OpenEnum.OPEN.getValue()); + } + + /** + * 根据人员id和个税扣缴人id获取记录 + */ + public List getSocialByEmployeeIdAndPayOrg(List insuranceArchivesEmployeePOS) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SocialSchemeMapper socialSchemeMapper = sqlSession.getMapper(SocialSchemeMapper.class); + List allList = new ArrayList<>(); + for (InsuranceArchivesEmployeePO po : insuranceArchivesEmployeePOS) { + List socialList = socialSchemeMapper.getSocialByEmployeeIdAndPayOrg(po); + if (socialList.size() > 0) { + allList.add(socialList.get(0)); + } + } + return allList; + } finally { + sqlSession.close(); + } + } + + public List getFundByEmployeeIdAndPayOrg(List insuranceArchivesEmployeePOS) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + FundSchemeMapper fundSchemeMapper = sqlSession.getMapper(FundSchemeMapper.class); + List allList = new ArrayList<>(); + for (InsuranceArchivesEmployeePO po : insuranceArchivesEmployeePOS) { + List fundList = fundSchemeMapper.getFundByEmployeeIdAndPayOrg(po); + if (fundList.size() > 0) { + allList.add(fundList.get(0)); + } + } + return allList; + } finally { + sqlSession.close(); + } + } + + public List getOtherByEmployeeIdAndPayOrg(List insuranceArchivesEmployeePOS) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + OtherSchemeMapper otherSchemeMapper = sqlSession.getMapper(OtherSchemeMapper.class); + List allList = new ArrayList<>(); + for (InsuranceArchivesEmployeePO po : insuranceArchivesEmployeePOS) { + List otherList = otherSchemeMapper.getOtherByEmployeeIdAndPayOrg(po); + if (otherList.size() > 0) { + allList.add(otherList.get(0)); + } + } + return allList; + } finally { + sqlSession.close(); + } + } + + @Override + public List payInsuranceIds(Long socialSchemeId, Integer paymentScope) { + //查询该福利方案下开启缴纳的福利项 + List detailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(socialSchemeId); + List insuranceIdList = new ArrayList<>(); + if (detailPOS != null && detailPOS.size() > 0) { + //开启缴纳的 + insuranceIdList = detailPOS.stream().filter(f -> f.getIsPayment().equals(IsPaymentEnum.YES.getValue()) && f.getPaymentScope().equals(paymentScope)) + .map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList()); + } + return insuranceIdList; + } + + @Override + public List payInsuranceIds(Long socialSchemeId) { + //查询该福利方案下开启缴纳的福利项 + List detailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(socialSchemeId); + List insuranceIdList = new ArrayList<>(); + if (detailPOS != null && detailPOS.size() > 0) { + //开启缴纳的 + insuranceIdList = detailPOS.stream().filter(f -> f.getIsPayment().equals(IsPaymentEnum.YES.getValue())).map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList()); + } + return insuranceIdList; + } + + @Override + public List buildWeaTableColumns(List insuranceArchivesEmployeePOS) { + + Map> titleMap = buildColumnTitle(insuranceArchivesEmployeePOS); + List list = new ArrayList<>(); + WeaTableColumn nameColumn = new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "姓名"), "employeeName"); + nameColumn.setFixed("left"); + list.add(nameColumn); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人"), "paymentOrganizationName")); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "分部"), "subcompanyName")); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "部门"), "departmentName")); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "手机号"), "mobile")); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "员工状态"), "status")); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "工号"), "jobNum")); + + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "入职日期"), "companystartdate")); +// list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "合同到期日期"), "dismissdate")); + + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "社保方案名称"), "socialName")); + titleMap.get(WelfareTypeEnum.SOCIAL_SECURITY.getValue()).forEach((k, v) -> list.add(new WeaTableColumn("150px", v, k))); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "社保账号"), "socialAccount")); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "社保起始缴纳月"), "socialStartTime")); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "社保最后缴纳月"), "socialEndTime")); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "公积金方案名称"), "fundName")); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "公积金账号"), "fundAccount")); + titleMap.get(WelfareTypeEnum.ACCUMULATION_FUND.getValue()).forEach((k, v) -> list.add(new WeaTableColumn("150px", v, k))); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "补充公积金账号"), "supplementFundAccount")); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "公积金起始缴纳月"), "fundStartTime")); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "公积金最后缴纳月"), "fundEndTime")); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "其他福利方案名称"), "otherName")); + titleMap.get(WelfareTypeEnum.OTHER.getValue()).forEach((k, v) -> list.add(new WeaTableColumn("150px", v, k))); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "其他福利起始缴纳月"), "otherStartTime")); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "其他福利最后缴纳月"), "otherEndTime")); + return list; + } + + public Map> buildColumnTitle(List insuranceArchivesEmployeePOS) { + + boolean welBaseDiffSign = isDiffWelBase(); + + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + Map> result = new HashMap<>(); + + insuranceArchivesEmployeePOS = insuranceArchivesEmployeePOS.stream() + .filter(f -> f.getEmployeeId() != null) + .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(InsuranceArchivesEmployeePO::getEmployeeId))), ArrayList::new)); + try { + + SocialSchemeMapper socialSchemeMapper = sqlSession.getMapper(SocialSchemeMapper.class); + FundSchemeMapper fundSchemeMapper = sqlSession.getMapper(FundSchemeMapper.class); + OtherSchemeMapper otherSchemeMapper = sqlSession.getMapper(OtherSchemeMapper.class); + ICategoryMapper iCategoryMapper = sqlSession.getMapper(ICategoryMapper.class); + + Set socialSet = new HashSet<>(); + Set fundSet = new HashSet<>(); + Set otherSet = new HashSet<>(); + + Set socialComSet = new HashSet<>(); + Set fundComSet = new HashSet<>(); + Set otherComSet = new HashSet<>(); + + insuranceArchivesEmployeePOS.forEach(item -> { + List socialList = socialSchemeMapper.getSocialByEmployeeId(Collections.singletonList(item.getEmployeeId())); + encryptUtil.decryptList(socialList, InsuranceArchivesSocialSchemePO.class); + List fundList = fundSchemeMapper.getFundByEmployeeId(Collections.singletonList(item.getEmployeeId())); + encryptUtil.decryptList(fundList, InsuranceArchivesFundSchemePO.class); + List otherList = otherSchemeMapper.getOtherByEmployeeId(Collections.singletonList(item.getEmployeeId())); + encryptUtil.decryptList(otherList, InsuranceArchivesOtherSchemePO.class); + if (socialList.size() > 0) { + for (InsuranceArchivesSocialSchemePO socialSchemePO : socialList) { + + Map socialJson = JSON.parseObject(socialSchemePO.getSocialPaymentBaseString(), new TypeReference>() { + }); + if (socialJson != null) { + socialJson.forEach((k, v) -> socialSet.add(k)); + } + //如果需要区分个人和公司福利基数 + if (welBaseDiffSign) { + Map socialComJson = JSON.parseObject(socialSchemePO.getSocialPaymentComBaseString(), new TypeReference>() { + }); + if (socialComJson != null) { + socialComJson.forEach((k, v) -> socialComSet.add(k)); + } + } + } + + } + if (fundList.size() > 0) { + for (InsuranceArchivesFundSchemePO fundSchemePO : fundList) { + Map fundJson = JSON.parseObject(fundSchemePO.getFundPaymentBaseString(), new TypeReference>() { + }); + if (fundJson != null) { + fundJson.forEach((k, v) -> fundSet.add(k)); + } + //如果需要区分个人和公司福利基数 + if (welBaseDiffSign) { + Map fundComJson = JSON.parseObject(fundSchemePO.getFundPaymentComBaseString(), new TypeReference>() { + }); + if (fundComJson != null) { + fundComJson.forEach((k, v) -> fundComSet.add(k)); + } + } + } + + } + if (otherList.size() > 0) { + for (InsuranceArchivesOtherSchemePO otherSchemePO : otherList) { + Map otherJson = JSON.parseObject(otherSchemePO.getOtherPaymentBaseString(), new TypeReference>() { + }); + if (otherJson != null) { + otherJson.forEach((k, v) -> otherSet.add(k)); + } + //如果需要区分个人和公司福利基数 + if (welBaseDiffSign) { + Map otherComJson = JSON.parseObject(otherSchemePO.getOtherPaymentComBaseString(), new TypeReference>() { + }); + if (otherComJson != null) { + otherComJson.forEach((k, v) -> otherComSet.add(k)); + } + } + } + + } + }); + Map socialMap = new HashMap<>(); + Map socialComMap = new HashMap<>(); + Map socialCollect = new HashMap<>(); + Map customSocial = iCategoryMapper.listByWelfareType(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), null) + .stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity())); + + Map sysSocial = iCategoryMapper.listByWelfareType(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), DataTypeEnum.SYSTEM.getValue()) + .stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity())); + + socialCollect.putAll(customSocial); + socialCollect.putAll(sysSocial); + + if (welBaseDiffSign) { + socialSet.forEach(item -> { + if (socialCollect.containsKey(Long.valueOf(item))) { + socialMap.put(item + "per", socialCollect.get(Long.valueOf(item)).getInsuranceName() + + SalaryI18nUtil.getI18nLabel(0, "申报基数") + + SalaryI18nUtil.getI18nLabel(0,"个人")); + } + }); + socialComSet.forEach(item -> { + if (socialCollect.containsKey(Long.valueOf(item))) { + socialComMap.put(item + "com", socialCollect.get(Long.valueOf(item)).getInsuranceName() + + SalaryI18nUtil.getI18nLabel(0, "申报基数") + + SalaryI18nUtil.getI18nLabel(0,"单位")); + } + }); + } else { + socialSet.forEach(item -> { + if (socialCollect.containsKey(Long.valueOf(item))) { + socialMap.put(item, socialCollect.get(Long.valueOf(item)).getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数")); + } + }); + } + Map fundMap = new HashMap<>(); + Map fundComMap = new HashMap<>(); + Map fundCollect = new HashMap<>(); + Map customFund = iCategoryMapper.listByWelfareType(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), null).stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity())); + Map sysFund = iCategoryMapper.listByWelfareType(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), DataTypeEnum.SYSTEM.getValue()).stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity())); + fundCollect.putAll(customFund); + fundCollect.putAll(sysFund); + if (welBaseDiffSign) { + fundSet.forEach(item -> { + if (fundCollect.containsKey(Long.valueOf(item))) { + fundMap.put(item + "per", fundCollect.get(Long.valueOf(item)).getInsuranceName() + + SalaryI18nUtil.getI18nLabel(0, "申报基数") + + SalaryI18nUtil.getI18nLabel(0,"个人")); + } + }); + fundComSet.forEach(item -> { + if (fundCollect.containsKey(Long.valueOf(item))) { + fundComMap.put(item + "com", fundCollect.get(Long.valueOf(item)).getInsuranceName() + + SalaryI18nUtil.getI18nLabel(0, "申报基数") + + SalaryI18nUtil.getI18nLabel(0,"单位")); + } + }); + } else { + fundSet.forEach(item -> { + if (fundCollect.containsKey(Long.valueOf(item))) { + fundMap.put(item, fundCollect.get(Long.valueOf(item)).getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数")); + } + }); + } + Map otherMap = new HashMap<>(); + Map otherComMap = new HashMap<>(); + Map otherCollect = new HashMap<>(); + Map customOther = iCategoryMapper.listByWelfareType(WelfareTypeEnum.OTHER.getValue(), null).stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity())); + Map sysOther = iCategoryMapper.listByWelfareType(WelfareTypeEnum.OTHER.getValue(), DataTypeEnum.SYSTEM.getValue()).stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity())); + otherCollect.putAll(customOther); + otherCollect.putAll(sysOther); + + if (welBaseDiffSign) { + otherSet.forEach(item -> { + if (otherCollect.containsKey(Long.valueOf(item))) { + otherMap.put(item + "per", otherCollect.get(Long.valueOf(item)).getInsuranceName() + + SalaryI18nUtil.getI18nLabel(0, "申报基数") + + SalaryI18nUtil.getI18nLabel(0,"个人")); + } + }); + otherComSet.forEach(item -> { + if (otherCollect.containsKey(Long.valueOf(item))) { + otherComMap.put(item + "com", otherCollect.get(Long.valueOf(item)).getInsuranceName() + + SalaryI18nUtil.getI18nLabel(0, "申报基数") + + SalaryI18nUtil.getI18nLabel(0,"单位")); + } + }); + } else { + otherSet.forEach(item -> { + if (otherCollect.containsKey(Long.valueOf(item))) { + otherMap.put(item, otherCollect.get(Long.valueOf(item)).getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数")); + } + }); + } + // map根据key排序 + LinkedHashMap socialMapWithAscKey = socialMap.entrySet().stream() + .sorted(Map.Entry.comparingByKey()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap fundMapWithAscKey = fundMap.entrySet().stream() + .sorted(Map.Entry.comparingByKey()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap otherMapWithAscKey = otherMap.entrySet().stream() + .sorted(Map.Entry.comparingByKey()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + if (welBaseDiffSign) { + LinkedHashMap socialComMapWithAscKey = socialComMap.entrySet().stream() + .sorted(Map.Entry.comparingByKey()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap fundComMapWithAscKey = fundComMap.entrySet().stream() + .sorted(Map.Entry.comparingByKey()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap otherComMapWithAscKey = otherComMap.entrySet().stream() + .sorted(Map.Entry.comparingByKey()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + socialMapWithAscKey.putAll(socialComMapWithAscKey); + fundMapWithAscKey.putAll(fundComMapWithAscKey); + otherMapWithAscKey.putAll(otherComMapWithAscKey); + } + + result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialMapWithAscKey); + result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundMapWithAscKey); + result.put(WelfareTypeEnum.OTHER.getValue(), otherMapWithAscKey); + return result; + } finally { + sqlSession.close(); + } + + + } + + /** + * 获取福利档案基数调整记录 + * + */ + public List getAdjustHistoryList(Long paymentOrganization, Long employeeId) { + + if (paymentOrganization == null && employeeId == null) { + return null; + } + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + InsuranceBaseAdjustHistoryMapper mapper = sqlSession.getMapper(InsuranceBaseAdjustHistoryMapper.class); + List list = mapper.listByEmployeeIdAndPayOrg(paymentOrganization, employeeId); + return list; + } finally { + sqlSession.close(); + } + } + + /** + * 获取福利档案基数调整记录 + * + */ + public List getBaseHistoryByEmployeeIdAndOperator(Long operator, Long employeeId) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + InsuranceBaseAdjustHistoryMapper mapper = sqlSession.getMapper(InsuranceBaseAdjustHistoryMapper.class); + List empList = mapper.listByEmployeeIdAndOperator(operator, employeeId); + List extEmpList = mapper.listByExtEmpIdAndOperator(operator, employeeId); + if (extEmpList != null) { + empList.addAll(extEmpList); + empList = empList.stream().filter(f -> org.apache.commons.lang.StringUtils.isNotBlank(f.getEmployeeName())) + .sorted(Comparator.comparing(InsuranceArchivesBaseHistoryDTO::getOperateTime).reversed()).collect(Collectors.toList()); + } + return empList; + } finally { + sqlSession.close(); + } + } + + //生成基数调整记录(基数单元未变化则忽略) + public List createAdjustInfo(InsuranceArchivesBaseHistoryDTO adjustInfo, Long creator) { + Date now = new Date(); + boolean welBaseDiffSign = isDiffWelBase(); + + List toCreateAdjustHistoryList = new ArrayList<>(); + //旧档案不存在基数信息,则直接遍历新的基数数据,生成调整记录;旧档案存在基数信息,则合并新旧基数数据,遍历合并后的技术数据中的key,生成调整记录。 + if(org.apache.commons.lang.StringUtils.isNotBlank(adjustInfo.getAdjustAfterBaseJson()) && org.apache.commons.lang.StringUtils.isBlank(adjustInfo.getAdjustBeforeBaseJson())) { + Map adjustAfterBaseMap = JSON.parseObject(adjustInfo.getAdjustAfterBaseJson(), new TypeReference>() { + }); + for (String key : adjustAfterBaseMap.keySet()) { + InsuranceArchivesBaseHistoryPO adjustItem = new InsuranceArchivesBaseHistoryPO(); + BeanUtils.copyProperties(adjustInfo, adjustItem); + adjustItem.setAdjustWelfareItemId(Long.valueOf(key)); + adjustItem.setAdjustAfterBaseValue((String) adjustAfterBaseMap.get(key)); + adjustItem.setOperateTime(now); + adjustItem.setOperator(creator); + adjustItem.setCreator(creator); + adjustItem.setCreateTime(now); + adjustItem.setUpdateTime(now); + adjustItem.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); + adjustItem.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); + adjustItem.setId(IdGenerator.generate()); + adjustItem.setPaymentScope(welBaseDiffSign ? PaymentScopeEnum.SCOPE_PERSON.getValue().toString() : PaymentScopeEnum.SCOPE_PERSON.getValue().toString() + "," + PaymentScopeEnum.SCOPE_COMPANY.getValue().toString()); + toCreateAdjustHistoryList.add(adjustItem); + } + } else if (org.apache.commons.lang.StringUtils.isNotBlank(adjustInfo.getAdjustAfterBaseJson()) && org.apache.commons.lang.StringUtils.isNotBlank(adjustInfo.getAdjustBeforeBaseJson())) { + Map adjustAfterBaseMap = JSON.parseObject(adjustInfo.getAdjustAfterBaseJson(), new TypeReference>() { + }); + Map adjustBeforeBaseMap = JSON.parseObject(adjustInfo.getAdjustBeforeBaseJson(), new TypeReference>() { + }); + Map reDealMap = new HashMap<>(); + if (adjustAfterBaseMap != null) { + reDealMap.putAll(adjustAfterBaseMap); + } + if (adjustBeforeBaseMap != null) { + reDealMap.putAll(adjustBeforeBaseMap); + } + if (reDealMap.size() >0) { + for (String key : reDealMap.keySet()) { + String beforeValue = (String) adjustBeforeBaseMap.get(key); + String afterValue = (String) adjustAfterBaseMap.get(key); + if (SalaryEntityUtil.empty2Zero(beforeValue).compareTo(SalaryEntityUtil.empty2Zero(afterValue)) == 0) { + continue; + } + InsuranceArchivesBaseHistoryPO adjustItem = new InsuranceArchivesBaseHistoryPO(); + BeanUtils.copyProperties(adjustInfo, adjustItem); + adjustItem.setAdjustWelfareItemId(Long.valueOf(key)); + adjustItem.setAdjustBeforeBaseValue(beforeValue); + adjustItem.setAdjustAfterBaseValue(afterValue); + adjustItem.setOperateTime(now); + adjustItem.setOperator(creator); + adjustItem.setCreator(creator); + adjustItem.setCreateTime(now); + adjustItem.setUpdateTime(now); + adjustItem.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); + adjustItem.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); + adjustItem.setId(IdGenerator.generate()); + adjustItem.setPaymentScope(welBaseDiffSign ? PaymentScopeEnum.SCOPE_PERSON.getValue().toString() : PaymentScopeEnum.SCOPE_PERSON.getValue().toString() + "," + PaymentScopeEnum.SCOPE_COMPANY.getValue().toString()); + + toCreateAdjustHistoryList.add(adjustItem); + } + } + + } + //如果系统应用设置拆分了个人和公司福利基数,则对adjustBeforeComBaseJson,adjustAfterComBaseJson也进行处理 + if (welBaseDiffSign) { + //旧档案不存在基数信息,则直接遍历新的基数数据,生成调整记录;旧档案存在基数信息,则合并新旧基数数据,遍历合并后的技术数据中的key,生成调整记录。 + if(org.apache.commons.lang.StringUtils.isNotBlank(adjustInfo.getAdjustAfterComBaseJson()) && org.apache.commons.lang.StringUtils.isBlank(adjustInfo.getAdjustBeforeComBaseJson())) { + Map adjustAfterComBaseMap = JSON.parseObject(adjustInfo.getAdjustAfterComBaseJson(), new TypeReference>() { + }); + for (String key : adjustAfterComBaseMap.keySet()) { + InsuranceArchivesBaseHistoryPO adjustItem = new InsuranceArchivesBaseHistoryPO(); + BeanUtils.copyProperties(adjustInfo, adjustItem); + adjustItem.setAdjustWelfareItemId(Long.valueOf(key)); + adjustItem.setAdjustAfterBaseValue((String) adjustAfterComBaseMap.get(key)); + adjustItem.setOperateTime(now); + adjustItem.setOperator(creator); + adjustItem.setCreator(creator); + adjustItem.setCreateTime(now); + adjustItem.setUpdateTime(now); + adjustItem.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); + adjustItem.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); + adjustItem.setId(IdGenerator.generate()); + adjustItem.setPaymentScope(PaymentScopeEnum.SCOPE_COMPANY.getValue().toString()); + toCreateAdjustHistoryList.add(adjustItem); + } + } else if (org.apache.commons.lang.StringUtils.isNotBlank(adjustInfo.getAdjustAfterComBaseJson()) && org.apache.commons.lang.StringUtils.isNotBlank(adjustInfo.getAdjustBeforeComBaseJson())) { + Map adjustAfterComBaseMap = JSON.parseObject(adjustInfo.getAdjustAfterComBaseJson(), new TypeReference>() { + }); + Map adjustBeforeComBaseMap = JSON.parseObject(adjustInfo.getAdjustBeforeComBaseJson(), new TypeReference>() { + }); + Map reDealMap = new HashMap<>(); + if (adjustAfterComBaseMap != null) { + reDealMap.putAll(adjustAfterComBaseMap); + } + if (adjustBeforeComBaseMap != null) { + reDealMap.putAll(adjustBeforeComBaseMap); + } + if (reDealMap.size() >0) { + for (String key : reDealMap.keySet()) { + String beforeValue = (String) adjustBeforeComBaseMap.get(key); + String afterValue = (String) adjustAfterComBaseMap.get(key); + if (SalaryEntityUtil.empty2Zero(beforeValue).compareTo(SalaryEntityUtil.empty2Zero(afterValue)) == 0) { + continue; + } + InsuranceArchivesBaseHistoryPO adjustItem = new InsuranceArchivesBaseHistoryPO(); + BeanUtils.copyProperties(adjustInfo, adjustItem); + adjustItem.setAdjustWelfareItemId(Long.valueOf(key)); + adjustItem.setAdjustBeforeBaseValue(beforeValue); + adjustItem.setAdjustAfterBaseValue(afterValue); + adjustItem.setOperateTime(now); + adjustItem.setOperator(creator); + adjustItem.setCreator(creator); + adjustItem.setCreateTime(now); + adjustItem.setUpdateTime(now); + adjustItem.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); + adjustItem.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); + adjustItem.setId(IdGenerator.generate()); + adjustItem.setPaymentScope( PaymentScopeEnum.SCOPE_COMPANY.getValue().toString()); + + toCreateAdjustHistoryList.add(adjustItem); + } + } + + } + } + return toCreateAdjustHistoryList; + } + + /** + * 新增福利档案基数调整记录 + * + */ + @Override + public void batchInsertAdjustHistory(List adjustHistoryList) { + + if (org.apache.commons.collections.CollectionUtils.isEmpty(adjustHistoryList)) { + return; + } + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + InsuranceBaseAdjustHistoryMapper mapper = sqlSession.getMapper(InsuranceBaseAdjustHistoryMapper.class); + List> partition = Lists.partition(adjustHistoryList, 100); + partition.forEach(mapper::batchSave); + sqlSession.commit(); + } finally { + sqlSession.close(); + } + } + + public Map getBaseForm(WelfareTypeEnum welfareType, Long employeeId, Long paymentOrganization, Collection taxAgentPOS) { + Map data = new HashMap<>(16); + SalaryAssert.notNull(employeeId, SalaryI18nUtil.getI18nLabel(0, "员工id不可为空")); + List employeeByIds = getSalaryEmployeeService(user).getEmployeeByIdsAll(Collections.singletonList(employeeId)); + SalaryAssert.notEmpty(employeeByIds, SalaryI18nUtil.getI18nLabel(0, "员工信息不存在")); + DataCollectionEmployee item = employeeByIds.get(0); + + + if (welfareType == null) { + //基础信息表单 + InsuranceArchivesBaseDTO insuranceArchivesBaseDTO = InsuranceArchivesBaseDTO.builder().department(item.getDepartmentName()) + .hiredate(item.getCompanystartdate()) + .position(item.getJobtitleName()) + .username(item.getUsername()) + .telephone(item.getMobile()) + .dimissionDate(item.getDismissdate()) + .build(); + + data.put("data", insuranceArchivesBaseDTO); + return data; + } + + SISchemeBiz siSchemeBiz = new SISchemeBiz(); + List list = siSchemeBiz.listAll(); + // 过滤可见性范围 + list = filterList(list, taxAgentPOS); + List selectItems = new ArrayList<>(); + List addGroups = new ArrayList<>(); + List paymentOptions = paymentOrganizationOptions(taxAgentPOS); + List underTakeOptions = Arrays.stream(UndertakerEnum.values()) + .map(e -> new SearchConditionOption(e.getValue().toString(), e.getDefaultLabel())).collect(Collectors.toList()); + + + //返回数据 + switch (welfareType) { + case SOCIAL_SECURITY: + InsuranceArchivesSocialSchemeDTO insuranceArchivesSocialSchemeDTO = buildSocialForm(employeeId, paymentOrganization); + List socialList = list.stream().filter(e -> Objects.equals(e.getWelfareType(), WelfareTypeEnum.SOCIAL_SECURITY.getValue())).collect(Collectors.toList()); + List socialOptions = new ArrayList<>(); + socialList.forEach(social -> { + socialOptions.add(new SearchConditionOption(Util.null2String(social.getId()), social.getSchemeName())); + }); + SearchConditionItem socialName = SalaryFormItemUtil.selectItem(user, socialOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "社保方案名称"), "socialSchemeId"); + SearchConditionItem organizationName = SalaryFormItemUtil.selectItem(user, paymentOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "社保缴纳组织"), "paymentOrganization"); + SearchConditionItem underTakeName = SalaryFormItemUtil.selectItem(user, underTakeOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "社保个人实际承担方"), "underTake"); + + selectItems.add(socialName); + selectItems.add(organizationName); + selectItems.add(underTakeName); + + addGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "社保基础信息"), true, selectItems)); + data.put("data", insuranceArchivesSocialSchemeDTO); + data.put("items", addGroups); + break; + case ACCUMULATION_FUND: + InsuranceArchivesFundSchemeDTO insuranceArchivesFundSchemeDTO = buildFundForm(employeeId, paymentOrganization); + List fundList = list.stream().filter(e -> Objects.equals(e.getWelfareType(), WelfareTypeEnum.ACCUMULATION_FUND.getValue())).collect(Collectors.toList()); + List fundOptions = new ArrayList<>(); + fundList.forEach(social -> { + fundOptions.add(new SearchConditionOption(Util.null2String(social.getId()), social.getSchemeName())); + }); + SearchConditionItem fundName = SalaryFormItemUtil.selectItem(user, fundOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "公积金方案名称"), "fundSchemeId"); + SearchConditionItem organizationFundName = SalaryFormItemUtil.selectItem(user, paymentOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "公积金缴纳组织"), "paymentOrganization"); + SearchConditionItem underTakeFundName = SalaryFormItemUtil.selectItem(user, underTakeOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "公积金个人实际承担方"), "underTake"); + + selectItems.add(fundName); + selectItems.add(organizationFundName); + selectItems.add(underTakeFundName); + addGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "公积金基础信息"), true, selectItems)); + data.put("data", insuranceArchivesFundSchemeDTO); + data.put("items", addGroups); + break; + case OTHER: + InsuranceArchivesOtherSchemeDTO insuranceArchivesOtherSchemeDTO = buildOtherForm(employeeId, paymentOrganization); + List otherList = list.stream().filter(e -> Objects.equals(e.getWelfareType(), WelfareTypeEnum.OTHER.getValue())).collect(Collectors.toList()); + List otherOptions = new ArrayList<>(); + otherList.forEach(social -> { + otherOptions.add(new SearchConditionOption(Util.null2String(social.getId()), social.getSchemeName())); + }); + SearchConditionItem otherName = SalaryFormItemUtil.selectItem(user, otherOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "其他福利名称"), "otherSchemeId"); + SearchConditionItem organizationOtherName = SalaryFormItemUtil.selectItem(user, paymentOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "其他福利缴纳组织"), "paymentOrganization"); + SearchConditionItem underTakeOtherName = SalaryFormItemUtil.selectItem(user, underTakeOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "其他福利个人实际承担方"), "underTake"); + + selectItems.add(otherName); + selectItems.add(organizationOtherName); + selectItems.add(underTakeOtherName); + addGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "其他福利基础信息"), true, selectItems)); + data.put("data", insuranceArchivesOtherSchemeDTO); + data.put("items", addGroups); + break; + default: + } + return data; + } + + /*** + * @description 过滤没有权限访问的 + * @return List + * @author Harryxzy + * @date 2022/9/19 18:32 + */ + List filterList(List list, Collection taxAgentPOS){ + List ids = taxAgentPOS.stream().map(i -> String.valueOf(i.getId())).collect(Collectors.toList()); + List result = list.stream().filter(item -> { + boolean flag = true; + if (item.getSharedType()!= null && item.getSharedType().equals("1")) { + flag = false; + String taxAgentIds = item.getTaxAgentIds(); + if(org.apache.commons.lang.StringUtils.isNotBlank(taxAgentIds)){ + String splitFlag = ","; + String[] split = taxAgentIds.split(splitFlag); + for (int i = 0; i < split.length; i++) { + if (ids.contains(split[i])) { + flag = true; + } + } + } + } + return flag; + }).collect(Collectors.toList()); + return result; + } + + /** + * 社保缴纳组织 + * + * @return + */ + public List paymentOrganizationOptions(Collection taxAgentPOS) { + Collection list = taxAgentPOS; + if (org.apache.commons.collections.CollectionUtils.isEmpty(list)) { + return new ArrayList<>(); + } + return list + .stream() + .map(item -> new SearchConditionOption(String.valueOf(item.getId()), item.getName())).collect(Collectors.toList()); + } + + /** + * 其它基础表单 + * + * @param employeeId + * @return + */ + public InsuranceArchivesOtherSchemeDTO buildOtherForm(Long employeeId, Long paymentOrganization) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + OtherSchemeMapper otherSchemeMapper = sqlSession.getMapper(OtherSchemeMapper.class); + List otherList = otherSchemeMapper.getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .employeeId(employeeId) + .paymentOrganization(paymentOrganization) + .build()); + encryptUtil.decryptList(otherList, InsuranceArchivesOtherSchemePO.class); + InsuranceArchivesOtherSchemePO insuranceArchivesOtherSchemePO = otherList.size() != 0 ? otherList.get(0) : null; + InsuranceArchivesOtherSchemeDTO data = InsuranceArchivesBO.convertOtherPOtoDTO(insuranceArchivesOtherSchemePO, employeeId); + if (insuranceArchivesOtherSchemePO == null) { + data.setEmployeeId(employeeId); + data.setUnderTake(UndertakerEnum.SCOPE_PERSON.getValue().toString()); + } + return data; + } finally { + sqlSession.close(); + } + + } + + /** + * 公积金基础表单 + * + * @param employeeId + * @return + */ + public InsuranceArchivesFundSchemeDTO buildFundForm(Long employeeId, Long paymentOrganization) { + + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + FundSchemeMapper fundSchemeMapper = sqlSession.getMapper(FundSchemeMapper.class); + List fundList = fundSchemeMapper.getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .employeeId(employeeId) + .paymentOrganization(paymentOrganization) + .build()); + encryptUtil.decryptList(fundList, InsuranceArchivesFundSchemePO.class); + InsuranceArchivesFundSchemePO insuranceArchivesFundSchemePO = fundList.size() != 0 ? fundList.get(0) : null; + InsuranceArchivesFundSchemeDTO data = InsuranceArchivesBO.convertFundPOtoDTO(insuranceArchivesFundSchemePO, employeeId); + if (insuranceArchivesFundSchemePO == null) { + data.setEmployeeId(employeeId); + data.setUnderTake(UndertakerEnum.SCOPE_PERSON.getValue().toString()); + } + return data; + } finally { + sqlSession.close(); + } + + } + + /** + * 社保基础表单 + * + * @param employeeId + * @return + */ + public InsuranceArchivesSocialSchemeDTO buildSocialForm(Long employeeId, Long paymentOrganization) { + InsuranceArchivesSocialSchemePO insuranceArchivesSocialSchemePO = getSocialByEmployeeId(employeeId, paymentOrganization); + InsuranceArchivesSocialSchemeDTO data = InsuranceArchivesBO.convertSocialPOtoDTO(insuranceArchivesSocialSchemePO, employeeId); + if (insuranceArchivesSocialSchemePO == null) { + data.setEmployeeId(employeeId); + data.setUnderTake(UndertakerEnum.SCOPE_PERSON.getValue().toString()); + } + return data; + } + + /** + * 获取社保档案表 + * + * @param employeeId + * @return + */ + public InsuranceArchivesSocialSchemePO getSocialByEmployeeId(Long employeeId, Long paymentOrganization) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SocialSchemeMapper socialSchemeMapper = sqlSession.getMapper(SocialSchemeMapper.class); + List socialList = socialSchemeMapper.getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .employeeId(employeeId) + .paymentOrganization(paymentOrganization) + .build()); + encryptUtil.decryptList(socialList, InsuranceArchivesSocialSchemePO.class); + return socialList.size() != 0 ? socialList.get(0) : null; + } finally { + sqlSession.close(); + } + } + + /** + * 获取详细表单 + * + * @param user + * @param welfareType + * @param employeeId + * @param schemeId + * @return + */ + public Map getPaymentForm(User user, WelfareTypeEnum welfareType, Long employeeId, Long schemeId, Long paymentOrganization) { + Map data = new HashMap<>(16); + //判断是否要区分个人和单位福利基数 + SalarySysConfPO welBaseDiff = getSalarySysConfService(user).getOneByCode(WEL_BASE_DIFF_BY_PER_AND_COM); + boolean welBaseDiffSign = welBaseDiff != null && welBaseDiff.getConfValue().equals(OpenEnum.OPEN.getValue()); + //判断是否要自动调整基数 + SalarySysConfPO welBaseAutoAdjust = getSalarySysConfService(user).getOneByCode(WEL_BASE_AUTO_ADJUST); + boolean welBaseAutoAdjustSign = welBaseAutoAdjust != null && welBaseAutoAdjust.getConfValue().equals(OpenEnum.OPEN.getValue()); + + switch (welfareType) { + case SOCIAL_SECURITY: + data = buildSocialPaymentForm(user, employeeId, schemeId,welfareType.getValue(), paymentOrganization, welBaseDiffSign, welBaseAutoAdjustSign); + break; + case ACCUMULATION_FUND: + data = buildFundPaymentForm(user, employeeId, schemeId, welfareType.getValue(), paymentOrganization, welBaseDiffSign, welBaseAutoAdjustSign); + break; + case OTHER: + data = buildOtherPaymentForm(user, employeeId, schemeId, welfareType.getValue(), paymentOrganization, welBaseDiffSign, welBaseAutoAdjustSign); + break; + default: + } + return data; + } + + /** + * 其他payForm + * + * @param employeeId + * @param schemeId + * @return + */ + public Map buildOtherPaymentForm(User user, Long employeeId, Long schemeId, Integer welfareType, Long paymentOrganization, boolean welBaseDiffSign, boolean welBaseAutoAdjustSign) { + Map dataMap = new HashMap<>(); + InsuranceArchivesOtherSchemeDTO data = buildOtherForm(employeeId, paymentOrganization); + Map insuranceValueMap = new HashMap<>(); + Map insuranceComValueMap = new HashMap<>(); + if (data != null) { + insuranceValueMap = StrUtil.isNotBlank(data.getOtherPaymentBaseString()) + ? JSONObject.parseObject(data.getOtherPaymentBaseString(), new TypeReference>() {}) : new HashMap<>(); + if (welBaseDiffSign) { + insuranceComValueMap = StrUtil.isNotBlank(data.getOtherPaymentComBaseString()) + ? JSONObject.parseObject(data.getOtherPaymentComBaseString(), new TypeReference>() {}) : new HashMap<>(); + } + } + List addGroups = new ArrayList<>(); + List inputItems = buildPaymentBase(user, schemeId, welfareType, welBaseDiffSign); + //如果查询结果中存在 方案中缺失福利险种的值,设置初始值 + for (SearchConditionItem item : inputItems) { + String insuranceId = item.getDomkey().length > 0 ? item.getDomkey()[0] : null; + if (StrUtil.isNotBlank(insuranceId) && insuranceValueMap.get(insuranceId) == null) { + String basicValue = welBaseAutoAdjustSign ? ("0.000".equals(item.getMin()) ? "0" : item.getMin()) : "0"; + insuranceValueMap.put(insuranceId, basicValue); + } + } + dataMap.put("data", insuranceValueMap); + addGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "其他福利缴纳基数"), true, inputItems)); + dataMap.put("items", addGroups); + if (welBaseDiffSign) { + List addComGroups = new ArrayList<>(); + List inputComItems = buildPaymentComBase(user, schemeId, welfareType); + addComGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "其他福利缴纳基数"), true, inputComItems)); + dataMap.put("comItems", addComGroups); + + for (SearchConditionItem item : inputComItems) { + String insuranceId = item.getDomkey().length > 0 ? item.getDomkey()[0] : null; + if (StrUtil.isNotBlank(insuranceId) && insuranceComValueMap.get(insuranceId) == null) { + String basicValue = welBaseAutoAdjustSign ? ("0.000".equals(item.getMin()) ? "0" : item.getMin()) : "0"; + insuranceComValueMap.put(insuranceId, basicValue); + } + } + dataMap.put("comData", insuranceComValueMap); + } + return dataMap; + } + + /** + * 公积金payForm + * + * @param employeeId + * @param schemeId + * @return + */ + public Map buildFundPaymentForm(User user, Long employeeId, Long schemeId, Integer welfareType, Long paymentOrganization, boolean welBaseDiffSign, boolean welBaseAutoAdjustSign) { + + Map dataMap = new HashMap<>(); + InsuranceArchivesFundSchemeDTO data = buildFundForm(employeeId, paymentOrganization); + Map insuranceValueMap = new HashMap<>(); + Map insuranceComValueMap = new HashMap<>(); + if (data != null) { + insuranceValueMap = StrUtil.isNotBlank(data.getFundPaymentBaseString()) + ? JSONObject.parseObject(data.getFundPaymentBaseString(), new TypeReference>() {}) : new HashMap<>(); + if (welBaseDiffSign) { + insuranceComValueMap = StrUtil.isNotBlank(data.getFundPaymentComBaseString()) + ? JSONObject.parseObject(data.getFundPaymentComBaseString(), new TypeReference>() {}) : new HashMap<>(); + } + } + + List addGroups = new ArrayList<>(); + List inputItems = buildPaymentBase(user, schemeId, welfareType, welBaseDiffSign); + //如果查询结果中存在 方案中缺失福利险种的值,设置初始值 + for (SearchConditionItem item : inputItems) { + String insuranceId = item.getDomkey().length > 0 ? item.getDomkey()[0] : null; + if (StrUtil.isNotBlank(insuranceId) && insuranceValueMap.get(insuranceId) == null) { + String basicValue = welBaseAutoAdjustSign ? ("0.000".equals(item.getMin()) ? "0" : item.getMin()) : "0"; + insuranceValueMap.put(insuranceId, basicValue); + } + } + dataMap.put("data", insuranceValueMap); + addGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "公积金缴纳基数"), true, inputItems)); + dataMap.put("items", addGroups); + if (welBaseDiffSign) { + List addComGroups = new ArrayList<>(); + List inputComItems = buildPaymentComBase(user, schemeId, welfareType); + addComGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "公积金缴纳基数"), true, inputComItems)); + dataMap.put("comItems", addComGroups); + + for (SearchConditionItem item : inputComItems) { + String insuranceId = item.getDomkey().length > 0 ? item.getDomkey()[0] : null; + if (StrUtil.isNotBlank(insuranceId) && insuranceComValueMap.get(insuranceId) == null) { + String basicValue = welBaseAutoAdjustSign ? ("0.000".equals(item.getMin()) ? "0" : item.getMin()) : "0"; + insuranceComValueMap.put(insuranceId, basicValue); + } + } + dataMap.put("comData", insuranceComValueMap); + } + return dataMap; + } + + /** + * 社保payForm + * + * @param employeeId + * @param schemeId + * @return + */ + public Map buildSocialPaymentForm(User user, Long employeeId, Long schemeId, Integer welfareType, Long paymentOrganization, boolean welBaseDiffSign, boolean welBaseAutoAdjustSign) { + Map dataMap = new HashMap<>(); + InsuranceArchivesSocialSchemeDTO data = buildSocialForm(employeeId, paymentOrganization); + Map insuranceValueMap = new HashMap<>(); + Map insuranceComValueMap = new HashMap<>(); + if (data != null) { + insuranceValueMap = StrUtil.isNotBlank(data.getSchemePaymentBaseString()) + ? JSONObject.parseObject(data.getSchemePaymentBaseString(), new TypeReference>() {}) : new HashMap<>(); + if (welBaseDiffSign) { + insuranceComValueMap = StrUtil.isNotBlank(data.getSchemePaymentComBaseString()) + ? JSONObject.parseObject(data.getSchemePaymentComBaseString(), new TypeReference>() {}) : new HashMap<>(); + } + } + + List addGroups = new ArrayList<>(); + List inputItems = buildPaymentBase(user, schemeId, welfareType, welBaseDiffSign); + //如果查询结果中存在 方案中缺失福利险种的值,设置初始值 + for (SearchConditionItem item : inputItems) { + String insuranceId = item.getDomkey().length > 0 ? item.getDomkey()[0] : null; + if (StrUtil.isNotBlank(insuranceId) && insuranceValueMap.get(insuranceId) == null) { + String basicValue = welBaseAutoAdjustSign ? ("0.000".equals(item.getMin()) ? "0" : item.getMin()) : "0"; + insuranceValueMap.put(insuranceId, basicValue); + } + } + dataMap.put("data", insuranceValueMap); + addGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "社保缴纳基数"), true, inputItems)); + dataMap.put("items", addGroups); + if (welBaseDiffSign) { + List addComGroups = new ArrayList<>(); + List inputComItems = buildPaymentComBase(user, schemeId, welfareType); + addComGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "社保缴纳基数"), true, inputComItems)); + dataMap.put("comItems", addComGroups); + + for (SearchConditionItem item : inputComItems) { + String insuranceId = item.getDomkey().length > 0 ? item.getDomkey()[0] : null; + if (StrUtil.isNotBlank(insuranceId) && insuranceComValueMap.get(insuranceId) == null) { + String basicValue = welBaseAutoAdjustSign ? ("0.000".equals(item.getMin()) ? "0" : item.getMin()) : "0"; + insuranceComValueMap.put(insuranceId, basicValue); + } + } + dataMap.put("comData", insuranceComValueMap); + } + return dataMap; + + } + + /** + * 构造payment(items) + * + * @param schemeId + * @return + */ + public List buildPaymentBase(User user, Long schemeId, Integer welfareType, boolean welBaseDiffSign) { + List inputItems = new ArrayList<>(); + if (schemeId == null) { + return new ArrayList<>(); + } + List list = queryListByPrimaryIdIsPayment(schemeId, welfareType).stream() + .filter(f -> f.getPaymentScope().equals(PaymentScopeEnum.SCOPE_PERSON.getValue())).collect(Collectors.toList()); + if (!welBaseDiffSign) { + List perInsuranceIdList = list.stream().map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList()); + List moreComList = queryListByPrimaryIdIsPayment(schemeId, welfareType).stream() + .filter(f -> f.getPaymentScope().equals(PaymentScopeEnum.SCOPE_COMPANY.getValue()) && !perInsuranceIdList.contains(f.getInsuranceId())).collect(Collectors.toList()); + if (moreComList.size() > 0) { + list.addAll(moreComList); + } + } + + SICategoryBiz siCategoryBiz = new SICategoryBiz(); + list.forEach(insuranceSchemeDetail -> { + ICategoryPO iCategoryPO = siCategoryBiz.getByID(insuranceSchemeDetail.getInsuranceId()); + if (iCategoryPO != null) { +// inputItems.add(SalaryFormItemUtil.inputNumberItem(user, "precision:2", 2, 12, 2, iCategoryPO.getInsuranceName(), String.valueOf(insuranceSchemeDetail.getInsuranceId()))); + inputItems.add(SalaryFormItemUtil.inputNumberItemWithMaxAndMin(user, "precision:2", 2, 12, 2, iCategoryPO.getInsuranceName(), String.valueOf(insuranceSchemeDetail.getInsuranceId()) + , insuranceSchemeDetail.getUpperLimit(), insuranceSchemeDetail.getLowerLimit())); + } + }); + return inputItems; + } + + public List buildPaymentComBase(User user, Long schemeId, Integer welfareType) { + List inputItems = new ArrayList<>(); + if (schemeId == null) { + return new ArrayList<>(); + } + List list = queryListByPrimaryIdIsPayment(schemeId, welfareType).stream() + .filter(f -> f.getPaymentScope().equals(PaymentScopeEnum.SCOPE_COMPANY.getValue())).collect(Collectors.toList()); + SICategoryBiz siCategoryBiz = new SICategoryBiz(); + list.forEach(insuranceSchemeDetail -> { + ICategoryPO iCategoryPO = siCategoryBiz.getByID(insuranceSchemeDetail.getInsuranceId()); + if (iCategoryPO != null) { +// inputItems.add(SalaryFormItemUtil.inputNumberItem(user, "precision:2", 2, 12, 2, iCategoryPO.getInsuranceName(), String.valueOf(insuranceSchemeDetail.getInsuranceId()))); + inputItems.add(SalaryFormItemUtil.inputNumberItemWithMaxAndMin(user, "precision:2", 2, 12, 2, iCategoryPO.getInsuranceName(), String.valueOf(insuranceSchemeDetail.getInsuranceId()) + , insuranceSchemeDetail.getUpperLimit(), insuranceSchemeDetail.getLowerLimit())); + } + }); + return inputItems; + } + + /** + * 获取方案明细 + * + * @param schemeId + * @return + */ + public List queryListByPrimaryIdIsPayment(Long schemeId, Integer welfareType) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + InsuranceSchemeDetailMapper insuranceSchemeDetailMapper = sqlSession.getMapper(InsuranceSchemeDetailMapper.class); + List insuranceSchemeDetailPOS = insuranceSchemeDetailMapper.queryListByPrimaryIdIsPayment(schemeId, IsPaymentEnum.YES.getValue(), welfareType); + encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); + return insuranceSchemeDetailPOS; + } finally { + sqlSession.close(); + } + } + + public void otherSave(InsuranceArchivesSaveParam paramReq, User user, boolean welBaseDiffSign) { + long employeeId = user.getUID(); + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + OtherSchemeMapper otherSchemeMapper = sqlSession.getMapper(OtherSchemeMapper.class); + + InsuranceArchivesOtherSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesOtherSaveParam.class); + SalaryAssert.notNull(SalaryI18nUtil.getI18nLabel(0, "员工id为空"), param, param.getEmployeeId()); + + if (org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherStartTime()) && !SalaryDateUtil.checkYearMonth(param.getOtherStartTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "其他福利起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } + if (org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherEndTime()) && !SalaryDateUtil.checkYearMonth(param.getOtherEndTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "其他福利最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } + + List otherIds = new ArrayList(); + otherIds.add(param.getId()); + List oldOtherInfoList = otherSchemeMapper.getOtherById(otherIds); + + //设置福利档案基数调整记录数据 + InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() + .adjustAfterSchemeId(param.getOtherSchemeId()) + .adjustAfterBaseJson(paramReq.getPaymentForm()) + .adjustAfterComBaseJson(paramReq.getPaymentComForm()) + .welfareType(paramReq.getWelfareType().getValue()) + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build(); + + if (oldOtherInfoList.size() == 1) { + InsuranceArchivesOtherSchemePO oldOtherInfo = oldOtherInfoList.get(0); + //设置福利档案基数调整记录数据 + encryptUtil.decrypt(oldOtherInfo, InsuranceArchivesOtherSchemePO.class); + adjustInfo.setAdjustBeforeBaseJson(oldOtherInfo.getOtherPaymentBaseString()); + adjustInfo.setAdjustBeforeSchemeId(oldOtherInfo.getOtherSchemeId()); + adjustInfo.setAdjustBeforeComBaseJson(oldOtherInfo.getOtherPaymentComBaseString()); + //新数据 + InsuranceArchivesOtherSchemePO updateOtherInfo = + InsuranceArchivesOtherSchemePO.builder() + .id(oldOtherInfo.getId()) + .otherSchemeId(param.getOtherSchemeId()) + .otherStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherStartTime()) ? param.getOtherStartTime() : null) + .underTake(param.getUnderTake()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .welfareType(paramReq.getWelfareType().getValue()) + .otherEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherEndTime()) ? param.getOtherEndTime() : null) + .employeeId(param.getEmployeeId()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .updateTime(new Date()) + .nonPayment(param.getNonPayment()) + .creator(employeeId) + .paymentOrganization(param.getPaymentOrganization()) + .otherPaymentBaseString(paramReq.getPaymentForm()) + .build(); + //校验福利基数是否符合上下限要求, + if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + //需要拆分个人和公司福利基数时 + if (welBaseDiffSign) { + updateOtherInfo.setOtherPaymentComBaseString(paramReq.getPaymentComForm()); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + } + encryptUtil.encrypt(updateOtherInfo, InsuranceArchivesOtherSchemePO.class); + otherSchemeMapper.updateById(updateOtherInfo); + //更新base_info表状态 + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null && baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + //对于非系统人员,编辑后状态切换为正在缴纳 + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); + } + baseInfoPO.setOtherArchivesId(updateOtherInfo.getId()); + getInsuranceBaseInfoMapper().updateById(baseInfoPO); + sqlSession.commit(); + } else { + otherSchemeMapper.deleteByEmployeeIdAndPayOrg(InsuranceArchivesOtherSchemePO.builder() + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build()); + //新建社保档案,并关联主表 + InsuranceArchivesOtherSchemePO insertOtherInfo = InsuranceArchivesOtherSchemePO.builder() + .otherSchemeId(param.getOtherSchemeId()) + .otherStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherStartTime()) ? param.getOtherStartTime() : null) + .underTake(param.getUnderTake()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .welfareType(paramReq.getWelfareType().getValue()) + .otherEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherEndTime()) ? param.getOtherEndTime() : null) + .employeeId(param.getEmployeeId()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .createTime(new Date()) + .updateTime(new Date()) + .nonPayment(param.getNonPayment()) + .creator(employeeId) + .paymentOrganization(param.getPaymentOrganization()) + .otherPaymentBaseString(paramReq.getPaymentForm()) + .build(); + //校验福利基数是否符合上下限要求, + if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + //需要拆分个人和公司福利基数时 + if (welBaseDiffSign) { + insertOtherInfo.setOtherPaymentComBaseString(paramReq.getPaymentComForm()); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + } + encryptUtil.encrypt(insertOtherInfo, InsuranceArchivesOtherSchemePO.class); + otherSchemeMapper.insert(insertOtherInfo); + sqlSession.commit(); + + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null) { + List otherInfos = otherSchemeMapper.getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build()); + baseInfoPO.setOtherArchivesId(otherInfos.get(0).getId()); + //对于非系统人员,编辑后状态切换为正在缴纳 + if (baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); + } + getInsuranceBaseInfoMapper().updateById(baseInfoPO); + } else { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); + } + } + + //生成福利档案基数调整记录数据 + List adjustHistoryList = createAdjustInfo(adjustInfo, employeeId); + //福利档案基数调整记录数据入库 + batchInsertAdjustHistory(adjustHistoryList); + + } finally { + sqlSession.close(); + } + } + + /** + * @param paramReq + * @param + */ + public void fundSave(InsuranceArchivesSaveParam paramReq, User user, boolean welBaseDiffSign) { + long employeeId = user.getUID(); + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + FundSchemeMapper fundSchemeMapper = sqlSession.getMapper(FundSchemeMapper.class); + InsuranceArchivesFundSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesFundSaveParam.class); + SalaryAssert.notNull(SalaryI18nUtil.getI18nLabel(0,"员工id为空"), param, param.getEmployeeId()); + + if (org.apache.commons.lang.StringUtils.isNotBlank(param.getFundStartTime()) && !SalaryDateUtil.checkYearMonth(param.getFundStartTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "公积金起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } + if (org.apache.commons.lang.StringUtils.isNotBlank(param.getFundEndTime()) && !SalaryDateUtil.checkYearMonth(param.getFundEndTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "公积金最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } + + List fundIds = new ArrayList(); + fundIds.add(param.getId()); + List oldFundInfoList = fundSchemeMapper.getFundById(fundIds); + + //设置福利档案基数调整记录数据 + InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() + .adjustAfterSchemeId(param.getFundSchemeId()) + .adjustAfterBaseJson(paramReq.getPaymentForm()) + .adjustAfterComBaseJson(paramReq.getPaymentComForm()) + .welfareType(paramReq.getWelfareType().getValue()) + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build(); + + if (oldFundInfoList.size() == 1) { + InsuranceArchivesFundSchemePO oldFundInfo = oldFundInfoList.get(0); + //设置福利档案基数调整记录数据 + encryptUtil.decrypt(oldFundInfo, InsuranceArchivesFundSchemePO.class); + adjustInfo.setAdjustBeforeBaseJson(oldFundInfo.getFundPaymentBaseString()); + adjustInfo.setAdjustBeforeSchemeId(oldFundInfo.getFundSchemeId()); + adjustInfo.setAdjustBeforeComBaseJson(oldFundInfo.getFundPaymentComBaseString()); + //新数据 + InsuranceArchivesFundSchemePO updateFundInfo = InsuranceArchivesFundSchemePO.builder() + .id(oldFundInfo.getId()) + .fundSchemeId(param.getFundSchemeId()) + .fundAccount(param.getFundAccount()) + .fundEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getFundEndTime()) ? param.getFundEndTime() : null) + .fundStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getFundStartTime()) ? param.getFundStartTime() : null) + .fundPaymentBaseString(paramReq.getPaymentForm()) + .supplementFundAccount(param.getSupplementFundAccount()) + .creator(employeeId) + .nonPayment(param.getNonPayment()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .underTake(param.getUnderTake()) + .paymentOrganization(param.getPaymentOrganization()) + .updateTime(new Date()) + .welfareType(paramReq.getWelfareType().getValue()) + .employeeId(param.getEmployeeId()) + .build(); + //校验福利基数是否符合上下限要求, + if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + //需要拆分个人和公司福利基数时 + if (welBaseDiffSign) { + updateFundInfo.setFundPaymentComBaseString(paramReq.getPaymentComForm()); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + } + encryptUtil.encrypt(updateFundInfo, InsuranceArchivesFundSchemePO.class); + fundSchemeMapper.updateById(updateFundInfo); + //更新base_info表状态 + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null && baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + //对于非系统人员,编辑后状态切换为正在缴纳 + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); + } + baseInfoPO.setFundArchivesId(updateFundInfo.getId()); + getInsuranceBaseInfoMapper().updateById(baseInfoPO); + sqlSession.commit(); + } else { + fundSchemeMapper.deleteByEmployeeIdAndPayOrg(InsuranceArchivesFundSchemePO.builder() + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build()); + //新建社保档案,并关联主表 + InsuranceArchivesFundSchemePO insertFundInfo = InsuranceArchivesFundSchemePO.builder() + .fundSchemeId(param.getFundSchemeId()) + .fundAccount(param.getFundAccount()) + .fundEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getFundEndTime()) ? param.getFundEndTime() : null) + .fundStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getFundStartTime()) ? param.getFundStartTime() : null) + .fundPaymentBaseString(paramReq.getPaymentForm()) + .supplementFundAccount(param.getSupplementFundAccount()) + .creator(employeeId) + .nonPayment(param.getNonPayment()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .underTake(param.getUnderTake()) + .paymentOrganization(param.getPaymentOrganization()) + .createTime(new Date()) + .updateTime(new Date()) + .welfareType(paramReq.getWelfareType().getValue()) + .employeeId(param.getEmployeeId()) + .build(); + //校验福利基数是否符合上下限要求, + if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + //需要拆分个人和公司福利基数时 + if (welBaseDiffSign) { + insertFundInfo.setFundPaymentComBaseString(paramReq.getPaymentComForm()); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + } + encryptUtil.encrypt(insertFundInfo, InsuranceArchivesFundSchemePO.class); + fundSchemeMapper.insert(insertFundInfo); + sqlSession.commit(); + + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null) { + List fundInfos = fundSchemeMapper.getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build()); + baseInfoPO.setFundArchivesId(fundInfos.get(0).getId()); + //对于非系统人员,编辑后状态切换为正在缴纳 + if (baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); + } + getInsuranceBaseInfoMapper().updateById(baseInfoPO); + } else { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); + } + + } + + //生成福利档案基数调整记录数据 + List adjustHistoryList = createAdjustInfo(adjustInfo, employeeId); + //福利档案基数调整记录数据入库 + batchInsertAdjustHistory(adjustHistoryList); + + } finally { + sqlSession.close(); + } + + } + + /** + * @param paramReq + * @param + */ + public void socialSave(InsuranceArchivesSaveParam paramReq, User user, boolean welBaseDiffSign) { + long employeeId = user.getUID(); + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SocialSchemeMapper socialSchemeMapper = sqlSession.getMapper(SocialSchemeMapper.class); + + InsuranceArchivesSocialSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesSocialSaveParam.class); + SalaryAssert.notNull(SalaryI18nUtil.getI18nLabel(0,"员工id为空"), param, param.getEmployeeId()); + + if (org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialStartTime()) && !SalaryDateUtil.checkYearMonth(param.getSocialStartTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "社保起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } + if (org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialEndTime()) && !SalaryDateUtil.checkYearMonth(param.getSocialEndTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "社保最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } + +// //删除社保数据 +// socialSchemeMapper.batchDeleteByEmployeeIds(Collections.singletonList(param.getEmployeeId())); + + //查询已有数据 + List socialIds = new ArrayList(); + socialIds.add(param.getId()); + List oldSocialInfoList = socialSchemeMapper.getSocialById(socialIds); + + //设置福利档案基数调整记录数据 + InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() + .adjustAfterSchemeId(param.getSocialSchemeId()) + .adjustAfterBaseJson(paramReq.getPaymentForm()) + .adjustAfterComBaseJson(paramReq.getPaymentComForm()) + .welfareType(paramReq.getWelfareType().getValue()) + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build(); + + //组装新数据 + if (oldSocialInfoList.size() == 1) { + //老数据 + InsuranceArchivesSocialSchemePO oldSocialInfo = oldSocialInfoList.get(0); + //设置福利档案基数调整记录数据 + encryptUtil.decrypt(oldSocialInfo, InsuranceArchivesSocialSchemePO.class); + adjustInfo.setAdjustBeforeBaseJson(oldSocialInfo.getSocialPaymentBaseString()); + adjustInfo.setAdjustBeforeSchemeId(oldSocialInfo.getSocialSchemeId()); + adjustInfo.setAdjustBeforeComBaseJson(oldSocialInfo.getSocialPaymentComBaseString()); + //新数据 + InsuranceArchivesSocialSchemePO updateSocialInfo = + InsuranceArchivesSocialSchemePO.builder() + .id(oldSocialInfo.getId()) + .welfareType(paramReq.getWelfareType().getValue()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .socialPaymentBaseString(paramReq.getPaymentForm()) + .socialSchemeId(param.getSocialSchemeId()) + .socialEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialEndTime()) ? param.getSocialEndTime() : null) + .socialStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialStartTime()) ? param.getSocialStartTime() : null) + .creator(employeeId) + .nonPayment(param.getNonPayment()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .employeeId(param.getEmployeeId()) + .updateTime(new Date()) + .underTake(param.getUnderTake()) + .socialAccount(param.getSchemeAccount()) + .paymentOrganization(param.getPaymentOrganization()) + .build(); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + //需要拆分个人和公司福利基数时 + if (welBaseDiffSign) { + updateSocialInfo.setSocialPaymentComBaseString(paramReq.getPaymentComForm()); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + } + encryptUtil.encrypt(updateSocialInfo, InsuranceArchivesSocialSchemePO.class); + socialSchemeMapper.updateById(updateSocialInfo); + //更新base_info表状态 + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null && baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + //对于非系统人员,编辑后状态切换为正在缴纳 + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); + } + baseInfoPO.setSocialArchivesId(updateSocialInfo.getId()); + getInsuranceBaseInfoMapper().updateById(baseInfoPO); + sqlSession.commit(); + } else { + socialSchemeMapper.deleteByEmployeeIdAndPayOrg(InsuranceArchivesSocialSchemePO.builder() + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build()); + //新建社保档案,并关联主表 + InsuranceArchivesSocialSchemePO insertSocialInfo = + InsuranceArchivesSocialSchemePO.builder() + .welfareType(paramReq.getWelfareType().getValue()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .socialPaymentBaseString(paramReq.getPaymentForm()) + .socialSchemeId(param.getSocialSchemeId()) + .socialEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialEndTime()) ? param.getSocialEndTime() : null) + .socialStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialStartTime()) ? param.getSocialStartTime() : null) + .creator(employeeId) + .nonPayment(param.getNonPayment()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .employeeId(param.getEmployeeId()) + .createTime(new Date()) + .updateTime(new Date()) + .underTake(param.getUnderTake()) + .socialAccount(param.getSchemeAccount()) + .paymentOrganization(param.getPaymentOrganization()) + .build(); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + //需要拆分个人和公司福利基数时 + if (welBaseDiffSign) { + insertSocialInfo.setSocialPaymentComBaseString(paramReq.getPaymentComForm()); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + } + encryptUtil.encrypt(insertSocialInfo, InsuranceArchivesSocialSchemePO.class); + socialSchemeMapper.insert(insertSocialInfo); + sqlSession.commit(); + + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null) { + List socialInfos = socialSchemeMapper.getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build()); + baseInfoPO.setSocialArchivesId(socialInfos.get(0).getId()); + //对于非系统人员,编辑后状态切换为正在缴纳 + if (baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); + } + getInsuranceBaseInfoMapper().updateById(baseInfoPO); + } else { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); + } + + } + + //生成福利档案基数调整记录数据 + List adjustHistoryList = createAdjustInfo(adjustInfo, employeeId); + //福利档案基数调整记录数据入库 + batchInsertAdjustHistory(adjustHistoryList); + } finally { + sqlSession.close(); + } + } + + /** + * 校验福利基数是否符合上下限要求 + * @param primaryId + * @param paymentBaseString + * @return + */ + @Override + public Boolean checkWelBaseLimit(Long primaryId, String paymentBaseString, Integer paymentScope) { + + if (primaryId ==null || paymentBaseString == null) { + return true; + } + Map paymentBaseJson = JSON.parseObject(paymentBaseString, new HashMap().getClass()); + if (paymentBaseJson == null) { + return true; + } + + for (Map.Entry entry : paymentBaseJson.entrySet()) { + + //判断福利值是否为空/数字 + if (entry.getValue() == null || entry.getValue().length() == 0) { + continue; + } else if (!isNumeric(entry.getValue())) { + log.info("福利值非数字!"); + return false; + } + + //根据福利方案id、险种id、缴纳对象、缴费状态查询明细 + List insuranceSchemeDetailPOList = getInsuranceSchemeDetailMapper().getByPI(primaryId, Long.valueOf(entry.getKey())); + log.info("福利方案id: {},, 福利明细项id:{}", primaryId, Long.valueOf(entry.getKey())); + if (insuranceSchemeDetailPOList.size() == 0) { + log.info("根据福利方案id、险种id、缴纳对象查询明细为null!福利方案id: {}, 福利明细项id:{}", primaryId, Long.valueOf(entry.getKey())); + return false; + } + List isPaymentList = insuranceSchemeDetailPOList.stream() + .filter(f -> f.getIsPayment().equals(IsPaymentEnum.YES.getValue()) && f.getPaymentScope().equals(paymentScope)).collect(Collectors.toList()); + if (isPaymentList.size() > 0) { + InsuranceSchemeDetailPO insuranceSchemeDetailPO = isPaymentList.get(0); + + encryptUtil.decrypt(insuranceSchemeDetailPO, InsuranceSchemeDetailPO.class); + String lowerLimit = "0.000".equals(insuranceSchemeDetailPO.getLowerLimit()) ? null : insuranceSchemeDetailPO.getLowerLimit(); + String upperLimit = "0.000".equals(insuranceSchemeDetailPO.getUpperLimit()) ? null : insuranceSchemeDetailPO.getUpperLimit(); + if (lowerLimit != null && lowerLimit.length() > 0 && Double.parseDouble(entry.getValue()) < Double.parseDouble(lowerLimit)) { + //数值低于对应福利明细下限 + log.info("社保基数 {} 数值 {} 低于对应福利明细下限 {}!", entry.getKey(), entry.getValue(), lowerLimit); + return false; + } + if (upperLimit != null && upperLimit.length() > 0 && Double.parseDouble(entry.getValue()) > Double.parseDouble(upperLimit)) { + //数值高于对应福利明细上限 + log.info("社保基数 {} 数值 {} 高于对应福利明细上限 {} !", entry.getKey(), entry.getValue(), upperLimit); + return false; + } + } else { + log.info("福利明细项属于未缴费状态,不对上下限进行约束"); + } + + + } + return true; + } + + + /** + * 校验福利基数是否符合上下限要求,并返回符合要求的数据 + * @param primaryId + * @param paymentBaseString + * @return + */ + @Override + public String checkAndBuildWelBaseWithLimit(Long primaryId, String paymentBaseString, Integer paymentScope) { + + if (primaryId ==null || paymentBaseString == null) { + return paymentBaseString; + } + Map paymentBaseJson = JSON.parseObject(paymentBaseString, HashMap.class); + Map newPaymentBaseJson = JSON.parseObject(paymentBaseString, HashMap.class); + if (paymentBaseJson == null) { + return null; + } + + for (Map.Entry entry : paymentBaseJson.entrySet()) { + + //判断福利值是否为空/数字 + if (entry.getValue() == null || entry.getValue().length() == 0) { + continue; + } else if (!isNumeric(entry.getValue())) { + log.info("福利值非数字!"); + newPaymentBaseJson.remove(entry.getKey()); + continue; + } + //根据福利方案id、险种id + List insuranceSchemeDetailPOList = getInsuranceSchemeDetailMapper().getByPI(primaryId, Long.valueOf(entry.getKey())); + log.info("福利方案id: {},, 福利明细项id:{}", primaryId, Long.valueOf(entry.getKey())); + if (insuranceSchemeDetailPOList.size() == 0) { + log.info("根据福利方案id、险种id、缴纳对象查询明细为null!福利方案id: {}, 福利明细项id:{}", primaryId, Long.valueOf(entry.getKey())); + newPaymentBaseJson.remove(entry.getKey()); + continue; + } + List checkList = insuranceSchemeDetailPOList.stream() + .filter(f -> f.getPaymentScope().equals(paymentScope)).collect(Collectors.toList()); + if (checkList.size() > 0) { + InsuranceSchemeDetailPO insuranceSchemeDetailPO = checkList.get(0); + encryptUtil.decrypt(insuranceSchemeDetailPO, InsuranceSchemeDetailPO.class); + String lowerLimit = "0.000".equals(insuranceSchemeDetailPO.getLowerLimit()) ? null : insuranceSchemeDetailPO.getLowerLimit(); + String upperLimit = "0.000".equals(insuranceSchemeDetailPO.getUpperLimit()) ? null : insuranceSchemeDetailPO.getUpperLimit(); + if (lowerLimit != null && lowerLimit.length() > 0 && Double.parseDouble(entry.getValue()) < Double.parseDouble(lowerLimit)) { + //数值低于对应福利明细下限 + log.info("社保基数 {} 数值 {} 低于对应福利明细下限 {}!", entry.getKey(), entry.getValue(), lowerLimit); + newPaymentBaseJson.put(entry.getKey(), lowerLimit); + } + if (upperLimit != null && upperLimit.length() > 0 && Double.parseDouble(entry.getValue()) > Double.parseDouble(upperLimit)) { + //数值高于对应福利明细上限 + log.info("社保基数 {} 数值 {} 高于对应福利明细上限 {} !", entry.getKey(), entry.getValue(), upperLimit); + newPaymentBaseJson.put(entry.getKey(), upperLimit); + } + } + } + return JSON.toJSONString(newPaymentBaseJson); + } + + /** + * 判断字符串是否为整数或者小数或者负数 + */ + public static boolean isNumeric(String str){ + + Pattern pattern = Pattern.compile("^-?\\d+(\\.\\d+)?$"); + Matcher isNum = pattern.matcher(str); + if (!isNum.matches()) { + return false; + } + return true; + + } + + /** + * 档案列表 + *

+ * 这里是一个含有比较多动态字段的列表,用的是手动拼装的方式 + * + * @param param 高级搜索条件 + * @param operateId 操作员id + * @return table + */ + public Map listPage(InsuranceArchivesListParam param, long operateId) { + Map apidatas = new HashMap<>(16); + InsuranceArchivesListParam request = InsuranceArchivesListParam.builder().build(); + if (param.getHireDate() != null && param.getHireDate().length == 2) { + param.setHiredateStart(param.getHireDate()[0]); + param.setHiredateEnd(param.getHireDate()[1]); + } + if (param.getDimissionDate() != null && param.getDimissionDate().length == 2) { + param.setDimissionDateStart(param.getDimissionDate()[0]); + param.setDimissionDateEnd(param.getDimissionDate()[1]); + } + + if (org.apache.commons.lang.StringUtils.isNotBlank(param.getDepartmentIdsStr())) { + request.setDepartmentIds(Arrays.stream(param.getDepartmentIdsStr().split(",")).map(BigDecimal::new).collect(Collectors.toList())); + } + + if (org.apache.commons.lang.StringUtils.isNotBlank(param.getSubcompanyIdsStr())) { + request.setSubcompanyIds(Arrays.stream(param.getSubcompanyIdsStr().split(",")).map(BigDecimal::new).collect(Collectors.toList())); + } + + + if (org.apache.commons.lang.StringUtils.isNotBlank(param.getPositionsStr())) { + request.setPositions(Arrays.stream(param.getPositionsStr().split(",")).map(BigDecimal::new).collect(Collectors.toList())); + } + + if (org.apache.commons.lang.StringUtils.isNotBlank(param.getStatusesStr())) { + request.setStatuses(Arrays.stream(param.getStatusesStr().split(",")).map(String::new).collect(Collectors.toList())); + } + + request.setNeedAuth(param.getNeedAuth()); + request.setTaxAgentEmployeeIds(param.getTaxAgentEmployeeIds()); + request.setTaxAgentIds(param.getTaxAgentIds()); + + Integer current = param.getCurrent() == null ? 1 : param.getCurrent(); + Integer pageSize = param.getPageSize() == null ? 10 : param.getPageSize(); + long startNum = (current - 1) * pageSize; + param.setStartNum(startNum); + param.setPageSize(pageSize); +// request.setStatuses(param.getStatuses()); + request.setKeyword(param.getUserName()); + + request.setSiSchemeId(param.getSiSchemeId()); + request.setFundSchemeId(param.getFundSchemeId()); + request.setOtherSchemeId(param.getOtherSchemeId()); + + request.setPageSize(param.getPageSize()); + request.setCurrent(param.getCurrent()); + + request.setJobNum(param.getJobNum()); + + request.setOrderRule(param.getOrderRule()); + + request.setRunStatuses(param.getRunStatuses()); + + request.setTaxAgentId(param.getTaxAgentId()); + + request.setExtWelArchiveList(param.isExtWelArchiveList()); + + apidatas = listPageEmployeePOS(request, operateId); + + return apidatas; + } + + /** + * 获取员工的基本信息 + *

+ * 此处主要是一个公共接口,有多处引用。我们薪资系统只保存员工id(employeeId), + * 但是页面上需要展示员工的更多信息(姓名,部门,状态。。。), + * 所以这里主要是用于接收联表数据的一个接口 + * + * @param param 高级搜索条件,用于过滤数据 + * @param operateId 操作员id + * @return list + */ + public Map listPageEmployeePOS(InsuranceArchivesListParam param, long operateId) { + //是否分权 + Boolean needAuth = param.getNeedAuth(); + StopWatch sw = new StopWatch(); + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + Map datas = new HashMap<>(16); + try { + SocialSchemeMapper socialSchemeMapper = sqlSession.getMapper(SocialSchemeMapper.class); + List page = new ArrayList<>(); + PageInfo pageInfo = new PageInfo<>(InsuranceArchivesEmployeePO.class); + //获取福利档案列表数据 + if (needAuth) { + Collection taxAgentEmployeeIds = param.getTaxAgentEmployeeIds(); + Collection taxAgentIds = param.getTaxAgentIds(); + log.info("从数据库获取档案列表数据开始"); + sw.start("获取福利档案列表数据"); + if (param.isExtWelArchiveList()) { + page = socialSchemeMapper.queryExtEmployeeList(param); + } else { + page = socialSchemeMapper.queryEmployeeList(param); + } + sw.stop(); + log.info("从数据库获取档案列表数据完成!"); + page = page.stream().filter(f -> +// taxAgentEmployeeIds.contains(f.getEmployeeId())|| + taxAgentIds.contains(f.getPaymentOrganization()) + ).collect(Collectors.toList()); + // 填充总数和当页数据 + // 分页参数 + pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), InsuranceArchivesEmployeePO.class); + pageInfo.setTotal(page.size()); + pageInfo.setList(SalaryPageUtil.subList(pageInfo.getPageNum(), pageInfo.getPageSize(), page)); + } else { + log.info("从数据库获取档案列表数据开始"); + sw.start("获取档案列表数据"); + if (param.isExtWelArchiveList()) { + page = socialSchemeMapper.queryExtEmployeeList(param); + } else { + page = socialSchemeMapper.queryEmployeeList(param); + } + sw.stop(); + log.info("从数据库获取档案列表数据完成!"); + pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), + page, InsuranceArchivesEmployeePO.class); + } + List> records = null; + log.info("buildTableData方法处理福利档案列表数据开始"); + sw.start("buildTableData方法处理福利档案列表数据"); + if (param.getExportData() != null && param.getExportData()) { + records = buildTableData(pageInfo.getList(), true); + } else { + records = buildTableData(pageInfo.getList(), false); + } + sw.stop(); + log.info("buildTableData方法处理福利档案列表数据完成!"); + + log.info("buildWeaTableColumns方法处理福利档案列表数据开始"); + sw.start("buildWeaTableColumns方法处理福利档案列表数据"); + List columns = buildWeaTableColumns(pageInfo.getList()); + sw.stop(); + log.info("buildWeaTableColumns方法处理福利档案列表数据完成!"); + WeaTable table = new WeaTable(); + table.setColumns(columns); + //设置check是否可用 + List checkboxpopedomList = new ArrayList<>(); + WeaTableCheckboxpopedom checkboxpopedom = new WeaTableCheckboxpopedom(); + checkboxpopedom.setPopedompara("column:system_type"); + checkboxpopedom.setShowmethod("com.engine.salary.transmethod.TaxRateTransMethod.getCheckBoxPopedom"); + checkboxpopedomList.add(checkboxpopedom); + table.setCheckboxList(checkboxpopedomList); + table.setCheckboxpopedom(null); + + WeaResultMsg result = new WeaResultMsg(false); + result.putAll(table.makeDataResult()); + result.success(); + + datas.put("pageInfo", pageInfo); + datas.put("datas", records); + datas.put("columns", columns); + datas.put("dataKey", result.getResultMap()); + + log.info("各操作计时 {}", sw.prettyPrint()); + return datas; + + } finally { + sqlSession.close(); + } + } + + /** + * 高级搜索 + * + * @return + */ + public Map getSearchCondition() { + + List userStatusOptions = Arrays.stream(UserStatusEnum.values()).map(e -> new SearchConditionOption(String.valueOf(e.getValue()), e.getDefaultLabel())).collect(Collectors.toList()); + List list = new SISchemeBiz().listAll(); + + List schemeOption = list.stream().filter(item -> Objects.equals(item.getWelfareType(), WelfareTypeEnum.SOCIAL_SECURITY.getValue())) + .collect(Collectors.toList()) + .stream().map(item -> new SearchConditionOption(item.getId().toString(), item.getSchemeName())).collect(Collectors.toList()); + + List fundOption = list.stream().filter(item -> Objects.equals(item.getWelfareType(), WelfareTypeEnum.ACCUMULATION_FUND.getValue())) + .collect(Collectors.toList()) + .stream().map(item -> new SearchConditionOption(item.getId().toString(), item.getSchemeName())).collect(Collectors.toList()); + + List otherOption = list.stream().filter(item -> Objects.equals(item.getWelfareType(), WelfareTypeEnum.OTHER.getValue())) + .collect(Collectors.toList()) + .stream().map(item -> new SearchConditionOption(item.getId().toString(), item.getSchemeName())).collect(Collectors.toList()); + + List> taxAgentList = getTaxAgentWrapper(user).selectListAsAdmin(); + List taxAgentOption = taxAgentList.stream().map(item -> new SearchConditionOption(item.get("id").toString(), item.get("content").toString())).collect(Collectors.toList()); + + + Map apidatas = new HashMap(); + ConditionFactory conditionFactory = new ConditionFactory(user); + + //条件组 + List addGroups = new ArrayList(); + + List conditionItems = new ArrayList(); + + //文本输入框 + SearchConditionItem username = conditionFactory.createCondition(ConditionType.INPUT, 25034, "username"); + username.setInputType("input"); + username.setColSpan(2);//定义一行显示条件数,默认值为2,当值为1时标识该条件单独占一行 + username.setFieldcol(16); //条件输入框所占宽度,默认值18 + username.setLabelcol(8); + username.setViewAttr(2); // 编辑权限 1:只读,2:可编辑, 3:必填 默认2 + username.setLabel(SalaryI18nUtil.getI18nLabel(0,"姓名")); //设置文本值 这个将覆盖多语言标签的值 + conditionItems.add(username); + + //文本输入框 + SearchConditionItem jobNum = conditionFactory.createCondition(ConditionType.INPUT, 25034, "jobNum"); + jobNum.setInputType("input"); + jobNum.setColSpan(2);//定义一行显示条件数,默认值为2,当值为1时标识该条件单独占一行 + jobNum.setFieldcol(16); //条件输入框所占宽度,默认值18 + jobNum.setLabelcol(8); + jobNum.setViewAttr(2); // 编辑权限 1:只读,2:可编辑, 3:必填 默认2 + jobNum.setLabel(SalaryI18nUtil.getI18nLabel(0,"工号")); //设置文本值 这个将覆盖多语言标签的值 + conditionItems.add(jobNum); + + + SearchConditionItem departmentIds = conditionFactory.createCondition(ConditionType.BROWSER, 502329, "departmentIdsStr", "57"); + departmentIds.setColSpan(2); + departmentIds.setFieldcol(16); + departmentIds.setLabelcol(8); + departmentIds.setLabel(SalaryI18nUtil.getI18nLabel(0,"部门")); + conditionItems.add(departmentIds); + + + SearchConditionItem statuses = conditionFactory.createCondition(ConditionType.SELECT, 502327, "statusesStr"); + statuses.setInputType("select"); + statuses.setMultiple(true); + statuses.setOptions(userStatusOptions); + statuses.setColSpan(2); + statuses.setFieldcol(16); + statuses.setLabelcol(8); + statuses.setIsQuickSearch(true); + statuses.setLabel(SalaryI18nUtil.getI18nLabel(0,"状态")); + conditionItems.add(statuses); + + + SearchConditionItem positions = conditionFactory.createCondition(ConditionType.BROWSER, 502327, "positionsStr", "278"); + positions.setInputType("browser"); + positions.setColSpan(2); + positions.setFieldcol(16); + positions.setLabelcol(8); + positions.setIsQuickSearch(true); + positions.setLabel(SalaryI18nUtil.getI18nLabel(0,"岗位")); + conditionItems.add(positions); + + SearchConditionItem subcompanyIds = conditionFactory.createCondition(ConditionType.BROWSER, 502327, "subcompanyIdsStr", "194"); + subcompanyIds.setInputType("browser"); + subcompanyIds.setColSpan(2); + subcompanyIds.setFieldcol(16); + subcompanyIds.setLabelcol(8); + subcompanyIds.setIsQuickSearch(true); + subcompanyIds.setLabel(SalaryI18nUtil.getI18nLabel(0,"分部")); + conditionItems.add(subcompanyIds); + +// SearchConditionItem hireDate = conditionFactory.createCondition(ConditionType.TIMEPICKER,502327,new String[]{"hireDate", "hireDate"}); +// hireDate.setInputType("timepicker"); +// hireDate.setColSpan(2); +// hireDate.setFieldcol(16); +// hireDate.setViewAttr(8); +// hireDate.setFormat("yyyy-MM-dd"); +// hireDate.setLabel(SalaryI18nUtil.getI18nLabel(0,"入职日期")); +// conditionItems.add(hireDate); +// +// +// SearchConditionItem dimissionDate = conditionFactory.createCondition(ConditionType.TIMEPICKER,502327,new String[]{"dimissionDate", "dimissionDate"}); +// dimissionDate.setInputType("timepicker"); +// dimissionDate.setColSpan(2); +// dimissionDate.setFieldcol(16); +// dimissionDate.setViewAttr(8); +// dimissionDate.setFormat("yyyy-MM-dd"); +// dimissionDate.setLabel(SalaryI18nUtil.getI18nLabel(0,"离职日期")); +// conditionItems.add(dimissionDate); + + + SearchConditionItem siSchemeId = conditionFactory.createCondition(ConditionType.SELECT, 502327, "siSchemeId"); + siSchemeId.setInputType("select"); + siSchemeId.setOptions(schemeOption); + siSchemeId.setColSpan(2); + siSchemeId.setFieldcol(16); + siSchemeId.setLabelcol(8); + siSchemeId.setIsQuickSearch(true); + siSchemeId.setLabel(SalaryI18nUtil.getI18nLabel(0,"社保方案")); + conditionItems.add(siSchemeId); + + + SearchConditionItem fundSchemeId = conditionFactory.createCondition(ConditionType.SELECT, 502327, "fundSchemeId"); + fundSchemeId.setInputType("select"); + fundSchemeId.setOptions(fundOption); + fundSchemeId.setColSpan(2); + fundSchemeId.setFieldcol(16); + fundSchemeId.setLabelcol(8); + fundSchemeId.setIsQuickSearch(true); + fundSchemeId.setLabel(SalaryI18nUtil.getI18nLabel(0,"公积金方案")); + conditionItems.add(fundSchemeId); + + SearchConditionItem otherSchemeId = conditionFactory.createCondition(ConditionType.SELECT, 502327, "otherSchemeId"); + otherSchemeId.setInputType("select"); + otherSchemeId.setOptions(otherOption); + otherSchemeId.setColSpan(2); + otherSchemeId.setFieldcol(16); + otherSchemeId.setLabelcol(8); + otherSchemeId.setIsQuickSearch(true); + otherSchemeId.setLabel(SalaryI18nUtil.getI18nLabel(0,"其他福利方案")); + conditionItems.add(otherSchemeId); + + SearchConditionItem taxAgentId = conditionFactory.createCondition(ConditionType.SELECT, 502327, "taxAgentId"); + taxAgentId.setInputType("select"); + taxAgentId.setOptions(taxAgentOption); + taxAgentId.setColSpan(2); + taxAgentId.setFieldcol(16); + taxAgentId.setLabelcol(8); + taxAgentId.setIsQuickSearch(true); + taxAgentId.setLabel(SalaryI18nUtil.getI18nLabel(0,"个税扣缴义务人")); + conditionItems.add(taxAgentId); + + addGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0,"常用条件"), true, conditionItems)); + apidatas.put("condition", addGroups); + return apidatas; + } + + @Override + public List getSocialByEmployeeIds(List employeeIds) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SocialSchemeMapper socialSchemeMapper = sqlSession.getMapper(SocialSchemeMapper.class); + List> partition = Lists.partition(employeeIds, 1000); + List allList = new ArrayList<>(); + for (List longs : partition) { + List socialList = socialSchemeMapper.getSocialByEmployeeId(longs); + allList.addAll(socialList); + } + return allList; + } finally { + sqlSession.close(); + } + } + + @Override + public List getFundByEmployeeIds(List employeeIds) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + FundSchemeMapper fundSchemeMapper = sqlSession.getMapper(FundSchemeMapper.class); + List> partition = Lists.partition(employeeIds, 1000); + List allList = new ArrayList<>(); + for (List longs : partition) { + List fundList = fundSchemeMapper.getFundByEmployeeId(longs); + allList.addAll(fundList); + } + return allList; + } finally { + sqlSession.close(); + } + } + + @Override + public List getOtherByEmployeeIds(List employeeIds) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + OtherSchemeMapper otherSchemeMapper = sqlSession.getMapper(OtherSchemeMapper.class); + List> partition = Lists.partition(employeeIds, 1000); + List allList = new ArrayList<>(); + for (List longs : partition) { + List otherList = otherSchemeMapper.getOtherByEmployeeId(longs); + allList.addAll(otherList); + } + return allList; + } finally { + sqlSession.close(); + } + } + + /** + * 组装员工的社保,公积金,其他福利数据 + * + * @param ids 员工id集合 + * @return map + */ + @Override + public Map buildBatchAccount(List ids, Long paymentOrganization) { + if (org.apache.commons.collections.CollectionUtils.isEmpty(ids)) { + return new HashMap<>(); + } + //设置获取社保/公积金/其他福利档案方法的入参 + List insuranceArchivesEmployeePOS = new ArrayList<>(); + for (Long employeeId : ids) { + insuranceArchivesEmployeePOS.add(InsuranceArchivesEmployeePO.builder() + .employeeId(employeeId) + .paymentOrganization(paymentOrganization) + .build()); + } + + Map result = new HashMap<>(); + Map socialMap = new HashMap<>(); + Map funMap = new HashMap<>(); + Map otherMap = new HashMap<>(); + List socialPOS = encryptUtil.decryptList(this.getSocialByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS), InsuranceArchivesSocialSchemePO.class); + if (org.apache.commons.collections.CollectionUtils.isNotEmpty(socialPOS)) { + socialMap = socialPOS.stream().collect(Collectors.toMap(InsuranceArchivesSocialSchemePO::getEmployeeId, Function.identity())); + } + List fundPOS = encryptUtil.decryptList(this.getFundByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS), InsuranceArchivesFundSchemePO.class); + if (org.apache.commons.collections.CollectionUtils.isNotEmpty(fundPOS)) { + funMap = fundPOS.stream().collect(Collectors.toMap(InsuranceArchivesFundSchemePO::getEmployeeId, Function.identity())); + } + List otherPOS = this.getOtherByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS); + encryptUtil.decryptList(otherPOS, InsuranceArchivesOtherSchemePO.class); + if (org.apache.commons.collections.CollectionUtils.isNotEmpty(otherPOS)) { + otherMap = otherPOS.stream().collect(Collectors.toMap(InsuranceArchivesOtherSchemePO::getEmployeeId, Function.identity())); + } + for (Long id : ids) { + InsuranceArchivesAccountPO po = new InsuranceArchivesAccountPO(); + po.setSocial(socialMap.get(id)); + po.setFund(funMap.get(id)); + po.setOther(otherMap.get(id)); + result.put(id, po); + } + return result; + } + + @Override + public List dealSocialBaseAdjustInfoList(List adjustList, Long creator) { + List adjustHistoryList = new ArrayList<>(); + if (adjustList.size() > 0) { + //遍历待更新的福利档案数据,对每组档案生成基数调整记录(基数单元未变化则忽略) + for (InsuranceArchivesSocialSchemePO po : adjustList) { + List oldBaseInfoList = getSocialSchemeMapper().getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .paymentOrganization(po.getPaymentOrganization()).employeeId(po.getEmployeeId()).build()); + + InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() + .adjustAfterSchemeId(po.getSocialSchemeId()) + .adjustAfterBaseJson(po.getSocialPaymentBaseString()) + .adjustAfterComBaseJson(po.getSocialPaymentComBaseString()) + .welfareType(po.getWelfareType()) + .employeeId(po.getEmployeeId()) + .paymentOrganization(po.getPaymentOrganization()) + .build(); + if (oldBaseInfoList.size() == 1) { + //新增调整记录,变更 + InsuranceArchivesSocialSchemePO oldBaseInfo = oldBaseInfoList.get(0); + encryptUtil.decrypt(oldBaseInfo, InsuranceArchivesSocialSchemePO.class); + adjustInfo.setAdjustBeforeBaseJson(oldBaseInfo.getSocialPaymentBaseString()); + adjustInfo.setAdjustBeforeComBaseJson(oldBaseInfo.getSocialPaymentComBaseString()); + adjustInfo.setAdjustBeforeSchemeId(oldBaseInfo.getSocialSchemeId()); + } else if (oldBaseInfoList.size() > 1) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保档案存在冗余数据!")); + } + adjustHistoryList.addAll(createAdjustInfo(adjustInfo, creator)); + } + } + return adjustHistoryList; + + } + + @Override + public List dealFundBaseAdjustInfoList(List adjustList, Long creator) { + List adjustHistoryList = new ArrayList<>(); + if (adjustList.size() > 0) { + //遍历待更新的福利档案数据,对每组档案生成基数调整记录(基数单元未变化则忽略) + for (InsuranceArchivesFundSchemePO po : adjustList) { + List oldBaseInfoList = getFundSchemeMapper().getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .paymentOrganization(po.getPaymentOrganization()).employeeId(po.getEmployeeId()).build()); + + InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() + .adjustAfterSchemeId(po.getFundSchemeId()) + .adjustAfterBaseJson(po.getFundPaymentBaseString()) + .adjustAfterComBaseJson(po.getFundPaymentComBaseString()) + .welfareType(po.getWelfareType()) + .employeeId(po.getEmployeeId()) + .paymentOrganization(po.getPaymentOrganization()) + .build(); + if (oldBaseInfoList.size() == 1) { + //新增调整记录,变更 + InsuranceArchivesFundSchemePO oldBaseInfo = oldBaseInfoList.get(0); + encryptUtil.decrypt(oldBaseInfo, InsuranceArchivesFundSchemePO.class); + adjustInfo.setAdjustBeforeBaseJson(oldBaseInfo.getFundPaymentBaseString()); + adjustInfo.setAdjustBeforeComBaseJson(oldBaseInfo.getFundPaymentComBaseString()); + adjustInfo.setAdjustBeforeSchemeId(oldBaseInfo.getFundSchemeId()); + } else if (oldBaseInfoList.size() > 1) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金档案存在冗余数据!")); + } + adjustHistoryList.addAll(createAdjustInfo(adjustInfo, creator)); + } + } + return adjustHistoryList; + } + + @Override + public List dealOtherBaseAdjustInfoList(List adjustList, Long creator) { + List adjustHistoryList = new ArrayList<>(); + if (adjustList.size() > 0) { + //遍历待更新的福利档案数据,对每组档案生成基数调整记录(基数单元未变化则忽略) + for (InsuranceArchivesOtherSchemePO po : adjustList) { + List oldBaseInfoList = getOtherSchemeMapper().getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .paymentOrganization(po.getPaymentOrganization()).employeeId(po.getEmployeeId()).build()); + + InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() + .adjustAfterSchemeId(po.getOtherSchemeId()) + .adjustAfterBaseJson(po.getOtherPaymentBaseString()) + .adjustAfterComBaseJson(po.getOtherPaymentComBaseString()) + .welfareType(po.getWelfareType()) + .employeeId(po.getEmployeeId()) + .paymentOrganization(po.getPaymentOrganization()) + .build(); + if (oldBaseInfoList.size() == 1) { + //新增调整记录,变更 + InsuranceArchivesOtherSchemePO oldBaseInfo = oldBaseInfoList.get(0); + encryptUtil.decrypt(oldBaseInfo, InsuranceArchivesOtherSchemePO.class); + adjustInfo.setAdjustBeforeBaseJson(oldBaseInfo.getOtherPaymentBaseString()); + adjustInfo.setAdjustBeforeComBaseJson(oldBaseInfo.getOtherPaymentComBaseString()); + adjustInfo.setAdjustBeforeSchemeId(oldBaseInfo.getOtherSchemeId()); + } else if (oldBaseInfoList.size() > 1) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利档案存在冗余数据!")); + } + adjustHistoryList.addAll(createAdjustInfo(adjustInfo, creator)); + } + } + return adjustHistoryList; + } + + /** + * 获取没有设置社保、公积金最后缴纳月的档案 + * @param employeeIds + * @return + */ + @Override + public List listEndDateIsNull(List employeeIds) { + if (org.apache.commons.collections.CollectionUtils.isEmpty(employeeIds)) { + return Collections.emptyList(); + } + return getInsuranceBaseInfoMapper().listEndDateIsNull(employeeIds); + } + /*****以上代码为SIArchivesBiz中方法逻辑迁移,旨在减少Biz类的使用*****/ } diff --git a/src/com/engine/salary/service/impl/SIExportServiceImpl.java b/src/com/engine/salary/service/impl/SIExportServiceImpl.java index 93c929e46..f3432aa33 100644 --- a/src/com/engine/salary/service/impl/SIExportServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIExportServiceImpl.java @@ -5,7 +5,6 @@ import com.alibaba.fastjson.TypeReference; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.biz.SIArchivesBiz; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.siaccount.dto.InsuranceAccountViewListDTO; import com.engine.salary.entity.siaccount.param.InsuranceAccountDetailParam; @@ -25,10 +24,7 @@ import com.engine.salary.mapper.siaccount.InsuranceAccountDetailMapper; import com.engine.salary.mapper.siarchives.InsuranceBaseInfoMapper; import com.engine.salary.mapper.sicategory.ICategoryMapper; import com.engine.salary.mapper.taxagent.TaxAgentMapper; -import com.engine.salary.service.SIAccountService; -import com.engine.salary.service.SIExportService; -import com.engine.salary.service.SISchemeService; -import com.engine.salary.service.TaxAgentService; +import com.engine.salary.service.*; import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.entity.vo.OrderRuleVO; import com.engine.salary.sys.enums.OpenEnum; @@ -69,7 +65,7 @@ public class SIExportServiceImpl extends Service implements SIExportService { // private SIAccountBiz siAccountBiz = new SIAccountBiz(); - private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); +// private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); private SISchemeService getSISchemeService(User user) { return ServiceUtil.getService(SISchemeServiceImpl.class, user); @@ -107,6 +103,10 @@ public class SIExportServiceImpl extends Service implements SIExportService { return ServiceUtil.getService(SIAccountServiceImpl.class, user); } + public SIArchivesService getSIArchivesService(User user) { + return ServiceUtil.getService(SIArchivesServiceImpl.class, user); + } + @Override public XSSFWorkbook exportOverView(InsuranceExportParam queryParam) { List insuranceAccountDetailPOS = getInsuranceAccountDetailMapper().selectList(queryParam.getBillMonth(), StringUtils.isBlank(queryParam.getPaymentOrganization()) ? null : Long.valueOf(queryParam.getPaymentOrganization())); @@ -253,7 +253,8 @@ public class SIExportServiceImpl extends Service implements SIExportService { @Override public List> buildCommonRecords(List list) { - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); List> result = new ArrayList<>(); List paymentList = getTaxAgentMapper().listAll(); @@ -287,7 +288,8 @@ public class SIExportServiceImpl extends Service implements SIExportService { if (welBaseDiffSign) { if (socialJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); socialJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "socialPerBase", v); @@ -298,7 +300,8 @@ public class SIExportServiceImpl extends Service implements SIExportService { }); if (socialComJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); socialComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "socialComBase", v); @@ -308,7 +311,8 @@ public class SIExportServiceImpl extends Service implements SIExportService { } else { if (socialJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getSocialSchemeId()); socialJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "socialBase", v); @@ -332,7 +336,8 @@ public class SIExportServiceImpl extends Service implements SIExportService { if (welBaseDiffSign) { if (fundJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); fundJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "fundPerBase", v); @@ -343,7 +348,8 @@ public class SIExportServiceImpl extends Service implements SIExportService { }); if (fundComJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); fundComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "fundComBase", v); @@ -353,7 +359,8 @@ public class SIExportServiceImpl extends Service implements SIExportService { } else { if (fundJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId()); fundJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "fundBase", v); @@ -375,7 +382,8 @@ public class SIExportServiceImpl extends Service implements SIExportService { if (welBaseDiffSign) { if (otherJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); otherJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "otherPerBase", v); @@ -386,7 +394,8 @@ public class SIExportServiceImpl extends Service implements SIExportService { }); if (otherComJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); otherComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "otherComBase", v); @@ -396,7 +405,8 @@ public class SIExportServiceImpl extends Service implements SIExportService { } else { if (otherJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId()); otherJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "otherBase", v); @@ -731,7 +741,8 @@ public class SIExportServiceImpl extends Service implements SIExportService { } private Map> buildPaymentTitle(List pos, Map categoryIdNameMap) { - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); Set socailIds = new HashSet<>(); Set fundIds = new HashSet<>(); Set otherIds = new HashSet<>(); diff --git a/src/com/engine/salary/service/impl/SIImportServiceImpl.java b/src/com/engine/salary/service/impl/SIImportServiceImpl.java index c8b41704c..64623943d 100644 --- a/src/com/engine/salary/service/impl/SIImportServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIImportServiceImpl.java @@ -5,7 +5,6 @@ import com.alibaba.fastjson.TypeReference; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.biz.SIArchivesBiz; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam; import com.engine.salary.entity.siarchives.po.InsuranceArchivesEmployeePO; @@ -26,7 +25,6 @@ import com.engine.salary.service.SIImportService; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.excel.ExcelComment; -import com.engine.salary.util.excel.ExcelUtil; import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; @@ -51,7 +49,7 @@ import java.util.stream.Collectors; public class SIImportServiceImpl extends Service implements SIImportService { private EncryptUtil encryptUtil = new EncryptUtil(); - private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); +// private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); public SIArchivesService getSIArchivesService(User user) { return ServiceUtil.getService(SIArchivesServiceImpl.class,user); @@ -195,7 +193,8 @@ public class SIImportServiceImpl extends Service implements SIImportService { * @return */ public List buildHeader() { - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); List result = new ArrayList<>(); result.add(SalaryI18nUtil.getI18nLabel( 85429, "姓名")); result.add(SalaryI18nUtil.getI18nLabel( 86184, "个税扣缴义务人")); @@ -294,19 +293,22 @@ public class SIImportServiceImpl extends Service implements SIImportService { } List employeeIds = insuranceArchivesEmployeePOS.stream().map(InsuranceArchivesEmployeePO::getEmployeeId).collect(Collectors.toList()); Map socialSchemePOMap = new HashMap<>(); - List socialSchemePOList = siArchivesBiz.getSocialByEmployeeIds(employeeIds); +// List socialSchemePOList = siArchivesBiz.getSocialByEmployeeIds(employeeIds); + List socialSchemePOList = getSIArchivesService(user).getSocialByEmployeeIds(employeeIds); encryptUtil.decryptList(socialSchemePOList, InsuranceArchivesSocialSchemePO.class); if (CollectionUtils.isNotEmpty(socialSchemePOList)) { socialSchemePOMap = socialSchemePOList.stream().collect(Collectors.toMap(InsuranceArchivesSocialSchemePO::getEmployeeId, Function.identity())); } - List fundSchemePOList = siArchivesBiz.getFundByEmployeeIds(employeeIds); +// List fundSchemePOList = siArchivesBiz.getFundByEmployeeIds(employeeIds); + List fundSchemePOList = getSIArchivesService(user).getFundByEmployeeIds(employeeIds); encryptUtil.encryptList(fundSchemePOList, InsuranceArchivesFundSchemePO.class); Map fundSchemePOMap = new HashMap<>(); if (CollectionUtils.isNotEmpty(fundSchemePOList)) { fundSchemePOMap = fundSchemePOList.stream().collect(Collectors.toMap(InsuranceArchivesFundSchemePO::getEmployeeId, Function.identity())); } Map otherSchemePOMap = new HashMap<>(); - List otherSchemePOList = siArchivesBiz.getOtherByEmployeeIds(employeeIds); +// List otherSchemePOList = siArchivesBiz.getOtherByEmployeeIds(employeeIds); + List otherSchemePOList = getSIArchivesService(user).getOtherByEmployeeIds(employeeIds); encryptUtil.decryptList(otherSchemePOList, InsuranceArchivesOtherSchemePO.class); if (CollectionUtils.isNotEmpty(otherSchemePOList)) { otherSchemePOMap = otherSchemePOList.stream().collect(Collectors.toMap(InsuranceArchivesOtherSchemePO::getEmployeeId, Function.identity())); diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 19a670559..3ab971917 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -6,11 +6,9 @@ import com.api.formmode.mybatis.util.SqlProxyHandle; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.biz.SIArchivesBiz; import com.engine.salary.biz.SISchemeBiz; import com.engine.salary.cmd.sischeme.*; import com.engine.salary.constant.SalaryDefaultTenantConstant; -import com.engine.salary.encrypt.AESEncryptUtil; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam; @@ -51,7 +49,6 @@ import com.engine.salary.util.*; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.excel.ExcelParseHelper; import com.engine.salary.util.excel.ExcelSupport; -import com.engine.salary.util.excel.ExcelUtil; import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; @@ -129,7 +126,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { return ServiceUtil.getService(SIImportServiceImpl.class, user); } - private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); +// private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); private SISchemeBiz siSchemeBiz = new SISchemeBiz(); private SalaryEmployeeService getSalaryEmployeeService(User user) { @@ -152,6 +149,10 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { return ServiceUtil.getService(TaxAgentManageRangeServiceImpl.class, user); } + public SIArchivesService getSIArchivesService(User user) { + return ServiceUtil.getService(SIArchivesServiceImpl.class,user); + } + @Override public Map getForm(Map params) { return commandExecutor.execute(new SISchemeGetFormCmd(params, user)); @@ -264,7 +265,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { @Override public List> buildTableData(List insuranceArchivesEmployeePOS) { - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); List> records = new ArrayList<>(); List taxAgentPOS = getTaxAgentMapper().listAll(); Map longTaxAgentPOMap = SalaryEntityUtil.convert2Map(taxAgentPOS, TaxAgentPO::getId); @@ -282,9 +284,9 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { end = employeeIds.size(); } List ids = employeeIds.subList(i, end); - socialList.addAll(encryptUtil.decryptList(siArchivesBiz.getSocialByEmployeeIds(ids), InsuranceArchivesSocialSchemePO.class)); - fundList.addAll(encryptUtil.decryptList(siArchivesBiz.getFundByEmployeeIds(ids), InsuranceArchivesFundSchemePO.class)); - otherList.addAll(encryptUtil.decryptList(siArchivesBiz.getOtherByEmployeeIds(ids), InsuranceArchivesOtherSchemePO.class)); + socialList.addAll(encryptUtil.decryptList(getSIArchivesService(user).getSocialByEmployeeIds(ids), InsuranceArchivesSocialSchemePO.class)); + fundList.addAll(encryptUtil.decryptList(getSIArchivesService(user).getFundByEmployeeIds(ids), InsuranceArchivesFundSchemePO.class)); + otherList.addAll(encryptUtil.decryptList(getSIArchivesService(user).getOtherByEmployeeIds(ids), InsuranceArchivesOtherSchemePO.class)); } Map socialSchemePOMap = SalaryEntityUtil.convert2Map(socialList, k -> k.getPaymentOrganization() + "-" + k.getEmployeeId()); Map fundSchemePOMap = SalaryEntityUtil.convert2Map(fundList, k -> k.getPaymentOrganization() + "-" + k.getEmployeeId()); @@ -311,7 +313,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { if (welBaseDiffSign) { if (socialJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(socialItem.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(socialItem.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(socialItem.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); socialJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { map.put(k + "per", v); @@ -322,7 +325,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { }); if (socialComJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(socialItem.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(socialItem.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(socialItem.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); socialComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { map.put(k + "com", v); @@ -352,7 +356,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { if (welBaseDiffSign) { if (fundJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(fundItem.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(fundItem.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(fundItem.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); fundJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { map.put(k + "per", v); @@ -363,7 +368,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { }); if (fundComJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(fundItem.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(fundItem.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(fundItem.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); fundComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { map.put(k + "com", v); @@ -393,7 +399,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { if (welBaseDiffSign) { if (otherJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(otherItem.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(otherItem.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(otherItem.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); otherJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { map.put(k + "per", v); @@ -404,7 +411,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { }); if (otherComJson != null) { //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = siArchivesBiz.payInsuranceIds(otherItem.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); +// List insuranceIdList = siArchivesBiz.payInsuranceIds(otherItem.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(otherItem.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); otherComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { map.put(k + "com", v); @@ -587,7 +595,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { public Map> buildColumnTitle(List insuranceArchivesEmployeePOS, Long employeeId) { - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); Map> result = new HashMap<>(); Set socialSet = new HashSet<>(); @@ -599,7 +608,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { Set otherComSet = new HashSet<>(); insuranceArchivesEmployeePOS.forEach(item -> { - List socialByEmployeeId = siArchivesBiz.getSocialByEmployeeIds(new ArrayList() {{ + List socialByEmployeeId = getSIArchivesService(user).getSocialByEmployeeIds(new ArrayList() {{ add(item.getEmployeeId()); }}); encryptUtil.decryptList(socialByEmployeeId, InsuranceArchivesSocialSchemePO.class); @@ -609,7 +618,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { } InsuranceArchivesFundSchemePO fundItem = null; - List fundByEmployeeId = siArchivesBiz.getFundByEmployeeIds(new ArrayList() {{ + List fundByEmployeeId = getSIArchivesService(user).getFundByEmployeeIds(new ArrayList() {{ add(item.getEmployeeId()); }}); encryptUtil.decryptList(fundByEmployeeId, InsuranceArchivesFundSchemePO.class); @@ -619,7 +628,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { } InsuranceArchivesOtherSchemePO otherItem = null; - List otherByEmployeeId = siArchivesBiz.getOtherByEmployeeIds(new ArrayList() {{ + List otherByEmployeeId = getSIArchivesService(user).getOtherByEmployeeIds(new ArrayList() {{ add(item.getEmployeeId()); }}); encryptUtil.decryptList(otherByEmployeeId, InsuranceArchivesOtherSchemePO.class); @@ -809,6 +818,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { /** * 导入的数据插入到数据库中 */ + @Override public Map batchImportEbatch(SIArchiveImportParam param) { ValidUtil.doValidator(param); param.setProcess(false); @@ -1229,7 +1239,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { insuranceArchivesOtherSchemePO = buildOtherPO(employeeId, welfareMap, singleAccount, schemeNameIdMap, paymentNameIdMap, creator); } /**************校验申报基数**************/ - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); if (welBaseDiffSign) { for (Map.Entry entry : welfareMap.entrySet()) { String keyPerName = entry.getValue() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "个人"); @@ -1276,19 +1287,19 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { insuranceArchivesAccountPO.setOther(insuranceArchivesOtherSchemePO); insuranceArchivesAccountPO.setBaseInfo(insuranceArchivesBaseInfoPO); //校验福利基数是否符合上下限要求, - Boolean socialCheckBase = siArchivesBiz.checkWelBaseLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + Boolean socialCheckBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); - Boolean fundCheckBase = siArchivesBiz.checkWelBaseLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + Boolean fundCheckBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); - Boolean otherCheckBase = siArchivesBiz.checkWelBaseLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + Boolean otherCheckBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); Boolean socialCheckComBase = true; Boolean fundCheckComBase = true; Boolean otherCheckComBase = true; if (welBaseDiffSign) { - socialCheckComBase = siArchivesBiz.checkWelBaseLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); - fundCheckComBase = siArchivesBiz.checkWelBaseLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); - otherCheckComBase = siArchivesBiz.checkWelBaseLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + socialCheckComBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + fundCheckComBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + otherCheckComBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); } if (socialCheckBase && fundCheckBase && otherCheckBase && socialCheckComBase && fundCheckComBase && otherCheckComBase) { insuranceArchivesAccountPOS.add(insuranceArchivesAccountPO); @@ -1313,18 +1324,18 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { } else if (!isError) { //校验福利基数是否符合上下限要求,不符合上下限的基数调整为上限 /下限 - String newSocialPaymentBaseString = siArchivesBiz.checkAndBuildWelBaseWithLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); - String newFundPaymentBaseString = siArchivesBiz.checkAndBuildWelBaseWithLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); - String newOtherPaymentBaseString = siArchivesBiz.checkAndBuildWelBaseWithLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + String newSocialPaymentBaseString = getSIArchivesService(user).checkAndBuildWelBaseWithLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + String newFundPaymentBaseString = getSIArchivesService(user).checkAndBuildWelBaseWithLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + String newOtherPaymentBaseString = getSIArchivesService(user).checkAndBuildWelBaseWithLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); insuranceArchivesSocialSchemePO.setSocialPaymentBaseString(newSocialPaymentBaseString); insuranceArchivesFundSchemePO.setFundPaymentBaseString(newFundPaymentBaseString); insuranceArchivesOtherSchemePO.setOtherPaymentBaseString(newOtherPaymentBaseString); if (welBaseDiffSign) { - String newSocialPaymentComBaseString = siArchivesBiz.checkAndBuildWelBaseWithLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); - String newFundPaymentComBaseString = siArchivesBiz.checkAndBuildWelBaseWithLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); - String newOtherPaymentComBaseString = siArchivesBiz.checkAndBuildWelBaseWithLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + String newSocialPaymentComBaseString = getSIArchivesService(user).checkAndBuildWelBaseWithLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + String newFundPaymentComBaseString = getSIArchivesService(user).checkAndBuildWelBaseWithLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + String newOtherPaymentComBaseString = getSIArchivesService(user).checkAndBuildWelBaseWithLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); insuranceArchivesSocialSchemePO.setSocialPaymentComBaseString(newSocialPaymentComBaseString); insuranceArchivesFundSchemePO.setFundPaymentComBaseString(newFundPaymentComBaseString); @@ -1413,7 +1424,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(insuranceArchivesSocialSchemePO.getSocialSchemeId()); encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); if (CollectionUtils.isNotEmpty(insuranceSchemeDetailPOS)) { List insuranceIds = insuranceSchemeDetailPOS.stream().map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList()); HashMap socialPaymentBase = new HashMap<>(); @@ -1525,7 +1537,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(insuranceArchivesFundSchemePO.getFundSchemeId()); encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); if (CollectionUtils.isNotEmpty(insuranceSchemeDetailPOS)) { List insuranceIds = insuranceSchemeDetailPOS.stream().map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList()); HashMap fundPaymentBase = new HashMap<>(); @@ -1627,7 +1640,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { insuranceArchivesOtherSchemePO.setEmployeeId(employeeId); List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(insuranceArchivesOtherSchemePO.getOtherSchemeId()); encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); - boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); +// boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); if (CollectionUtils.isNotEmpty(insuranceSchemeDetailPOS)) { List insuranceIds = insuranceSchemeDetailPOS.stream().map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList()); HashMap otherPaymentBase = new HashMap<>(); @@ -1705,7 +1719,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getPaymentOrganization() + "-" + f.getEmployeeId()))), ArrayList::new)); //生成福利档案基数调整历史记录 - List adjustSocialHistoryPOList = siArchivesBiz.dealSocialBaseAdjustInfoList(socialSchemePOS, (long) user.getUID()); +// List adjustSocialHistoryPOList = siArchivesBiz.dealSocialBaseAdjustInfoList(socialSchemePOS, (long) user.getUID()); + List adjustSocialHistoryPOList = getSIArchivesService(user).dealSocialBaseAdjustInfoList(socialSchemePOS, (long) user.getUID()); //根据人员id和个税扣缴义务人id删除对应旧档案 socialSchemePOS.forEach(getSocialSchemeMapper()::deleteByEmployeeIdAndPayOrg); @@ -1716,7 +1731,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { partition.forEach(getSocialSchemeMapper()::batchSave); //新建福利档案基数调整历史记录 - siArchivesBiz.batchInsertAdjustHistory(adjustSocialHistoryPOList, user.getUID()); +// siArchivesBiz.batchInsertAdjustHistory(adjustSocialHistoryPOList, user.getUID()); + getSIArchivesService(user).batchInsertAdjustHistory(adjustSocialHistoryPOList); } //导入公积金档案 List fundSchemePOS = insuranceArchivesAccountPOS.stream().filter(Objects::nonNull).map(InsuranceArchivesAccountPO::getFund).collect(Collectors.toList()); @@ -1727,7 +1743,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getPaymentOrganization() + "-" + f.getEmployeeId()))), ArrayList::new)); //生成福利档案基数调整历史记录 - List adjustFundHistoryPOList = siArchivesBiz.dealFundBaseAdjustInfoList(fundSchemePOS, (long) user.getUID()); +// List adjustFundHistoryPOList = siArchivesBiz.dealFundBaseAdjustInfoList(fundSchemePOS, (long) user.getUID()); + List adjustFundHistoryPOList = getSIArchivesService(user).dealFundBaseAdjustInfoList(fundSchemePOS, (long) user.getUID()); //根据人员id和个税扣缴义务人id删除对应档案 fundSchemePOS.forEach(getFundSchemeMapper()::deleteByEmployeeIdAndPayOrg); //新建新档案 @@ -1735,7 +1752,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { List> partition = Lists.partition(insuranceArchivesFundSchemePOS, 100); partition.forEach(getFundSchemeMapper()::batchSave); //新建福利档案基数调整历史记录 - siArchivesBiz.batchInsertAdjustHistory(adjustFundHistoryPOList, user.getUID()); +// siArchivesBiz.batchInsertAdjustHistory(adjustFundHistoryPOList, user.getUID()); + getSIArchivesService(user).batchInsertAdjustHistory(adjustFundHistoryPOList); } //导入其他福利档案 List otherSchemePOS = insuranceArchivesAccountPOS.stream().filter(Objects::nonNull).map(InsuranceArchivesAccountPO::getOther).collect(Collectors.toList()); @@ -1746,7 +1764,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getPaymentOrganization() + "-" + f.getEmployeeId()))), ArrayList::new)); //生成福利档案基数调整历史记录 - List adjustOtherHistoryPOList = siArchivesBiz.dealOtherBaseAdjustInfoList(otherSchemePOS, (long) user.getUID()); +// List adjustOtherHistoryPOList = siArchivesBiz.dealOtherBaseAdjustInfoList(otherSchemePOS, (long) user.getUID()); + List adjustOtherHistoryPOList = getSIArchivesService(user).dealOtherBaseAdjustInfoList(otherSchemePOS, (long) user.getUID()); //根据人员id和个税扣缴义务人id删除对应档案 otherSchemePOS.forEach(getOtherSchemeMapper()::deleteByEmployeeIdAndPayOrg); @@ -1755,7 +1774,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { List> partition = Lists.partition(insuranceArchivesOtherSchemePOS, 100); partition.forEach(getOtherSchemeMapper()::batchSave); //新建福利档案基数调整历史记录 - siArchivesBiz.batchInsertAdjustHistory(adjustOtherHistoryPOList, user.getUID()); +// siArchivesBiz.batchInsertAdjustHistory(adjustOtherHistoryPOList, user.getUID()); + getSIArchivesService(user).batchInsertAdjustHistory(adjustOtherHistoryPOList); } //导入福利档案基础信息 List baseInfoPOS = insuranceArchivesAccountPOS.stream().filter(Objects::nonNull).map(InsuranceArchivesAccountPO::getBaseInfo).collect(Collectors.toList()); @@ -1801,6 +1821,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { * * @param param 是否导出带档案数据的模板 */ + @Override public XSSFWorkbook exportTemplate(InsuranceArchivesListParam param) { return getSIImportService().exportTemplate(param); diff --git a/src/com/engine/salary/timer/AutoSyncResignationEmpArchiveJob.java b/src/com/engine/salary/timer/AutoSyncResignationEmpArchiveJob.java index b62f8ce6d..0505d7670 100644 --- a/src/com/engine/salary/timer/AutoSyncResignationEmpArchiveJob.java +++ b/src/com/engine/salary/timer/AutoSyncResignationEmpArchiveJob.java @@ -1,15 +1,16 @@ package com.engine.salary.timer; import com.engine.common.util.ServiceUtil; -import com.engine.salary.biz.SIArchivesBiz; import com.engine.salary.biz.SalaryArchiveBiz; import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; import com.engine.salary.entity.siarchives.po.InsuranceArchivesBaseInfoPO; import com.engine.salary.mapper.siarchives.FundSchemeMapper; import com.engine.salary.mapper.siarchives.OtherSchemeMapper; import com.engine.salary.mapper.siarchives.SocialSchemeMapper; +import com.engine.salary.service.SIArchivesService; import com.engine.salary.service.SalaryArchiveService; import com.engine.salary.service.SalaryEmployeeService; +import com.engine.salary.service.impl.SIArchivesServiceImpl; import com.engine.salary.service.impl.SalaryArchiveServiceImpl; import com.engine.salary.service.impl.SalaryEmployeeServiceImpl; import com.engine.salary.util.SalaryDateUtil; @@ -54,6 +55,10 @@ public class AutoSyncResignationEmpArchiveJob extends BaseCronJob { private String preMonth; + public SIArchivesService getSIArchivesService(User user) { + return ServiceUtil.getService(SIArchivesServiceImpl.class,user); + } + @Override public void execute() { User user = new User(); @@ -85,8 +90,8 @@ public class AutoSyncResignationEmpArchiveJob extends BaseCronJob { } // 获取离职人员中没有设置最后缴纳月的社保福利档案 - SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); - List needSyncList = siArchivesBiz.listEndDateIsNull(new ArrayList<>(resignationMap.keySet())); +// List needSyncList = siArchivesBiz.listEndDateIsNull(new ArrayList<>(resignationMap.keySet())); + List needSyncList = getSIArchivesService(user).listEndDateIsNull(new ArrayList<>(resignationMap.keySet())); // 设置社保、公积金最后缴纳月 for(InsuranceArchivesBaseInfoPO po : needSyncList){ String dismissDate = resignationMap.get(po.getEmployeeId()); From 306af482913d67dfd405e2795be9f0e04d64ba99 Mon Sep 17 00:00:00 2001 From: sy Date: Sun, 4 Feb 2024 10:11:10 +0800 Subject: [PATCH 19/64] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88=EF=BC=8CSICategoryBiz?= =?UTF-8?q?=E3=80=81SISchemeBiz=E6=96=B9=E6=B3=95=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E5=88=B0=E5=AF=B9=E5=BA=94=E6=98=AF=E5=AE=9E=E7=8E=B0=E7=B1=BB?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E4=BF=AE=E6=94=B9=E8=B0=83=E7=94=A8=E6=96=B9?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/SICategoryService.java | 6 + .../salary/service/SISchemeService.java | 3 + .../service/impl/SIAccountServiceImpl.java | 8 +- .../service/impl/SIArchivesServiceImpl.java | 30 +- .../service/impl/SICategoryServiceImpl.java | 241 +++++++- .../service/impl/SISchemeServiceImpl.java | 548 +++++++++++++++++- 6 files changed, 801 insertions(+), 35 deletions(-) diff --git a/src/com/engine/salary/service/SICategoryService.java b/src/com/engine/salary/service/SICategoryService.java index dfaa84349..b1c9b37f7 100644 --- a/src/com/engine/salary/service/SICategoryService.java +++ b/src/com/engine/salary/service/SICategoryService.java @@ -3,10 +3,12 @@ package com.engine.salary.service; import com.engine.salary.entity.sicategory.dto.ICategoryDTO; import com.engine.salary.entity.sicategory.dto.ICategoryFormDTO; import com.engine.salary.entity.sicategory.dto.ICategoryListDTO; +import com.engine.salary.entity.sicategory.po.ICategoryPO; import com.engine.salary.entity.sischeme.param.InsuranceSchemeParam; import com.engine.salary.enums.sicategory.WelfareTypeEnum; import com.engine.salary.util.page.PageInfo; +import java.util.List; import java.util.Map; /** @@ -65,4 +67,8 @@ public interface SICategoryService { Map updateCategoryNameAndPayScope(ICategoryFormDTO iCategoryFormDTO); Map deleteCustomCategory(ICategoryFormDTO iCategoryFormDTO); + + ICategoryPO getICategoryPOByID(Long id); + + List listByName(String insuranceName); } diff --git a/src/com/engine/salary/service/SISchemeService.java b/src/com/engine/salary/service/SISchemeService.java index 5e0b8d8de..e465d2740 100644 --- a/src/com/engine/salary/service/SISchemeService.java +++ b/src/com/engine/salary/service/SISchemeService.java @@ -8,6 +8,7 @@ import com.engine.salary.entity.sischeme.dto.InsuranceSchemeListDTO; import com.engine.salary.entity.sischeme.param.InsuranceSchemeDetailUpdateParam; import com.engine.salary.entity.sischeme.param.InsuranceSchemeParam; import com.engine.salary.entity.sischeme.po.InsuranceSchemeDetailPO; +import com.engine.salary.entity.sischeme.po.InsuranceSchemePO; import com.engine.salary.util.page.PageInfo; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -80,4 +81,6 @@ public interface SISchemeService { * @param schemeDetailList */ List updateSchemeDetail(List schemeDetailList); + + List listAll(); } diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 08b7fc624..f08af7c81 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -147,7 +147,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { return MapperProxyFactory.getProxy(TaxAgentMapper.class); } - SICategoryBiz siCategoryBiz = new SICategoryBiz(); +// SICategoryBiz siCategoryBiz = new SICategoryBiz(); private SalarySysConfMapper getSalarySysConfMapper() { return SqlProxyHandle.getProxy(SalarySysConfMapper.class); @@ -2027,7 +2027,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { String payScope = keyName.substring(keyName.length() - 2); //获取福利类型 Integer welfareType; - List categoryPOList = siCategoryBiz.listByName(entry.getKey().substring(0, keyName.length() - 2)); +// List categoryPOList = siCategoryBiz.listByName(entry.getKey().substring(0, keyName.length() - 2)); + List categoryPOList = getSICategoryService(user).listByName(entry.getKey().substring(0, keyName.length() - 2)); if (categoryPOList.size() == 1) { ICategoryPO iCategoryPO = categoryPOList.get(0); welfareType = iCategoryPO.getWelfareType(); @@ -3254,7 +3255,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { for (Map.Entry entry : toDealMap.entrySet()) { //获取福利项信息 - ICategoryPO iCategoryPO = siCategoryBiz.getByID(Long.valueOf(entry.getKey())); +// ICategoryPO iCategoryPO = siCategoryBiz.getByID(Long.valueOf(entry.getKey())); + ICategoryPO iCategoryPO = getSICategoryService(user).getICategoryPOByID(Long.valueOf(entry.getKey())); if (iCategoryPO != null) { String name = groupPrefix + iCategoryPO.getId().toString(); String label = iCategoryPO.getInsuranceName(); diff --git a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java index 29859d236..798eed713 100644 --- a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java @@ -16,8 +16,6 @@ import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.biz.SICategoryBiz; -import com.engine.salary.biz.SISchemeBiz; import com.engine.salary.cmd.siarchives.SIArchivesTipsCmd; import com.engine.salary.common.SalaryContext; import com.engine.salary.constant.SalaryDefaultTenantConstant; @@ -47,10 +45,7 @@ import com.engine.salary.mapper.sicategory.ICategoryMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeDetailMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeMapper; import com.engine.salary.mapper.taxagent.TaxAgentMapper; -import com.engine.salary.service.SIArchivesService; -import com.engine.salary.service.SalaryEmployeeService; -import com.engine.salary.service.TaxAgentEmpChangeService; -import com.engine.salary.service.TaxAgentService; +import com.engine.salary.service.*; import com.engine.salary.sys.constant.SalarySysConstant; import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.entity.vo.OrderRuleVO; @@ -149,6 +144,14 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService return ServiceUtil.getService(TaxAgentWrapper.class, user); } + public SICategoryService getSICategoryService(User user) { + return ServiceUtil.getService(SICategoryServiceImpl.class, user); + } + + private SISchemeService getSISchemeService(User user) { + return ServiceUtil.getService(SISchemeServiceImpl.class,user); + } + @Override public Map getTips(Map params) { return commandExecutor.execute(new SIArchivesTipsCmd(params, user)); @@ -2249,8 +2252,8 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService return data; } - SISchemeBiz siSchemeBiz = new SISchemeBiz(); - List list = siSchemeBiz.listAll(); +// List list = siSchemeBiz.listAll(); + List list = getSISchemeService(user).listAll(); // 过滤可见性范围 list = filterList(list, taxAgentPOS); List selectItems = new ArrayList<>(); @@ -2671,9 +2674,9 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService } } - SICategoryBiz siCategoryBiz = new SICategoryBiz(); list.forEach(insuranceSchemeDetail -> { - ICategoryPO iCategoryPO = siCategoryBiz.getByID(insuranceSchemeDetail.getInsuranceId()); +// ICategoryPO iCategoryPO = siCategoryBiz.getByID(insuranceSchemeDetail.getInsuranceId()); + ICategoryPO iCategoryPO = getSICategoryService(user).getICategoryPOByID(insuranceSchemeDetail.getInsuranceId()); if (iCategoryPO != null) { // inputItems.add(SalaryFormItemUtil.inputNumberItem(user, "precision:2", 2, 12, 2, iCategoryPO.getInsuranceName(), String.valueOf(insuranceSchemeDetail.getInsuranceId()))); inputItems.add(SalaryFormItemUtil.inputNumberItemWithMaxAndMin(user, "precision:2", 2, 12, 2, iCategoryPO.getInsuranceName(), String.valueOf(insuranceSchemeDetail.getInsuranceId()) @@ -2690,9 +2693,9 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService } List list = queryListByPrimaryIdIsPayment(schemeId, welfareType).stream() .filter(f -> f.getPaymentScope().equals(PaymentScopeEnum.SCOPE_COMPANY.getValue())).collect(Collectors.toList()); - SICategoryBiz siCategoryBiz = new SICategoryBiz(); list.forEach(insuranceSchemeDetail -> { - ICategoryPO iCategoryPO = siCategoryBiz.getByID(insuranceSchemeDetail.getInsuranceId()); +// ICategoryPO iCategoryPO = siCategoryBiz.getByID(insuranceSchemeDetail.getInsuranceId()); + ICategoryPO iCategoryPO = getSICategoryService(user).getICategoryPOByID(insuranceSchemeDetail.getInsuranceId()); if (iCategoryPO != null) { // inputItems.add(SalaryFormItemUtil.inputNumberItem(user, "precision:2", 2, 12, 2, iCategoryPO.getInsuranceName(), String.valueOf(insuranceSchemeDetail.getInsuranceId()))); inputItems.add(SalaryFormItemUtil.inputNumberItemWithMaxAndMin(user, "precision:2", 2, 12, 2, iCategoryPO.getInsuranceName(), String.valueOf(insuranceSchemeDetail.getInsuranceId()) @@ -3484,7 +3487,8 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService public Map getSearchCondition() { List userStatusOptions = Arrays.stream(UserStatusEnum.values()).map(e -> new SearchConditionOption(String.valueOf(e.getValue()), e.getDefaultLabel())).collect(Collectors.toList()); - List list = new SISchemeBiz().listAll(); +// List list = new SISchemeBiz().listAll(); + List list = getSISchemeService(user).listAll(); List schemeOption = list.stream().filter(item -> Objects.equals(item.getWelfareType(), WelfareTypeEnum.SOCIAL_SECURITY.getValue())) .collect(Collectors.toList()) diff --git a/src/com/engine/salary/service/impl/SICategoryServiceImpl.java b/src/com/engine/salary/service/impl/SICategoryServiceImpl.java index 5cf300cf5..b610a2afb 100644 --- a/src/com/engine/salary/service/impl/SICategoryServiceImpl.java +++ b/src/com/engine/salary/service/impl/SICategoryServiceImpl.java @@ -1,19 +1,22 @@ package com.engine.salary.service.impl; +import com.api.browser.bean.SearchConditionItem; +import com.api.browser.bean.SearchConditionOption; +import com.api.browser.util.ConditionFactory; +import com.api.browser.util.ConditionType; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.cmd.sicategory.SICategoryGetFormCmd; -import com.engine.salary.cmd.sicategory.SICategoryInsertCmd; -import com.engine.salary.cmd.sicategory.SICategoryUpdateCmd; -import com.engine.salary.cmd.sicategory.SICategoryUpdateStatusByIdCmd; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; +import com.engine.salary.entity.sicategory.bo.ICategoryBO; import com.engine.salary.entity.sicategory.dto.ICategoryDTO; import com.engine.salary.entity.sicategory.dto.ICategoryFormDTO; import com.engine.salary.entity.sicategory.dto.ICategoryListDTO; import com.engine.salary.entity.sicategory.po.ICategoryPO; import com.engine.salary.entity.sischeme.param.InsuranceSchemeParam; +import com.engine.salary.entity.sischeme.po.InsuranceSchemeDetailPO; import com.engine.salary.enums.sicategory.DataTypeEnum; +import com.engine.salary.enums.sicategory.IsPaymentEnum; import com.engine.salary.enums.sicategory.PaymentScopeEnum; import com.engine.salary.enums.sicategory.WelfareTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -21,15 +24,19 @@ import com.engine.salary.mapper.siaccount.InsuranceAccountDetailMapper; import com.engine.salary.mapper.sicategory.ICategoryMapper; import com.engine.salary.service.RecordsBuildService; import com.engine.salary.service.SICategoryService; +import com.engine.salary.service.SISchemeService; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryEnumUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; +import com.mzlion.core.utils.BeanUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.session.SqlSession; +import weaver.conn.mybatis.MyBatisFactory; import weaver.hrm.User; import java.util.*; @@ -57,24 +64,93 @@ public class SICategoryServiceImpl extends Service implements SICategoryService private EncryptUtil encryptUtil = new EncryptUtil(); + private SISchemeService getSISchemeService(User user) { + return ServiceUtil.getService(SISchemeServiceImpl.class,user); + } + @Override public Map getForm(Map params) { - return commandExecutor.execute(new SICategoryGetFormCmd(params,user)); +// return commandExecutor.execute(new SICategoryGetFormCmd(params,user)); + Map apidatas = new HashMap<>(16); + Long id = (Long) params.get("id"); +// ICategoryFormDTO form = siCategoryBiz.getForm(id); + ICategoryFormDTO form = getForm(id); + apidatas.put("form",form); + ConditionFactory conditionFactory = new ConditionFactory(user); + Map items = new HashMap<>(); + + SearchConditionItem input = conditionFactory.createCondition(ConditionType.INPUT,0, "insuranceName"); + input.setColSpan(2);//定义一行显示条件数,默认值为2,当值为1时标识该条件单独占一行 + input.setFieldcol(12); //条件输入框所占宽度,默认值18 + input.setViewAttr(3); // 编辑权限 1:只读,2:可编辑, 3:必填 默认2 + input.setLength(10); // 设置输入长度 + input.setLabel(SalaryI18nUtil.getI18nLabel(0,"福利名称")); //设置文本值 这个将覆盖多语言标签的值 + input.setRules("required"); //设置字段填入规则 + + items.put("insuranceName",input); + + SearchConditionItem radio = conditionFactory.createCondition(ConditionType.RADIO,0,"welfareType"); + List radioOptions = new ArrayList <>(); + radioOptions.add(new SearchConditionOption("SOCIAL_SECURITY",SalaryI18nUtil.getI18nLabel(0,"社保"),true)); + radioOptions.add(new SearchConditionOption("ACCUMULATION_FUND",SalaryI18nUtil.getI18nLabel(0,"公积金"))); + radioOptions.add(new SearchConditionOption("OTHER",SalaryI18nUtil.getI18nLabel(0,"企业年金及其他福利"))); + radio.setColSpan(2); + radio.setFieldcol(12); + radio.setLabelcol(6); + radio.setViewAttr(3); + radio.setIsQuickSearch(false); + radio.setOptions(radioOptions); + radio.setLabel(SalaryI18nUtil.getI18nLabel(0,"类型")); + radio.setRules("required"); + items.put("welfareType",radio); + + SearchConditionItem checkbox = conditionFactory.createCondition(ConditionType.CHECKBOX,0,"paymentScope"); + List checkOptions = new ArrayList <>(); + checkOptions.add(new SearchConditionOption("SCOPE_COMPANY",SalaryI18nUtil.getI18nLabel(0,"公司"))); + checkOptions.add(new SearchConditionOption("SCOPE_PERSON",SalaryI18nUtil.getI18nLabel(0,"个人"))); + checkbox.setColSpan(2); + checkbox.setFieldcol(12); + checkbox.setLabelcol(6); + checkbox.setViewAttr(3); + checkbox.setIsQuickSearch(false); + checkbox.setOptions(checkOptions); + checkbox.setLabel(SalaryI18nUtil.getI18nLabel(0,"缴纳对象")); + checkbox.setRules("required"); + items.put("paymentScope",checkbox); + + apidatas.put("item",items); + return apidatas; } @Override public Map insert(Map params) { - return commandExecutor.execute(new SICategoryInsertCmd(params,user)); +// return commandExecutor.execute(new SICategoryInsertCmd(params,user)); + Map apidatas = new HashMap<>(16); + ICategoryFormDTO iCategoryFormDTO = (ICategoryFormDTO)params.get("iCategoryFormDTO"); +// siCategoryBiz.save(iCategoryFormDTO,(long) user.getUID()); + save(iCategoryFormDTO,(long) user.getUID()); + return apidatas; } @Override public Map update(Map params) { - return commandExecutor.execute(new SICategoryUpdateCmd(params,user)); +// return commandExecutor.execute(new SICategoryUpdateCmd(params,user)); + Map apidatas = new HashMap(16); + ICategoryFormDTO iCategoryFormDTO = (ICategoryFormDTO) params.get("iCategoryFormDTO"); +// siCategoryBiz.update(iCategoryFormDTO, (long) user.getUID()); + update(iCategoryFormDTO); + return apidatas; } @Override public Map updateStatusById(Map params) { - return commandExecutor.execute(new SICategoryUpdateStatusByIdCmd(params,user)); +// return commandExecutor.execute(new SICategoryUpdateStatusByIdCmd(params,user)); + Map apidatas = new HashMap(16); + Long id = (Long) params.get("id"); + Integer isUse = (Integer) params.get("isUse"); +// siCategoryBiz.updateStatusById(id, isUse,(long) user.getUID()); + updateStatusById(id, isUse); + return apidatas; } @Override @@ -238,4 +314,153 @@ public class SICategoryServiceImpl extends Service implements SICategoryService List collect = paymentScopes.stream().map(scope -> PaymentScopeEnum.getDefaultLabelByValue(SalaryEntityUtil.string2Integer(scope))).collect(Collectors.toList()); return StringUtils.join(collect, ","); } + /*****以下代码为SICategoryBiz中逻辑迁移,旨在减少Biz类的使用*****/ + + /** + * 自定义福利表单 + * id == null ? 新建表单 : 查看已有数据内容表单 + * @param id 自定义福利主键 + * @return 表单 + */ + public ICategoryFormDTO getForm(Long id) { + if (id != null) { + ICategoryPO iCategoryPO = getICategoryPOByID(id); + ICategoryFormDTO iCategoryFormDTO = new ICategoryFormDTO(); + if (Objects.isNull(iCategoryPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"数据不存在")); + } + BeanUtils.copyProperties(iCategoryPO,iCategoryFormDTO); + return iCategoryFormDTO; + } + + return ICategoryFormDTO.builder().welfareType(WelfareTypeEnum.SOCIAL_SECURITY).build(); + } + + /** + * 根据id获取 + * @param id + * @return + */ + @Override + public ICategoryPO getICategoryPOByID(Long id) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + ICategoryMapper iCategoryMapper = sqlSession.getMapper(ICategoryMapper.class); + ICategoryPO iCategoryPO = iCategoryMapper.getById(id); + return iCategoryPO; + + } finally { + sqlSession.close(); + } + } + + /** + * 根据名称获取 + * @param insuranceName + * @return + */ + @Override + public List listByName(String insuranceName) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + + try{ + ICategoryMapper iCategoryMapper = sqlSession.getMapper(ICategoryMapper.class); + List iCategoryPOS = iCategoryMapper.listByName(insuranceName); + return iCategoryPOS; + + } finally { + sqlSession.close(); + } + } + + /** + * 保存 + * @param iCategoryFormDTO + * @param employeeId DataTypeEnum.SYSTEM.getValue() + */ + public void save(ICategoryFormDTO iCategoryFormDTO, long employeeId) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + ICategoryMapper iCategoryMapper = sqlSession.getMapper(ICategoryMapper.class); + iCategoryFormDTO.setInsuranceName(StringUtils.trim(iCategoryFormDTO.getInsuranceName())); + List iCategoryPOS = listByName(iCategoryFormDTO.getInsuranceName()); + if (CollectionUtils.isNotEmpty(iCategoryPOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"福利名称不允许重复")); + } + ICategoryPO iCategoryPO = ICategoryBO.convertToInsuranceCategoryPO(iCategoryFormDTO, employeeId); + iCategoryMapper.insert(iCategoryPO); + + sqlSession.commit(); + + } finally { + sqlSession.close(); + } + } + + /** + * 更新 + * @param iCategoryFormDTO + */ + public void update(ICategoryFormDTO iCategoryFormDTO) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try{ + if (iCategoryFormDTO.getId() == null) { + throw new SalaryRunTimeException("id is required"); + } + ICategoryPO iCategoryPO = getICategoryPOByID(iCategoryFormDTO.getId()); + if (Objects.isNull(iCategoryPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"数据不存在")); + } + List iCategoryPOS = listByName(iCategoryFormDTO.getInsuranceName()); + if (CollectionUtils.isNotEmpty(iCategoryPOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"福利名称不允许重复")); + } + iCategoryPO.setInsuranceName(iCategoryFormDTO.getInsuranceName()); +// iCategoryPO.setWelfareType(iCategoryFormDTO.getWelfareType().getValue()); +// iCategoryPO.setPaymentScope(SalaryEnumUtil.enumArrToString(iCategoryFormDTO.getPaymentScope())); + iCategoryPO.setUpdateTime(new Date()); + ICategoryMapper iCategoryMapper = sqlSession.getMapper(ICategoryMapper.class); + iCategoryMapper.update(iCategoryPO); + + sqlSession.commit(); + } finally { + sqlSession.close(); + } + } + + /** + * 更新状态 + * @param id + * @param isUse + */ + public void updateStatusById(Long id, Integer isUse) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + if(id == null) { + throw new SalaryRunTimeException("id is required"); + } + if (isUse == null) { + throw new SalaryRunTimeException("isUse is required"); + } +// List insuranceSchemeDetailPOS = new SISchemeBiz().queryListByInsuranceIdIsPayment(id, IsPaymentEnum.YES.getValue()); + List insuranceSchemeDetailPOS = getSISchemeService(user).queryListByInsuranceIdIsPayment(id, IsPaymentEnum.YES.getValue()); + if(CollectionUtils.isNotEmpty(insuranceSchemeDetailPOS) && isUse == 0) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"该福利开启缴费,不可删除(或停用)")); + } + ICategoryPO iCategoryPO = getICategoryPOByID(id); + if (Objects.isNull(iCategoryPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"数据记录不存在")); + } + iCategoryPO.setIsUse(isUse); + ICategoryMapper iCategoryMapper = sqlSession.getMapper(ICategoryMapper.class); + iCategoryMapper.updateById(iCategoryPO); + + sqlSession.commit(); + }finally { + sqlSession.close(); + } + } + + /*****以上代码为SICategoryBiz中方法逻辑迁移,旨在减少Biz类的使用*****/ + } diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 3ab971917..dbe70e770 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -4,10 +4,10 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.biz.SISchemeBiz; -import com.engine.salary.cmd.sischeme.*; +import com.engine.salary.component.SalaryWeaTable; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; @@ -15,11 +15,17 @@ import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam; import com.engine.salary.entity.siarchives.param.SIArchiveImportParam; import com.engine.salary.entity.siarchives.po.*; import com.engine.salary.entity.sicategory.po.ICategoryPO; +import com.engine.salary.entity.sischeme.bo.InsuranceSchemeBO; +import com.engine.salary.entity.sischeme.dto.InsuranceSchemeDTO; +import com.engine.salary.entity.sischeme.dto.InsuranceSchemeDetailDTO; import com.engine.salary.entity.sischeme.dto.InsuranceSchemeListDTO; import com.engine.salary.entity.sischeme.param.InsuranceSchemeDetailUpdateParam; import com.engine.salary.entity.sischeme.param.InsuranceSchemeParam; +import com.engine.salary.entity.sischeme.param.InsuranceSchemeReqParam; import com.engine.salary.entity.sischeme.po.InsuranceSchemeDetailPO; import com.engine.salary.entity.sischeme.po.InsuranceSchemePO; +import com.engine.salary.entity.sischeme.vo.InsuranceSchemeFormVO; +import com.engine.salary.entity.sischeme.vo.SISchemeTableVO; import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeDTO; import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; import com.engine.salary.entity.taxagent.param.TaxAgentManageRangeSaveParam; @@ -30,6 +36,7 @@ import com.engine.salary.enums.salarysob.TargetTypeEnum; import com.engine.salary.enums.siaccount.EmployeeStatusEnum; import com.engine.salary.enums.sicategory.*; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.siaccount.SIAccountUtilMapper; import com.engine.salary.mapper.siarchives.FundSchemeMapper; import com.engine.salary.mapper.siarchives.InsuranceBaseInfoMapper; import com.engine.salary.mapper.siarchives.OtherSchemeMapper; @@ -60,16 +67,21 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; +import org.apache.ibatis.session.SqlSession; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; +import weaver.conn.mybatis.MyBatisFactory; import weaver.file.ImageFileManager; +import weaver.general.Util; import weaver.hrm.User; import java.io.InputStream; +import java.math.BigDecimal; import java.util.*; import java.util.function.Function; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.engine.salary.sys.constant.SalarySysConstant.WEL_BASE_AUTO_ADJUST; @@ -127,7 +139,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { } // private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); - private SISchemeBiz siSchemeBiz = new SISchemeBiz(); +// private SISchemeBiz siSchemeBiz = new SISchemeBiz(); private SalaryEmployeeService getSalaryEmployeeService(User user) { return (SalaryEmployeeService) ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); @@ -153,39 +165,134 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { return ServiceUtil.getService(SIArchivesServiceImpl.class,user); } + private SIAccountUtilMapper getSIAccountUtilMapper() { + return SqlProxyHandle.getProxy(SIAccountUtilMapper.class); + } + @Override public Map getForm(Map params) { - return commandExecutor.execute(new SISchemeGetFormCmd(params, user)); +// return commandExecutor.execute(new SISchemeGetFormCmd(params, user)); + Map apidatas = new HashMap<>(16); + + Long id = null; + if (Objects.nonNull(params.get("id"))) { + id =Long.valueOf(Util.null2String(params.get("id"))); + } + WelfareTypeEnum welfareTypeEnum = (WelfareTypeEnum)params.get("welfareTypeEnum"); +// InsuranceSchemeFormVO form = siSchemeBiz.getForm(id, welfareTypeEnum); + InsuranceSchemeFormVO form = getForm(id, welfareTypeEnum); + apidatas.put("form",form); + return apidatas; } @Override public Map insertScheme(Map params) { - return commandExecutor.execute(new SISchemeInsertCmd(params, user)); +// return commandExecutor.execute(new SISchemeInsertCmd(params, user)); + Map apidatas = new HashMap(16); + InsuranceSchemeReqParam insuranceSchemeReqParam = (InsuranceSchemeReqParam) params.get("insuranceSchemeReqParam"); +// siSchemeBiz.save(insuranceSchemeReqParam, (long) user.getUID()); + save(insuranceSchemeReqParam, (long) user.getUID()); + return apidatas; } @Override public Map update(Map params) { - return commandExecutor.execute(new SISchemeUpdateCmd(params, user)); +// return commandExecutor.execute(new SISchemeUpdateCmd(params, user)); + Map apidatas = new HashMap(16); + InsuranceSchemeReqParam insuranceSchemeReqParam = (InsuranceSchemeReqParam) params.get("insuranceSchemeReqParam"); +// siSchemeBiz.update(insuranceSchemeReqParam, (long) user.getUID()); + update(insuranceSchemeReqParam, (long) user.getUID()); + return apidatas; } @Override public Map delete(Map params) { - return commandExecutor.execute(new SISchemeDeleteCmd(params, user)); +// return commandExecutor.execute(new SISchemeDeleteCmd(params, user)); + Map apidatas = new HashMap(16); + Collection ids = (Collection)params.get("ids"); + if (CollectionUtils.isEmpty(ids)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"参数错误")); + } + //校验带上类型 + int welfareTypeId = (Integer) params.get("welfareTypeId"); + if(WelfareTypeEnum.SOCIAL_SECURITY.getValue() == welfareTypeId){ +// int num = siSchemeBiz.checkBeforeDeleteSocialscheme(params); + int num = checkBeforeDeleteSocialscheme(params); + if (num > 0){ + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"该社保方案已被使用")); + } + } + if(WelfareTypeEnum.ACCUMULATION_FUND.getValue() == welfareTypeId){ +// int accumulationfundNum = siSchemeBiz.checkBeforeDeleteAccumulationfund(params); + int accumulationfundNum = checkBeforeDeleteAccumulationfund(params); + if (accumulationfundNum > 0){ + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"该公积金方案已被使用")); + } + } + if(WelfareTypeEnum.OTHER.getValue() == welfareTypeId){ +// int otherschemeNum = siSchemeBiz.checkBeforeDeleteOtherscheme(params); + int otherschemeNum = checkBeforeDeleteOtherscheme(params); + if (otherschemeNum > 0){ + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"该其他福利方案已被使用")); + } + } + +// int billNum = siSchemeBiz.checkBeforeDeleteBill(params,welfareTypeId); + int billNum = checkBeforeDeleteBill(params,welfareTypeId); + if (billNum > 0){ + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"该福利方案已被核算")); + } +// siSchemeBiz.deleteSocialscheme(params); + deleteSocialscheme(params); + + return apidatas; } @Override public Map copyScheme(Map params) { - return commandExecutor.execute(new SISchemeCopyCmd(params, user)); +// return commandExecutor.execute(new SISchemeCopyCmd(params, user)); + Map apidatas = new HashMap(16); + Long id = (Long) params.get("id"); + String schemeName = Util.null2String(params.get("schemeName")); +// siSchemeBiz.copy(id,schemeName,(long) user.getUID()); + copy(id,schemeName,(long) user.getUID()); + return apidatas; } @Override public List queryListByInsuranceIdIsPayment(Long insuranceId, Integer isPayment) { - return new SISchemeBiz().queryListByInsuranceIdIsPayment(insuranceId, isPayment); +// return new SISchemeBiz().queryListByInsuranceIdIsPayment(insuranceId, isPayment); + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + InsuranceSchemeDetailMapper insuranceSchemeDetailMapper = sqlSession.getMapper(InsuranceSchemeDetailMapper.class); + List insuranceSchemeDetailPOList = insuranceSchemeDetailMapper.queryListByInsuranceIdIsPayment(insuranceId, isPayment); + encryptUtil.decryptList(insuranceSchemeDetailPOList, InsuranceSchemeDetailPO.class); + return insuranceSchemeDetailPOList; + } finally { + sqlSession.close(); + } } @Override public Map listPage(Map params) { - return commandExecutor.execute(new SISchemeListCmd(params, user)); +// return commandExecutor.execute(new SISchemeListCmd(params, user)); + SalaryWeaTable table = new SalaryWeaTable<>(user,SISchemeTableVO.class); + String sqlWhere = buildSqlWhere(params); + table.setSqlwhere(sqlWhere); + + WeaResultMsg result = new WeaResultMsg(false); + result.putAll(table.makeDataResult()); + result.success(); + return result.getResultMap(); + } + + private String buildSqlWhere(Map params) { + String sqlWhere = "where a.id = b.primary_id and b.insurance_id = c.id and a.delete_Type = 0"; + Integer welfareType = (Integer)params.get("welfareType"); + if (Objects.nonNull(welfareType)){ + sqlWhere += " and a.welfare_type ="+welfareType; + } + return sqlWhere; } @Override @@ -1991,7 +2098,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { schemeDetailList.forEach(f -> { schemeDetailUpdateMap.put(f.getInsuranceId() + "-" + f.getPaymentScope(), f); }); - List schemeDetailPOS = siSchemeBiz.listByPrimaryId(primaryId); +// List schemeDetailPOS = siSchemeBiz.listByPrimaryId(primaryId); + List schemeDetailPOS = listByPrimaryId(primaryId); //替换修改字段 if (schemeDetailPOS.size() > 0) { schemeDetailPOS.forEach(f -> { @@ -2012,5 +2120,423 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { } return errorInfo; } + /*****以下代码为SISchemeBiz中逻辑迁移,旨在减少Biz类的使用*****/ + /** + * 获取社保方案 + * + * @param id + * @param welfareTypeEnum + * @return + */ + public InsuranceSchemeFormVO getForm(Long id, WelfareTypeEnum welfareTypeEnum) { + InsuranceSchemeDTO insuranceSchemeDTO = getSchemeFormDTO(welfareTypeEnum, id); + List insuranceSchemeDetailDTOList = getSchemeDetailFormDTO(welfareTypeEnum, id); + return InsuranceSchemeFormVO.builder().schemeBatch(insuranceSchemeDTO).schemeDetailList(insuranceSchemeDetailDTOList).build(); + } + + /** + * 获取方案主表信息 新建|详情 + * + * @param welfareTypeEnum 福利类型 + * @param id 方案主键id + * @return form + */ + private InsuranceSchemeDTO getSchemeFormDTO(WelfareTypeEnum welfareTypeEnum, Long id) { + InsuranceSchemeDTO insuranceSchemeDTO = InsuranceSchemeDTO.builder().paymentType(PaymentTypeEnum.SCHEME_TOWN).welfareType(welfareTypeEnum).build(); + if (id != null) { + InsuranceSchemePO insuranceSchemePO = getById(id); + SalaryAssert.notNull(insuranceSchemePO, SalaryI18nUtil.getI18nLabel(0,"福利方案不存在")); + //BeanUtils.copyProperties(insuranceSchemePO, insuranceSchemeDTO); + insuranceSchemeDTO.setId(insuranceSchemePO.getId()); + insuranceSchemeDTO.setPaymentArea(insuranceSchemePO.getPaymentArea()); + insuranceSchemeDTO.setRemarks(insuranceSchemePO.getRemarks()); + insuranceSchemeDTO.setSchemeName(insuranceSchemePO.getSchemeName()); + insuranceSchemeDTO.setPaymentType(SalaryEnumUtil.enumMatchByValue(insuranceSchemePO.getPaymentType(), PaymentTypeEnum.values(), PaymentTypeEnum.class)); + insuranceSchemeDTO.setWelfareType(welfareTypeEnum); + insuranceSchemeDTO.setSharedType(StringUtils.isBlank(insuranceSchemePO.getSharedType()) ? "0" : insuranceSchemePO.getSharedType()); + insuranceSchemeDTO.setTaxAgentIds(insuranceSchemePO.getTaxAgentIds()); + } + return insuranceSchemeDTO; + } + + /** + * 获取方案明细表集合 新建|详情 + * + * @param welfareTypeEnum 福利类型 + * @param id 方案主键id + * @return form + */ + public List getSchemeDetailFormDTO(WelfareTypeEnum welfareTypeEnum, Long id) { + List insuranceCategoryPOS = listByWelfareType(welfareTypeEnum.getValue()); + List insuranceSchemeDetailDTOList = new ArrayList<>(); + insuranceCategoryPOS.forEach(item -> { + PaymentScopeEnum[] paymentScopeEnums = SalaryEnumUtil.stringToEnums(item.getPaymentScope(), ","); + Arrays.stream(paymentScopeEnums).forEach(e -> { + InsuranceSchemeDetailDTO insuranceSchemeDetailDTO = InsuranceSchemeDetailDTO.builder().build(); + InsuranceSchemeDetailPO insuranceSchemeDetailPO = getByPPI(id, e.getValue(), item.getId()); + if (insuranceSchemeDetailPO == null) { + insuranceSchemeDetailDTO = InsuranceSchemeDetailDTO.builder() + .id((long) (Math.random() * 10000)) + .insuranceId(item.getId()) + .insuranceName(item.getInsuranceName()) + .paymentScope(e.getDefaultLabel()) + .rententionRule(String.valueOf(RententionRuleEnum.ROUND.getValue())) + .cycleSetting("000000000000") + .paymentCycle("0") + .accountType("0") + .build(); + if (Objects.equals(item.getDataType(), DataTypeEnum.SYSTEM.getValue())) { + insuranceSchemeDetailDTO.setIsPayment(true); + } else { + insuranceSchemeDetailDTO.setIsPayment(false); + } + } else { + //BeanUtils.copyProperties(insuranceSchemeDetailPO, insuranceSchemeDetailDTO); + insuranceSchemeDetailDTO.setEffectiveTime(insuranceSchemeDetailPO.getEffectiveTime()); + insuranceSchemeDetailDTO.setExpirationTime(insuranceSchemeDetailPO.getExpirationTime()); + insuranceSchemeDetailDTO.setId(insuranceSchemeDetailPO.getId()); + insuranceSchemeDetailDTO.setInsuranceId(insuranceSchemeDetailPO.getInsuranceId()); + insuranceSchemeDetailDTO.setPaymentScopeValue(insuranceSchemeDetailPO.getPaymentScope()); + insuranceSchemeDetailDTO.setPrimaryId(insuranceSchemeDetailPO.getPrimaryId()); + insuranceSchemeDetailDTO.setValidNum(insuranceSchemeDetailPO.getValidNum()); + + if (insuranceSchemeDetailPO.getIsPayment() != null) { + insuranceSchemeDetailDTO.setIsPayment(Objects.equals(insuranceSchemeDetailPO.getIsPayment(), IsPaymentEnum.YES.getValue())); + } + if (insuranceSchemeDetailPO.getPaymentCycle() != null) { + insuranceSchemeDetailDTO.setPaymentCycle(insuranceSchemeDetailPO.getPaymentCycle() + ""); + } else { + insuranceSchemeDetailDTO.setPaymentCycle("0"); + } + if (insuranceSchemeDetailPO.getAccountType() != null) { + insuranceSchemeDetailDTO.setAccountType(insuranceSchemeDetailPO.getAccountType() + ""); + } else { + insuranceSchemeDetailDTO.setAccountType("0"); + } + if (insuranceSchemeDetailPO.getCycleSetting() == null) { + insuranceSchemeDetailDTO.setCycleSetting("000000000000"); + } else { + insuranceSchemeDetailDTO.setCycleSetting(insuranceSchemeDetailPO.getCycleSetting()); + } + if (StringUtils.isNotBlank(insuranceSchemeDetailPO.getUpperLimit())) { + BigDecimal bigDecimal = new BigDecimal(insuranceSchemeDetailPO.getUpperLimit()); + insuranceSchemeDetailDTO.setUpperLimit(numberCheck(bigDecimal.toPlainString()) ? null : bigDecimal); + } + if (StringUtils.isNotBlank(insuranceSchemeDetailPO.getLowerLimit())) { + BigDecimal bigDecimal = new BigDecimal(insuranceSchemeDetailPO.getLowerLimit()); + insuranceSchemeDetailDTO.setLowerLimit(numberCheck(bigDecimal.toPlainString()) ? null : bigDecimal); + } + if (StringUtils.isNotBlank(insuranceSchemeDetailPO.getPaymentProportion())) { + BigDecimal bigDecimal = new BigDecimal(insuranceSchemeDetailPO.getPaymentProportion()); + insuranceSchemeDetailDTO.setPaymentProportion(numberCheck(bigDecimal.toPlainString()) ? null : bigDecimal); + } + if (StringUtils.isNotBlank(insuranceSchemeDetailPO.getFixedCost())) { + BigDecimal bigDecimal = new BigDecimal(insuranceSchemeDetailPO.getFixedCost()); + insuranceSchemeDetailDTO.setFixedCost(numberCheck(bigDecimal.toPlainString()) ? null : bigDecimal); + } + insuranceSchemeDetailDTO.setInsuranceName(item.getInsuranceName()); + insuranceSchemeDetailDTO.setRententionRule(String.valueOf(insuranceSchemeDetailPO.getRententionRule())); + insuranceSchemeDetailDTO.setPaymentScope(e.getDefaultLabel()); + + } + insuranceSchemeDetailDTO.setPaymentScopeValue(e.getValue()); + insuranceSchemeDetailDTOList.add(insuranceSchemeDetailDTO); + }); + }); + return insuranceSchemeDetailDTOList; + } + + /** + * 社保方案基础信息主表 + * + * @param id + * @return + */ + public InsuranceSchemePO getById(Long id) { + + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + InsuranceSchemeMapper insuranceSchemeMapper = sqlSession.getMapper(InsuranceSchemeMapper.class); + InsuranceSchemePO insuranceSchemePO = insuranceSchemeMapper.getById(id); + + return insuranceSchemePO; + } finally { + sqlSession.close(); + } + } + + /** + * 根据福利类型获取 + * + * @param welfareType + * @return + */ + public List listByWelfareType(Integer welfareType) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + ICategoryMapper iCategoryMapper = sqlSession.getMapper(ICategoryMapper.class); + List insuranceCategoryPOS = iCategoryMapper.listByWelfareType(welfareType, null); + return insuranceCategoryPOS; + } finally { + sqlSession.close(); + } + } + + public boolean numberCheck(String number) { + return Pattern.compile("^0\\.[0]*").matcher(number).matches(); + } + + private InsuranceSchemeDetailPO getByPPI(Long primaryId, Integer paymentScope, Long insuranceId) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + InsuranceSchemeDetailMapper insuranceSchemeDetailMapper = sqlSession.getMapper(InsuranceSchemeDetailMapper.class); + InsuranceSchemeDetailPO insuranceSchemeDetailPO = insuranceSchemeDetailMapper.getByPPI(primaryId, paymentScope, insuranceId); + encryptUtil.decrypt(insuranceSchemeDetailPO, InsuranceSchemeDetailPO.class); + return insuranceSchemeDetailPO; + } finally { + sqlSession.close(); + } + } + + /** + * 新增 + * + * @param saveParam + * @param employeeId + */ + public void save(InsuranceSchemeReqParam saveParam, long employeeId) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + //保存福利项目主表 + InsuranceSchemeMapper insuranceSchemeMapper = sqlSession.getMapper(InsuranceSchemeMapper.class); + saveParam.getInsuranceScheme().setSchemeName(StringUtils.trim(saveParam.getInsuranceScheme().getSchemeName())); + List listResult = insuranceSchemeMapper.listByName(saveParam.getInsuranceScheme().getSchemeName()); + SalaryAssert.isEmpty(listResult, SalaryI18nUtil.getI18nLabel(0,"该福利名称已经存在,福利名称系统全局唯一")); + + InsuranceSchemePO insuranceSchemePO = InsuranceSchemeBO.convert2BatchPO(saveParam.getInsuranceScheme(), employeeId); + if (insuranceSchemePO.getSharedType() == null) { + insuranceSchemePO.setSharedType(SharedTypeEnum.PUBLIC.getValue()); + } else { + if (insuranceSchemePO.getSharedType().equals(SharedTypeEnum.PRIVATE.getValue()) && StringUtils.isBlank(insuranceSchemePO.getTaxAgentIds())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案可见性为私有时,未设置可见范围")); + } + } + insuranceSchemeMapper.insert(insuranceSchemePO); + //保存福利项目明细表 + InsuranceSchemeDetailMapper insuranceSchemeDetailMapper = sqlSession.getMapper(InsuranceSchemeDetailMapper.class); + List insuranceSchemeDetailPOS = InsuranceSchemeBO.convertToInsuranceSchemeDetailPoList(saveParam.getInsuranceSchemeDetailList(), employeeId, insuranceSchemePO.getId()); + encryptUtil.encryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); + insuranceSchemeDetailPOS.forEach(insuranceSchemeDetailMapper::insert); + + sqlSession.commit(); + + } finally { + sqlSession.close(); + } + } + + /** + * 更新 + * + * @param updateParam + * @param employeeId + */ + public void update(InsuranceSchemeReqParam updateParam, long employeeId) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + InsuranceSchemeMapper insuranceSchemeMapper = sqlSession.getMapper(InsuranceSchemeMapper.class); + InsuranceSchemeDetailMapper insuranceSchemeDetailMapper = sqlSession.getMapper(InsuranceSchemeDetailMapper.class); + + //查询是否存在福利方案 + InsuranceSchemePO insuranceSchemePO = getById(updateParam.getInsuranceScheme().getId()); + if (Objects.isNull(insuranceSchemePO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"福利方案不存在")); + } + //去除入参中方案名称的空格 + updateParam.getInsuranceScheme().setSchemeName(StringUtils.trim(updateParam.getInsuranceScheme().getSchemeName())); + //福利方案名称重复 + List insuranceSchemePOList = insuranceSchemeMapper.listByName(updateParam.getInsuranceScheme().getSchemeName()); + if (CollectionUtils.isNotEmpty(insuranceSchemePOList)) { + boolean repeat = insuranceSchemePOList.stream().anyMatch(item -> !Objects.equals(item.getId(), updateParam.getInsuranceScheme().getId())); + SalaryAssert.isTrue(!repeat, SalaryI18nUtil.getI18nLabel(0,"福利方案名称重复")); + } + + if (insuranceSchemePO.getSharedType() == null) { + insuranceSchemePO.setSharedType(SharedTypeEnum.PUBLIC.getValue()); + } else { + if (insuranceSchemePO.getSharedType().equals(SharedTypeEnum.PRIVATE.getValue()) && StringUtils.isBlank(insuranceSchemePO.getTaxAgentIds())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案可见性为私有时,未设置可见范围")); + } + } + + //更新福利方案主表 + InsuranceSchemePO insuranceSchemePO1 = InsuranceSchemeBO.buildInsuranceSchemePO(insuranceSchemePO, updateParam.getInsuranceScheme()); + insuranceSchemeMapper.update(insuranceSchemePO1); + + //更新福利方案明细表 先删后插 + insuranceSchemeDetailMapper.batchDeleteByPrimaryIds(Collections.singleton(updateParam.getInsuranceScheme().getId())); + //更新明细表 + List insuranceSchemeDetailPOS = InsuranceSchemeBO.convertToInsuranceSchemeDetailPoList(updateParam.getInsuranceSchemeDetailList(), employeeId, insuranceSchemePO.getId()); + encryptUtil.encryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); + insuranceSchemeDetailPOS.forEach(insuranceSchemeDetailMapper::insert); + + //记录操作日志 + + sqlSession.commit(); + } finally { + sqlSession.close(); + } + } + + public int checkBeforeDeleteSocialscheme(Map params) { + return getSIAccountUtilMapper().checkBeforeDeleteSocialscheme((Collection) params.get("ids")).get(0).getNum(); + } + + public int checkBeforeDeleteAccumulationfund(Map params) { + return getSIAccountUtilMapper().checkBeforeDeleteAccumulationfund((Collection) params.get("ids")).get(0).getNum(); + } + + public int checkBeforeDeleteOtherscheme(Map params) { + return getSIAccountUtilMapper().checkBeforeDeleteOtherscheme((Collection) params.get("ids")).get(0).getNum(); + } + + public int checkBeforeDeleteBill(Map params, Integer welfareTypeId) { + return getSIAccountUtilMapper().checkBeforeDeleteBill((Collection) params.get("ids"), welfareTypeId).get(0).getNum(); + } + + public void deleteSocialscheme(Map params) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + InsuranceSchemeDetailMapper insuranceSchemeDetailMapper = sqlSession.getMapper(InsuranceSchemeDetailMapper.class); + InsuranceSchemeMapper insuranceSchemeMapper = sqlSession.getMapper(InsuranceSchemeMapper.class); + + insuranceSchemeMapper.deleteByIds((Collection) params.get("ids")); + insuranceSchemeDetailMapper.deleteByIds((Collection) params.get("ids")); + sqlSession.commit(); + } finally { + sqlSession.close(); + } + } + + /** + * 复制方案 + * + * @param id + * @param schemeName + * @param employeeId + */ + public void copy(Long id, String schemeName, long employeeId) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + InsuranceSchemeMapper insuranceSchemeMapper = sqlSession.getMapper(InsuranceSchemeMapper.class); + //去除入参中方案名称的空格 + schemeName = StringUtils.trim(schemeName); + + List listResult = insuranceSchemeMapper.listByName(schemeName); + SalaryAssert.isEmpty(listResult, SalaryI18nUtil.getI18nLabel(0,"方案名称重复")); + + InsuranceSchemeDetailMapper insuranceSchemeDetailMapper = sqlSession.getMapper(InsuranceSchemeDetailMapper.class); + if (Objects.isNull(id)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案id为空")); + } + + if (Objects.isNull(schemeName)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"复制方案名为空")); + } + + InsuranceSchemePO insuranceSchemePO = getById(id); + if (Objects.isNull(insuranceSchemePO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案不存在")); + } + + if (insuranceSchemePO.getSchemeName().equals(schemeName)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案名称重复")); + } + + InsuranceSchemePO batchPO = InsuranceSchemePO.builder() + .creator(employeeId) + .createTime(new Date()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .schemeName(schemeName) + .paymentArea(insuranceSchemePO.getPaymentArea()) + .updateTime(new Date()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .paymentType(insuranceSchemePO.getPaymentType()) + .remarks(insuranceSchemePO.getRemarks()) + .welfareType(insuranceSchemePO.getWelfareType()) + .isUse(insuranceSchemePO.getIsUse()) + .build(); + insuranceSchemeMapper.insert(batchPO); + + List detailList = insuranceSchemeDetailMapper.queryListBySchemeId(id); + detailList = encryptUtil.decryptList(detailList,InsuranceSchemeDetailPO.class); + if (CollectionUtils.isNotEmpty(detailList)) { + List detailPOS = detailList.stream().map(item -> InsuranceSchemeDetailPO.builder() + .creator(employeeId) + .createTime(new Date()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .effectiveTime(item.getEffectiveTime()) + .expirationTime(item.getExpirationTime()) + .fixedCost(item.getFixedCost()) + .insuranceId(item.getInsuranceId()) + .isPayment(item.getIsPayment()) + .lowerLimit(item.getLowerLimit()) + .paymentScope(item.getPaymentScope()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .paymentProportion(item.getPaymentProportion()) + .updateTime(new Date()) + .primaryId(batchPO.getId()) + .rententionRule(item.getRententionRule()) + .upperLimit(item.getUpperLimit()) + .validNum(item.getValidNum()) + .build() + ).collect(Collectors.toList()); + encryptUtil.encryptList(detailPOS, InsuranceSchemeDetailPO.class); + detailPOS.forEach(insuranceSchemeDetailMapper::insert); + } + + sqlSession.commit(); + } finally { + sqlSession.close(); + } + } + + /** + * 社保方案基础信息明细表 + * + * @param primaryId + * @return + */ + public List listByPrimaryId(Long primaryId) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + InsuranceSchemeDetailMapper insuranceSchemeDetailMapper = sqlSession.getMapper(InsuranceSchemeDetailMapper.class); + List insuranceSchemeDetailPOS = insuranceSchemeDetailMapper.queryListBySchemeId(primaryId); + encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); + return insuranceSchemeDetailPOS; + } finally { + sqlSession.close(); + } + + } + + /** + * 获取所有方案 + * + * @return + */ + @Override + public List listAll(){ + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + InsuranceSchemeMapper insuranceSchemeMapper = sqlSession.getMapper(InsuranceSchemeMapper.class); + List insuranceSchemePOList = insuranceSchemeMapper.listAll(); + return insuranceSchemePOList; + } finally { + sqlSession.close(); + } + } + + /*****以上代码为SISchemeBiz中方法逻辑迁移,旨在减少Biz类的使用*****/ } From 6efbd9deb0ca9b05227ea399bbb17a1be8fda8dc Mon Sep 17 00:00:00 2001 From: sy Date: Sun, 4 Feb 2024 15:10:35 +0800 Subject: [PATCH 20/64] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=EF=BC=8C=E5=B0=86=E9=83=A8=E5=88=86=E6=96=B0=E5=A2=9E=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E4=B8=ADlabelId=E5=85=A5=E5=8F=82=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E7=BD=AE=E4=B8=BA0=EF=BC=8C=E6=96=B9=E4=BE=BF=E5=90=8E?= =?UTF-8?q?=E6=9C=9F=E5=A4=9A=E8=AF=AD=E8=A8=80=E9=80=BB=E8=BE=91=E9=80=82?= =?UTF-8?q?=E9=85=8D=E6=97=B6=E5=AE=9A=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AddUpDeductionServiceImpl.java | 6 +++--- .../service/impl/AddUpSituationServiceImpl.java | 6 +++--- .../service/impl/OtherDeductionServiceImpl.java | 6 +++--- .../impl/SalaryAcctEmployeeServiceImpl.java | 8 ++++---- .../service/impl/SalaryAcctExcelServiceImpl.java | 4 ++-- .../impl/SalaryAcctRecordServiceImpl.java | 16 ++++++++-------- .../impl/SalaryAcctResultServiceImpl.java | 8 ++++---- .../service/impl/SalaryItemServiceImpl.java | 12 ++++++------ .../impl/SalarySobCheckRuleServiceImpl.java | 8 ++++---- .../service/impl/SalarySobItemServiceImpl.java | 4 ++-- .../service/impl/SalarySobRangeServiceImpl.java | 4 ++-- .../service/impl/SysSalaryItemServiceImpl.java | 4 ++-- 12 files changed, 43 insertions(+), 43 deletions(-) diff --git a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java index ee208bf2d..4c3eef869 100644 --- a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java @@ -445,10 +445,10 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction if (CollectionUtils.isNotEmpty(saveList)) { LoggerContext loggerContext = new LoggerContext(); loggerContext.setUser(user); - loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(100351, "新增累计专项附加扣除")); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "新增累计专项附加扣除")); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(100351, "新增累计专项附加扣除")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(100351, "新增累计专项附加扣除")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增累计专项附加扣除")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增累计专项附加扣除")); loggerContext.setNewValueList(saveList); SalaryElogConfig.addUpDeductionLoggerTemplate.write(loggerContext); } diff --git a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java index ecc029dbb..bbeb0506b 100644 --- a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java @@ -876,10 +876,10 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation if (CollectionUtils.isNotEmpty(saveList)) { LoggerContext loggerContext = new LoggerContext(); loggerContext.setUser(user); - loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(100351, "新增累计专项附加扣除")); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "新增累计专项附加扣除")); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(100351, "新增累计专项附加扣除")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(100351, "新增累计专项附加扣除")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增累计专项附加扣除")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增累计专项附加扣除")); loggerContext.setNewValueList(saveList); SalaryElogConfig.addUpSituationLoggerTemplate.write(loggerContext); } diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index e8cd2de13..b831a5463 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -424,10 +424,10 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction if (CollectionUtils.isNotEmpty(saveList)) { LoggerContext loggerContext = new LoggerContext(); loggerContext.setUser(user); - loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel( 100351, "新增累计专项附加扣除")); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel( 0, "新增累计专项附加扣除")); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 100351, "新增计专项附加扣除")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 100351, "新增累计专项附加扣除")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "新增计专项附加扣除")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "新增累计专项附加扣除")); loggerContext.setNewValueList(saveList); SalaryElogConfig.addUpDeductionLoggerTemplate.write(loggerContext); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index e87ab0f2e..fa43ef846 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -421,8 +421,8 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); loggerContext.setTargetName(targetName); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98837, "添加薪资核算人员")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98837, "添加薪资核算人员") + ":" + targetName); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "添加薪资核算人员")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "添加薪资核算人员") + ":" + targetName); loggerContext.setNewValueList(salaryAcctEmployeePOS); SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); } @@ -488,8 +488,8 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); loggerContext.setTargetName(targetName); loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98835, "删除薪资核算人员")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98835, "删除薪资核算人员") + ":" + targetName); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除薪资核算人员")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除薪资核算人员") + ":" + targetName); loggerContext.setOldValueList(salaryAcctEmployeePOS); SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 3ce380565..964837f26 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -255,8 +255,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); loggerContext.setTargetName(targetName); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98837, "导出环比增加人员")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98837, "导出环比增加人员") + ":" + targetName); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "导出环比增加人员")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "导出环比增加人员") + ":" + targetName); SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); return ExcelUtilPlus.genWorkbookV2(rows, sheetName); diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index c13e6ca71..dfc42d16c 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -304,8 +304,8 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); loggerContext.setTargetName(targetName); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98768, "新建薪资核算")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98768, "新建薪资核算") + ": " + targetName); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新建薪资核算")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新建薪资核算") + ": " + targetName); loggerContext.setNewValues(salaryAcctRecordPO); SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); // 返回薪资核算记录id @@ -538,8 +538,8 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); loggerContext.setTargetName(targetName); loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98821, "删除薪资核算")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98821, "删除薪资核算") + ":" + targetName); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除薪资核算")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除薪资核算") + ":" + targetName); loggerContext.setNewValues(salaryAcctRecordPO); SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); }); @@ -580,8 +580,8 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); loggerContext.setTargetName(targetName); loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98817, "薪资核算归档")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98817, "薪资核算归档") + ": " + targetName); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "薪资核算归档")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "薪资核算归档") + ": " + targetName); loggerContext.setNewValues(salaryAcctRecordPO); SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); } @@ -630,8 +630,8 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe loggerContext.setTargetId("" + salaryAcctRecordPO.getId()); loggerContext.setTargetName(targetName); loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98820, "重新核算")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98820, "重新核算") + ": " + targetName); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "重新核算")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "重新核算") + ": " + targetName); loggerContext.setNewValues(salaryAcctRecordPO); SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 6117667a3..fb441a434 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -661,8 +661,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe loggerContext.setTargetId(String.valueOf(salaryAcctEmployeePO.getSalaryAcctRecordId())); loggerContext.setTargetName(targetName); loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(95783, "编辑薪资核算结果") + ": " + operateDesc); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(95783, "编辑薪资核算结果") + ": " + operateDesc); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "编辑薪资核算结果") + ": " + operateDesc); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "编辑薪资核算结果") + ": " + operateDesc); loggerContext.setNewValueList(Lists.newArrayList(salaryAcctResultPOS)); SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); } @@ -866,8 +866,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe loggerContext.setTargetId(String.valueOf(calculateParam.getSalaryAcctRecordId())); loggerContext.setTargetName(targetName); loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(95783, "薪资核算")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(95783, "薪资核算")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "薪资核算")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "薪资核算")); SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); } catch (Exception e) { log.info("薪资核算出错:{}", e.getMessage(), e); diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index c43393c10..e18e8569a 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -210,8 +210,8 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService loggerContext.setTargetId(String.valueOf(salaryItemPO.getId())); loggerContext.setTargetName(salaryItemPO.getName()); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98329, "新建薪资项目")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98329, "新建薪资项目") + ": " + salaryItemPO.getName()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新建薪资项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新建薪资项目") + ": " + salaryItemPO.getName()); loggerContext.setNewValues(salaryItemPO); SalaryElogConfig.salaryItemLoggerTemplate.write(loggerContext); } @@ -293,8 +293,8 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService loggerContext.setTargetId(String.valueOf(newSalaryItemPO.getId())); loggerContext.setTargetName(newSalaryItemPO.getName()); loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(93892, "编辑薪资项目")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(93892, "编辑薪资项目") + ": " + newSalaryItemPO.getName()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "编辑薪资项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "编辑薪资项目") + ": " + newSalaryItemPO.getName()); loggerContext.setOldValues(salaryItemPO); loggerContext.setNewValues(newSalaryItemPO); SalaryElogConfig.salaryItemLoggerTemplate.write(loggerContext); @@ -358,8 +358,8 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService loggerContext.setTargetId(String.valueOf(salaryItemPO.getId())); loggerContext.setTargetName(salaryItemPO.getName()); loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98323, "删除薪资项目")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98323, "删除薪资项目") + ": " + salaryItemPO.getName()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除薪资项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除薪资项目") + ": " + salaryItemPO.getName()); loggerContext.setOldValues(salaryItemPO); SalaryElogConfig.salaryItemLoggerTemplate.write(loggerContext); }); diff --git a/src/com/engine/salary/service/impl/SalarySobCheckRuleServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobCheckRuleServiceImpl.java index 7d22fe009..103b62de8 100644 --- a/src/com/engine/salary/service/impl/SalarySobCheckRuleServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobCheckRuleServiceImpl.java @@ -136,8 +136,8 @@ public class SalarySobCheckRuleServiceImpl extends Service implements SalarySobC loggerContext.setTargetId("" + salarySobPO.getId()); loggerContext.setTargetName(salarySobPO.getName()); loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(93870, "编辑校验规则")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(93870, "编辑校验规则") + ": " + newSalarySobCheckRulePO.getName()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "编辑校验规则")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "编辑校验规则") + ": " + newSalarySobCheckRulePO.getName()); loggerContext.setOldValues(salarySobCheckRulePO); loggerContext.setNewValues(newSalarySobCheckRulePO); SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); @@ -185,8 +185,8 @@ public class SalarySobCheckRuleServiceImpl extends Service implements SalarySobC loggerContext.setTargetId("" + salarySobPO.getId()); loggerContext.setTargetName(salarySobPO.getName()); loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98646, "删除校验规则")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98646, "删除校验规则") + ": " + salarySobCheckRulePO.getName()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除校验规则")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除校验规则") + ": " + salarySobCheckRulePO.getName()); loggerContext.setOldValues(salarySobCheckRulePO); SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); }); diff --git a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java index 216e6499e..8a90a0049 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -270,8 +270,8 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe loggerContext.setTargetId("" + salarySob.getId()); loggerContext.setTargetName(salarySob.getName()); loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98613, "编辑薪资账套薪资项目")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98613, "编辑薪资账套薪资项目")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "编辑薪资账套薪资项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "编辑薪资账套薪资项目")); SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); } diff --git a/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java index 0e30a3fd9..232b17e96 100644 --- a/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java @@ -186,7 +186,7 @@ public class SalarySobRangeServiceImpl extends Service implements SalarySobRange } //记录日志 String operateTypeName = Objects.equals(saveParam.getIncludeType(), 1) ? - SalaryI18nUtil.getI18nLabel(98601, "关联人员范围新增对象") : SalaryI18nUtil.getI18nLabel(98602, "从范围中排除新增对象"); + SalaryI18nUtil.getI18nLabel(0, "关联人员范围新增对象") : SalaryI18nUtil.getI18nLabel(0, "从范围中排除新增对象"); LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId("" + salarySobPO.getId()); @@ -215,7 +215,7 @@ public class SalarySobRangeServiceImpl extends Service implements SalarySobRange Integer includeType = salarySobRangePOS.get(0).getIncludeType(); //记录日志 String operateTypeName = Objects.equals(includeType, 1) ? - SalaryI18nUtil.getI18nLabel(98605, "关联人员范围删除对象") : SalaryI18nUtil.getI18nLabel(98606, "从范围中排除删除对象"); + SalaryI18nUtil.getI18nLabel(0, "关联人员范围删除对象") : SalaryI18nUtil.getI18nLabel(0, "从范围中排除删除对象"); salarySobPOS.forEach(salarySobPO -> { LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); diff --git a/src/com/engine/salary/service/impl/SysSalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SysSalaryItemServiceImpl.java index 18f1500ab..883c886dd 100644 --- a/src/com/engine/salary/service/impl/SysSalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SysSalaryItemServiceImpl.java @@ -98,8 +98,8 @@ public class SysSalaryItemServiceImpl extends Service implements SysSalaryItemSe loggerContext.setTargetId(String.valueOf(sysSalaryItemPO.getId())); loggerContext.setTargetName(sysSalaryItemPO.getName()); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(93891, "添加系统薪资项目")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(93891, "添加系统薪资项目") + ": " + sysSalaryItemPO.getName()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "添加系统薪资项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "添加系统薪资项目") + ": " + sysSalaryItemPO.getName()); loggerContext.setNewValues(sysSalaryItemPO); SalaryElogConfig.salaryItemLoggerTemplate.write(loggerContext); }); From 133933e2879c017e23a5a6bcb848608a76596eae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 5 Feb 2024 14:04:47 +0800 Subject: [PATCH 21/64] =?UTF-8?q?=E4=BF=AE=E6=94=B9sqlserver=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E6=8F=92=E5=85=A5=E5=92=8Coracle=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/elog/ElogTableCheckerMapper.xml | 8 ++++---- .../mapper/elog/LocalElogAopDaoMapper.xml | 20 +++++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml index 03e4028ea..71b2cd9e6 100644 --- a/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml +++ b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml @@ -258,10 +258,10 @@ tablenamedesc varchar2(50), fieldName varchar2(200), fieldnamelabelid varchar2(200), - newValue varchar2(4000), - oldValue varchar2(4000), - newrealvalue varchar2(4000), - oldrealvalue varchar2(4000), + newValue CLOB, + oldValue CLOB, + newrealvalue CLOB, + oldrealvalue CLOB, fieldDesc varchar2(200), showorder number(*,0) default 0, isdetail number(*,0) default 0 diff --git a/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.xml b/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.xml index 41e8003ef..81eb589f2 100644 --- a/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.xml +++ b/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.xml @@ -78,6 +78,26 @@ + + + insert into ${tablename} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue, + fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue, + oldRealValue,tableNameDesc, + tableNameLabelId,fieldNameLabelId, create_time, update_time,delete_type) + VALUES + ( + #{detailContext.id},#{mainid}, #{detailContext.uuid}, #{detailContext.tableName}, + #{detailContext.fieldName}, #{detailContext.newValue}, + #{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder}, #{detailContext.dataid}, + #{detailContext.belongDataid}, #{detailContext.isDetail}, + #{detailContext.tenant_key},#{detailContext.creator}, #{detailContext.newRealValue} + , #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId}, + #{detailContext.fieldNameLabelId} + , #{detailContext.create_time}, #{detailContext.update_time}, #{detailContext.delete_type} + ) + + + insert into ${tablename} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue, fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue, From 5783342b01be4116c5c8fcb8541b1d19f270c460 Mon Sep 17 00:00:00 2001 From: sy Date: Mon, 5 Feb 2024 14:06:52 +0800 Subject: [PATCH 22/64] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=96=B9=E6=A1=88=EF=BC=8C=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E6=96=B0=E5=BB=BA=E3=80=81=E5=A4=8D=E5=88=B6=E3=80=81=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=8A=9F=E8=83=BD=E5=A2=9E=E5=8A=A0=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sicategory/dto/ICategoryListDTO.java | 2 +- .../sischeme/po/InsuranceSchemeDetailPO.java | 23 ++ .../entity/sischeme/po/InsuranceSchemePO.java | 16 + .../sischeme/InsuranceSchemeDetailMapper.java | 2 + .../sischeme/InsuranceSchemeDetailMapper.xml | 12 + .../sischeme/InsuranceSchemeMapper.java | 2 + .../mapper/sischeme/InsuranceSchemeMapper.xml | 11 + .../service/impl/SICategoryServiceImpl.java | 2 + .../service/impl/SISchemeServiceImpl.java | 290 ++++++++++++------ 9 files changed, 258 insertions(+), 102 deletions(-) diff --git a/src/com/engine/salary/entity/sicategory/dto/ICategoryListDTO.java b/src/com/engine/salary/entity/sicategory/dto/ICategoryListDTO.java index 5fc4a6cd1..238d4ec13 100644 --- a/src/com/engine/salary/entity/sicategory/dto/ICategoryListDTO.java +++ b/src/com/engine/salary/entity/sicategory/dto/ICategoryListDTO.java @@ -49,7 +49,7 @@ public class ICategoryListDTO { @SalaryTableColumn(column = "payment_scope", width = "30%", text = "缴纳对象",transmethod = "com.engine.salary.transmethod.ICategoryTransMethod.getPaymentcopeTypeName") - @TableTitle(title = "缴纳对象",dataIndex = "paymentScopt",key = "paymentScopt") + @TableTitle(title = "缴纳对象",dataIndex = "paymentScope",key = "paymentScope") private String paymentScope; private String paymentScopeSpan; diff --git a/src/com/engine/salary/entity/sischeme/po/InsuranceSchemeDetailPO.java b/src/com/engine/salary/entity/sischeme/po/InsuranceSchemeDetailPO.java index a65ce19d7..3d4200f65 100644 --- a/src/com/engine/salary/entity/sischeme/po/InsuranceSchemeDetailPO.java +++ b/src/com/engine/salary/entity/sischeme/po/InsuranceSchemeDetailPO.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.sischeme.po; import com.engine.salary.annotation.Encrypt; +import com.engine.salary.elog.annotation.ElogTransform; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -20,114 +21,136 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor //hrsa_scheme_detail +@ElogTransform(name = "福利方案明细") public class InsuranceSchemeDetailPO { /** * 主键id */ + @ElogTransform(name = "主键id") private Long id; /** * 社保方案主表id */ + @ElogTransform(name = "方案主表id") private Long primaryId; /** * 险种id */ + @ElogTransform(name = "福利项id") private Long insuranceId; /** * 生效年月(含) */ + @ElogTransform(name = "生效年月") private String effectiveTime; /** * 失效年月(不含) */ + @ElogTransform(name = "失效年月") private String expirationTime; /** * 是否缴费 0-否 1-是 */ + @ElogTransform(name = "是否缴费") private Integer isPayment; /** * 缴纳对象 */ + @ElogTransform(name = "缴纳对象") private Integer paymentScope; /** * 基数上限 */ @Encrypt + @ElogTransform(name = "基数上限") private String upperLimit; /** * 基数下限 */ @Encrypt + @ElogTransform(name = "基数下限") private String lowerLimit; /** * 缴纳比例 */ + @ElogTransform(name = "缴纳比例") private String paymentProportion; /** * 固定费用 */ @Encrypt + @ElogTransform(name = "固定费用") private String fixedCost; /** * 有效小数位 */ + @ElogTransform(name = "有效小数位") private Integer validNum; /** * 进位规则 */ + @ElogTransform(name = "进位规则") private Integer rententionRule; /** * 缴纳周期,0不进行周期缴纳,1进行周期缴纳 */ + @ElogTransform(name = "是否周期缴纳") private Integer paymentCycle; /** * 核算方式 */ + @ElogTransform(name = "核算方式") private Integer accountType; /** * 缴纳周期规则设置 */ + @ElogTransform(name = "缴纳周期规则设置") private String cycleSetting; /** * 创建人id */ + @ElogTransform(name = "创建人id") private Long creator; /** * 是否删除 */ + @ElogTransform(name = "是否删除") private Integer deleteType; /** * 创建时间 */ + @ElogTransform(name = "创建时间") private Date createTime; /** * 更新时间 */ + @ElogTransform(name = "更新时间") private Date updateTime; /** * 租户key */ + @ElogTransform(name = "租户key") private String tenantKey; } diff --git a/src/com/engine/salary/entity/sischeme/po/InsuranceSchemePO.java b/src/com/engine/salary/entity/sischeme/po/InsuranceSchemePO.java index cf97a990f..8cdcc7f6c 100644 --- a/src/com/engine/salary/entity/sischeme/po/InsuranceSchemePO.java +++ b/src/com/engine/salary/entity/sischeme/po/InsuranceSchemePO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.sischeme.po; +import com.engine.salary.elog.annotation.ElogTransform; import com.engine.salary.enums.sicategory.SharedTypeEnum; import lombok.AllArgsConstructor; import lombok.Builder; @@ -20,31 +21,37 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor //hrsa_social_security_scheme +@ElogTransform(name = "福利方案") public class InsuranceSchemePO { /** * 主键id */ + @ElogTransform(name = "主键id") private Long id; /** * 缴纳地区 */ + @ElogTransform(name = "缴纳地区") private String paymentArea; /** * 方案名称 */ + @ElogTransform(name = "方案名称") private String schemeName; /** * 缴纳类型 */ + @ElogTransform(name = "缴纳类型") private Integer paymentType; /** * 福利类型 */ + @ElogTransform(name = "福利类型") private Integer welfareType; /** @@ -52,46 +59,55 @@ public class InsuranceSchemePO { * * @see SharedTypeEnum */ + @ElogTransform(name = "共享权限") private String sharedType; /** * 个税扣缴义务人 */ + @ElogTransform(name = "个税扣缴义务人") private String taxAgentIds; /** * 是否启用 0-停用 1-启用 */ + @ElogTransform(name = "是否启用") private Integer isUse; /** * 备注 */ + @ElogTransform(name = "备注") private String remarks; /** * 创建人id */ + @ElogTransform(name = "创建人id") private Long creator; /** * 是否删除 */ + @ElogTransform(name = "是否删除") private Integer deleteType; /** * 创建时间 */ + @ElogTransform(name = "创建时间") private Date createTime; /** * 更新时间 */ + @ElogTransform(name = "更新时间") private Date updateTime; /** * 租户key */ + @ElogTransform(name = "租户key") private String tenantKey; } diff --git a/src/com/engine/salary/mapper/sischeme/InsuranceSchemeDetailMapper.java b/src/com/engine/salary/mapper/sischeme/InsuranceSchemeDetailMapper.java index 52c98c89d..9af378c42 100644 --- a/src/com/engine/salary/mapper/sischeme/InsuranceSchemeDetailMapper.java +++ b/src/com/engine/salary/mapper/sischeme/InsuranceSchemeDetailMapper.java @@ -74,6 +74,8 @@ public interface InsuranceSchemeDetailMapper { List listAll(); + List listBySchemeIds(@Param("schemeIds")Collection schemeIds); + int batchUpdate(@Param("collection") List insuranceSchemeDetailPos); int updateAll(InsuranceSchemeDetailPO insuranceSchemeDetailPo); diff --git a/src/com/engine/salary/mapper/sischeme/InsuranceSchemeDetailMapper.xml b/src/com/engine/salary/mapper/sischeme/InsuranceSchemeDetailMapper.xml index dba56d9b9..d4b15075f 100644 --- a/src/com/engine/salary/mapper/sischeme/InsuranceSchemeDetailMapper.xml +++ b/src/com/engine/salary/mapper/sischeme/InsuranceSchemeDetailMapper.xml @@ -270,6 +270,18 @@ WHERE delete_type = 0 + + update hrsa_scheme_detail diff --git a/src/com/engine/salary/mapper/sischeme/InsuranceSchemeMapper.java b/src/com/engine/salary/mapper/sischeme/InsuranceSchemeMapper.java index 7403a8511..11cbfd0b2 100644 --- a/src/com/engine/salary/mapper/sischeme/InsuranceSchemeMapper.java +++ b/src/com/engine/salary/mapper/sischeme/InsuranceSchemeMapper.java @@ -51,6 +51,8 @@ public interface InsuranceSchemeMapper { */ List listAll(); + List listBySchemeIds(@Param("schemeIds")Collection schemeIds); + /** * 获取名称 diff --git a/src/com/engine/salary/mapper/sischeme/InsuranceSchemeMapper.xml b/src/com/engine/salary/mapper/sischeme/InsuranceSchemeMapper.xml index d6a671a92..d70a73724 100644 --- a/src/com/engine/salary/mapper/sischeme/InsuranceSchemeMapper.xml +++ b/src/com/engine/salary/mapper/sischeme/InsuranceSchemeMapper.xml @@ -87,6 +87,17 @@ ORDER BY id DESC + listResult = insuranceSchemeMapper.listByName(saveParam.getInsuranceScheme().getSchemeName()); - SalaryAssert.isEmpty(listResult, SalaryI18nUtil.getI18nLabel(0,"该福利名称已经存在,福利名称系统全局唯一")); - InsuranceSchemePO insuranceSchemePO = InsuranceSchemeBO.convert2BatchPO(saveParam.getInsuranceScheme(), employeeId); - if (insuranceSchemePO.getSharedType() == null) { - insuranceSchemePO.setSharedType(SharedTypeEnum.PUBLIC.getValue()); - } else { - if (insuranceSchemePO.getSharedType().equals(SharedTypeEnum.PRIVATE.getValue()) && StringUtils.isBlank(insuranceSchemePO.getTaxAgentIds())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案可见性为私有时,未设置可见范围")); - } + //保存福利项目主表 + saveParam.getInsuranceScheme().setSchemeName(StringUtils.trim(saveParam.getInsuranceScheme().getSchemeName())); + List listResult = getInsuranceSchemeMapper().listByName(saveParam.getInsuranceScheme().getSchemeName()); + SalaryAssert.isEmpty(listResult, SalaryI18nUtil.getI18nLabel(0,"该福利名称已经存在,福利名称系统全局唯一")); + + InsuranceSchemePO insuranceSchemePO = InsuranceSchemeBO.convert2BatchPO(saveParam.getInsuranceScheme(), employeeId); + if (insuranceSchemePO.getSharedType() == null) { + insuranceSchemePO.setSharedType(SharedTypeEnum.PUBLIC.getValue()); + } else { + if (insuranceSchemePO.getSharedType().equals(SharedTypeEnum.PRIVATE.getValue()) && StringUtils.isBlank(insuranceSchemePO.getTaxAgentIds())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案可见性为私有时,未设置可见范围")); } - insuranceSchemeMapper.insert(insuranceSchemePO); - //保存福利项目明细表 - InsuranceSchemeDetailMapper insuranceSchemeDetailMapper = sqlSession.getMapper(InsuranceSchemeDetailMapper.class); - List insuranceSchemeDetailPOS = InsuranceSchemeBO.convertToInsuranceSchemeDetailPoList(saveParam.getInsuranceSchemeDetailList(), employeeId, insuranceSchemePO.getId()); - encryptUtil.encryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); - insuranceSchemeDetailPOS.forEach(insuranceSchemeDetailMapper::insert); - - sqlSession.commit(); - - } finally { - sqlSession.close(); } + getInsuranceSchemeMapper().insert(insuranceSchemePO); + //记录操作日志 + List schemePOList = getInsuranceSchemeMapper().listByName(insuranceSchemePO.getSchemeName()); + InsuranceSchemePO targetPO = new InsuranceSchemePO(); + if (schemePOList != null && schemePOList.size() > 0) { + targetPO = schemePOList.get(0); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(targetPO.getSchemeName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新建福利方案")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新建福利方案") + ": " + targetPO.getSchemeName()); + loggerContext.setNewValues(targetPO); + SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); + } + //保存福利项目明细表 + List insuranceSchemeDetailPOS = InsuranceSchemeBO.convertToInsuranceSchemeDetailPoList(saveParam.getInsuranceSchemeDetailList(), employeeId, insuranceSchemePO.getId()); + //加密入库 + encryptUtil.encryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); + insuranceSchemeDetailPOS.forEach(getInsuranceSchemeDetailMapper()::insert); + //记录操作日志 + if (insuranceSchemeDetailPOS.size() > 0) { + encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); + List allCategoryList = getICategoryMapper().listAll(); + Map categoryNameMap = SalaryEntityUtil.convert2Map(allCategoryList, ICategoryPO::getId, ICategoryPO::getInsuranceName); + + InsuranceSchemePO finalTargetPO = targetPO; + insuranceSchemeDetailPOS.forEach(schemeDetailPO -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(finalTargetPO.getId())); + loggerContext.setTargetName(categoryNameMap.get(schemeDetailPO.getInsuranceId())); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新建福利方案明细")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新建福利方案明细") + ": " + + categoryNameMap.get(schemeDetailPO.getInsuranceId()) + + "-" + SalaryEnumUtil.enumMatchByValue(schemeDetailPO.getPaymentScope(), PaymentScopeEnum.values(), PaymentScopeEnum.class)); + loggerContext.setNewValues(schemeDetailPO); + SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); + }); + } + } /** @@ -2406,17 +2439,49 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { } public void deleteSocialscheme(Map params) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - InsuranceSchemeDetailMapper insuranceSchemeDetailMapper = sqlSession.getMapper(InsuranceSchemeDetailMapper.class); - InsuranceSchemeMapper insuranceSchemeMapper = sqlSession.getMapper(InsuranceSchemeMapper.class); - insuranceSchemeMapper.deleteByIds((Collection) params.get("ids")); - insuranceSchemeDetailMapper.deleteByIds((Collection) params.get("ids")); - sqlSession.commit(); - } finally { - sqlSession.close(); + Collection schemeIds = (Collection) params.get("ids"); + List targetPoList = getInsuranceSchemeMapper().listBySchemeIds(schemeIds); + List targetDetailPoList = getInsuranceSchemeDetailMapper().listBySchemeIds(schemeIds); + getInsuranceSchemeMapper().deleteByIds(schemeIds); + getInsuranceSchemeDetailMapper().deleteByIds(schemeIds); + + //记录操作日志 + if (targetPoList.size() > 0) { + targetPoList.forEach(targetPO -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(targetPO.getSchemeName()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除福利方案")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除福利方案") + ": " + targetPO.getSchemeName()); + loggerContext.setNewValues(targetPO); + SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); + }); } + if (targetDetailPoList.size() > 0) { + List allCategoryList = getICategoryMapper().listAll(); + Map categoryNameMap = SalaryEntityUtil.convert2Map(allCategoryList, ICategoryPO::getId, ICategoryPO::getInsuranceName); + Map> targetDetailMap = targetDetailPoList.stream() + .collect(Collectors.groupingBy(InsuranceSchemeDetailPO::getPrimaryId)); + targetDetailMap.forEach((k, v) -> { + v.forEach(schemeDetailPO -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(k)); + loggerContext.setTargetName(categoryNameMap.get(schemeDetailPO.getInsuranceId())); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除福利方案明细")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除福利方案明细") + ": " + + categoryNameMap.get(schemeDetailPO.getInsuranceId()) + + "-" + SalaryEnumUtil.enumMatchByValue(schemeDetailPO.getPaymentScope(), PaymentScopeEnum.values(), PaymentScopeEnum.class)); + loggerContext.setNewValues(schemeDetailPO); + SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); + }); + }); + } + } /** @@ -2427,79 +2492,102 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { * @param employeeId */ public void copy(Long id, String schemeName, long employeeId) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - InsuranceSchemeMapper insuranceSchemeMapper = sqlSession.getMapper(InsuranceSchemeMapper.class); - //去除入参中方案名称的空格 - schemeName = StringUtils.trim(schemeName); - - List listResult = insuranceSchemeMapper.listByName(schemeName); - SalaryAssert.isEmpty(listResult, SalaryI18nUtil.getI18nLabel(0,"方案名称重复")); - - InsuranceSchemeDetailMapper insuranceSchemeDetailMapper = sqlSession.getMapper(InsuranceSchemeDetailMapper.class); - if (Objects.isNull(id)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案id为空")); - } - - if (Objects.isNull(schemeName)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"复制方案名为空")); - } - - InsuranceSchemePO insuranceSchemePO = getById(id); - if (Objects.isNull(insuranceSchemePO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案不存在")); - } - - if (insuranceSchemePO.getSchemeName().equals(schemeName)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案名称重复")); - } - - InsuranceSchemePO batchPO = InsuranceSchemePO.builder() + //去除入参中方案名称的空格 + schemeName = StringUtils.trim(schemeName); + List listResult = getInsuranceSchemeMapper().listByName(schemeName); + SalaryAssert.isEmpty(listResult, SalaryI18nUtil.getI18nLabel(0,"方案名称重复")); + if (Objects.isNull(id)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案id为空")); + } + if (Objects.isNull(schemeName)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"复制方案名为空")); + } + InsuranceSchemePO insuranceSchemePO = getById(id); + if (Objects.isNull(insuranceSchemePO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案不存在")); + } + if (insuranceSchemePO.getSchemeName().equals(schemeName)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案名称重复")); + } + InsuranceSchemePO batchPO = InsuranceSchemePO.builder() + .creator(employeeId) + .createTime(new Date()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .schemeName(schemeName) + .paymentArea(insuranceSchemePO.getPaymentArea()) + .updateTime(new Date()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .paymentType(insuranceSchemePO.getPaymentType()) + .remarks(insuranceSchemePO.getRemarks()) + .welfareType(insuranceSchemePO.getWelfareType()) + .isUse(insuranceSchemePO.getIsUse()) + .build(); + getInsuranceSchemeMapper().insert(batchPO); + //记录操作日志 + List schemePOList = getInsuranceSchemeMapper().listByName(insuranceSchemePO.getSchemeName()); + InsuranceSchemePO targetPO = new InsuranceSchemePO(); + if (schemePOList != null && schemePOList.size() > 0) { + targetPO = schemePOList.get(0); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(targetPO.getSchemeName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "复制福利方案")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "复制(新建)福利方案") + ": " + targetPO.getSchemeName()); + loggerContext.setNewValues(targetPO); + SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); + } + List detailList = getInsuranceSchemeDetailMapper().queryListBySchemeId(id); + detailList = encryptUtil.decryptList(detailList,InsuranceSchemeDetailPO.class); + if (CollectionUtils.isNotEmpty(detailList)) { + List detailPOS = detailList.stream().map(item -> InsuranceSchemeDetailPO.builder() .creator(employeeId) .createTime(new Date()) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .schemeName(schemeName) - .paymentArea(insuranceSchemePO.getPaymentArea()) - .updateTime(new Date()) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) - .paymentType(insuranceSchemePO.getPaymentType()) - .remarks(insuranceSchemePO.getRemarks()) - .welfareType(insuranceSchemePO.getWelfareType()) - .isUse(insuranceSchemePO.getIsUse()) - .build(); - insuranceSchemeMapper.insert(batchPO); + .effectiveTime(item.getEffectiveTime()) + .expirationTime(item.getExpirationTime()) + .fixedCost(item.getFixedCost()) + .insuranceId(item.getInsuranceId()) + .isPayment(item.getIsPayment()) + .lowerLimit(item.getLowerLimit()) + .paymentScope(item.getPaymentScope()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .paymentProportion(item.getPaymentProportion()) + .updateTime(new Date()) + .primaryId(batchPO.getId()) + .rententionRule(item.getRententionRule()) + .upperLimit(item.getUpperLimit()) + .validNum(item.getValidNum()) + .build() + ).collect(Collectors.toList()); - List detailList = insuranceSchemeDetailMapper.queryListBySchemeId(id); - detailList = encryptUtil.decryptList(detailList,InsuranceSchemeDetailPO.class); - if (CollectionUtils.isNotEmpty(detailList)) { - List detailPOS = detailList.stream().map(item -> InsuranceSchemeDetailPO.builder() - .creator(employeeId) - .createTime(new Date()) - .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) - .effectiveTime(item.getEffectiveTime()) - .expirationTime(item.getExpirationTime()) - .fixedCost(item.getFixedCost()) - .insuranceId(item.getInsuranceId()) - .isPayment(item.getIsPayment()) - .lowerLimit(item.getLowerLimit()) - .paymentScope(item.getPaymentScope()) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .paymentProportion(item.getPaymentProportion()) - .updateTime(new Date()) - .primaryId(batchPO.getId()) - .rententionRule(item.getRententionRule()) - .upperLimit(item.getUpperLimit()) - .validNum(item.getValidNum()) - .build() - ).collect(Collectors.toList()); - encryptUtil.encryptList(detailPOS, InsuranceSchemeDetailPO.class); - detailPOS.forEach(insuranceSchemeDetailMapper::insert); + //加密入库 + encryptUtil.encryptList(detailPOS, InsuranceSchemeDetailPO.class); + detailPOS.forEach(getInsuranceSchemeDetailMapper()::insert); + //记录操作日志 + if (detailPOS.size() > 0) { + encryptUtil.decryptList(detailPOS, InsuranceSchemeDetailPO.class); + List allCategoryList = getICategoryMapper().listAll(); + Map categoryNameMap = SalaryEntityUtil.convert2Map(allCategoryList, ICategoryPO::getId, ICategoryPO::getInsuranceName); + + InsuranceSchemePO finalTargetPO = targetPO; + detailPOS.forEach(schemeDetailPO -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(finalTargetPO.getId())); + loggerContext.setTargetName(categoryNameMap.get(schemeDetailPO.getInsuranceId())); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "复制福利方案明细")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "复制(新建)福利方案明细") + ": " + + categoryNameMap.get(schemeDetailPO.getInsuranceId()) + + "-" + SalaryEnumUtil.enumMatchByValue(schemeDetailPO.getPaymentScope(), PaymentScopeEnum.values(), PaymentScopeEnum.class)); + loggerContext.setNewValues(schemeDetailPO); + SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); + }); } - - sqlSession.commit(); - } finally { - sqlSession.close(); } + } /** From 1c252b79da1ba8300695659c11e62c4b4064ac7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 5 Feb 2024 14:34:16 +0800 Subject: [PATCH 23/64] =?UTF-8?q?sqlserver=E5=AD=97=E6=AE=B5=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E6=94=B9=E6=88=90nvarchar(max)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/mapper/elog/ElogTableCheckerMapper.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml index 71b2cd9e6..efffc05ab 100644 --- a/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml +++ b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml @@ -285,10 +285,10 @@ tablenamedesc nvarchar(50), fieldName nvarchar(200), fieldnamelabelid nvarchar(200), - newValue ntext, - oldValue ntext, - newrealvalue ntext, - oldrealvalue ntext, + newValue nvarchar(max), + oldValue nvarchar(max), + newrealvalue nvarchar(max), + oldrealvalue nvarchar(max), fieldDesc varchar(200), showorder bigint default 0, isdetail bigint default 0 From 395d3f567f1f9808b33a67f83350e54a98964aaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 5 Feb 2024 14:48:29 +0800 Subject: [PATCH 24/64] =?UTF-8?q?sqlserver=E5=AD=97=E6=AE=B5=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E6=94=B9=E6=88=90nvarchar(max)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml index efffc05ab..3581e1039 100644 --- a/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml +++ b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml @@ -122,7 +122,7 @@ operatetype nvarchar(50), operatetypename nvarchar(100), operatedesc nvarchar(3000), - params ntext, + params nvarchar(max), belongmainid nvarchar(36), clientip nvarchar(200), groupid nvarchar(50), From 1c61c0004d209746bfb710615525fb22e94f9551 Mon Sep 17 00:00:00 2001 From: sy Date: Mon, 5 Feb 2024 15:04:39 +0800 Subject: [PATCH 25/64] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=96=B9=E6=A1=88=EF=BC=8C=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E6=98=8E=E7=BB=86=E7=BC=96=E8=BE=91=E5=B9=B6=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=EF=BC=8C=E4=B8=BB=E8=A1=A8=E5=A2=9E=E5=8A=A0=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SISchemeServiceImpl.java | 92 ++++++++++--------- 1 file changed, 48 insertions(+), 44 deletions(-) diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index cf93763f7..22e584b4f 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -13,7 +13,7 @@ import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; -import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam; import com.engine.salary.entity.siarchives.param.SIArchiveImportParam; import com.engine.salary.entity.siarchives.po.*; @@ -2376,50 +2376,54 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { * @param employeeId */ public void update(InsuranceSchemeReqParam updateParam, long employeeId) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - InsuranceSchemeMapper insuranceSchemeMapper = sqlSession.getMapper(InsuranceSchemeMapper.class); - InsuranceSchemeDetailMapper insuranceSchemeDetailMapper = sqlSession.getMapper(InsuranceSchemeDetailMapper.class); - - //查询是否存在福利方案 - InsuranceSchemePO insuranceSchemePO = getById(updateParam.getInsuranceScheme().getId()); - if (Objects.isNull(insuranceSchemePO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"福利方案不存在")); - } - //去除入参中方案名称的空格 - updateParam.getInsuranceScheme().setSchemeName(StringUtils.trim(updateParam.getInsuranceScheme().getSchemeName())); - //福利方案名称重复 - List insuranceSchemePOList = insuranceSchemeMapper.listByName(updateParam.getInsuranceScheme().getSchemeName()); - if (CollectionUtils.isNotEmpty(insuranceSchemePOList)) { - boolean repeat = insuranceSchemePOList.stream().anyMatch(item -> !Objects.equals(item.getId(), updateParam.getInsuranceScheme().getId())); - SalaryAssert.isTrue(!repeat, SalaryI18nUtil.getI18nLabel(0,"福利方案名称重复")); - } - - if (insuranceSchemePO.getSharedType() == null) { - insuranceSchemePO.setSharedType(SharedTypeEnum.PUBLIC.getValue()); - } else { - if (insuranceSchemePO.getSharedType().equals(SharedTypeEnum.PRIVATE.getValue()) && StringUtils.isBlank(insuranceSchemePO.getTaxAgentIds())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案可见性为私有时,未设置可见范围")); - } - } - - //更新福利方案主表 - InsuranceSchemePO insuranceSchemePO1 = InsuranceSchemeBO.buildInsuranceSchemePO(insuranceSchemePO, updateParam.getInsuranceScheme()); - insuranceSchemeMapper.update(insuranceSchemePO1); - - //更新福利方案明细表 先删后插 - insuranceSchemeDetailMapper.batchDeleteByPrimaryIds(Collections.singleton(updateParam.getInsuranceScheme().getId())); - //更新明细表 - List insuranceSchemeDetailPOS = InsuranceSchemeBO.convertToInsuranceSchemeDetailPoList(updateParam.getInsuranceSchemeDetailList(), employeeId, insuranceSchemePO.getId()); - encryptUtil.encryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); - insuranceSchemeDetailPOS.forEach(insuranceSchemeDetailMapper::insert); - - //记录操作日志 - - sqlSession.commit(); - } finally { - sqlSession.close(); + //查询是否存在福利方案 + InsuranceSchemePO insuranceSchemePO = getById(updateParam.getInsuranceScheme().getId()); + if (Objects.isNull(insuranceSchemePO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"福利方案不存在")); } + //去除入参中方案名称的空格 + updateParam.getInsuranceScheme().setSchemeName(StringUtils.trim(updateParam.getInsuranceScheme().getSchemeName())); + //福利方案名称重复 + List insuranceSchemePOList = getInsuranceSchemeMapper().listByName(updateParam.getInsuranceScheme().getSchemeName()); + if (CollectionUtils.isNotEmpty(insuranceSchemePOList)) { + boolean repeat = insuranceSchemePOList.stream().anyMatch(item -> !Objects.equals(item.getId(), updateParam.getInsuranceScheme().getId())); + SalaryAssert.isTrue(!repeat, SalaryI18nUtil.getI18nLabel(0,"福利方案名称重复")); + } + + if (insuranceSchemePO.getSharedType() == null) { + insuranceSchemePO.setSharedType(SharedTypeEnum.PUBLIC.getValue()); + } else { + if (insuranceSchemePO.getSharedType().equals(SharedTypeEnum.PRIVATE.getValue()) && StringUtils.isBlank(insuranceSchemePO.getTaxAgentIds())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案可见性为私有时,未设置可见范围")); + } + } + //记录操作日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(insuranceSchemePO.getId().toString()); + loggerContext.setTargetName(insuranceSchemePO.getSchemeName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利方案保存")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案保存") + ": " + insuranceSchemePO.getSchemeName()); + loggerContext.setOldValues(insuranceSchemePO); + //更新福利方案主表 + InsuranceSchemePO insuranceSchemePO1 = InsuranceSchemeBO.buildInsuranceSchemePO(insuranceSchemePO, updateParam.getInsuranceScheme()); + getInsuranceSchemeMapper().update(insuranceSchemePO1); + //记录操作日志 + loggerContext.setNewValues(insuranceSchemePO1); + SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); + List oldInsuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(updateParam.getInsuranceScheme().getId()); + encryptUtil.decryptList(oldInsuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); + + //更新福利方案明细表 先删后插 + getInsuranceSchemeDetailMapper().batchDeleteByPrimaryIds(Collections.singleton(updateParam.getInsuranceScheme().getId())); + //更新明细表 + List insuranceSchemeDetailPOS = InsuranceSchemeBO.convertToInsuranceSchemeDetailPoList(updateParam.getInsuranceSchemeDetailList(), employeeId, insuranceSchemePO.getId()); + encryptUtil.encryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); + insuranceSchemeDetailPOS.forEach(getInsuranceSchemeDetailMapper()::insert); + //记录操作日志, todo + + } public int checkBeforeDeleteSocialscheme(Map params) { From 405fe226d992c06a9ddbdd3667720b841e37a3fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 5 Feb 2024 16:33:43 +0800 Subject: [PATCH 26/64] =?UTF-8?q?=E5=88=A0=E9=99=A4elog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/salary/web/LoggerTableController.java | 15 - .../engine/salary/elog/annotation/Elog.java | 23 - .../elog/annotation/ElogDetailField.java | 14 - .../elog/annotation/ElogDetailTable.java | 13 - .../salary/elog/annotation/ElogField.java | 23 - .../elog/annotation/ElogPrimaryKey.java | 9 - .../salary/elog/annotation/ElogTable.java | 16 - .../salary/elog/annotation/ElogTransform.java | 29 - .../salary/elog/annotation/HandleElog.java | 17 - .../salary/elog/annotation/LoggerTarget.java | 22 - .../salary/elog/annotation/OperateType.java | 15 - .../elog/annotation/handle/ElogHandler.java | 177 -- .../annotation/handle/ElogTableScanner.java | 156 -- .../handle/LoggerTargetHandler.java | 38 - .../elog/async/LoggerMessageListener.java | 30 - .../engine/salary/elog/config/ELogCache.java | 25 - .../salary/elog/config/ELogTableChecker.java | 44 - .../salary/elog/entity/dto/CancelContext.java | 25 - .../salary/elog/entity/dto/DataTypeEnum.java | 16 - .../salary/elog/entity/dto/ElogBean.java | 116 -- .../elog/entity/dto/FilterConditionDto.java | 91 -- .../engine/salary/elog/entity/dto/Like.java | 31 - .../salary/elog/entity/dto/LoggerContext.java | 890 ---------- .../elog/entity/dto/LoggerDetailContext.java | 316 ---- .../elog/entity/dto/ReadInfoEntity.java | 40 - .../salary/elog/entity/dto/RedoContext.java | 24 - .../salary/elog/entity/dto/ShowColumsDto.java | 105 -- .../elog/entity/dto/TableChangeBean.java | 153 -- .../elog/entity/dto/TableColumnBean.java | 155 -- .../elog/entity/param/ELogGetLogParam.java | 35 - .../entity/param/GetDetailChangesParam.java | 29 - .../engine/salary/elog/enums/ElogConsts.java | 22 - .../salary/elog/enums/FromTerminalType.java | 48 - .../engine/salary/elog/enums/LinkType.java | 173 -- .../salary/elog/enums/OperateAuditType.java | 14 - .../elog/service/ILocalElogService.java | 13 - .../elog/service/ILoggerTableService.java | 41 - .../elog/service/impl/LocalElogService.java | 435 ----- .../elog/service/impl/LoggerTableService.java | 1454 ----------------- .../elog/threadlocal/ElogThreadLocal.java | 75 - .../salary/elog/util/ElogServiceUtils.java | 92 -- .../elog/util/ElogSeviceSwitchUtils.java | 1402 ---------------- .../salary/elog/util/ElogSeviceUtils.java | 528 ------ .../engine/salary/elog/util/ElogUtils.java | 713 -------- .../engine/salary/elog/util/FieldNameMap.java | 94 -- .../salary/elog/util/LoggerTemplate.java | 630 ------- .../elog/util/LoggerTemplateBuilder.java | 21 - .../elog/web/LoggerTableController.java | 200 --- .../mapper/elog/ElogTableCheckerMapper.java | 30 - .../mapper/elog/ElogTableCheckerMapper.xml | 451 ----- .../mapper/elog/LocalElogAopDaoMapper.java | 45 - .../mapper/elog/LocalElogAopDaoMapper.xml | 170 -- .../mapper/elog/LocalElogDaoMapper.java | 219 --- .../salary/mapper/elog/LocalElogDaoMapper.xml | 412 ----- .../mapper/elog/QueryCurretValusMapper.java | 8 - .../mapper/elog/QueryCurretValusMapper.xml | 9 - 56 files changed, 9991 deletions(-) delete mode 100644 src/com/api/salary/web/LoggerTableController.java delete mode 100644 src/com/engine/salary/elog/annotation/Elog.java delete mode 100644 src/com/engine/salary/elog/annotation/ElogDetailField.java delete mode 100644 src/com/engine/salary/elog/annotation/ElogDetailTable.java delete mode 100644 src/com/engine/salary/elog/annotation/ElogField.java delete mode 100644 src/com/engine/salary/elog/annotation/ElogPrimaryKey.java delete mode 100644 src/com/engine/salary/elog/annotation/ElogTable.java delete mode 100644 src/com/engine/salary/elog/annotation/ElogTransform.java delete mode 100644 src/com/engine/salary/elog/annotation/HandleElog.java delete mode 100644 src/com/engine/salary/elog/annotation/LoggerTarget.java delete mode 100644 src/com/engine/salary/elog/annotation/OperateType.java delete mode 100644 src/com/engine/salary/elog/annotation/handle/ElogHandler.java delete mode 100644 src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java delete mode 100644 src/com/engine/salary/elog/annotation/handle/LoggerTargetHandler.java delete mode 100644 src/com/engine/salary/elog/async/LoggerMessageListener.java delete mode 100644 src/com/engine/salary/elog/config/ELogCache.java delete mode 100644 src/com/engine/salary/elog/config/ELogTableChecker.java delete mode 100644 src/com/engine/salary/elog/entity/dto/CancelContext.java delete mode 100644 src/com/engine/salary/elog/entity/dto/DataTypeEnum.java delete mode 100644 src/com/engine/salary/elog/entity/dto/ElogBean.java delete mode 100644 src/com/engine/salary/elog/entity/dto/FilterConditionDto.java delete mode 100644 src/com/engine/salary/elog/entity/dto/Like.java delete mode 100644 src/com/engine/salary/elog/entity/dto/LoggerContext.java delete mode 100644 src/com/engine/salary/elog/entity/dto/LoggerDetailContext.java delete mode 100644 src/com/engine/salary/elog/entity/dto/ReadInfoEntity.java delete mode 100644 src/com/engine/salary/elog/entity/dto/RedoContext.java delete mode 100644 src/com/engine/salary/elog/entity/dto/ShowColumsDto.java delete mode 100644 src/com/engine/salary/elog/entity/dto/TableChangeBean.java delete mode 100644 src/com/engine/salary/elog/entity/dto/TableColumnBean.java delete mode 100644 src/com/engine/salary/elog/entity/param/ELogGetLogParam.java delete mode 100644 src/com/engine/salary/elog/entity/param/GetDetailChangesParam.java delete mode 100644 src/com/engine/salary/elog/enums/ElogConsts.java delete mode 100644 src/com/engine/salary/elog/enums/FromTerminalType.java delete mode 100644 src/com/engine/salary/elog/enums/LinkType.java delete mode 100644 src/com/engine/salary/elog/enums/OperateAuditType.java delete mode 100644 src/com/engine/salary/elog/service/ILocalElogService.java delete mode 100644 src/com/engine/salary/elog/service/ILoggerTableService.java delete mode 100644 src/com/engine/salary/elog/service/impl/LocalElogService.java delete mode 100644 src/com/engine/salary/elog/service/impl/LoggerTableService.java delete mode 100644 src/com/engine/salary/elog/threadlocal/ElogThreadLocal.java delete mode 100644 src/com/engine/salary/elog/util/ElogServiceUtils.java delete mode 100644 src/com/engine/salary/elog/util/ElogSeviceSwitchUtils.java delete mode 100644 src/com/engine/salary/elog/util/ElogSeviceUtils.java delete mode 100644 src/com/engine/salary/elog/util/ElogUtils.java delete mode 100644 src/com/engine/salary/elog/util/FieldNameMap.java delete mode 100644 src/com/engine/salary/elog/util/LoggerTemplate.java delete mode 100644 src/com/engine/salary/elog/util/LoggerTemplateBuilder.java delete mode 100644 src/com/engine/salary/elog/web/LoggerTableController.java delete mode 100644 src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.java delete mode 100644 src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml delete mode 100644 src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.java delete mode 100644 src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.xml delete mode 100644 src/com/engine/salary/mapper/elog/LocalElogDaoMapper.java delete mode 100644 src/com/engine/salary/mapper/elog/LocalElogDaoMapper.xml delete mode 100644 src/com/engine/salary/mapper/elog/QueryCurretValusMapper.java delete mode 100644 src/com/engine/salary/mapper/elog/QueryCurretValusMapper.xml diff --git a/src/com/api/salary/web/LoggerTableController.java b/src/com/api/salary/web/LoggerTableController.java deleted file mode 100644 index ddf2b4f41..000000000 --- a/src/com/api/salary/web/LoggerTableController.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.api.salary.web; - -import javax.ws.rs.Path; - -/** - * 日志列表公共接口暴漏 - *

Copyright: Copyright (c) 2023

- *

Company: 泛微软件

- * - * @author qiantao - * @version 1.0 - **/ -@Path("/bs/hrmsalary/elog") -public class LoggerTableController extends com.engine.salary.elog.web.LoggerTableController{ -} diff --git a/src/com/engine/salary/elog/annotation/Elog.java b/src/com/engine/salary/elog/annotation/Elog.java deleted file mode 100644 index 7e00ca25e..000000000 --- a/src/com/engine/salary/elog/annotation/Elog.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.engine.salary.elog.annotation; - -import java.lang.annotation.*; - -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD}) -public @interface Elog { - - String module(); - - String function(); - - String operateType(); - - String operateTypeName(); - - String sql() default ""; - - boolean isLocal() default true; - - String infoMethod() default ""; -} diff --git a/src/com/engine/salary/elog/annotation/ElogDetailField.java b/src/com/engine/salary/elog/annotation/ElogDetailField.java deleted file mode 100644 index 129c57da8..000000000 --- a/src/com/engine/salary/elog/annotation/ElogDetailField.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.engine.salary.elog.annotation; - -import java.lang.annotation.*; - -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.FIELD}) -public @interface ElogDetailField { - - String fieldType() default "varchar"; - String length() default "50"; - String fieldName(); - String desc() default "自定义字段"; -} diff --git a/src/com/engine/salary/elog/annotation/ElogDetailTable.java b/src/com/engine/salary/elog/annotation/ElogDetailTable.java deleted file mode 100644 index d5054b7c1..000000000 --- a/src/com/engine/salary/elog/annotation/ElogDetailTable.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.engine.salary.elog.annotation; - -import java.lang.annotation.*; - -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE}) -public @interface ElogDetailTable { - - String module(); - - String function() default "common"; -} diff --git a/src/com/engine/salary/elog/annotation/ElogField.java b/src/com/engine/salary/elog/annotation/ElogField.java deleted file mode 100644 index a60c1f6a7..000000000 --- a/src/com/engine/salary/elog/annotation/ElogField.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.engine.salary.elog.annotation; - -import com.engine.salary.elog.entity.dto.DataTypeEnum; - -import java.lang.annotation.*; - -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.FIELD}) -public @interface ElogField { - - DataTypeEnum dataType() default DataTypeEnum.VARCHAR; - - int length() default 50; - - String comment() default "自定义字段"; - - String defaultValue() default ""; - - boolean isNull() default true; - - boolean isKey() default false; -} diff --git a/src/com/engine/salary/elog/annotation/ElogPrimaryKey.java b/src/com/engine/salary/elog/annotation/ElogPrimaryKey.java deleted file mode 100644 index 291f82562..000000000 --- a/src/com/engine/salary/elog/annotation/ElogPrimaryKey.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.engine.salary.elog.annotation; - -import java.lang.annotation.*; - -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.PARAMETER}) -public @interface ElogPrimaryKey { -} diff --git a/src/com/engine/salary/elog/annotation/ElogTable.java b/src/com/engine/salary/elog/annotation/ElogTable.java deleted file mode 100644 index a236b5b6e..000000000 --- a/src/com/engine/salary/elog/annotation/ElogTable.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.engine.salary.elog.annotation; - -import org.springframework.stereotype.Component; - -import java.lang.annotation.*; - -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE}) - -public @interface ElogTable { - - String module(); - - String function() default "common"; -} diff --git a/src/com/engine/salary/elog/annotation/ElogTransform.java b/src/com/engine/salary/elog/annotation/ElogTransform.java deleted file mode 100644 index 120c41d8d..000000000 --- a/src/com/engine/salary/elog/annotation/ElogTransform.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.engine.salary.elog.annotation; - -import java.lang.annotation.*; - -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.FIELD, ElementType.TYPE}) -@Inherited -public @interface ElogTransform { - - String tablename() default ""; - - String name(); - - int labelId() default -1; - - String type() default ""; - - String valuesKVPairs() default ""; - - boolean ignore() default false; - - boolean analyticSubclass() default false; - - boolean analyticList() default false; - - Class analyticListClass() default void.class; - -} diff --git a/src/com/engine/salary/elog/annotation/HandleElog.java b/src/com/engine/salary/elog/annotation/HandleElog.java deleted file mode 100644 index 387666b18..000000000 --- a/src/com/engine/salary/elog/annotation/HandleElog.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.engine.salary.elog.annotation; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -public @interface HandleElog { - - String modulename() default ""; - - String functionname() default ""; - - String service() default ""; -} diff --git a/src/com/engine/salary/elog/annotation/LoggerTarget.java b/src/com/engine/salary/elog/annotation/LoggerTarget.java deleted file mode 100644 index 701d4f8e6..000000000 --- a/src/com/engine/salary/elog/annotation/LoggerTarget.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.engine.salary.elog.annotation; - -import java.lang.annotation.*; - -/** - * @ClassName: LoggerTarget - * @Description 日志构造器-自定义注解 - * @Author tanghj - * @Date 2021/2/10 14:18 - */ -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE}) -public @interface LoggerTarget { -// @AliasFor("module") - String value() default ""; - -// @AliasFor("value") - String module() default ""; - - String function() default "common"; -} diff --git a/src/com/engine/salary/elog/annotation/OperateType.java b/src/com/engine/salary/elog/annotation/OperateType.java deleted file mode 100644 index 7dbb84303..000000000 --- a/src/com/engine/salary/elog/annotation/OperateType.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.engine.salary.elog.annotation; - -public class OperateType { - public static final String view = "view"; - public static final String viewSpan = "查看"; - - public static final String add = "add"; - public static final String addSpan = "新增"; - - public static final String update = "update"; - public static final String updateSpan = "更新"; - - public static final String delete = "delete"; - public static final String deleteSpan = "删除"; -} diff --git a/src/com/engine/salary/elog/annotation/handle/ElogHandler.java b/src/com/engine/salary/elog/annotation/handle/ElogHandler.java deleted file mode 100644 index 7cb1dda25..000000000 --- a/src/com/engine/salary/elog/annotation/handle/ElogHandler.java +++ /dev/null @@ -1,177 +0,0 @@ -//package com.engine.salary.elog.annotation.handle; -// -//import com.weaver.common.async.producer.client.AsyncClient; -//import com.weaver.common.distribution.genid.IdGenerator; -//import com.weaver.common.elog.annotation.Elog; -//import com.weaver.common.elog.annotation.ElogPrimaryKey; -//import com.weaver.common.elog.dao.QueryCurretValusMapper; -//import com.weaver.common.elog.dto.LoggerContext; -//import com.weaver.common.elog.util.LoggerTemplate; -//import org.apache.commons.lang3.StringUtils; -//import org.aspectj.lang.ProceedingJoinPoint; -//import org.aspectj.lang.Signature; -//import org.aspectj.lang.annotation.Around; -//import org.aspectj.lang.annotation.Aspect; -//import org.aspectj.lang.annotation.Pointcut; -//import org.aspectj.lang.reflect.MethodSignature; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.context.ApplicationContext; -//import org.springframework.stereotype.Component; -//import org.springframework.util.ReflectionUtils; -// -//import java.lang.annotation.Annotation; -//import java.lang.reflect.Method; -//import java.util.Date; -//import java.util.List; -//import java.util.Map; -// -// -///** -// * @ClassName: LoggerTargetHandler -// * @Description 从Spring扫描到的类中获取到Elog自定义注解类设置function属性 -// * @Author tanghj -// * @Date 2021/2/10 14:18 -// */ -//@Aspect -// -//public class ElogHandler { -// -// @Autowired -// ApplicationContext applicationContext; -// -// @Autowired -// protected AsyncClient asyncClient; -// -// @Autowired -// QueryCurretValusMapper queryCurretValusMapper; -// -// /** -// * 切面写入日志 -// */ -// @Pointcut("@annotation(com.weaver.common.elog.annotation.Elog)" ) -// public void writeLog(){} -// @Around("writeLog()") -// public Object writeLog(ProceedingJoinPoint pjp){ -// Object[] args = pjp.getArgs(); -// Signature signature = pjp.getSignature(); -// MethodSignature methodSignature = (MethodSignature) signature; -// Method method = methodSignature.getMethod(); -// -// Elog elog = method.getAnnotation(Elog.class); -// String moduleName = elog.module(); -// String funtionName = elog.function(); -// String operateType = elog.operateType(); -// String operateTypeName = elog.operateTypeName(); -// boolean isLocal = elog.isLocal(); -// Annotation[][] annos = method.getParameterAnnotations(); -// -// Object id = null; -// int keyPosition = -1; -// int index = 0; -// -// Class idClass = null; -// // 获取主键id注解 -// for(Annotation[] anno : annos) { -// if(anno.length > 0) { -// for(Annotation annotation : anno) { -// if(annotation instanceof ElogPrimaryKey) { -// idClass = method.getParameters()[index].getType(); -// id = args[index]; -// if(StringUtils.isEmpty(id+"")) { -// id = idClass.cast(IdGenerator.generate() + ""); -// } -// keyPosition = index; -// break; -// } -// } -// } -// index ++; -// } -// -// LoggerContext loggerContext = null; -// // 获取日志实体类 -// for(Object arg: args) { -// if(arg instanceof LoggerContext) { -// loggerContext = (LoggerContext) arg; -// break; -// } -// } -// -// if(loggerContext == null) { -// loggerContext = new LoggerContext(); -// } -// -// // 日志实体类的初始化 -// // loggerContext.setOperateType("UPDATE"); -// loggerContext.setFunctionName(funtionName); -// loggerContext.setModuleName(moduleName); -// loggerContext.setOperateType(operateType); -// loggerContext.setOperateTypeName(operateTypeName); -// loggerContext.setDate(new Date()); -// loggerContext.setDevice("IOS"); -// -// String sql = elog.sql(); -// String infoMethod = elog.infoMethod(); -// -// boolean isSql = false; -// boolean isMethod = false; -// Object currentClass = null; -// Method infoMtd = null; -// if(StringUtils.isNotEmpty(id+"")) { -// if(StringUtils.isNotEmpty(sql)) { -// isSql = true; -// Map oldValue = queryCurretValusMapper.queryValues(String.format(sql, id)); -// loggerContext.setOldValues(oldValue); -// } else if(StringUtils.isNotEmpty(infoMethod)){ -// isMethod = true; -// currentClass = applicationContext.getBean(pjp.getTarget().getClass()); -// // 获取方法 -// infoMtd = ReflectionUtils.findMethod(pjp.getTarget().getClass(),infoMethod, idClass); -// -// // todo 为空的情况加异常提醒 -// // 反射执行方法 -// Object res= ReflectionUtils.invokeMethod(infoMtd,currentClass, id); -// if(res != null) { -// if(res instanceof List) { -// loggerContext.setOldValueList((List) res); -// } else { -// loggerContext.setOldValues(res); -// } -// -// } -// } -// } -// -// LoggerTemplate loggerTemplate = new LoggerTemplate(); -// loggerTemplate.setFunction(funtionName); -// loggerTemplate.setModule(moduleName); -// loggerTemplate.setAsyncClient(asyncClient); -// -// Object result = null; -// try { -// args[keyPosition] = id; -// result = pjp.proceed(args); -// } catch (Throwable throwable) { -// throwable.printStackTrace(); -// } -// if(isSql) { -// Map oldValue = queryCurretValusMapper.queryValues(String.format(sql, id)); -// loggerContext.setNewValues(oldValue); -// } else if(isMethod) { -// Object res= ReflectionUtils.invokeMethod(infoMtd,currentClass, id); -// if(res != null) { -// if(res instanceof List) { -// loggerContext.setNewValueList((List) res); -// } else { -// loggerContext.setNewValues(res); -// } -// } -// } -// if(isLocal) -// loggerTemplate.write(loggerContext); -// else -// loggerTemplate.write(loggerContext,false); -// return result; -// -// } -//} diff --git a/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java b/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java deleted file mode 100644 index 709e8e0cb..000000000 --- a/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java +++ /dev/null @@ -1,156 +0,0 @@ -//package com.engine.salary.elog.annotation.handle; -// -//import com.engine.salary.elog.annotation.ElogField; -//import com.engine.salary.elog.annotation.ElogTable; -//import com.engine.salary.elog.entity.dto.DataTypeEnum; -//import com.engine.salary.elog.entity.dto.TableColumnBean; -//import com.engine.salary.elog.util.ElogUtils; -//import lombok.extern.slf4j.Slf4j; -//import org.reflections.Reflections; -//import org.slf4j.Logger; -//import org.slf4j.LoggerFactory; -// -//import java.lang.reflect.Field; -//import java.util.*; -//import java.util.stream.Collectors; -// -///** -// * @ClassName: ElogTableScanner -// * @Description 日志操作表扫描 -// * @Author tanghj -// * @Date 2021/3/12 13:31 -// */ -//@Slf4j -//public class ElogTableScanner { -// private Logger logger = LoggerFactory.getLogger(this.getClass()); -// -//// private TableCheckerMapper tableCheckerMapper; -// -//// @Override -// public void run() throws Exception { -// -// // todo 需要考虑集群下,控制一台机器来跑 -// scanElogTable(); -// -// } -// -// private void scanElogTable() { -// // todo 是否还需要扫描Elog(因为可能不需要本地存储) ELogDetailTable, -//// Map tableBeans = this.applicationContext.getBeansWithAnnotation(ElogTable.class); -// Reflections reflections = new Reflections("com.engine.salary.elog"); -// Set> tableBeans = reflections.getTypesAnnotatedWith(ElogTable.class); -// -// -// List baseColumns = new ArrayList<>(); -// -// Map> tableColumns = elogTableHandle(tableBeans,baseColumns); -// -// for(String tableName : tableColumns.keySet()) { -// -// // todo 需要处理明细表,如果没有直接初始化原始明细表,如果有加上自定义的 -// List columns = tableColumns.get(tableName); -// if(columns == null) { -// columns = baseColumns; -// } else { -// columns.addAll(baseColumns); -// } -// tableCheck(tableName, columns); -// } -// -// } -// -// private Map> elogTableHandle(Set> tableBeans, List baseColumns) { -// Map> tableMap = new HashMap<>(); -// for (Class aClass :tableBeans) {//遍历每个controller层 -// -// List list = new ArrayList<>(); -// -// ElogTable elogTable = aClass.getAnnotation(ElogTable.class); -// -// List fields = Arrays.asList(aClass.getDeclaredFields());//获取方法 -// for (Field f : fields) { -// -// ElogField field = f.getAnnotation(ElogField.class); -// if(field == null) { -// continue; -// } -// -// TableColumnBean tableColumnBean = new TableColumnBean(); -// -// tableColumnBean.setColumnName(f.getName()); -// tableColumnBean.setColumnComment(field.comment()); -// tableColumnBean.setColumnDefault(field.defaultValue()); -// tableColumnBean.setFieldLength(field.length()); -// tableColumnBean.setDataType(field.dataType()); -// tableColumnBean.setNullable(field.isNull()); -// list.add(tableColumnBean); -// } -// if(!ElogUtils.BASE_TABLE.equals(elogTable.module())) { -// tableMap.put(ElogUtils.getTableName(elogTable.module(), elogTable.function()), list); -// } else { -// baseColumns.addAll(list); -// } -// } -// -// return tableMap; -// } -// -// private void tableCheck(String tableName, List columns) { -// List oldColumns = new ArrayList<>(); -//// List oldColumns = tableCheckerMapper.getTableStructure(tableName); -// -// // 表不存在 -// if(oldColumns == null || oldColumns.size() == 0) { -// createTable(tableName,columns ); -// } else { -// Map newcolMap = new HashMap<>(); -// Map oldcolMap = new HashMap<>(); -// -// columns.stream().forEach(tableColumnBean -> newcolMap.put(tableColumnBean.getColumnName().toLowerCase(), tableColumnBean)); -// oldColumns.stream().forEach(tableColumnBean -> { -// tableColumnBean.setDataType(ElogUtils.getEnumFromString(DataTypeEnum.class, tableColumnBean.getDataTypeStr())); -// tableColumnBean.setNullable("YES".equalsIgnoreCase(tableColumnBean.getIsNullableStr())); -// oldcolMap.put(tableColumnBean.getColumnName().toLowerCase(), tableColumnBean); -// }); -// // 只增加或者修改,不删除字段 -// for(String key : newcolMap.keySet()) { -// if(oldcolMap.containsKey(key)) { -// // 字段变动则修改 -// if(!(newcolMap.get(key).toSql()).equals(oldcolMap.get(key).toSql())) -// this.modifyColumn(tableName, newcolMap.get(key)); -// } else { -// this.addColumn(tableName, newcolMap.get(key)); -// } -// } -// } -// -// } -// -// private void createTable(String tableName, List columns) { -// StringBuilder sb = new StringBuilder("create table ").append(tableName).append(" ( "); -// sb.append(columns.stream().map( bean -> bean.toSql()).collect(Collectors.joining(","))); -// sb.append(")"); -// logger.info("创建sql:{}",sb.toString()); -//// tableCheckerMapper.createElogTable(sb.toString()); -// } -// -// private void addColumn(String tableName, TableColumnBean tableColumnBean) { -// StringBuilder sb = new StringBuilder("alter table ") -// .append(tableName).append(" ") -// .append(" add ") -// .append(" column ") -// .append(tableColumnBean.toSql()); -// logger.info("新增字段sql:{}",sb.toString()); -//// tableCheckerMapper.createElogTable(sb.toString()); -// } -// -// private void modifyColumn(String tableName, TableColumnBean tableColumnBean) { -// StringBuilder sb = new StringBuilder("alter table ") -// .append(tableName).append(" ") -// .append(" modify ") -// .append(" column ") -// .append(tableColumnBean.toSql()); -// logger.info("修改字段sql:{}",sb.toString()); -//// tableCheckerMapper.createElogTable(sb.toString()); -// } -//} diff --git a/src/com/engine/salary/elog/annotation/handle/LoggerTargetHandler.java b/src/com/engine/salary/elog/annotation/handle/LoggerTargetHandler.java deleted file mode 100644 index b1934e4d3..000000000 --- a/src/com/engine/salary/elog/annotation/handle/LoggerTargetHandler.java +++ /dev/null @@ -1,38 +0,0 @@ -//package com.engine.salary.elog.annotation.handle; -// -//import com.weaver.common.elog.annotation.LoggerTarget; -//import com.weaver.common.elog.util.LoggerTemplate; -//import org.apache.commons.lang3.StringUtils; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.boot.CommandLineRunner; -//import org.springframework.context.ApplicationContext; -//import org.springframework.stereotype.Component; -// -//import java.util.Map; -// -// -///** -// * @ClassName: LoggerTargetHandler -// * @Description 从Spring扫描到的类中获取到LoggerTarget自定义注解类设置function属性 -// * @Author tanghj -// * @Date 2021/2/10 14:18 -// */ -// -//public class LoggerTargetHandler { -// -// ApplicationContext applicationContext; -// -// @Override -// public void run(String... args) throws Exception { -// Map loggtemplateMap = applicationContext.getBeansWithAnnotation(LoggerTarget.class); -// -// for(Object obj : loggtemplateMap.values()) { -// if(obj instanceof LoggerTemplate) { -// LoggerTarget loggerTarget = obj.getClass().getAnnotation(LoggerTarget.class); -// ((LoggerTemplate) obj).setFunction(loggerTarget.function()); -// ((LoggerTemplate) obj).setModule(StringUtils.isNotEmpty(loggerTarget.value()) ? loggerTarget.value() : loggerTarget.module()); -// } -// -// } -// } -//} diff --git a/src/com/engine/salary/elog/async/LoggerMessageListener.java b/src/com/engine/salary/elog/async/LoggerMessageListener.java deleted file mode 100644 index 2bf5dc957..000000000 --- a/src/com/engine/salary/elog/async/LoggerMessageListener.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.engine.salary.elog.async; - -import com.engine.salary.elog.config.ELogTableChecker; -import com.engine.salary.elog.entity.dto.LoggerContext; -import com.engine.salary.elog.service.impl.LocalElogService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @ClassName: LoggerMessageListener - * @Description 本地日志存储消息队列监听类 - * @Author tanghj - * @Date 2021/2/10 14:18 - */ -public class LoggerMessageListener { - - private final Logger logger = LoggerFactory.getLogger(getClass()); - - LocalElogService localElogService = new LocalElogService(); - - public String receiveold(LoggerContext messageBean) { - - new ELogTableChecker().check(messageBean); - localElogService.insertLocalElog(messageBean); - - return ""; - } - - -} diff --git a/src/com/engine/salary/elog/config/ELogCache.java b/src/com/engine/salary/elog/config/ELogCache.java deleted file mode 100644 index 841bddf18..000000000 --- a/src/com/engine/salary/elog/config/ELogCache.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.engine.salary.elog.config; - -import com.engine.salary.mapper.elog.ElogTableCheckerMapper; -import com.engine.salary.util.db.MapperProxyFactory; - -import java.util.HashMap; -import java.util.Map; - -public class ELogCache { - - private Map tableCache = new HashMap<>(); - - private ElogTableCheckerMapper getTableCheckerMapper() { - return MapperProxyFactory.getProxy(ElogTableCheckerMapper.class); - } - - public Long getVersion(String mainTable) { - Long version = tableCache.get(mainTable); - if (version == null) { - version = getTableCheckerMapper().getVersion(mainTable); - tableCache.put(mainTable, version); - } - return version; - } -} diff --git a/src/com/engine/salary/elog/config/ELogTableChecker.java b/src/com/engine/salary/elog/config/ELogTableChecker.java deleted file mode 100644 index 741dea65c..000000000 --- a/src/com/engine/salary/elog/config/ELogTableChecker.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.engine.salary.elog.config; - -import com.engine.salary.elog.entity.dto.LoggerContext; -import com.engine.salary.mapper.elog.ElogTableCheckerMapper; -import com.engine.salary.util.db.IdGenerator; -import com.engine.salary.util.db.MapperProxyFactory; - - -public class ELogTableChecker { - private static final long version = 0; - private ELogCache eLogCache = new ELogCache(); - - private ElogTableCheckerMapper getTableCheckerMapper() { - return MapperProxyFactory.getProxy(ElogTableCheckerMapper.class); - } - - public void check(LoggerContext loggerContext) { - String module = loggerContext.getModuleName(); - String function = loggerContext.getFunctionName(); - String mainTable = String.format("%s_%slogs", module, function); - Long v = eLogCache.getVersion(mainTable); - boolean noTable = v == null; - if (noTable) { - this.initTable(mainTable); - v = version; - } else { - this.checkVersion(mainTable, v); - } - - } - - private void checkVersion(String mainTable, Long v) { - if (v == version) { - return; - } - } - - - private void initTable(String mainTable) { - getTableCheckerMapper().recordVersion(IdGenerator.generate(), mainTable, version); - getTableCheckerMapper().createMainTable(mainTable); - getTableCheckerMapper().createDetailTable(mainTable + "_detail"); - } -} diff --git a/src/com/engine/salary/elog/entity/dto/CancelContext.java b/src/com/engine/salary/elog/entity/dto/CancelContext.java deleted file mode 100644 index d7ecccb7b..000000000 --- a/src/com/engine/salary/elog/entity/dto/CancelContext.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.engine.salary.elog.entity.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; - -/** - * @ClassName: CancelContext - * @Description 撤销实体类 - * @Author tanghj - * @Date 2021/2/10 14:18 - */ -@ApiModel("撤销实体类") -public class CancelContext { - - @ApiModelProperty("撤销参数") - private T cancleParams; - - public T getCancleParams() { - return cancleParams; - } - - public void setCancleParams(T cancleParams) { - this.cancleParams = cancleParams; - } -} diff --git a/src/com/engine/salary/elog/entity/dto/DataTypeEnum.java b/src/com/engine/salary/elog/entity/dto/DataTypeEnum.java deleted file mode 100644 index b31b8e490..000000000 --- a/src/com/engine/salary/elog/entity/dto/DataTypeEnum.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.engine.salary.elog.entity.dto; - -public enum DataTypeEnum { - VARCHAR, - BIGINT, - INT, - DATETIME, - TEXT, - LONGTEXT, - DOUBLE, - DECIMAL, - TINYINT, - FLOAT; - - -} diff --git a/src/com/engine/salary/elog/entity/dto/ElogBean.java b/src/com/engine/salary/elog/entity/dto/ElogBean.java deleted file mode 100644 index 84a24cfd9..000000000 --- a/src/com/engine/salary/elog/entity/dto/ElogBean.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.engine.salary.elog.entity.dto; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * @Date: 2022/5/2 21:51 - * @Author: deli.xu - * @Description: 日志中心bean - **/ -public class ElogBean implements Serializable { - - - private static final long serialVersionUID = 5357552376749564256L; - private String module; - private String function; - private String current; - private String pageSize; - private String dataset; - private String searchMap; - private List showColumns = new ArrayList<>(); - private List filterConditionDtos = new ArrayList<>(); - private String downloadSize; - private String transMethod; - private Map authParamsJson; - - public String getModule() { - return module; - } - - public void setModule(String module) { - this.module = module; - } - - public String getFunction() { - return function; - } - - public void setFunction(String function) { - this.function = function; - } - - public String getCurrent() { - return current; - } - - public void setCurrent(String current) { - this.current = current; - } - - public String getPageSize() { - return pageSize; - } - - public void setPageSize(String pageSize) { - this.pageSize = pageSize; - } - - public String getDataset() { - return dataset; - } - - public void setDataset(String dataset) { - this.dataset = dataset; - } - - public String getSearchMap() { - return searchMap; - } - - public void setSearchMap(String searchMap) { - this.searchMap = searchMap; - } - - public List getShowColumns() { - return showColumns; - } - - public void setShowColumns(List showColumns) { - this.showColumns = showColumns; - } - - public List getFilterConditionDtos() { - return filterConditionDtos; - } - - public void setFilterConditionDtos(List filterConditionDtos) { - this.filterConditionDtos = filterConditionDtos; - } - - public String getDownloadSize() { - return downloadSize; - } - - public void setDownloadSize(String downloadSize) { - this.downloadSize = downloadSize; - } - - public String getTransMethod() { - return transMethod; - } - - public void setTransMethod(String transMethod) { - this.transMethod = transMethod; - } - - public Map getAuthParamsJson() { - return authParamsJson; - } - - public void setAuthParamsJson(Map authParamsJson) { - this.authParamsJson = authParamsJson; - } -} diff --git a/src/com/engine/salary/elog/entity/dto/FilterConditionDto.java b/src/com/engine/salary/elog/entity/dto/FilterConditionDto.java deleted file mode 100644 index 28cb451e5..000000000 --- a/src/com/engine/salary/elog/entity/dto/FilterConditionDto.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.engine.salary.elog.entity.dto; - -import java.io.Serializable; - -/** - * @date: 2021/5/25 17:23 - * @author: deli.xu - * @description: - */ -public class FilterConditionDto implements Serializable { - - private static final long serialVersionUID = -3399942468474767859L; - - /** - * 列名 - */ - private String columIndex; - /** - * 值 - */ - private String value; - - /** - * 过滤类型 - */ - private String type; - - /** - * 模糊搜索 - */ - private Like like; - - /** - * 关联条件 - */ - private String connectCondition; - - /** - * sql条件 - */ - private String sql; - - - public String getColumIndex() { - return columIndex; - } - - public void setColumIndex(String columIndex) { - this.columIndex = columIndex; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public Like getLike() { - return like; - } - - public void setLike(Like like) { - this.like = like; - } - - public String getConnectCondition() { - return connectCondition; - } - - public void setConnectCondition(String connectCondition) { - this.connectCondition = connectCondition; - } - - public String getSql() { - return sql; - } - - public void setSql(String sql) { - this.sql = sql; - } -} diff --git a/src/com/engine/salary/elog/entity/dto/Like.java b/src/com/engine/salary/elog/entity/dto/Like.java deleted file mode 100644 index 2caead76c..000000000 --- a/src/com/engine/salary/elog/entity/dto/Like.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.engine.salary.elog.entity.dto; - -import java.io.Serializable; - -/** - * @date: 2021/6/1 17:50 - * @author: deli.xu - * @description: - */ -public class Like implements Serializable { - private static final long serialVersionUID = -3399942468474767851L; - private String prefix; - private String suffix; - - - public String getPrefix() { - return prefix; - } - - public void setPrefix(String prefix) { - this.prefix = prefix; - } - - public String getSuffix() { - return suffix; - } - - public void setSuffix(String suffix) { - this.suffix = suffix; - } -} diff --git a/src/com/engine/salary/elog/entity/dto/LoggerContext.java b/src/com/engine/salary/elog/entity/dto/LoggerContext.java deleted file mode 100644 index f9be10c8f..000000000 --- a/src/com/engine/salary/elog/entity/dto/LoggerContext.java +++ /dev/null @@ -1,890 +0,0 @@ -package com.engine.salary.elog.entity.dto; - -import com.alibaba.fastjson.annotation.JSONField; -import com.engine.salary.elog.annotation.ElogField; -import com.engine.salary.elog.annotation.ElogTable; -import com.engine.salary.elog.enums.ElogConsts; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import org.apache.commons.lang3.StringUtils; -import weaver.hrm.User; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; - -/** - * @ClassName: LoggerContext - * @Description 日志实体类。支持通过泛型扩展日志字段 - * @Author tanghj - * @Date 2021/2/10 14:18 - */ -@ElogTable(module = ElogConsts.BASE_TABLE) -@ApiModel("日志实体类") -public class LoggerContext implements Serializable { - - private static final long serialVersionUID = 15869325700230992L; - - private User user; - - @ElogField(comment = "ID", dataType = DataTypeEnum.BIGINT, isKey = true) - @ApiModelProperty("日志ID") - private long id; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 36, comment = "日志UUID") - @ApiModelProperty("日志UUID") - private String uuid = ""; - - @ApiModelProperty("自定义日志字段信息") - private T customInfo; - @ElogField(dataType = DataTypeEnum.DATETIME, comment = "操作时间") - @ApiModelProperty("操作时间") - @JSONField(format = "yyyy-MM-dd HH:mm:ss") - private Date date = new Date(); - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 500, comment = "终端信息") - @ApiModelProperty("终端信息") - private String device = ""; - - @ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "-1", comment = "操作人") - @ApiModelProperty("操作人") - private String operator = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, comment = "操作人姓名") - @ApiModelProperty("操作人姓名") - private String operatorName = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 10, comment = "租户id") - @ApiModelProperty("租户id") - private String tenant_key = ""; - - /** - * 要操作的对象在表中的主键值 - */ - @ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "-1", comment = "操作目标id") - @ApiModelProperty("操作目标id") - private String targetId = ""; - - @ElogField(dataType = DataTypeEnum.TEXT, comment = "操作目标名称") - @ApiModelProperty("操作目标名称(用于显示)") - private String targetName = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, comment = "模块") - @ApiModelProperty("目标对象类型(大分类,模块,服务)") - private String moduleName;// 模块 - - /** - * 目标对象类型(小分类,模块/服务下的子功能。子项目) - * 数据存储是以模块名_子项目名作为最基本的存储单元 - * 如果是子项目下的子项目 命名为:子项目名_子项目名_子项目名(全部小写) - */ - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, comment = "服务(方法)") - @ApiModelProperty("目标对象类型(小分类,模块/服务下的子功能。子项目)") - private String functionName; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, comment = "访问接口名") - @ApiModelProperty("访问接口名") - private String interfaceName = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 200, comment = "请求全路径") - @ApiModelProperty("请求全路径") - private String requestUrl = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 200, comment = "请求地址") - @ApiModelProperty("请求地址") - private String requestUri = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 50, comment = "操作类型") - @ApiModelProperty("操作类型(增删改查等)") - private String operateType = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, comment = "操作类型名称") - @ApiModelProperty("操作类型名称") - private String operateTypeName = ""; - - /** - * 每个TableChangeBean 为一张表,支持记录多张表的前后值 - */ - @ApiModelProperty("修改前、后的值") - private List changeValues;// 操作表名,[字段名,值] - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 3000, comment = "操作详细说明") - @ApiModelProperty("操作详细说明") - private String operatedesc = ""; - - @ElogField(dataType = DataTypeEnum.LONGTEXT, comment = "涉及的相关参数") - @ApiModelProperty("涉及的相关参数") - private Map params; - - @ApiModelProperty("涉及的相关参数-转string存储") - private String paramsStr; - - /** - * 当作为主表,belongMainId不赋值 - */ - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 36, comment = "所属主表uuid") - @ApiModelProperty("所属主表uuid") - private String belongMainId = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 50, comment = "操作IP") - @ApiModelProperty("操作IP") - private String clientIp = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 50, comment = "分组") - @ApiModelProperty("分组") - private String groupId = ""; - - /*@ApiModelProperty("是否明显表") - private boolean isDetail;*/ - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 1000, comment = "分组标题") - @ApiModelProperty("分组标题") - private String groupNameLabel = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 200, comment = "重做业务接口") - @ApiModelProperty("重做业务接口") - private String redoService = ""; - - @ElogField(dataType = DataTypeEnum.LONGTEXT, comment = "重做参数") - @ApiModelProperty("重做参数") - private RedoContext redoContext; - - @ApiModelProperty("重做参数-转String存储") - private String redoContextStr; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 200, comment = "撤销业务接口") - @ApiModelProperty("撤销业务接口") - private String cancelService = ""; - - @ElogField(dataType = DataTypeEnum.LONGTEXT, comment = "撤销参数") - @ApiModelProperty("撤销参数") - private CancelContext cancelContext; - - @ApiModelProperty("撤销参数-转String存储") - private String cancelContextStr; - - @ApiModelProperty("日志明细列表(值变化列表-自动赋值、或者自定义字段)") - private List detailContexts; - - @ElogField(dataType = DataTypeEnum.DATETIME, defaultValue = "CURRENT_TIMESTAMP", comment = "创建时间") - @ApiModelProperty("创建时间") - @JSONField(format = "yyyy-MM-dd HH:mm:ss") - private Date create_time; - - @ElogField(dataType = DataTypeEnum.DATETIME, defaultValue = "CURRENT_TIMESTAMP", comment = "修改时间") - @ApiModelProperty("修改时间") - @JSONField(format = "yyyy-MM-dd HH:mm:ss") - private Date update_time; - - @ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "-1", comment = "创建人id") - @ApiModelProperty("创建人id") - private long creator; - - @ElogField(dataType = DataTypeEnum.INT, defaultValue = "0", comment = "是否删除") - @ApiModelProperty("是否删除") - private int delete_type; - - @ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "0", comment = "总运行时长") - @ApiModelProperty("总运行时长") - private long totalRunTime; - - @ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "0", comment = "主方法运行时长") - @ApiModelProperty("主方法运行时长") - private long mainRunTime; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, defaultValue = "", comment = "运行结果标识") - @ApiModelProperty("运行结果标识") - private String result = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, defaultValue = "", comment = "来自pc web") - @ApiModelProperty("来自终端") - private String fromTerminal = ""; - - @ElogField(dataType = DataTypeEnum.TEXT, comment = "运行结果描述") - @ApiModelProperty("运行结果描述") - private String resultDesc = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 3000, comment = "原先内容") - @ApiModelProperty("原先内容(et用)") - private String old_content = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 20, comment = "链接类型") - @ApiModelProperty("链接类型(et用)") - private String link_type = ""; - - @ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "0", comment = "链接id") - @ApiModelProperty("链接id(et用)") - private long link_id; - - @ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "0", comment = "原先链接id") - @ApiModelProperty("原先链接id(et用)") - private long old_link_id; - - /** - * 开发可以自由传中间临时参数,不会入库 - */ - @ApiModelProperty("临时参数") - private Object tempParams; - - /** - * 是否忽略该日志,不进行数据记录 - */ - @ApiModelProperty("是否忽略该日志,不进行数据记录") - private boolean logIgnore; - - /** - * 审计操作类型 - */ - @ApiModelProperty("审计操作类型") - protected String operateAuditType; - - /** - * 操作人账号 - */ - @ApiModelProperty("操作人账号") - protected String operateAccount; - - @ApiModelProperty("操作人id(兼容数据库用)") - protected long logOperator; - - @ApiModelProperty("操作人id(兼容数据库用)") - protected long logTargetid; - - @ApiModelProperty("ES存储大字段功能标识") - protected Boolean esFunction; - - @ApiModelProperty("params参数是否忽略记录") - private Boolean paramsIgnore = Boolean.FALSE; - - @ApiModelProperty("params请求体keys") - private List paramsBodyKeys; - - @ApiModelProperty("日志弱控记录") - private Boolean weakElogReocrd = Boolean.FALSE; - - private List clobFieldList; - - public User getUser() { - return user; - } - - public void setUser(User user) { - this.user = user; - } - - public List getClobFieldList() { - return clobFieldList; - } - - public void setClobFieldList(List clobFieldList) { - this.clobFieldList = clobFieldList; - } - - public Boolean getWeakElogReocrd() { - return weakElogReocrd; - } - - public void setWeakElogReocrd(Boolean weakElogReocrd) { - this.weakElogReocrd = weakElogReocrd; - } - - public Boolean getParamsIgnore() { - return paramsIgnore; - } - - public void setParamsIgnore(Boolean paramsIgnore) { - this.paramsIgnore = paramsIgnore; - } - - public List getParamsBodyKeys() { - return paramsBodyKeys; - } - - public void setParamsBodyKeys(List paramsBodyKeys) { - this.paramsBodyKeys = paramsBodyKeys; - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getUuid() { - return uuid; - } - - public void setUuid(String uuid) { - this.uuid = uuid; - } - - public T getCustomInfo() { - return customInfo; - } - - public void setCustomInfo(T customInfo) { - this.customInfo = customInfo; - } - - public Date getDate() { - return date; - } - - public void setDate(Date date) { - this.date = date; - } - - public String getDevice() { - return device; - } - - public void setDevice(String device) { - this.device = device; - } - - public String getOperator() { - return operator; - } - - public void setOperator(String operator) { - this.operator = operator; - } - - public String getTenant_key() { - return tenant_key; - } - - public void setTenant_key(String tenant_key) { - this.tenant_key = tenant_key; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getTargetName() { - return targetName; - } - - public void setTargetName(String targetName) { - this.targetName = targetName; - } - - public String getModuleName() { - return moduleName; - } - - public void setModuleName(String moduleName) { - this.moduleName = moduleName; - } - - public String getFunctionName() { - return functionName; - } - - public void setFunctionName(String functionName) { - this.functionName = functionName; - } - - public String getInterfaceName() { - return interfaceName; - } - - public void setInterfaceName(String interfaceName) { - this.interfaceName = interfaceName; - } - - public String getOperateType() { - return operateType; - } - - public void setOperateType(String operateType) { - this.operateType = operateType; - } - - public List getChangeValues() { - return changeValues; - } - - public void setChangeValues(List changeValues) { - this.changeValues = changeValues; - } - - public String getOperatedesc() { - return operatedesc; - } - - public void setOperatedesc(String operatedesc) { - this.operatedesc = operatedesc; - } - - public Map getParams() { - return params; - } - - public void setParams(Map params) { - this.params = params; - } - - /*public String getMainId() { - return mainId; - } - - public void setMainId(String mainId) { - this.mainId = mainId; - } - - public String getBelongMainId() { - return belongMainId; - } - - public void setBelongMainId(String belongMainId) { - this.belongMainId = belongMainId; - }*/ - - public String getClientIp() { - return clientIp; - } - - public void setClientIp(String clientIp) { - this.clientIp = clientIp; - } - - public String getGroupId() { - return groupId; - } - - public void setGroupId(String groupId) { - this.groupId = groupId; - } - -/* public boolean isDetail() { - return isDetail; - } - - public void setDetail(boolean detail) { - isDetail = detail; - }*/ - - public String getGroupNameLabel() { - return groupNameLabel; - } - - public void setGroupNameLabel(String groupNameLabel) { - this.groupNameLabel = groupNameLabel; - } - - public String getRedoService() { - return redoService; - } - - public void setRedoService(String redoService) { - this.redoService = redoService; - } - - public RedoContext getRedoContext() { - return redoContext; - } - - public void setRedoContext(RedoContext redoContext) { - this.redoContext = redoContext; - } - - public CancelContext getCancelContext() { - return cancelContext; - } - - public void setCancelContext(CancelContext cancelContext) { - this.cancelContext = cancelContext; - } - - public String getCancelService() { - return cancelService; - } - - public void setCancelService(String cancelService) { - this.cancelService = cancelService; - } - - public List getDetailContexts() { - return detailContexts; - } - - public void setDetailContexts(List detailContexts) { - this.detailContexts = detailContexts; - } - - public void addDetailContext(LoggerDetailContext loggerDetailContext) { - if (this.detailContexts != null) { - this.detailContexts.add(loggerDetailContext); - } else { - this.detailContexts = new ArrayList<>(); - this.detailContexts.add(loggerDetailContext); - } - } - - public void addDetailContext(List list) { - if (this.detailContexts != null) { - this.detailContexts.addAll(list); - } else { - this.detailContexts = new ArrayList<>(); - this.detailContexts.addAll(list); - } - } - - public String getOperatorName() { - return operatorName; - } - - public void setOperatorName(String operatorName) { - this.operatorName = operatorName; - } - - public void setOldValues(Object object) { - TableChangeBean bean = new TableChangeBean(); - bean.setOldValue(object); - getChangeList().add(bean); - } - - public void setOldValueList(List list) { - if (list != null) - list.stream().forEach(obj -> setOldValues(obj)); - } - - public void setNewValueList(List list) { - if (list != null) - list.stream().forEach(obj -> setNewValues(obj)); - } - - public void setNewValues(Object object) { - List list = getChangeList(); - - boolean handled = false; - for (TableChangeBean bean : list) { - if (bean.getNewValue() == null) { - bean.setNewValue(object); - handled = true; - break; - } - } - if (!handled) { - TableChangeBean bean = new TableChangeBean(); - bean.setNewValue(object); - list.add(bean); - } - } - - public void setOldValues(Object object, String tableName, String dataId, String belongDataid) { - setOldValues(object, tableName, dataId, belongDataid, false); - } - - public void setOldValues(Object object, String tableName, String dataId, String belongDataid, boolean isDetail) { - TableChangeBean bean = new TableChangeBean(); - if (StringUtils.isNotEmpty(tableName)) - bean.setTableName(tableName); - if (StringUtils.isNotEmpty(dataId)) - bean.setDataid(dataId); - if (StringUtils.isNotEmpty(belongDataid)) - bean.setBelongDataid(belongDataid); - if (isDetail) - bean.setIsDetail(1); - bean.setOldValue(object); - getChangeList().add(bean); - } - - public void setOldValueList(List list, String tableName, String dataId, String belongDataid) { - setOldValueList(list, tableName, dataId, belongDataid, false); - } - - public void setNewValueList(List list, String tableName, String dataId, String belongDataid) { - setNewValueList(list, tableName, dataId, belongDataid, false); - } - - public void setOldValueList(List list, String tableName, String dataId, String belongDataid, boolean isDetail) { - if (list != null) - list.stream().forEach(obj -> setOldValues(obj, tableName, dataId, belongDataid, isDetail)); - } - - public void setNewValueList(List list, String tableName, String dataId, String belongDataid, boolean isDetail) { - if (list != null) - list.stream().forEach(obj -> setNewValues(obj, tableName, dataId, belongDataid, isDetail)); - } - - public void setNewValues(Object object, String tableName, String dataId, String belongDataid) { - setNewValues(object, tableName, dataId, belongDataid, false); - } - - public void setNewValues(Object object, String tableName, String dataId, String belongDataid, boolean isDetail) { - List list = getChangeList(); - - boolean handled = false; - for (TableChangeBean bean : list) { - if (bean.getNewValue() == null) { - bean.setNewValue(object); - if (StringUtils.isNotEmpty(tableName)) - bean.setTableName(tableName); - if (StringUtils.isNotEmpty(dataId)) - bean.setDataid(dataId); - if (StringUtils.isNotEmpty(belongDataid)) - bean.setBelongDataid(belongDataid); - if (isDetail) - bean.setIsDetail(1); - handled = true; - break; - } - } - if (!handled) { - TableChangeBean bean = new TableChangeBean(); - if (StringUtils.isNotEmpty(tableName)) - bean.setTableName(tableName); - if (StringUtils.isNotEmpty(dataId)) - bean.setDataid(dataId); - if (StringUtils.isNotEmpty(belongDataid)) - bean.setBelongDataid(belongDataid); - if (isDetail) - bean.setIsDetail(1); - bean.setNewValue(object); - list.add(bean); - } - } - - public List getChangeList() { - - if (this.changeValues == null) { - this.changeValues = new ArrayList<>(); - } - - return this.changeValues; - - } - - public Object getParam(String id) { - return this.params.get(id); - } - - public String getOperateTypeName() { - return operateTypeName; - } - - public void setOperateTypeName(String operateTypeName) { - this.operateTypeName = operateTypeName; - } - - public String getParamsStr() { - return paramsStr; - } - - public void setParamsStr(String paramsStr) { - this.paramsStr = paramsStr; - } - - public String getRedoContextStr() { - return redoContextStr; - } - - public void setRedoContextStr(String redoContextStr) { - this.redoContextStr = redoContextStr; - } - - public String getCancelContextStr() { - return cancelContextStr; - } - - public void setCancelContextStr(String cancelContextStr) { - this.cancelContextStr = cancelContextStr; - } - - public String getBelongMainId() { - return belongMainId; - } - - public void setBelongMainId(String belongMainId) { - this.belongMainId = belongMainId; - } - - public String getRequestUrl() { - return requestUrl; - } - - public void setRequestUrl(String requestUrl) { - this.requestUrl = requestUrl; - } - - public String getRequestUri() { - return requestUri; - } - - public void setRequestUri(String requestUri) { - this.requestUri = requestUri; - } - - public Date getCreate_time() { - return create_time; - } - - public void setCreate_time(Date create_time) { - this.create_time = create_time; - } - - public Date getUpdate_time() { - return update_time; - } - - public void setUpdate_time(Date update_time) { - this.update_time = update_time; - } - - public long getCreator() { - return creator; - } - - public void setCreator(long creator) { - this.creator = creator; - } - - public int getDelete_type() { - return delete_type; - } - - public void setDelete_type(int delete_type) { - this.delete_type = delete_type; - } - - public long getTotalRunTime() { - return totalRunTime; - } - - public void setTotalRunTime(long totalRunTime) { - this.totalRunTime = totalRunTime; - } - - public long getMainRunTime() { - return mainRunTime; - } - - public void setMainRunTime(long mainRunTime) { - this.mainRunTime = mainRunTime; - } - - public Object getTempParams() { - return tempParams; - } - - public void setTempParams(Object tempParams) { - this.tempParams = tempParams; - } - - public String getResult() { - return result; - } - - public void setResult(String result) { - this.result = result; - } - - public String getFromTerminal() { - return fromTerminal; - } - - public void setFromTerminal(String fromTerminal) { - this.fromTerminal = fromTerminal; - } - - public String getResultDesc() { - return resultDesc; - } - - public void setResultDesc(String resultDesc) { - this.resultDesc = resultDesc; - } - - public String getOld_content() { - return old_content; - } - - public void setOld_content(String old_content) { - this.old_content = old_content; - } - - public String getLink_type() { - return link_type; - } - - public void setLink_type(String link_type) { - this.link_type = link_type; - } - - public long getLink_id() { - return link_id; - } - - public void setLink_id(long link_id) { - this.link_id = link_id; - } - - public long getOld_link_id() { - return old_link_id; - } - - public void setOld_link_id(long old_link_id) { - this.old_link_id = old_link_id; - } - - public String getOperateAuditType() { - return operateAuditType; - } - - public void setOperateAuditType(String operateAuditType) { - this.operateAuditType = operateAuditType; - } - - public String getOperateAccount() { - return operateAccount; - } - - public void setOperateAccount(String operateAccount) { - this.operateAccount = operateAccount; - } - - public long getLogOperator() { - return logOperator; - } - - public void setLogOperator(long logOperator) { - this.logOperator = logOperator; - } - - public long getLogTargetid() { - return logTargetid; - } - - public void setLogTargetid(long logTargetid) { - this.logTargetid = logTargetid; - } - - public boolean getLogIgnore() { - return logIgnore; - } - - public void setLogIgnore(boolean logIgnore) { - this.logIgnore = logIgnore; - } - - public Boolean getEsFunction() { - return esFunction; - } - - public void setEsFunction(Boolean esFunction) { - this.esFunction = esFunction; - } - -} - diff --git a/src/com/engine/salary/elog/entity/dto/LoggerDetailContext.java b/src/com/engine/salary/elog/entity/dto/LoggerDetailContext.java deleted file mode 100644 index ef4a66503..000000000 --- a/src/com/engine/salary/elog/entity/dto/LoggerDetailContext.java +++ /dev/null @@ -1,316 +0,0 @@ -package com.engine.salary.elog.entity.dto; - -import com.engine.salary.elog.annotation.ElogDetailTable; -import com.engine.salary.elog.annotation.ElogField; -import com.engine.salary.elog.enums.ElogConsts; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; - -import java.io.Serializable; -import java.util.Date; - -/** - * @ClassName: ValueChangeBean - * @Description 值变化实体类(自动将表字段值变更类转换为该类) - * @Author tanghj - * @Date 2021/3/9 11:06 - */ -@ElogDetailTable(module = ElogConsts.BASE_TABLE) -@ApiModel("值变化实体类") -public class LoggerDetailContext implements Serializable { - - private static final long serialVersionUID = 15869325700230992L; - - @ElogField(comment = "ID", dataType = DataTypeEnum.BIGINT, isKey = true) - @ApiModelProperty("ID") - private long id; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 36,comment = "日志UUID") - @ApiModelProperty("同一个bean转换的数据,uuid相同,作为区分标识") - private String uuid = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 36,comment = "主表id") - @ApiModelProperty("主表id") - private String mainid = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 50,comment = "数据id") - @ApiModelProperty("数据id") - private String dataid = ""; - - /** - * 当作为主表,belongDataId不赋值 - */ - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 50,comment = "主表数据id") - @ApiModelProperty("主表数据id") - private String belongDataid = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 200,comment = "表名") - @ApiModelProperty("表名") - private String tableName =""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, defaultValue = "-1", length = 50,comment = "表名labelid") - @ApiModelProperty("表名labelid") - private String tableNameLabelId = "-1"; - @ElogField(dataType = DataTypeEnum.VARCHAR, defaultValue="",isNull = false,length = 50,comment = "对应数据库的表") - @ApiModelProperty("对应数据库的表") - private String tableNameDesc = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 200,comment = "字段名") - @ApiModelProperty("字段名") - private String fieldName =""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, defaultValue = "-1", length = 50,comment = "字段名labelid") - @ApiModelProperty("字段名labelid") - private String fieldNameLabelId = "-1"; - - @ElogField(dataType = DataTypeEnum.LONGTEXT,comment = "更新后的值") - @ApiModelProperty("更新后的值") - private String newValue = ""; - - @ElogField(dataType = DataTypeEnum.LONGTEXT,comment = "更新前的值") - @ApiModelProperty("更新前的值") - private String oldValue = ""; - - @ElogField(dataType = DataTypeEnum.LONGTEXT,comment = "更新后的显示值") - @ApiModelProperty("更新后的显示值") - private String newRealValue = ""; - - @ElogField(dataType = DataTypeEnum.LONGTEXT,comment = "更新前的显示值") - @ApiModelProperty("更新前的显示值") - private String oldRealValue = ""; - - @ElogField(dataType = DataTypeEnum.VARCHAR, length = 200, comment = "字段名") - @ApiModelProperty("字段描述") - private String fieldDesc = ""; - - @ElogField(dataType = DataTypeEnum.INT, comment = "字段名") - @ApiModelProperty("字段展示顺序") - private int showorder = 0; - - @ApiModelProperty("自定义字段") - private T customDetailInfo; - - @ElogField(dataType = DataTypeEnum.DATETIME, defaultValue = "CURRENT_TIMESTAMP", comment = "创建时间") - @ApiModelProperty("创建时间") - private Date create_time; - - @ElogField(dataType = DataTypeEnum.DATETIME, defaultValue = "CURRENT_TIMESTAMP", comment = "修改时间") - @ApiModelProperty("修改时间") - private Date update_time; - - @ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "-1", comment = "创建人id") - @ApiModelProperty("创建人id") - private long creator; - - @ElogField(dataType = DataTypeEnum.INT, defaultValue = "0" , comment = "是否删除") - @ApiModelProperty("是否删除") - private int delete_type; - - @ElogField(dataType = DataTypeEnum.VARCHAR,length = 10,comment = "租户id") - @ApiModelProperty("租户id") - private String tenant_key = ""; - - @ElogField(dataType = DataTypeEnum.INT, defaultValue = "0" , comment = "是否明细字段") - @ApiModelProperty("是否明细字段") - private int isDetail = 0; - - - private String cusValus; - - public String getCusValus() { - return cusValus; - } - - public void setCusValus(String cusValus) { - this.cusValus = cusValus; - } - - - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getMainid() { - return mainid; - } - - public void setMainid(String mainid) { - this.mainid = mainid; - } - - public String getUuid() { - return uuid; - } - - public void setUuid(String uuid) { - this.uuid = uuid; - } - - public String getTableName() { - return tableName; - } - - public void setTableName(String tableName) { - this.tableName = tableName; - } - - public String getFieldName() { - return fieldName; - } - - public void setFieldName(String fieldName) { - this.fieldName = fieldName; - } - - public String getNewValue() { - return newValue; - } - - public void setNewValue(String newValue) { - this.newValue = newValue; - } - - public String getOldValue() { - return oldValue; - } - - public void setOldValue(String oldValue) { - this.oldValue = oldValue; - } - - public String getFieldDesc() { - return fieldDesc; - } - - public void setFieldDesc(String fieldDesc) { - this.fieldDesc = fieldDesc; - } - - public int getShoworder() { - return showorder; - } - - public void setShoworder(int showorder) { - this.showorder = showorder; - } - - public T getCustomDetailInfo() { - return customDetailInfo; - } - - public void setCustomDetailInfo(T customDetailInfo) { - this.customDetailInfo = customDetailInfo; - } - - public String getDataid() { - return dataid; - } - - public void setDataid(String dataid) { - this.dataid = dataid; - } - - public String getBelongDataid() { - return belongDataid; - } - - public void setBelongDataid(String belongDataid) { - this.belongDataid = belongDataid; - } - - public Date getCreate_time() { - return create_time; - } - - public void setCreate_time(Date create_time) { - this.create_time = create_time; - } - - public Date getUpdate_time() { - return update_time; - } - - public void setUpdate_time(Date update_time) { - this.update_time = update_time; - } - - public long getCreator() { - return creator; - } - - public void setCreator(long creator) { - this.creator = creator; - } - - public int getDelete_type() { - return delete_type; - } - - public void setDelete_type(int delete_type) { - this.delete_type = delete_type; - } - - public String getTenant_key() { - return tenant_key; - } - - public void setTenant_key(String tenant_key) { - this.tenant_key = tenant_key; - } - - public int getIsDetail() { - return isDetail; - } - - public void setIsDetail(int isDetail) { - this.isDetail = isDetail; - } - - public String getNewRealValue() { - return newRealValue; - } - - public void setNewRealValue(String newRealValue) { - this.newRealValue = newRealValue; - } - - public String getOldRealValue() { - return oldRealValue; - } - - public void setOldRealValue(String oldRealValue) { - this.oldRealValue = oldRealValue; - } - - public String getTableNameLabelId() { - return tableNameLabelId; - } - - public void setTableNameLabelId(String tableNameLabelId) { - this.tableNameLabelId = tableNameLabelId; - } - - public String getFieldNameLabelId() { - return fieldNameLabelId; - } - - public void setFieldNameLabelId(String fieldNameLabelId) { - this.fieldNameLabelId = fieldNameLabelId; - } - - public String getTableNameDesc() { - return tableNameDesc; - } - - public void setTableNameDesc(String tableNameDesc) { - this.tableNameDesc = tableNameDesc; - } - - - -} diff --git a/src/com/engine/salary/elog/entity/dto/ReadInfoEntity.java b/src/com/engine/salary/elog/entity/dto/ReadInfoEntity.java deleted file mode 100644 index 3f7a364e4..000000000 --- a/src/com/engine/salary/elog/entity/dto/ReadInfoEntity.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.engine.salary.elog.entity.dto; - -import java.io.Serializable; -import java.util.Date; - -/** - * @date: 2022/5/14 13:52 - * @author: deli.xu - * @description: - */ - -public class ReadInfoEntity implements Serializable { - private static final long serialVersionUID = -8890667941835568289L; - private Long employeeId; - private Date date; - - public Long getEmployeeId() { - return this.employeeId; - } - - public void setEmployeeId(Long employeeId) { - this.employeeId = employeeId; - } - - public Date getDate() { - return this.date; - } - - public void setDate(Date date) { - this.date = date; - } - - public ReadInfoEntity() { - } - - public ReadInfoEntity(Long employeeId, Date date) { - this.employeeId = employeeId; - this.date = date; - } -} \ No newline at end of file diff --git a/src/com/engine/salary/elog/entity/dto/RedoContext.java b/src/com/engine/salary/elog/entity/dto/RedoContext.java deleted file mode 100644 index 3ec87adb3..000000000 --- a/src/com/engine/salary/elog/entity/dto/RedoContext.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.engine.salary.elog.entity.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; - -/** - * @ClassName: RedoContext - * @Description 重做实体类 - * @Author tanghj - * @Date 2021/2/10 14:18 - */ -@ApiModel("重做实体类") -public class RedoContext { - @ApiModelProperty("重做参数") - private T redoParams; - - public T getRedoParams() { - return redoParams; - } - - public void setRedoParams(T redoParams) { - this.redoParams = redoParams; - } -} diff --git a/src/com/engine/salary/elog/entity/dto/ShowColumsDto.java b/src/com/engine/salary/elog/entity/dto/ShowColumsDto.java deleted file mode 100644 index b5f47e084..000000000 --- a/src/com/engine/salary/elog/entity/dto/ShowColumsDto.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.engine.salary.elog.entity.dto; - - -import java.io.Serializable; - -/** - * @date: 2021/5/11 18:46 - * @author: deli.xu - * @description: 显示列对象 - */ -public class ShowColumsDto implements Serializable { - - private static final long serialVersionUID = 4650449925605408753L; - - /** - * 列名 - */ - private String columName; - /** - * 列别名 - */ - private String aliasColumName; - - /** - * 列名index - */ - private String columIndex; - - /** - * 是否隐藏 默认显示 - */ - private boolean isHide = false; - - /** - * 宽度 - */ - private String width; - - /** - * 是否转多语言 - */ - private boolean isTransfLanguage = false; - - /** - * 是否换行 - * @param width - */ - private boolean newLine = false; - - public void setWidth(String width){ - this.width =width; - } - - public String getWidth(){ - return width; - } - public String getColumName() { - return columName; - } - - public void setColumName(String columName) { - this.columName = columName; - } - - public String getAliasColumName() { - return aliasColumName; - } - - public void setAliasColumName(String aliasColumName) { - this.aliasColumName = aliasColumName; - } - - public boolean isHide() { - return isHide; - } - - public void setHide(boolean hide) { - isHide = hide; - } - - public String getColumIndex() { - return columIndex; - } - - public void setColumIndex(String columIndex) { - this.columIndex = columIndex; - } - - public boolean isTransfLanguage() { - return isTransfLanguage; - } - - public boolean isNewLine() { - return newLine; - } - - public void setNewLine(boolean newLine) { - this.newLine = newLine; - } - - public void setTransfLanguage(boolean transfLanguage) { - - isTransfLanguage = transfLanguage; - } -} diff --git a/src/com/engine/salary/elog/entity/dto/TableChangeBean.java b/src/com/engine/salary/elog/entity/dto/TableChangeBean.java deleted file mode 100644 index 445bd8510..000000000 --- a/src/com/engine/salary/elog/entity/dto/TableChangeBean.java +++ /dev/null @@ -1,153 +0,0 @@ -package com.engine.salary.elog.entity.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; - -import java.io.Serializable; - -/** - * @ClassName: TableChangeBean - * @Description 表更新前后值类 - * @Author tanghj - * @Date 2021/3/8 15:58 - */ -@ApiModel("表更新前后值类") -public class TableChangeBean implements Serializable { - - private static final long serialVersionUID = 15869325700230992L; - - @ApiModelProperty("表名") - private String tableName; - - @ApiModelProperty("数据id") - private String dataid; - - @ApiModelProperty("所属主表数据id") - private String belongDataid; - - @ApiModelProperty("是否为明细表(0,否;1,是)") - private int isDetail = 0; - - /** - * 泛型必须是具体的实体类 - */ - @ApiModelProperty("更新前的值") - private T oldValue; - - /** - * 泛型必须是具体的实体类 - */ - @ApiModelProperty("更新后的值") - private T newValue; - - /** - * 泛型必须是具体的实体类 - */ - @ApiModelProperty("更新前显示的值") - private T oldRealValue; - - /** - * 泛型必须是具体的实体类 - */ - @ApiModelProperty("更新后显示的值") - private T newRealValue; - - - @ApiModelProperty("字段对应的labelid") - private String fieldNameLabelId; - - @ApiModelProperty("表对应的labelid") - private String tableNameLabelId; - - @ApiModelProperty("对应数据库的表") - private String tableNameDesc; - - - public String getTableName() { - return tableName; - } - - public void setTableName(String tableName) { - this.tableName = tableName; - } - - public T getOldValue() { - return oldValue; - } - - public void setOldValue(T oldValue) { - this.oldValue = oldValue; - } - - public T getNewValue() { - return newValue; - } - - public void setNewValue(T newValue) { - this.newValue = newValue; - } - - public String getDataid() { - return dataid; - } - - public void setDataid(String dataid) { - this.dataid = dataid; - } - - public String getBelongDataid() { - return belongDataid; - } - - public void setBelongDataid(String belongDataid) { - this.belongDataid = belongDataid; - } - - public int getIsDetail() { - return isDetail; - } - - public void setIsDetail(int isDetail) { - this.isDetail = isDetail; - } - - public T getOldRealValue() { - return oldRealValue; - } - - public void setOldRealValue(T oldRealValue) { - this.oldRealValue = oldRealValue; - } - - public T getNewRealValue() { - return newRealValue; - } - - public String getFieldNameLabelId() { - return fieldNameLabelId; - } - - public void setFieldNameLabelId(String fieldNameLabelId) { - this.fieldNameLabelId = fieldNameLabelId; - } - - public String getTableNameLabelId() { - return tableNameLabelId; - } - - public void setTableNameLabelId(String tableNameLabelId) { - this.tableNameLabelId = tableNameLabelId; - } - - public String getTableNameDesc() { - return tableNameDesc; - } - - public void setTableNameDesc(String tableNameDesc) { - this.tableNameDesc = tableNameDesc; - } - - public void setNewRealValue(T newRealValue) { - this.newRealValue = newRealValue; - } -} diff --git a/src/com/engine/salary/elog/entity/dto/TableColumnBean.java b/src/com/engine/salary/elog/entity/dto/TableColumnBean.java deleted file mode 100644 index a6fdf6148..000000000 --- a/src/com/engine/salary/elog/entity/dto/TableColumnBean.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.engine.salary.elog.entity.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; - -/** - * @ClassName: TableColumnBean - * @Description 表字段类 - * @Author tanghj - * @Date 2021/3/12 11:44 - */ -@ApiModel("表字段类") -public class TableColumnBean { - - @ApiModelProperty("列名") - private String columnName; - - /** - * varchar(20) - */ - @ApiModelProperty("数据类型") - private String columnType; - - @ApiModelProperty("字段类型-字符串") - private String dataTypeStr; - - @ApiModelProperty("字段类型") - private DataTypeEnum dataType; - - @ApiModelProperty("长度") - private long fieldLength; - - @ApiModelProperty("是否为空") - private boolean isNullable; - - @ApiModelProperty("是否为空-字符串") - private String isNullableStr; - - @ApiModelProperty("默认值") - private Object columnDefault; - - @ApiModelProperty("备注") - private String columnComment; - - public String getColumnName() { - return columnName; - } - - public void setColumnName(String columnName) { - this.columnName = columnName; - } - - public String getColumnType() { - return columnType; - } - - public void setColumnType(String columnType) { - this.columnType = columnType; - } - - public DataTypeEnum getDataType() { - return dataType; - } - - public void setDataType(DataTypeEnum dataType) { - this.dataType = dataType; - } - - public long getFieldLength() { - return fieldLength; - } - - public void setFieldLength(long fieldLength) { - this.fieldLength = fieldLength; - } - - public boolean isNullable() { - return isNullable; - } - - public void setNullable(boolean nullable) { - isNullable = nullable; - } - - public Object getColumnDefault() { - return columnDefault; - } - - public void setColumnDefault(Object columnDefault) { - this.columnDefault = columnDefault; - } - - public String getColumnComment() { - return columnComment; - } - - public void setColumnComment(String columnComment) { - this.columnComment = columnComment; - } - - public String getDataTypeStr() { - return dataTypeStr; - } - - public void setDataTypeStr(String dataTypeStr) { - this.dataTypeStr = dataTypeStr; - } - - public String getIsNullableStr() { - return isNullableStr; - } - - public void setIsNullableStr(String isNullableStr) { - this.isNullableStr = isNullableStr; - } - - public boolean equals(TableColumnBean tableColumnBean) { - - return this.toSql().equals(tableColumnBean.toSql()); - } - - public String toSql() { - - StringBuilder sb = new StringBuilder(this.columnName.toLowerCase()).append(" "); - - if (this.dataType == null) { - return "类型为空"; - } - switch (this.dataType) { - case BIGINT: - case INT: - case TEXT: - case LONGTEXT: - case DATETIME: - case FLOAT: - case TINYINT: - case DOUBLE: - sb.append(this.dataType.name().toLowerCase()).append(" "); - break; - case VARCHAR: - sb.append(this.dataType.name().toLowerCase()).append("(").append(this.fieldLength).append(") "); - break; - case DECIMAL: - long length = (this.fieldLength < 0 || this.fieldLength > 38) ? 0 : this.fieldLength; - sb.append(this.dataType.name().toLowerCase()).append("(").append(38 - length).append(",").append(length).append(") "); - break; - default: - sb.append("varchar").append("(").append(10).append(") "); - } - - sb.append("comment ").append("'").append(this.columnComment).append("' "); - - return sb.toString(); - } -} diff --git a/src/com/engine/salary/elog/entity/param/ELogGetLogParam.java b/src/com/engine/salary/elog/entity/param/ELogGetLogParam.java deleted file mode 100644 index 77132c908..000000000 --- a/src/com/engine/salary/elog/entity/param/ELogGetLogParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.engine.salary.elog.entity.param; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class ELogGetLogParam { - /** - * 服务(模块)名 - */ - String module; - /** - * 方法名 - */ - String function; - /** - * 查询条件 - */ - String condition; - /** - * 每页多少数据 - */ - String pageSize; - /** - * ' - * 当前页 - */ - String current; - -} diff --git a/src/com/engine/salary/elog/entity/param/GetDetailChangesParam.java b/src/com/engine/salary/elog/entity/param/GetDetailChangesParam.java deleted file mode 100644 index aec15823d..000000000 --- a/src/com/engine/salary/elog/entity/param/GetDetailChangesParam.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.engine.salary.elog.entity.param; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class GetDetailChangesParam { - /** - * 服务(模块)名 - */ - String module; - /** - * 方法名 - */ - String function; - /** - * 主键id - */ - String mainid; - /** - * 转换方法 - */ - String detailTransMethod; -} diff --git a/src/com/engine/salary/elog/enums/ElogConsts.java b/src/com/engine/salary/elog/enums/ElogConsts.java deleted file mode 100644 index a895b95b8..000000000 --- a/src/com/engine/salary/elog/enums/ElogConsts.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.engine.salary.elog.enums; - -/** - * @date: 2022/3/30 20:32 - * @author: deli.xu - * @description: 日志常量 - */ -public class ElogConsts { - - public static final String ORACLE = "oracle"; - public static final String SQLSERVER = "sqlserver"; - public static final String MYSQL = "mysql"; - public static final String POSTGRESQL = "postgresql"; - - public static final String BASE_TABLE = "BASE_ELOG_TABLE"; - - public static final String TABLE_SPACER = "_"; - public static final String TABLE_SUFFIX = "logs"; - public static final String DETAIL_TABLE_SUFFIX = "_detail"; - - public static final String ES = "ES"; -} diff --git a/src/com/engine/salary/elog/enums/FromTerminalType.java b/src/com/engine/salary/elog/enums/FromTerminalType.java deleted file mode 100644 index d637bb0f9..000000000 --- a/src/com/engine/salary/elog/enums/FromTerminalType.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.engine.salary.elog.enums; - -/** - * @ClassName: FromTerminalType - * @Description TODO - * @Author tanghj - * @Date 2021/6/8 11:35 - */ -public enum FromTerminalType { - PC("pc","来自 pc web"), - ANDROID("android","来自 安卓"), - IOS("ios","来自 iphone"), - IPHONE("iphone","来自 iphone"), - PC_CLIENT("pc_client","来自 windows客户端"), - MAC_CLIENT("mac_client","来自 mac客户端"), - H5("H5","来自 手机H5"), - MOBILEWEB("mobileWeb","来自 手机H5"), - MICO_MSG("mico_msg","来自 微信"), - WECHAT("wechat","来自 企业微信"), - APP_H5("app_h5","来自 app_h5"), - BROWSER("browser", "来自 网页"), - MOBILE("mobile","来自 移动端"); - - private String code; - private String face; - - FromTerminalType(String code, String face) { - this.code = code; - this.face = face; - } - - public String getCode() { - return code; - } - - public String getFace() { - return face; - } - - public static FromTerminalType fromString(String name) { - try { - FromTerminalType type = FromTerminalType.valueOf(name); - return type; - } catch (Exception e) { - return null; - } - } -} diff --git a/src/com/engine/salary/elog/enums/LinkType.java b/src/com/engine/salary/elog/enums/LinkType.java deleted file mode 100644 index ff78362f0..000000000 --- a/src/com/engine/salary/elog/enums/LinkType.java +++ /dev/null @@ -1,173 +0,0 @@ -package com.engine.salary.elog.enums; - -/** - * @date: 2022/5/13 21:13 - * @author: deli.xu - * @description: 链接类型 用之前老eteams-base-bean - */ - -/** - * 链接类型 - * - * @author gk - */ -public enum LinkType { - - // 主线 - mainline("项目"), - - blog("工作日报"), - - workreport("计划报告"), - - clue("线索"), - - crmcontact("联系人-用于全局搜索"), - - marketactivity("活动"), - - crmSummary("报表"), - - statisticalReport("统计报表"), - - attend("出勤"), - - singalForm("表单应用"), - - biaoge("表格"), - - // 标签 - tag("标签"), - - // 表单标签 - formtag("表单标签"), - - // 附件 - attachment("附件"), - - // 用户 - user("用户"), - - // 任务 - task("任务"), - - // 子任务 - subtask("子任务"), - - // 文档 - document("文档"), - - // 文件夹 - folder("文件夹"), - - // 客户 - customer("客户"), - - // 联系人 - contact("联系人"), - - // 销售商机 - saleChance("销售商机"), - - // 产品 - production("产品"), - - // 合同 - contract("合同"), - - // 竞争对手 - competitor("竞争对手"), - - // 公告 - placard("公告"), - - // 审批 - workflow("审批"), - - // 部门 - department("部门"), - - // 岗位 - position("岗位"), - - // 日程 - calendar("日程"), - - // 群组 - group("群组"), - - // 合同 - hrcontract("人事合同"), - - //人事管理 - hr("人事"), - - //KPI - kpi("绩效考核"),kpiFlow("绩效考核流程"), - - // 全部 - all("所有人"), - - formdatareport("数据上报"), - - form("表单"), - - userSetting("不可见成员"), - - sms("短信"), - - wechatEnterprise("企业微信"), - - wechatService("微信服务号"), - - salarybill("工资单"), - - staffPosition("员工位置")/*定制化模块*/, - - app("应用")/*自定义应用*/, - - email("邮件"), - - workTrends("工作动态"), - - tenantLogo("个性化定制"), - - module("模块"), - - orderform("订单"), - - price("价格"), - - capital("资金"), - - quote("报价"), - - room("会议室管理"), - - //模板任务 - mtTask("模板任务"), - - watchMe("关注我的"), - // crm - crm("CRM"), - - // 空 - blank(""), - - role("角色"), - - externalUser("外部联系人"), - - subcompany("分部"); - - private String displayName; - - LinkType(String displayName) { - this.displayName = displayName; - } - - public String getDisplayName() { - return displayName; - } - -} diff --git a/src/com/engine/salary/elog/enums/OperateAuditType.java b/src/com/engine/salary/elog/enums/OperateAuditType.java deleted file mode 100644 index 5d3850c38..000000000 --- a/src/com/engine/salary/elog/enums/OperateAuditType.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.engine.salary.elog.enums; - -public class OperateAuditType { - //自动 - public static final String AUTO = "AUTO"; - //信息 - public static final String INFO = "INFO"; - //错误 - public static final String ERROR = "ERROR"; - //警告 - public static final String WARNING = "WARNING"; - //重大事件 - public static final String EVENT = "EVENT"; -} \ No newline at end of file diff --git a/src/com/engine/salary/elog/service/ILocalElogService.java b/src/com/engine/salary/elog/service/ILocalElogService.java deleted file mode 100644 index af12b54c8..000000000 --- a/src/com/engine/salary/elog/service/ILocalElogService.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.engine.salary.elog.service; - -import com.engine.salary.elog.entity.dto.LoggerContext; -import com.engine.salary.elog.entity.dto.LoggerDetailContext; - -public interface ILocalElogService { - - int insertLocalElog(LoggerContext context); - - int insertElogDetail(LoggerDetailContext loggerDetailContext, String mainId, String detailTableName); - -// void rollBackElog(LoggerContext context); -} diff --git a/src/com/engine/salary/elog/service/ILoggerTableService.java b/src/com/engine/salary/elog/service/ILoggerTableService.java deleted file mode 100644 index 8657f0ea6..000000000 --- a/src/com/engine/salary/elog/service/ILoggerTableService.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.engine.salary.elog.service; - -import com.cloudstore.eccom.pc.table.WeaTable; -import com.engine.salary.elog.entity.param.ELogGetLogParam; -import com.engine.salary.elog.entity.param.GetDetailChangesParam; -import com.engine.salary.util.page.PageInfo; - -import javax.servlet.http.HttpServletRequest; -import java.util.List; -import java.util.Map; - -public interface ILoggerTableService { - PageInfo queryLogs(String data); - - WeaTable queryLogsPapi(String data, HttpServletRequest request); - - List getDetailChanges(GetDetailChangesParam param); - - List getDetailChangesPapi(String module, String function, String mainid, String transMethod, HttpServletRequest request); - - List queryLogList(ELogGetLogParam param); - - List queryCardLogList(String data); - - Map countLog(String module, String function); - - List queryDetailLogList(String module, String function, String current, String pageSize, String condition, String mainId); - - Map countDestailLog(String module, String function, String mainId); - - WeaTable queryElogTraceInfo(String traceId, String module, String function, Integer currentPage, Integer pageSize,String traceTransMethod); - - List queryLogInfoByCustom(String module, String function, String field, String value, boolean isDetail); - - List queryLogInfoByCustom(String module, String function, String field, String value); - -// BatchDocumentMessage downloadLog(String data); - - WeaTable getDetailChangePages(String module, String function, String mainid, String detailTransMethod, String current, String pageSize); - -} diff --git a/src/com/engine/salary/elog/service/impl/LocalElogService.java b/src/com/engine/salary/elog/service/impl/LocalElogService.java deleted file mode 100644 index 404bea1db..000000000 --- a/src/com/engine/salary/elog/service/impl/LocalElogService.java +++ /dev/null @@ -1,435 +0,0 @@ -package com.engine.salary.elog.service.impl; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.engine.salary.elog.entity.dto.LoggerContext; -import com.engine.salary.elog.entity.dto.LoggerDetailContext; -import com.engine.salary.elog.enums.ElogConsts; -import com.engine.salary.elog.service.ILocalElogService; -import com.engine.salary.elog.util.ElogUtils; -import com.engine.salary.mapper.elog.LocalElogAopDaoMapper; -import com.engine.salary.util.db.IdGenerator; -import com.engine.salary.util.db.MapperProxyFactory; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.util.CollectionUtils; -import weaver.conn.RecordSet; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.*; - -/** - * @ClassName: LocalElogService - * @Description 日志本地持久化 - * @Author tanghj - * @Date 2021/2/24 11:03 - */ -public class LocalElogService implements ILocalElogService { - - private static final Logger logger = LoggerFactory.getLogger(LocalElogService.class); - - private LocalElogAopDaoMapper getLocalElogAopDaoMapper() { - return MapperProxyFactory.getProxy(LocalElogAopDaoMapper.class); - } - -// private RestHighLevelClient client; -// -// private LazyRollBack lazyRollBack; - - //数据库类型 - private static final String databaseId = new RecordSet().getDBType(); - - /** - * @param context - * @param - * @return - */ - @Override - public int insertLocalElog(LoggerContext context) { -// logger.error("接收到的数据,context:{}",JSONObject.toJSONString(context)); -// logger.info("接收到数据的时间:log_date:{}",context.getDate()); - if (StringUtils.isEmpty(context.getUuid())) { - context.setUuid(UUID.randomUUID().toString().replace("-", "")); - } - - String cusColumns = ""; - String cusValus = ""; - if (context.getCustomInfo() != null) { - JSONObject custom = JSONObject.parseObject(JSON.toJSONString(context.getCustomInfo())); - List clobFieldList = context.getClobFieldList(); - for (String key : (Set) custom.keySet()) { - cusColumns = cusColumns + ", " + key; - String keystr = custom.getString(key); - //如果keystr包含单引号,将单引号去掉 - if (StringUtils.isNotEmpty(keystr) && keystr.contains("'")) { - keystr = keystr.replace("'", "''"); - } - //如果是Oracle数据库 - if (ElogConsts.ORACLE.equals(databaseId)) { - //clob字段集合不为空且包含此字段 - if (!CollectionUtils.isEmpty(clobFieldList) && clobFieldList.contains(key)) { - String clobColumnStr = ElogUtils.handleClobColumn(keystr); - cusValus = cusValus + ",TO_CLOB( " + clobColumnStr + " )"; - } else if (checkStrIsDate(keystr)) { - //并且字符串为时间类型格式 则进行特殊处理 - cusValus = cusValus + ",TO_DATE('" + keystr + "', 'SYYYY-MM-DD HH24:MI:SS')"; - } else { - cusValus = cusValus + ",'" + keystr + "'"; - } - } else { - cusValus = cusValus + ",'" + keystr + "'"; - } - } - - } - - normalizationContext(context); - - String tableName = context.getModuleName() + "_" + context.getFunctionName() + "logs"; - //context.setId(IdGenerator.generate()); - Integer id = getLocalElogAopDaoMapper().queryElogContextById(context.getId(), tableName); - if (id != null) { - return 1; - } -// logger.info("插入前的数据:context:{}",JSONObject.toJSONString(context)); - int count = getLocalElogAopDaoMapper().insertElogContext(context, cusColumns, cusValus, tableName); - if (context.getDetailContexts() != null) { - String detailTableName = context.getModuleName() + "_" + context.getFunctionName() + "logs_detail"; - insertBatchDetailPrepared(detailTableName, context); - - } - return count; - } - - /** - * 预编译 - * - * @param detailTableName - * @param context - */ - private void insertBatchDetailPrepared(String detailTableName, LoggerContext context) { - // 用mapper - //分两种 有无自定义字段 - List detailContexts = context.getDetailContexts(); - Boolean hasCustonInfo = false; - String cusColumns = ""; - if (Objects.nonNull(detailContexts.get(0).getCustomDetailInfo())) { - hasCustonInfo = true; - //有自定义明细字段 - JSONObject custom = JSONObject.parseObject(JSON.toJSONString(detailContexts.get(0).getCustomDetailInfo())); - for (String key : (Set) custom.keySet()) { - cusColumns = cusColumns + ", " + key; - } - - } - for (LoggerDetailContext detailContext : detailContexts) { - if (StringUtils.isNotEmpty(detailContext.getNewValue())) { - String str = detailContext.getNewValue().replaceAll("[\\x{1F600}-\\x{1F64F}\\x{1F300}-\\x{1F5FF}]", ""); - detailContext.setNewValue(str); - } - if (StringUtils.isNotEmpty(detailContext.getOldValue())) { - String str = detailContext.getOldValue().replaceAll("[\\x{1F600}-\\x{1F64F}\\x{1F300}-\\x{1F5FF}]", ""); - detailContext.setOldValue(str); - } - if (StringUtils.isNotEmpty(detailContext.getNewRealValue())) { - String str = detailContext.getNewRealValue().replaceAll("[\\x{1F600}-\\x{1F64F}\\x{1F300}-\\x{1F5FF}]", ""); - detailContext.setNewRealValue(str); - } - if (StringUtils.isNotEmpty(detailContext.getOldRealValue())) { - String str = detailContext.getOldRealValue().replaceAll("[\\x{1F600}-\\x{1F64F}\\x{1F300}-\\x{1F5FF}]", ""); - detailContext.setOldRealValue(str); - } - - - detailContext.setTenant_key(context.getTenant_key()); - detailContext.setCreate_time(new Date()); - detailContext.setUpdate_time(new Date()); - detailContext.setCreator(context.getLogOperator()); - detailContext.setId(IdGenerator.generate()); - if (hasCustonInfo) { - String cusValus = ""; - //如果有明细 - JSONObject custom = JSONObject.parseObject(JSON.toJSONString(detailContext.getCustomDetailInfo())); - for (String key : (Set) custom.keySet()) { - String keystr = custom.getString(key); - //如果keystr包含单引号,将单引号去掉 - if (StringUtils.isNotEmpty(keystr) && keystr.contains("'")) { - keystr = keystr.replace("'", "''"); - } - cusValus = cusValus + ",'" + keystr + "'"; - } - detailContext.setCusValus(cusValus); - } - } - - - if (hasCustonInfo) { - getLocalElogAopDaoMapper().insertElogDetailPreparedHasCustonInfo(detailTableName, detailContexts, context.getUuid(), cusColumns); - } else { - getLocalElogAopDaoMapper().insertElogDetailPrepared(detailTableName, detailContexts, context.getUuid()); - } - } - - - private void normalizationContext(LoggerContext context) { - String params = ""; - if (StringUtils.isNotEmpty(context.getParamsStr())) { - params = context.getParamsStr(); - } else if (context.getParams() != null) { - params = ElogUtils.compress(JSONObject.toJSONString(context.getParams())); - } - - context.setParamsStr(params); - if (StringUtils.isBlank(context.getCancelContextStr())) { - context.setCancelContextStr(context.getCancelContext() == null ? "" : JSONObject.toJSONString(context.getCancelContext())); - } - if (StringUtils.isBlank(context.getRedoContextStr())) { - context.setRedoContextStr(context.getRedoContext() == null ? "" : JSONObject.toJSONString(context.getRedoContext())); - } - - if (StringUtils.isEmpty(context.getOperatedesc())) { - context.setOperatedesc(""); - } else { - //todo 兼容emojo特殊字符 没有时间 先暴力替换 - String str = context.getOperatedesc().replaceAll("[\\x{1F600}-\\x{1F64F}\\x{1F300}-\\x{1F5FF}]", ""); - context.setOperatedesc(str); - } - - if (Objects.isNull(context.getDate())) { - context.setDate(new Date()); - } - - if (StringUtils.isEmpty(context.getOperator())) { - context.setLogOperator(-1l); - } else { - context.setLogOperator(Long.parseLong(context.getOperator())); - } - if (StringUtils.isEmpty(context.getTargetId())) { - context.setLogTargetid(-1l); - } else { - context.setLogTargetid(Long.parseLong(context.getTargetId())); - } - if (StringUtils.isEmpty(context.getClientIp())) { - context.setClientIp("127.0.0.1"); - } - if (Objects.isNull(context.getCreate_time())) { - context.setCreate_time(new Date()); - } - if (Objects.isNull(context.getUpdate_time())) { - context.setUpdate_time(new Date()); - } - if (Objects.isNull(context.getDelete_type())) { - context.setDelete_type(0); - } - } - - private void insertBatchDetailSql(String detailTableName, LoggerContext context) { - String standardField = "id, mainid, uuid, tablename, fieldname, newvalue, oldvalue, fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue, oldRealValue,tableNameDesc, tableNameLabelId,fieldNameLabelId, create_time, update_time"; - - Boolean hasCustonInfo = false; - StringBuilder sb = new StringBuilder(); - sb.append("INSERT INTO ").append(detailTableName).append("(").append(standardField); - //List collect = detailContexts.stream().filter(s -> Objects.nonNull(s.getCustomDetailInfo())).collect(Collectors.toList()); - List detailContexts = context.getDetailContexts(); - if (Objects.nonNull(detailContexts.get(0).getCustomDetailInfo())) { - hasCustonInfo = true; - //有自定义明细字段 - String cusColumns = ""; - JSONObject custom = JSONObject.parseObject(JSON.toJSONString(detailContexts.get(0).getCustomDetailInfo())); - for (String key : (Set) custom.keySet()) { - cusColumns = cusColumns + ", " + key; - } - sb.append(cusColumns); - } - sb.append(")"); - if ("oracle".equalsIgnoreCase(databaseId)) { - sb.append(" ").append(String.join(" UNION ALL ", getBatchInsertValue(context, hasCustonInfo, true))); - } else { - sb.append(" VALUES ").append(String.join(",", getBatchInsertValue(context, hasCustonInfo, false))); - } - - try { - getLocalElogAopDaoMapper().batchInsertDetail(sb.toString()); - } catch (Exception e) { - logger.error("明细批量添加sql是:{},批量插入明细失败,{}", sb.toString(), e.getMessage(), e); - } - - - } - - - private List getBatchInsertValue(LoggerContext context, boolean hasCustomInfo, boolean isOracle) { - - LocalDateTime localDateTime = LocalDateTime.now(); - String nowDate = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - - List detailContexts = context.getDetailContexts(); - List batchValue = new ArrayList<>(); - for (LoggerDetailContext detailContext : detailContexts) { - detailContext.setTenant_key(context.getTenant_key()); - detailContext.setCreator(context.getLogOperator()); - detailContext.setId(IdGenerator.generate()); - - StringBuilder sb = new StringBuilder(); - sb.append(isOracle ? " SELECT " : " ( "); - sb.append(detailContext.getId()) - .append(",'").append(context.getUuid()).append("'") - .append(",'").append(detailContext.getUuid()).append("'") - .append(",'").append(detailContext.getTableName()).append("'") - .append(",'").append(detailContext.getFieldName()).append("'") - .append(",'").append(transferString(detailContext.getNewValue())).append("'") - .append(",'").append(transferString(detailContext.getOldValue())).append("'") - .append(",'").append(detailContext.getFieldDesc()).append("'") - .append(",'").append(detailContext.getShoworder()).append("'") - .append(",'").append(detailContext.getDataid()).append("'") - .append(",'").append(detailContext.getBelongDataid()).append("'") - .append(",'").append(detailContext.getIsDetail()).append("'") - .append(",'").append(detailContext.getTenant_key()).append("'") - .append(",'").append(detailContext.getCreator()).append("'") - .append(",'").append(transferString(detailContext.getNewRealValue())).append("'") - .append(",'").append(transferString(detailContext.getOldRealValue())).append("'") - .append(",'").append(detailContext.getTableNameDesc()).append("'") - .append(",'").append(detailContext.getTableNameLabelId()).append("'") - .append(",'").append(detailContext.getFieldNameLabelId()).append("'") - .append(",").append(handleValue(nowDate, databaseId)) - .append(",").append(handleValue(nowDate, databaseId)); - - if (hasCustomInfo) { - String cusValus = ""; - //如果有明细 - JSONObject custom = JSONObject.parseObject(JSON.toJSONString(detailContext.getCustomDetailInfo())); - for (String key : (Set) custom.keySet()) { - String keystr = custom.getString(key); - //如果keystr包含单引号,将单引号去掉 - if (StringUtils.isNotEmpty(keystr) && keystr.contains("'")) { - keystr = keystr.replace("'", "''"); - } - cusValus = cusValus + ",'" + keystr + "'"; - } - sb.append(cusValus); - } - String sql = isOracle ? sb.append(" from dual ").toString() : sb.append(")").toString(); - - batchValue.add(sql); - } - - return batchValue; - } - - private String transferString(String str) { - if (StringUtils.isNotEmpty(str)) { - str = str.replaceAll("#\\{", "\\\\\\\\#{"); - if (str.contains("'")) { - str = str.replace("'", "''"); - } - } - return str; - } - - - private String handleValue(String nowDate, String databaseId) { - switch (databaseId) { - case "mysql": - return "'" + nowDate + "'"; - case "oracle": - return "TO_DATE('" + nowDate + "','YYYY-MM-DD HH24:MI:SS')"; - case "sqlserver": - return "'" + nowDate + "'"; - case "postgresql": - return "'" + nowDate + "'"; - - } - return nowDate; - } - -// private void insertESElogCenter(LoggerContext context, String customInfo, String tableName) { -// //将数据转换为ES的数据格式 -// LogESDoc logESDoc = LogESDoc.context2Doc(context, customInfo, tableName); -// String json = JSON.toJSONString(logESDoc); -// String elogESTableName = ElogEsUtils.getElogESTableName(true, ElogEsUtils.getDateStr(context.getDate())); -// IndexRequest indexRequest = new IndexRequest(elogESTableName).id(logESDoc.getId().toString()); -// indexRequest.source(json, XContentType.JSON); -// -// try { -// client.index(indexRequest, RequestOptions.DEFAULT); -// } catch (IOException e) { -//// logger.info("主表数据添加失败:{}",e.getMessage()); -// } -// } - - - @Override - public int insertElogDetail(LoggerDetailContext loggerDetailContext, String mainId, String detailTableName) { - String cusColumns = ""; - String cusValus = ""; - if (loggerDetailContext.getCustomDetailInfo() != null) { - JSONObject custom = JSONObject.parseObject(JSON.toJSONString(loggerDetailContext.getCustomDetailInfo())); - - for (String key : (Set) custom.keySet()) { - cusColumns = cusColumns + ", " + key; - String keystr = custom.getString(key); - //如果keystr包含单引号,将单引号去掉 - if (StringUtils.isNotEmpty(keystr) && keystr.contains("'")) { - keystr = keystr.replace("'", "''"); - } - cusValus = cusValus + ",'" + keystr + "'"; - } - } - loggerDetailContext.setId(IdGenerator.generate()); - return getLocalElogAopDaoMapper().insertElogDetail(loggerDetailContext, mainId, cusColumns, cusValus, detailTableName); - - } - -// @Override -// public void rollBackElog(LoggerContext context) { -// //根据ID 判断数据是否存在 -// -// String tableName = getElogTableName(context.getModuleName(), context.getFunctionName()); -// Integer id = getLocalElogAopDaoMapper().queryElogContextById(context.getId(), tableName); -// //没查到就直接返回 -// if (id == null) { -// lazyRollBack.delayedRollBack(context); -// return; -// } -// getLocalElogAopDaoMapper().rollBackElogById(context.getId(), tableName); -// -//// if (context.getDetailContexts() != null) { -// String detailTableName = context.getModuleName() + "_" + context.getFunctionName() + "logs_detail"; -// //根据uuid回滚 -// getLocalElogAopDaoMapper().rollBackDetailElogByUUID(context.getUuid(), detailTableName); -//// } -// -// -// } - - /** - * 判断字符串是否为日期格式 - */ - public static Boolean checkStrIsDate(String str) { - if (StringUtils.isBlank(str)) { - return false; - } else { - try { - LocalDateTime.parse(str, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - return true; - } catch (Exception e) { - return false; - } - } - } - - private String getElogTableName(String moduleName, String functionName) { - -// List list = Arrays.asList("meetingTopic", "meetingService", "meetingDecision", "meetingSign", "meetingSignSet", "meetingMember", "meetingShare"); - -// if (list.contains(moduleName)) { -// return "meeting"+ "_" + functionName + "logs"; -// } - - return moduleName + "_" + functionName + "logs"; - - } - -} diff --git a/src/com/engine/salary/elog/service/impl/LoggerTableService.java b/src/com/engine/salary/elog/service/impl/LoggerTableService.java deleted file mode 100644 index a40f63488..000000000 --- a/src/com/engine/salary/elog/service/impl/LoggerTableService.java +++ /dev/null @@ -1,1454 +0,0 @@ -package com.engine.salary.elog.service.impl; - -import cn.hutool.core.date.DateUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.cloudstore.eccom.pc.table.WeaTable; -import com.cloudstore.eccom.pc.table.WeaTableColumn; -import com.engine.core.impl.Service; -import com.engine.salary.constant.SalaryDefaultTenantConstant; -import com.engine.salary.elog.annotation.OperateType; -import com.engine.salary.elog.entity.dto.ElogBean; -import com.engine.salary.elog.entity.dto.FilterConditionDto; -import com.engine.salary.elog.entity.dto.LoggerContext; -import com.engine.salary.elog.entity.dto.ShowColumsDto; -import com.engine.salary.elog.entity.param.ELogGetLogParam; -import com.engine.salary.elog.entity.param.GetDetailChangesParam; -import com.engine.salary.elog.enums.ElogConsts; -import com.engine.salary.elog.service.ILoggerTableService; -import com.engine.salary.elog.util.ElogServiceUtils; -import com.engine.salary.elog.util.ElogSeviceSwitchUtils; -import com.engine.salary.elog.util.ElogSeviceUtils; -import com.engine.salary.elog.util.FieldNameMap; -import com.engine.salary.mapper.elog.LocalElogDaoMapper; -import com.engine.salary.util.SalaryI18nUtil; -import com.engine.salary.util.db.MapperProxyFactory; -import com.engine.salary.util.page.Column; -import com.engine.salary.util.page.PageInfo; -import com.engine.salary.util.page.SalaryPageUtil; -import com.github.pagehelper.Page; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import weaver.conn.RecordSet; -import weaver.general.Util; - -import javax.servlet.http.HttpServletRequest; -import java.util.*; -import java.util.stream.Collectors; - -public class LoggerTableService extends Service implements ILoggerTableService { - - private static final Logger logger = LoggerFactory.getLogger(LoggerTableService.class); - - private LocalElogDaoMapper getLocalElogDaoMapper() { - return MapperProxyFactory.getProxy(LocalElogDaoMapper.class); - } - - // -// private ComInfoCache comInfoCache; -// -// -// private HrmCommonUtil hrmCommonUtil; -// -// -// private QueryCommonTabeMapper queryCommonTabeMapper; -// -// -// private RestHighLevelClient restHighLevelClient; -// -// @Resource -// private BatchExportSender batchExportSender; -// -// -// @Resource -// private DateRangeTransformer dateRangeTransformer; -// -// -// private HrmCommonEmployeeService hrmCommonEmployeeService; -// -// - private final String databaseId = new RecordSet().getDBType(); - - @Override - public PageInfo queryLogs(String data) { - //解析数据 - ElogBean elogBean = ElogServiceUtils.getElogBean(data); - // columIndex统一转为小写 - Optional.ofNullable(elogBean.getShowColumns()) - .ifPresent(list -> { - list.forEach(x -> { - if (StringUtils.isNotBlank(x.getColumIndex())) { - x.setColumIndex(x.getColumIndex().toLowerCase()); - } - }); - }); - - List showColums = elogBean.getShowColumns(); - String module = elogBean.getModule(); - String function = elogBean.getFunction(); - String searchMap = elogBean.getSearchMap(); - String pageSize = elogBean.getPageSize(); - String pageNum = elogBean.getCurrent(); - String downloadSize = elogBean.getDownloadSize(); - List filterConditionDtos = elogBean.getFilterConditionDtos(); - String transMethod = elogBean.getTransMethod(); - Map authParamsJson = elogBean.getAuthParamsJson(); - - //获取 context 数据 - LoggerContext context = new LoggerContext(); - context.setModuleName(module); - context.setFunctionName(function); - context.setTenant_key(getTenantKey()); -// context.setOperator(getEmployeeId()); - //获取主表 - String tableName = ElogSeviceUtils.getTableName(module, function); - //获取weaTable - List columns = getWeaColumns(data, showColums, module, function); - //获取条件sql - String searchMapsql = getSearchMapSql(searchMap, module, function, elogBean.getShowColumns()); - String sb = getQueryCondition(filterConditionDtos); - sb = searchMapsql.concat(sb); - String customSql = getCustomSql(transMethod, sb, "before"); - - // 分页 - Page page = null; - if (StringUtils.isEmpty(downloadSize)) { - page = new Page(ElogSeviceUtils.getIntValue(pageNum, 1), ElogSeviceUtils.getIntValue(pageSize, 10)); - } else { - int pagesize = ElogSeviceUtils.getIntValue(downloadSize, 5000); - page = new Page(1, pagesize); - } - - List list = getLocalElogDaoMapper().queryElogList(page, context, null, tableName, customSql, "*"); - Map countMap = getLocalElogDaoMapper().elogCount(context, tableName, customSql); - - if ("st".equals(databaseId)) { - //st数据库 date类型特殊处理 - list.forEach(map -> { - map.forEach((k, v) -> { - if (v instanceof Date) { - map.put(k, DateUtil.format((Date) v, "yyyy-MM-dd HH:mm:ss")); - } - }); - }); - - } - //处理转换其他数据库类型值 - list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list); - //处理用户信息Data - - // 大小写转换 - ElogSeviceSwitchUtils.changKey2Lower(list); - - // 存放结果集 - PageInfo pageInfo = SalaryPageUtil.buildPage(page.getPageNum(), page.getPageSize(), switchString(list)); - pageInfo.setTotal(ElogSeviceUtils.getLongValue(countMap.get("counts") + "", 0)); - pageInfo.setColumns(columns); - return pageInfo; - } - - @Override - public WeaTable queryLogsPapi(String data, HttpServletRequest request) { - return null; - } - - @Override - public List getDetailChangesPapi(String module, String function, String mainid, String transMethod, HttpServletRequest request) { - return null; - } - - - private String getshowColumsStr(List showColums) { - StringBuffer sb = new StringBuffer(); - sb.append("id,uuid,targetid,params,operatetype,link_id,link_type,"); - for (ShowColumsDto showColum : showColums) { - String columIndex = showColum.getColumIndex(); - if ("date".equalsIgnoreCase(columIndex) || "createdate".equalsIgnoreCase(columIndex)) { - columIndex = "log_date"; - } else if ("operator".equalsIgnoreCase(columIndex)) { - columIndex = "log_operator"; - } else if ("modulenamespan".equalsIgnoreCase(columIndex)) { - columIndex = "modulename"; - } else if ("functionnameespan".equalsIgnoreCase(columIndex)) { - columIndex = "functionname"; - } else if ("avatar".equals(columIndex)) { - continue; - } - sb.append(columIndex).append(","); - } - String substring = sb.toString().substring(0, sb.toString().length() - 1); - return substring; - } - -// private PermissionParams getPermissionParams(Map hashMap) { -// PermissionParams permissionParams = new PermissionParams(); -// String permissionId = getPermissionStr(hashMap, "permissionId"); -// String permissionType = getPermissionStr(hashMap, "permissionType"); -// String mainDataTableAlias = getPermissionStr(hashMap, "mainDataTableAlias"); -// String mainDataTable = getPermissionStr(hashMap, "mainDataTable"); -// String primaryKey = getPermissionStr(hashMap, "primaryKey"); -// String permissionTargetId = getPermissionStr(hashMap, "permissionTargetId"); -// String permissionConfigSourceId = getPermissionStr(hashMap, "permissionConfigSourceId"); -// -// permissionParams.setPermissionId(permissionId); -// permissionParams.setPermissionType(permissionType); -// permissionParams.setMainDataTableAlias(mainDataTableAlias); -// permissionParams.setMainDataTable(mainDataTable); -// permissionParams.setPrimaryKey(primaryKey); -// permissionParams.setPermissionTargetId(permissionTargetId); -// permissionParams.setPermissionConfigSourceId(permissionConfigSourceId); -// -// return permissionParams; -// -// } - - private List getWeaColumns(String data, List showColums, String module, String function) { - List columns = new ArrayList<>(); - if (showColums != null && showColums.size() > 0) { - for (ShowColumsDto showColum : showColums) { - if (StringUtils.isNotBlank(showColum.getAliasColumName())) { - columns.add(new Column(showColum.getAliasColumName(), showColum.getColumIndex(), showColum.getColumIndex())); - } else if (StringUtils.isNotBlank(showColum.getColumName())) { - columns.add(new Column(FieldNameMap.getMainFieldNameMap(data, function, showColum.getColumName()), showColum.getColumIndex(), showColum.getColumIndex())); - } - } - } else { - columns.add(new Column(FieldNameMap.getMainFieldNameMap(module, function, "moduleName"), "modulenamespan", "modulenamespan")); - columns.add(new Column(FieldNameMap.getMainFieldNameMap(module, function, "functionName"), "functionnamespan", "functionnamespan")); - columns.add(new Column(FieldNameMap.getMainFieldNameMap(module, function, "clientIp"), "clientip", "clientip")); - columns.add(new Column(FieldNameMap.getMainFieldNameMap(module, function, "operateTypeName"), "operatetypename", "operatetypename")); - columns.add(new Column(FieldNameMap.getMainFieldNameMap(module, function, "targetName"), "targetname", "targetname")); - columns.add(new Column(FieldNameMap.getMainFieldNameMap(module, function, "date"), "createdate", "createdate")); - columns.add(new Column(FieldNameMap.getMainFieldNameMap(module, function, "operatorName"), "operatorname", "operatorname")); - } - return columns; - } - - private String getTargetid(List filterConditionDtos) { - if (!filterConditionDtos.isEmpty()) { - for (FilterConditionDto filterConditionDto : filterConditionDtos) { - if ("targetid".equalsIgnoreCase(filterConditionDto.getColumIndex())) { - return filterConditionDto.getValue(); - } - } - } - return ""; - } - - private String getPermissionStr(Map hashMap, String str) { - if (hashMap != null && hashMap.size() > 0) { - Object obj = hashMap.get(str); - if (obj != null) { - return obj.toString(); - } - } - return ""; - } - -// private Map getCustomAuthSql(String transMethod, Map params, String prefix) { -// MethodHandler beforeMethodHandler = ElogMethodHandler.loadMethodHandler(prefix + transMethod); -// Map hashMap = new HashMap<>(); -// if (beforeMethodHandler != null) { -// try { -// hashMap.put("flag", true); -// hashMap.put("msg", ""); -// hashMap.putAll(params); -// Object execute = beforeMethodHandler.execute(hashMap); -// if (execute != null && execute instanceof Map) { -// Map map = (Map) execute; -// return map; -// } -// } catch (Exception e) { -// logger.error("转换出错:" + e); -// throw new RuntimeException(e.getMessage()); -// } -// } -// return hashMap; -// } - - - private String getCustomSql(String transMethod, String sql, String prefix) { -// MethodHandler beforeMethodHandler = ElogMethodHandler.loadMethodHandler(prefix + transMethod); -// boolean flag = false; -// if (beforeMethodHandler != null) { -// try { -// String subSql = ""; -// if (sql.length() > 5) { -// flag = true; -// subSql = sql.substring(5, sql.length()); -// } -// Object execute = beforeMethodHandler.execute(subSql); -// if (execute != null) { -// if (execute instanceof String) { -// StringBuffer sb = null; -// if(execute.toString().length()==0){ -// sb = new StringBuffer(); -// } else if (flag || execute.toString().length() > 0) { -// sb = new StringBuffer(" and "); -// } else { -// sb = new StringBuffer(); -// } -// -// sb.append(execute.toString()); -// return sb.toString(); -// } -// } -// } catch (Exception e) { -// logger.error("转换出错:" + e); -// throw new RuntimeException(e.getMessage()); -// } -// } - return sql; - } - - private void transUserInfo(List list) { -// List operators = new ArrayList<>(); -// if (list != null && list.size() > 0) { -// for (Map map : list) { -// //避免暴露内网地址 -// map.remove("requesturl"); -// -// Object operator = map.get("operator"); -// if (operator != null && StringUtils.isNotBlank(operator.toString())) { -// operators.add(ElogSeviceUtils.getLongValue(operator.toString())); -// } -// } -// } -// List cacheList = comInfoCache.getCacheList(HrmEmployeeComInfo.class, operators); -// Map infoHashMap = new HashMap<>(); -// if (cacheList != null && cacheList.size() > 0) { -// for (HrmEmployeeComInfo hrmEmployeeComInfo : cacheList) { -// HrmAvatarComInfo hrmAvatarComInfo = (HrmAvatarComInfo) comInfoCache.getCacheById(HrmAvatarComInfo.class, hrmEmployeeComInfo.getAvatar()); -// ElogHrmSimpleEmployeeInfo info = new ElogHrmSimpleEmployeeInfo(); -// if (hrmAvatarComInfo != null) { -// info.setAvatarP3Id(hrmAvatarComInfo.getP3()); -// } -// info.setId(hrmEmployeeComInfo.getId()); -// info.setUserName(hrmEmployeeComInfo.getUsername()); -// infoHashMap.put(hrmEmployeeComInfo.getId(), info); -// } -// } -// if (list != null && list.size() > 0) { -// for (Map map : list) { -// Object operator = map.get("operator"); -// if (map.get("params") != null && map.get("params").toString().startsWith("H4s")) { -// map.put("params", ElogSeviceUtils.uncompress(map.get("params").toString())); -// } -// map.put("dboperatorname", Util.null2String(map.get("operatorname"))); -// if (operator != null && StringUtils.isNotBlank(operator.toString())) { -// Map i18nOperatorMap = new HashMap<>(); -// ElogHrmSimpleEmployeeInfo hrmEmployeeComInfo = infoHashMap.get(Long.parseLong(operator.toString())); -// if (hrmEmployeeComInfo != null) { -// //获取最新的人员名称并进行多语言转换 -// i18nOperatorMap.put(Long.parseLong(operator.toString()), hrmEmployeeComInfo.getUserName()); -// Map parseI18nOperator = HrmI18nUtil.batchCovertEmployee(i18nOperatorMap, map.get("tenant_key").toString()); -// map.put("operatorname", parseI18nOperator.get(Long.parseLong(operator.toString()))); -// -//// if (StringUtils.isNotEmpty(hrmEmployeeComInfo.getUserName())) { -//// map.put("operatorname", hrmEmployeeComInfo.getUserName()); -//// } -// if (hrmEmployeeComInfo.getAvatarP3Id() != null) { -// map.put("avatar", hrmEmployeeComInfo.getAvatarP3Id()); -// } -// } -// } -// } -// } - } - - /** - * 获取宽度 - * - * @param showColum - * @return - */ - private String getColumnsWidth(ShowColumsDto showColum) { - if (StringUtils.isBlank(showColum.getWidth())) { - return "5%"; - } else { - return showColum.getWidth(); - } - } - - private String getTenantKey() { -// User currentUser = UserContext.getCurrentUser(); -// if (currentUser != null) { -// return currentUser.getTenantKey(); -// } else { -// String tenantKey = TenantRpcContext.getTenantKey(); -// if (StringUtils.isNotBlank(tenantKey)) { -// return tenantKey; -// } -// } - return SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY; - } - -// private String getEmployeeId() { -// -// User currentUser = UserContext.getCurrentUser(); -// if (currentUser != null && !currentUser.isAdmin()) { -// String employeeId = TenantRpcContext.getEmployeeId(); -// return StringUtils.isNotBlank(employeeId) ? employeeId : ""; -// } -// return ""; -// } -// -// private String getUserId() { -// User currentUser = UserContext.getCurrentUser(); -// if (currentUser != null) { -// return currentUser.getEmployeeId().toString(); -// } -// String employeeId = TenantRpcContext.getEmployeeId(); -// return StringUtils.isNotBlank(employeeId) ? employeeId : ""; -// } - - /** - * 拼接搜索条件 - * - * @param searchMap - * @param module - * @param function - * @return - */ - private String getSearchMapSql(String searchMap, String module, String function, List showColumns) { - StringBuffer sb = new StringBuffer(); - Map map = JSON.parseObject(searchMap); - if (map == null) return sb.toString(); - Iterator> iterators = map.entrySet().iterator(); - while (iterators.hasNext()) { - Map.Entry next = iterators.next(); - String key = next.getKey(); -// SecurityUtil.sqlCheck(key); - if ("date".equals(key) || "createdate".equals(key)) { - Object date = next.getValue(); - if (date != null) { - if (StringUtils.isNotBlank(date.toString())) { - List dates = (List) date; -// if (dates != null && dates.size() == 2) { -// Object startDate = dates.get(0); -// Object endDate = dates.get(1); -// startDate = ElogSeviceUtils.checkValSql(startDate.toString()); -// endDate = ElogSeviceUtils.checkValSql(endDate.toString()); -// if (StringUtils.isNotBlank(startDate.toString()) && StringUtils.isNotBlank(endDate.toString())) { -// startDate = startDate.toString().replaceAll("'", "''"); -// endDate = endDate.toString().replaceAll("'", "''"); -// String dateRangeAfter = dateRangeTransformer.getDateRangeAfter(startDate.toString()); -// String dateRangeBefore = dateRangeTransformer.getDateRangeBefore(endDate.toString()); -// sb.append(" and log_date ").append(" between ").append(getSwithDatabaseDate(dateRangeAfter)).append(" and ").append(getSwithDatabaseDate(dateRangeBefore)).append(" "); -// } else if (StringUtils.isNotBlank(startDate.toString())) { -// String dateRangeAfter = dateRangeTransformer.getDateRangeAfter(startDate.toString()); -// sb.append(" and log_date ").append(" >= ").append(getSwithDatabaseDate(dateRangeAfter)).append(" "); -// } else if (StringUtils.isNotBlank(endDate.toString())) { -// String dateRangeBefore = dateRangeTransformer.getDateRangeBefore(endDate.toString()); -// sb.append(" and log_date ").append(" <= ").append(getSwithDatabaseDate(dateRangeBefore)).append(" "); -// } -// } - } - } - } else if ("operator".equals(next.getKey())) { - Object operator = next.getValue(); - if (operator != null) { - if (StringUtils.isNotBlank(operator.toString())) { - operator = ElogSeviceUtils.checkValSql(operator.toString()); - operator = operator.toString().replaceAll("'", "''"); - if (StringUtils.isNumeric(operator.toString()) && operator.toString().length() > 15) { - sb.append(" and log_operator = ").append(operator.toString()).append(" "); - } - -// else { -// List likeNameHrmEmployeeList = hrmCommonEmployeeService.queryEmpsByCondidtion( -// new HrmOrgEmpCondition().setNameLikeList(Arrays.asList(operator.toString())).setTenantKey(getTenantKey()), -// HrmConditionResultType.BEAN.name()); -// if (likeNameHrmEmployeeList != null && likeNameHrmEmployeeList.size() > 0) { -// List ids = likeNameHrmEmployeeList.stream().map(HrmEmployee::getId).collect(Collectors.toList()); -// if (ids != null && ids.size() > 0) { -// sb.append(" and ( operatorname like '%").append(operator.toString()).append("%' ") -// .append(" or log_operator in (").append(StringUtils.join(ids, ",")).append(")) "); -// } -// } else { -// sb.append(" and operatorname like '%").append(operator.toString()).append("%' "); -// } -// } - } - } - } else if ("modulename".equals(next.getKey())) { - Object moduleName = next.getValue(); - if (moduleName != null) { - moduleName = moduleName.toString().replaceAll("'", "''"); - if (StringUtils.isNotBlank(moduleName.toString())) { - moduleName = ElogSeviceUtils.checkValSql(moduleName.toString()); - //sb.append(" and modulename = '").append(moduleName.toString()).append("' "); - StringBuffer stringBuffer = new StringBuffer(); - if (isEnglish(moduleName.toString())) { - Map moduleMap = ElogSeviceSwitchUtils.moduleMap; - Iterator> iterator = moduleMap.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry nextObj = iterator.next(); - if (nextObj.getKey().contains(moduleName.toString())) { - stringBuffer.append("'").append(nextObj.getKey()).append("',"); - } - } - - } else { - Map moduleMap = ElogSeviceSwitchUtils.moduleMap; - Iterator> iterator = moduleMap.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry nextObj = iterator.next(); - String val = ElogSeviceSwitchUtils.getModuleName(nextObj.getValue() + ""); - if (val.contains(moduleName.toString())) { - stringBuffer.append("'").append(nextObj.getKey()).append("',"); - } - } - } - String str = ""; - if (stringBuffer.toString().length() > 0) { - str = stringBuffer.substring(0, stringBuffer.length() - 1); - String inVals = str.toString().replaceAll("''", "'"); - sb.append(" and modulename in (").append(inVals).append(") "); - } else { - sb.append(" and modulename = '").append(moduleName.toString()).append("' "); - } - } - } - } else if (databaseId.equalsIgnoreCase(ElogConsts.POSTGRESQL) && "targetid".equalsIgnoreCase(next.getKey())) { - //兼容PG环境int类型不支持模糊搜索的问题 - String value = next.getValue().toString().replaceAll("'", "''"); - value = ElogSeviceUtils.checkValSql(value.toString()); - if (value.startsWith("_")) { - value = value.replace("_", "\\_"); - } - //将类型转为varchar再进行查询 - sb.append(" and ").append("cast(").append(key).append(" as VARCHAR(255) )").append(" like '%").append(value).append("%' "); - } else { - - if (next.getValue() != null && StringUtils.isNotBlank(key) && StringUtils.isNotBlank(next.getValue().toString())) { - String value = next.getValue().toString().replaceAll("'", "''"); - value = ElogSeviceUtils.checkValSql(value.toString()); - StringBuilder stringBuffer = new StringBuilder(); -// if (isLikeSearch(showColumns, key)) { -// String logSearchSql = I18nUtil.getLogSearchSql(ElogSeviceUtils.getTableName(module, function), key, value); -// String sql = logSearchSql.replaceAll("%_", "%\\\\_"); -// try { -// List maps = queryCommonTabeMapper.queryLabelIds(sql); -// if (maps != null && maps.size() > 0) { -// for (Map map1 : maps) { -// Object indexid = map1.get(key); -// if (indexid == null || StringUtils.isEmpty(indexid.toString())) { -// indexid = map1.get(key.toLowerCase()); -// } -// if (indexid != null && StringUtils.isNotEmpty(indexid.toString())) { -// String val = indexid.toString().replace("'", "''"); -// if (ElogSeviceUtils.checkIsNumber(map.get(key))) { -// val = "-" + val; -// value = "-" + value; -// } -// stringBuffer.append("'").append(val).append("',"); -// } -// } -// } -// } catch (Exception e) { -// logger.error("i18查询sql报错:{}", e.getMessage(), e); -// } -// -// } - String str = ""; - if (stringBuffer.toString().length() > 0) { - str = stringBuffer.substring(0, stringBuffer.length() - 1); - if (value.startsWith("_")) { - value = value.replace("_", "\\_"); - } - sb.append(" and (").append(key).append(" like '%").append(value).append("%' "); - //String inVals = str.toString().replaceAll("''", "'"); - if (str.startsWith("_")) { - str = str.replace("_", "\\_"); - } - if ("operatetypename".equals(key)) { - String s = ElogSeviceUtils.checkValSql(next.getValue().toString()); - sb.append(matchOperatetype(s)); - } - sb.append(" or ").append(key).append(" in (").append(str).append(")) "); - } else { - if ("operatetypename".equals(key)) { - sb.append(" and (").append(key).append(" like '%").append(value).append("%' "); - String s = ElogSeviceUtils.checkValSql(next.getValue().toString()); - sb.append(matchOperatetype(s)).append(")"); - } else { - if (value.startsWith("_")) { - value = value.replace("_", "\\_"); - } - sb.append(" and ").append(key).append(" like '%").append(value).append("%' "); - } - } - - } - } - } - return sb.toString(); - } - -// /** -// * 是否模糊搜索 -// * -// * @param showColumns -// * @param key -// * @return -// */ -// private boolean isLikeSearch(List showColumns, String key) { -// for (ShowColumsDto showColumn : showColumns) { -// if (key.equalsIgnoreCase(showColumn.getColumIndex()) && showColumn.isTransfLanguage()) { -// return true; -// } -// } -// return false; -// } - -// private String getSwithDatabaseDate(String date) { -// if (ElogConsts.ORACLE.equals(DatabaseUtil.getDatabaseId())) { -// return " to_date('" + date + "','yyyy-mm-dd hh24:mi:ss') "; -// } else if (ElogConsts.POSTGRESQL.equals(DatabaseUtil.getDatabaseId())) { -// return " to_timestamp('" + date + "', 'YYYY-MM-DD HH24:MI:SS') "; -// } else if (ElogConsts.SQLSERVER.equals(DatabaseUtil.getDatabaseId())) { -// return " convert(nvarchar(19),'" + date + "',120) "; -// } else { -// return " DATE_FORMAT('" + date + "','%Y-%m-%d %H:%i:%s') "; -// } -// } - - public String matchOperatetype(String str) { -// if (ElogSeviceUtils.currentLanguage() != 8) { -// return ""; -// } - List list = new ArrayList(); - list.add(OperateType.add); - list.add(OperateType.update); - list.add(OperateType.view); - list.add(OperateType.delete); - - StringBuffer sb = new StringBuffer(); - for (String o : list) { - if (o.toLowerCase().contains(str.toLowerCase())) { - sb.append("'").append(o).append("',"); - } - } - if ("new".toLowerCase().contains(str.toLowerCase())) { - sb.append("'add',"); - } - String sql = ""; - if (sb.length() > 0) { - sql = sb.toString().substring(0, sb.length() - 1); - sql = "or operatetype in (" + sql + ")"; - } - - return sql; - - } - - - public static boolean isEnglish(String charaString) { - return charaString.matches("^[a-zA-Z]*"); - - } - - /** - * 获取搜索条件 - * - * @param filterConditionDtos - * @return - */ - private String getQueryCondition(List filterConditionDtos) { - StringBuffer sb = new StringBuffer(); - if (filterConditionDtos != null && filterConditionDtos.size() > 0) { - for (FilterConditionDto filterConditionDto : filterConditionDtos) { - if (StringUtils.isNotBlank(filterConditionDto.getColumIndex())) { - sb.append(getsql(filterConditionDto)); - } - } - } - return sb.toString(); - } - - /** - * 拼接sql - * - * @param filterConditionDto - * @return - */ - private String getsql(FilterConditionDto filterConditionDto) { - StringBuffer sb = new StringBuffer(); - filterConditionDto.setConnectCondition(ElogSeviceUtils.checkConditionSql(filterConditionDto.getConnectCondition())); - filterConditionDto.setType(ElogSeviceUtils.checkTypeSql(filterConditionDto.getType())); - filterConditionDto.setValue(ElogSeviceUtils.checkValSql(filterConditionDto.getValue())); - switchDatabaseFieldIndex(filterConditionDto); - if ("LIKE".equalsIgnoreCase(filterConditionDto.getType())) { - if (filterConditionDto.getLike() != null) { - sb.append(" "). - append(getConnectCondition(filterConditionDto.getConnectCondition())). - append(" "). - append(filterConditionDto.getColumIndex()). - append(" "). - append(getQueryType(filterConditionDto.getType())). - append(" '"). - append(filterConditionDto.getLike().getPrefix() != null ? filterConditionDto.getLike().getPrefix() : ""). - append(filterConditionDto.getValue()). - append(filterConditionDto.getLike().getSuffix() != null ? filterConditionDto.getLike().getSuffix() : ""). - append("' "); - } - } else if ("IN".equalsIgnoreCase(filterConditionDto.getType())) { - String[] split = filterConditionDto.getValue().split("\",\""); - if (split.length > 0) { - StringBuffer str = new StringBuffer("("); - String value = ""; - if ("targetid".equals(filterConditionDto.getColumIndex()) || "log_operator".equals(filterConditionDto.getColumIndex())) { - List list = JSONArray.parseArray(filterConditionDto.getValue(), String.class); - for (String s : list) { - str.append(s).append(","); - } - } else { - List list = JSONArray.parseArray(filterConditionDto.getValue(), String.class); - for (String s : list) { - str.append("'").append(s).append("',"); - } - } - - value = str.toString().substring(0, str.length() - 1); - value += ")"; - switchDatabaseFieldIndex(filterConditionDto); - sb.append(" "). - append(getConnectCondition(filterConditionDto.getConnectCondition())). - append(" "). - append(filterConditionDto.getColumIndex()). - append(" "). - append(getQueryType(filterConditionDto.getType())). - append(value). - append(" "); - - } else if (split.length == 0) { - sb.append(" "). - append(getConnectCondition(filterConditionDto.getConnectCondition())). - append(" "). - append(filterConditionDto.getColumIndex()). - append(" "). - append(getQueryType(filterConditionDto.getType())). - append(" ('"). - append(filterConditionDto.getValue()). - append("') "); - } - } else if ("IS NULL".equalsIgnoreCase(filterConditionDto.getType()) || "IS NOT NULL".equalsIgnoreCase(filterConditionDto.getType())) { - sb.append(" "). - append(getConnectCondition(filterConditionDto.getConnectCondition())). - append(" "). - append(filterConditionDto.getColumIndex()). - append(" "). - append(getQueryType(filterConditionDto.getType())). - append(" "); - } else if ("BETWEEN".equalsIgnoreCase(filterConditionDto.getType())) { - String[] split = filterConditionDto.getValue().split("\",\""); - StringBuffer stringBuffer = new StringBuffer(); - if (split.length > 0) { - List list = JSONArray.parseArray(filterConditionDto.getValue(), String.class); - String str = ""; - for (String s : list) { - stringBuffer.append(" '").append(s).append("' AND"); - } - str = stringBuffer.toString().substring(0, stringBuffer.length() - 3); - sb.append(" "). - append(getConnectCondition(filterConditionDto.getConnectCondition())). - append(" "). - append(filterConditionDto.getColumIndex()). - append(" "). - append(getQueryType(filterConditionDto.getType())). - append(str). - append(" "); - } else if (split.length == 0) { - sb.append(" "). - append(getConnectCondition(filterConditionDto.getConnectCondition())). - append(" "). - append(filterConditionDto.getColumIndex()). - append(" "). - append(getQueryType(filterConditionDto.getType())). - append(" '"). - append(filterConditionDto.getValue()). - append("' "); - } - } else { - if ("targetid".equals(filterConditionDto.getColumIndex()) || "log_operator".equals(filterConditionDto.getColumIndex())) { - if (StringUtils.isNotBlank(filterConditionDto.getValue())) { - sb.append(" "). - append(getConnectCondition(filterConditionDto.getConnectCondition())). - append(" "). - append(filterConditionDto.getColumIndex()). - append(" "). - append(getQueryType(filterConditionDto.getType())). - append(" "). - append(filterConditionDto.getValue()). - append(" "); - } else { - sb.append(" "). - append(getConnectCondition(filterConditionDto.getConnectCondition())). - append(" "). - append(filterConditionDto.getColumIndex()). - append(" "). - append(getQueryType(filterConditionDto.getType())). - append(" "). - append(-1). - append(" "); - } - } else { - sb.append(" "). - append(getConnectCondition(filterConditionDto.getConnectCondition())). - append(" "). - append(filterConditionDto.getColumIndex()). - append(" "). - append(getQueryType(filterConditionDto.getType())). - append(" '"). - append(filterConditionDto.getValue()). - append("' "); - } - - } - return sb.toString(); - } - - private void switchDatabaseFieldIndex(FilterConditionDto filterConditionDto) { - if ("operator".equalsIgnoreCase(filterConditionDto.getColumIndex())) { - filterConditionDto.setColumIndex("log_operator"); - } else if ("date".equalsIgnoreCase(filterConditionDto.getColumIndex())) { - filterConditionDto.setColumIndex("log_date"); - } else if ("result".equalsIgnoreCase(filterConditionDto.getColumIndex())) { - filterConditionDto.setColumIndex("log_result"); - } - } - - - /** - * 获取查询类型 - * - * @param type - * @return - */ - private String getQueryType(String type) { - //如果不填默认是= - if (StringUtils.isBlank(type)) { - return " = "; - } - return type; - } - - /** - * 获取连接条件 - * - * @param connectCondition - * @return - */ - private String getConnectCondition(String connectCondition) { - //如果不填默认是AND - if (StringUtils.isBlank(connectCondition)) { - return " AND "; - } - return connectCondition; - } - - @Override - public List> getDetailChanges(GetDetailChangesParam param) { - return getDetailChangesMethod(param.getModule(), param.getFunction(), param.getMainid(), param.getDetailTransMethod(), null); - } - - /** - * 明细分页查询 - * - * @param module - * @param function - * @param mainid - * @param detailTransMethod - * @param current - * @param pageSize - * @return - */ - @Override - public WeaTable getDetailChangePages(String module, String function, String mainid, String detailTransMethod, String current, String pageSize) { - - Integer pageNum = Util.getIntValue(current, 1); - Integer size = Util.getIntValue(pageSize, 10); - Page page = new Page(pageNum, size); - - List> list = getDetailChangesMethod(module, function, mainid, null, page); - - //查询分页总数 - String tableName = ElogSeviceUtils.getTableName(module, function, true); - Integer total = getLocalElogDaoMapper().queryAllChangesPageCounts(tableName, mainid); - WeaTable weaTable = new WeaTable(); - weaTable.setColumns(getDetailColumns(list)); - - - PageInfo pageInfo = SalaryPageUtil.buildPage(pageNum, size, list); - pageInfo.setTotal(total); - - return weaTable; - } - - private List getDetailColumns(List> list) { - - List columns = new ArrayList<>(); - if (CollectionUtils.isNotEmpty(list)) { - List detailcontexts = (List) list.get(0).get("detailcontexts"); - if (CollectionUtils.isNotEmpty(detailcontexts)) { - for (Map map : detailcontexts) { - WeaTableColumn weaTableColumn = new WeaTableColumn(); - // 列表属性名 - weaTableColumn.setColumn((String) map.get("fieldname")); - //显示名称 多语言转换 fieldnamelabelid - weaTableColumn.setText((String) map.get("fieldname")); - columns.add(weaTableColumn); - } - } - } - return columns; - } - - public List> getDetailChangesMethod(String module, String function, String mainid, String detailTransMethod, Page page) { - - List list = new ArrayList<>(); - String tableName = ElogSeviceUtils.getTableName(module, function, true); - String maintableName = ElogSeviceUtils.getTableName(module, function, false); - List maps = getLocalElogDaoMapper().queryAllMainData(maintableName, mainid); - - maps = ElogSeviceSwitchUtils.getSwitchDatabaseData(maps); - ElogSeviceSwitchUtils.changKey2Lower(maps); - List allChangesData = new ArrayList<>(); - //如果有分页数据则走分页方法 - if (Objects.nonNull(page)) { -// Integer offset = (pageNum - 1) * size; - //分页查询明细数据 - allChangesData = getLocalElogDaoMapper().queryAllChangesDataPages(tableName, mainid, page); - } else { - //没有被则不分页 - allChangesData = getLocalElogDaoMapper().queryAllChangesData(tableName, mainid); - } - ElogSeviceSwitchUtils.changKey2Lower(allChangesData); - allChangesData = ElogSeviceSwitchUtils.getSwitchDatabaseData(allChangesData); - List mainlist = new ArrayList<>(); - List detaillist = new ArrayList<>(); - if (allChangesData != null && allChangesData.size() > 0) { - for (Map allChangesDatum : allChangesData) { - Object o = allChangesDatum.get("isdetail"); - if (o != null) { - if ("0".equals(o.toString())) { - mainlist.add(allChangesDatum); - } else { - detaillist.add(allChangesDatum); - } - } - } - } -// List mainlist = getLocalElogDaoMapper().queryAllMainChanges(tableName, mainid); -// List detaillist = getLocalElogDaoMapper().queryAllDetailChanges(tableName, mainid); - //List moduleInfo = queryCommonTabeMapper.queryModuleNameInfo(module); - List moduleInfo = new ArrayList<>(); - processDetailInfo(mainlist, detaillist, moduleInfo); - Map map = ElogSeviceSwitchUtils.switchChangeValue(mainlist, maps); - Map detailMap = ElogSeviceSwitchUtils.switchDetailChangeValue(detaillist); - map.putAll(detailMap); - if (maps != null && maps.size() > 0) { - Map maininfoMap = maps.get(0); - String operatetypename = (String) maininfoMap.get("operatetypename"); - String targetname = (String) maininfoMap.get("targetname"); - //长度大于1避免部分模块为1,2,3这类的操作类型 - if (StringUtils.isNumeric(operatetypename) && operatetypename.length() > 1 && operatetypename.length() < 10) { - String transfOperatetypename = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(operatetypename), operatetypename); - maininfoMap.put("operatetypename", transfOperatetypename); - } - if (StringUtils.isNumeric(targetname) && targetname.length() > 1 && targetname.length() < 10) { - String transfTargetname = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(targetname), targetname); - maininfoMap.put("targetname", transfTargetname); - } - map.put("maininfo", maininfoMap); - - map.put("detailtitle", ""); - } - - list.add(map); - //List transfLanguageData = ElogSeviceSwitchUtils.transfLanguageData(list); - return list; - - } - - /** - * 处理修改详情转多语言(主表和明细表) - * - * @param mainlist - * @param detaillist - * @param commonTableInfo - * @return - */ - private void processDetailInfo(List mainlist, List detaillist, List commonTableInfo) { - Map tablenameMap = new HashMap<>(); - Map fieldnameMap = new HashMap<>(); - Map valueMap = new HashMap<>(); - - if (commonTableInfo != null && commonTableInfo.size() > 0) { - for (Map commonTableInfoMap : commonTableInfo) { - JSONObject commonTableInfoMapJs = JSONObject.parseObject(JSONObject.toJSONString(commonTableInfoMap)); - String tablename = commonTableInfoMapJs.getString("table_name"); - String tablename_labelid = commonTableInfoMapJs.getString("tablename_labelid"); - String fieldname = commonTableInfoMapJs.getString("field_name"); - String fieldname_labelid = commonTableInfoMapJs.getString("fieldname_labelid"); - String values_kvpairs = commonTableInfoMapJs.getString("values_kvpairs"); - fieldnameMap.put(fieldname, fieldname_labelid); - if (StringUtils.isNotBlank(fieldname) && StringUtils.isNotBlank(values_kvpairs)) { - JSONObject jsonObject = JSONObject.parseObject(values_kvpairs); - valueMap.put(fieldname, jsonObject); - } - Object tablenameObj = tablenameMap.get(tablename); - if (tablenameObj == null) { - tablenameMap.put(tablename, tablename_labelid); - } - } - } - - - if (mainlist != null && mainlist.size() > 0 && fieldnameMap.size() > 0 && valueMap.size() > 0) { - for (Map mainlistMap : mainlist) { - JSONObject mainMapJs = JSONObject.parseObject(JSONObject.toJSONString(mainlistMap)); - String fielddesc = mainMapJs.getString("fielddesc"); - String oldvalue = mainMapJs.getString("oldvalue"); - String newvalue = mainMapJs.getString("newvalue"); - if (fieldnameMap.get(fielddesc) != null) { - mainlistMap.put("fielddesc", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(fieldnameMap.get(fielddesc).toString()), fieldnameMap.get(fielddesc).toString())); - } - if (valueMap.get(fielddesc) != null) { - JSONObject jsonObject = JSONObject.parseObject(valueMap.get(fielddesc).toString()); - String oldvalueStr = jsonObject.getString(oldvalue); - String newvalueStr = jsonObject.getString(newvalue); - if (StringUtils.isNotBlank(oldvalueStr)) { - mainlistMap.put("oldvalue", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(oldvalueStr), oldvalue)); - } - if (StringUtils.isNotBlank(newvalueStr)) { - mainlistMap.put("newvalue", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(newvalueStr), newvalue)); - } - } - } - } - - if (detaillist != null && detaillist.size() > 0 && fieldnameMap.size() > 0 && valueMap.size() > 0) { - for (Map detaillistMap : detaillist) { - JSONObject mainMapJs = JSONObject.parseObject(JSONObject.toJSONString(detaillistMap)); - String tablename = mainMapJs.getString("tablename"); - String fielddesc = mainMapJs.getString("fielddesc"); - String oldvalue = mainMapJs.getString("oldvalue"); - String newvalue = mainMapJs.getString("newvalue"); - if (tablenameMap.get(tablename) != null) { - detaillistMap.put("tablename", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(tablenameMap.get(tablename).toString()), tablenameMap.get(tablename).toString())); - } - if (fieldnameMap.get(fielddesc) != null) { - detaillistMap.put("fielddesc", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(fieldnameMap.get(fielddesc).toString()), fieldnameMap.get(fielddesc).toString())); - } - if (valueMap.get(fielddesc) != null) { - JSONObject jsonObject = JSONObject.parseObject(valueMap.get(fielddesc).toString()); - String oldvalueStr = jsonObject.getString(oldvalue); - String newvalueStr = jsonObject.getString(newvalue); - if (StringUtils.isNotBlank(oldvalueStr)) { - detaillistMap.put("oldvalue", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(oldvalueStr), oldvalue)); - } - if (StringUtils.isNotBlank(newvalueStr)) { - detaillistMap.put("newvalue", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(newvalueStr), newvalue)); - } - } - } - } - - } - - @Override - public List queryLogList(ELogGetLogParam param) { - LoggerContext context = new LoggerContext(); - context.setModuleName(param.getModule()); - context.setFunctionName(param.getFunction()); - int pagenum = Util.getIntValue(param.getCurrent(), 1) - 1; - int size = Util.getIntValue(param.getPageSize(), 10); - int start = pagenum * size; - int end = start + size; - Page page = new Page(pagenum, size); - String limit = " limit " + start + "," + (end - start); - - String tableName = ElogSeviceUtils.getTableName(param.getModule(), param.getFunction()); - List list = getLocalElogDaoMapper().queryElogList(page, context, null, tableName, null, "*"); - list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list); - return switchString(list); - } - - @Override - public List queryCardLogList(String data) { - JSONObject map = JSONObject.parseObject(data); - String module = ""; - String function = ""; - String pageNum = ""; - String pageSize = ""; - String dataset = ""; - String searchMap = ""; - String sColum = ""; - String fColum = ""; - String transMethod = null; - List showColums = new ArrayList<>(); - List filterConditionDtos = new ArrayList<>(); - String authParams = ""; - Map jsonObject = new HashMap(); - if (map != null) { - module = map.getString("module"); - function = map.getString("function"); - pageNum = map.getString("pageNum"); - pageSize = map.getString("pageSize"); - //dataset = map.get("dataset").toString(); - searchMap = map.getString("searchMap"); - sColum = map.getString("showColums"); - showColums = JSONArray.parseArray(sColum, ShowColumsDto.class); - fColum = map.getString("filterConditions"); - transMethod = map.getString("transMethod"); - filterConditionDtos = JSONArray.parseArray(fColum, FilterConditionDto.class); - authParams = map.getString("authParams"); - jsonObject = JSONObject.parseObject(authParams); - } - LoggerContext context = new LoggerContext(); - context.setModuleName(module); - context.setFunctionName(function); - context.setTenant_key(getTenantKey().toLowerCase()); - // 分页 - //Page pages = ElogSeviceUtils.getPage(); - String sb = getQueryCondition(filterConditionDtos); - logger.info("elog查询条件拼接sql:{}", sb); - // 消费到消息,通过MethodHandler调用对应的方法 - String customSql = getCustomSql(transMethod, sb, "before"); - - Page pages = new Page(ElogSeviceUtils.getIntValue(pageNum, 1), ElogSeviceUtils.getIntValue(pageSize, 10)); - int page = Util.getIntValue(pages.getPageNum() + "", 1) - 1; - int size = Util.getIntValue(pages.getPageSize() + "", 10); - int start = page * size; - int end = start + size; - String limit = " limit " + start + "," + (end - start); - String tableName = ElogSeviceUtils.getTableName(module, function); - - //String columns = getshowColumsStr(showColums); - List list = new ArrayList<>(); - Map countMap = new HashMap<>(); - list = getLocalElogDaoMapper().queryElogList(pages, context, null, tableName, customSql, "*"); - countMap = getLocalElogDaoMapper().elogCount(context, tableName, customSql); - list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list); - - if (list != null && list.size() > 0) { - //if ("1".equals(pageNum)){ - list.get(0).put("total", ElogSeviceUtils.getLongValue(countMap.get("counts") + "", 0)); - //} - } - transUserInfo(list); - //System.out.println("elog查询名称和头像耗时:{}"+ (l3-l2)); - transfLanguageData(list, showColums); - List res = switchString(list); - return res; - } - - /** - * 转换数据成多语言,结合前端转 - * - * @param lists - * @param showColums - */ - public static List transfLanguageData(List lists, List showColums) { - if (lists != null && lists.size() > 0) { - for (Map map : lists) { - if (map != null) { - Iterator> iterator = map.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - for (ShowColumsDto showColum : showColums) { - if (StringUtils.isNotBlank(showColum.getColumIndex()) && showColum.isTransfLanguage() && entry.getKey().equals(showColum.getColumIndex()) && !Objects.isNull(entry.getValue()) && StringUtils.isNumeric(entry.getValue().toString())) { - if (entry.getValue() instanceof Integer || entry.getValue() instanceof Long || entry.getValue() instanceof String) { - map.put(entry.getKey(), ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(entry.getValue().toString()), entry.getValue().toString())); - } else { - //map.put(entry.getKey(), ElogSeviceSwitchUtils.handlerBaseDataMethod(entry.getValue().toString())); - map.put(entry.getKey(), entry.getValue()); - } - } else if (StringUtils.isNotBlank(showColum.getColumIndex()) && showColum.isTransfLanguage() && entry.getKey().equals(showColum.getColumIndex()) && !Objects.isNull(entry.getValue())) { - //read view add edit update delete - if ("add".equals(entry.getValue().toString()) || "创建".equals(entry.getValue().toString())) { - map.put(entry.getKey(), SalaryI18nUtil.getI18nLabel(1111111, "新增")); - } else if ("read".equals(entry.getValue().toString()) || "view".equals(entry.getValue().toString()) || "查看".equals(entry.getValue().toString())) { - map.put(entry.getKey(), SalaryI18nUtil.getI18nLabel(1111111, "查看")); - } else if ("edit".equals(entry.getValue().toString()) || "update".equals(entry.getValue().toString()) || "更新".equals(entry.getValue().toString())) { - map.put(entry.getKey(), SalaryI18nUtil.getI18nLabel(1111111, "修改")); - } else if ("delete".equals(entry.getValue().toString()) || "删除".equals(entry.getValue().toString())) { - map.put(entry.getKey(), SalaryI18nUtil.getI18nLabel(63254, "删除")); - } else if (entry.getValue().toString().contains("取消关联标签 ")) { - String val = entry.getValue().toString().replace("取消关联标签 ", SalaryI18nUtil.getI18nLabel(1111111, "取消关联标签 ") + " "); - map.put(entry.getKey(), val); - } else if (entry.getValue().toString().contains("关联标签 ")) { - String val = entry.getValue().toString().replace("关联标签 ", SalaryI18nUtil.getI18nLabel(1111111, "关联标签 ") + " "); - map.put(entry.getKey(), val); - } - } - } - } - } - } - } - return lists; - } - - - @Override - public Map countLog(String module, String function) { - LoggerContext context = new LoggerContext(); - context.setModuleName(module); - context.setFunctionName(function); - context.setTenant_key(getTenantKey()); - String tableName = ElogSeviceUtils.getTableName(module, function); - return getLocalElogDaoMapper().elogCount(context, tableName, null); - } - - @Override - public List queryDetailLogList(String module, String function, String current, String pageSize, String condition, String mainId) { - LoggerContext context = new LoggerContext(); - context.setModuleName(module); - context.setFunctionName(function); - context.setTenant_key(getTenantKey()); - context.setUuid(mainId); - int page = Util.getIntValue(current, 1) - 1; - int size = Util.getIntValue(pageSize, 10); - int start = page * size; - int end = start + size; - String limit = " limit " + start + "," + (end - start); - // 还需要支持下查询 - String tableName = ElogSeviceUtils.getTableName(module, function, true); - List list = getLocalElogDaoMapper().queryDetailElogList(context, limit, tableName, null); - list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list); - return switchString(list); - } - - @Override - public Map countDestailLog(String module, String function, String mainId) { - LoggerContext context = new LoggerContext(); - context.setModuleName(module); - context.setFunctionName(function); - context.setTenant_key(getTenantKey()); - context.setUuid(mainId); - String tableName = ElogSeviceUtils.getTableName(module, function, true); - return getLocalElogDaoMapper().elogDetailCount(context, tableName, null); - } - - @Override - public WeaTable queryElogTraceInfo(String traceId, String module, String function, Integer currentPage, Integer pageSize, String traceTransMethod) { - WeaTable weaTable = new WeaTable(); - if (StringUtils.isNotEmpty(traceId)) { - String tableName = ElogSeviceUtils.getTableName(module, function); - Integer offset = (currentPage - 1) * pageSize; - List list = getLocalElogDaoMapper().queryElogTraceInfo(traceId, tableName, offset, pageSize); - for (Map map : list) { - if (map.get("modulename") != null) { - map.put("modulenamespan", ElogSeviceSwitchUtils.getModuleName(map.get("modulename").toString())); - } - } - //list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list); - int count = getLocalElogDaoMapper().queryElogTraceInfoCount(traceId, tableName); - PageInfo pageInfo = SalaryPageUtil.buildPage(currentPage, pageSize, list); -// pageInfo.setColumns(); - pageInfo.setTotal(count); - } - - return weaTable; - } - - @Override - public List queryLogInfoByCustom(String module, String function, String field, String value, boolean isDetail) { - List list = new ArrayList(); - String tableName = ElogSeviceUtils.getTableName(module, function, isDetail); - if (StringUtils.isNotBlank(field) && StringUtils.isNotBlank(value)) { - StringBuffer sql = new StringBuffer(); - sql.append(field).append(" = '").append(value).append("' "); - - list = getLocalElogDaoMapper().queryLogInfoByCustom(tableName, sql.toString()); - } - return list; - } - - - @Override - public List queryLogInfoByCustom(String module, String function, String field, String value) { - return queryLogInfoByCustom(module, function, field, value, false); - } - - public List switchString(List list) { - if (list != null) { - return list.stream().map(m -> { - Set en = m.entrySet(); - for (Map.Entry entry : en) { - if (entry.getValue() != null) { - entry.setValue(String.valueOf(entry.getValue())); - } - } - return m; - }).collect(Collectors.toList()); - } else { - return list; - } - } - -// @Override -// public BatchDocumentMessage downloadLog(String data) { -// JSONObject jsonObject = JSONObject.parseObject(data); -// String module = jsonObject.getString("downloadmodule"); -// String function = jsonObject.getString("function"); -// String serviceName = jsonObject.getString("serviceName"); -// String fileName = jsonObject.getString("fileName"); -// String passWord = jsonObject.getString("passWord"); -// -// if (StringUtils.isEmpty(fileName)) { -// fileName = SalaryI18nUtil.getI18nLabel(191432, "日志记录"); -// } -// -// BatchDocumentMessage batchDocumentMessage = new BatchDocumentMessage(); -// WeaTable weaTable = queryLogs(data); -// List columns = weaTable.getColumns(); -// List headers = new ArrayList<>(); -// if (columns != null && !columns.isEmpty()) { -// for (WeaTableColumn column : columns) { -// Map header = new HashMap<>(); -// header.put("key", column.getDataIndex()); -// header.put("name", column.getTitle()); -// headers.add(header); -// } -// } -// List> dataList = weaTable.getData(); -// List> maps = new ArrayList<>(); -// if (dataList != null && !dataList.isEmpty()) { -// dataList.stream().forEach(m -> { -// Map map = new HashMap<>(); -// headers.stream().forEach(h -> { -// map.put(h.get("key").toString(), m.get(h.get("key"))); -// }); -// maps.add(map); -// }); -// } -// -// //必传--业务id -// batchDocumentMessage.setBizId(IdGenerator.generate() + ""); -// //必传-处理名称 -// batchDocumentMessage.setHandlerName("ebatchdemo"); -// //必传-服务名称 -// batchDocumentMessage.setServiceName(serviceName); -// //必传-数据类型 -// batchDocumentMessage.setDataType(fileName); -// //任务id -// batchDocumentMessage.setBatchTaskId(IdGenerator.generate()); -// //必传-模块 -// batchDocumentMessage.setModule(module); //com.weaver.teams.domain.EntityType 中的module(没有的话需要找温明刚维护下) -// //必传-功能 -// batchDocumentMessage.setFunction(function); -// //必传-eteamsid -// batchDocumentMessage.setEteamsId(TenantRpcContext.getEteamsId()); -// -// //非必传 -// if (StringUtils.isNotBlank(passWord)) { -// batchDocumentMessage.setPassword(passWord); -// } -// -// //必传 -// BatchFile batchFile = new BatchFile(); -// batchFile.setName(fileName); -// //必传 -// batchFile.setFileType(FileType.EXCEL); -// //必传 -// batchFile.setHandlerFileMethod(HandlerFileMethod.HANDLER_EXCEL_WITH_DATA); -// batchFile.setTemplateId(1l); -// List excelSheets = new ArrayList<>(); -// ExcelSheet excelSheet = new ExcelSheet(); -// -// excelSheet.setHeader(headers); -// excelSheet.setData(maps); -// excelSheet.setName(fileName); -// excelSheets.add(excelSheet); -// batchFile.setExcelSheets(excelSheets); -// batchDocumentMessage.setBatchFile(batchFile); -// batchDocumentMessage.setChunk(false);//不分片 -// batchExportSender.sendBatchExport(batchDocumentMessage); -// -// return batchDocumentMessage; -// } -// - - private String[] getESfields(String value) { - String[] split = value.split(","); - List list = new ArrayList<>(); - for (String s : split) { - switch (s.toLowerCase()) { - case "interfacename": - list.add("interfacename"); - break; - case "operatetype": - list.add("operatetype"); - break; - case "operatedesc": - list.add("operatedesc"); - break; - case "params": - list.add("params"); - break; - case "clientip": - list.add("clientip"); - break; - case "groupnamelabel": - list.add("groupnamelabel"); - break; - case "redoservice": - list.add("redoservice"); - break; - case "redocontext": - list.add("redocontext"); - break; - case "cancelservice": - list.add("cancelservice"); - break; - case "cancelcontext": - list.add("cancelcontext"); - break; - case "device": - list.add("device"); - break; - case "groupid": - list.add("groupid"); - break; - case "belongmainid": - list.add("belongmainid"); - break; - case "requesturl": - list.add("requesturl"); - break; - case "requesturi": - list.add("requesturi"); - break; - case "log_result": - list.add("logResult"); - break; - case "fromterminal": - list.add("fromterminal"); - break; - case "resultdesc": - list.add("resultdesc"); - break; - case "old_content": - list.add("oldContent"); - break; - case "link_type": - list.add("linkType"); - break; - } - } - //list转为数组 - if (list.size() > 0) { - String[] strings = list.toArray(new String[list.size()]); - return strings; - } - return null; - } - -} diff --git a/src/com/engine/salary/elog/threadlocal/ElogThreadLocal.java b/src/com/engine/salary/elog/threadlocal/ElogThreadLocal.java deleted file mode 100644 index 63e188956..000000000 --- a/src/com/engine/salary/elog/threadlocal/ElogThreadLocal.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.engine.salary.elog.threadlocal; - -import com.alibaba.fastjson.JSONObject; -import com.engine.salary.elog.entity.dto.LoggerContext; - -import java.util.ArrayList; -import java.util.List; - -/** - * @Date: 2022/5/18 20:26 - * @Author: deli.xu - * @Description: - **/ -public class ElogThreadLocal { - - private static final ThreadLocal> loggerContextList = new ThreadLocal<>(); - private static final ThreadLocal requestBody = new ThreadLocal<>(); - - public static LoggerContext currentLoggerContext() { - List list = loggerContextList.get(); - - if(list == null || list.size() == 0) { - return null; - } else { - return list.get(list.size() -1); - } - } - - public static void addLoggerContext(LoggerContext loggerContext) { - if(loggerContext == null) - return; - List list = loggerContextList.get(); - if(list == null) { - list = new ArrayList<>(); - loggerContextList.set(list); - } - - list.add(loggerContext); - - } - - public static List getLoggerContextList() { - return loggerContextList.get(); - } - - public static void clear() { - loggerContextList.set(null); - } - - public static void removeLast() { - List list = loggerContextList.get(); - - if(list != null) { - int size = list.size(); - if(size > 0) - list.remove(size - 1); - } - } - - public static void remove() { - loggerContextList.remove(); - } - - public static JSONObject getRequestBody() { - return requestBody.get(); - } - - public static void setRequestBody(JSONObject json) { - requestBody.set(json); - } - - public static void removeRequestBody() { - requestBody.remove(); - } -} diff --git a/src/com/engine/salary/elog/util/ElogServiceUtils.java b/src/com/engine/salary/elog/util/ElogServiceUtils.java deleted file mode 100644 index fb2ecafc6..000000000 --- a/src/com/engine/salary/elog/util/ElogServiceUtils.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.engine.salary.elog.util; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.engine.salary.elog.entity.dto.ElogBean; -import com.engine.salary.elog.entity.dto.FilterConditionDto; -import com.engine.salary.elog.entity.dto.ShowColumsDto; -import com.engine.salary.elog.enums.ElogConsts; - -import java.util.List; -import java.util.Map; - -/** - * @Date: 2022/5/18 19:19 - * @Author: deli.xu - * @Description: elog服务工具类 - **/ -public class ElogServiceUtils { - - public static String getTableName(String module, String function) { - return getTableName(module, function, false); - } - - public static String getTableName(String module, String function, boolean isDetail) { - String tablename = module + ElogConsts.TABLE_SPACER + function + ElogConsts.TABLE_SUFFIX + (isDetail ? ElogConsts.DETAIL_TABLE_SUFFIX : ""); - sqlCheck(tablename); - return tablename; - } - - public static void sqlCheck(String value) { - if (value != null) { - if (!value.matches("^[A-Za-z][a-zA-Z0-9_\\.,]{0,31}$")) { - throw new RuntimeException("sqlCheck failed ! value :" + value); - } - } - } - - public static ElogBean getElogBean(String data) { - JSONObject datas = JSONObject.parseObject(data); - ElogBean elogBean = new ElogBean(); - String module = datas.getString("module"); - String function = datas.getString("function"); - String pageNum = datas.getString("current"); - String pageSize = datas.getString("pageSize"); - String searchMap = datas.getString("searchMap"); - String transMethod = datas.getString("transMethod"); - String authParams = datas.getString("authParams"); - String showColums = datas.getString("showColums"); - String filterConditions = datas.getString("filterConditions"); - String downloadSize = datas.getString("downloadSize"); - List showColumsDtos = JSONArray.parseArray(showColums, ShowColumsDto.class); - List filterConditionDtos = JSONArray.parseArray(filterConditions, FilterConditionDto.class); - Map authParamsJson = JSONObject.parseObject(authParams); - elogBean.setModule(module); - elogBean.setFunction(function); - elogBean.setCurrent(pageNum); - elogBean.setPageSize(pageSize); - elogBean.setSearchMap(searchMap); - elogBean.setTransMethod(transMethod); - elogBean.setDownloadSize(downloadSize); - elogBean.setShowColumns(showColumsDtos); - elogBean.setFilterConditionDtos(filterConditionDtos); - elogBean.setAuthParamsJson(authParamsJson); - return elogBean; - } - - public static int getIntValue(String v) { - return getIntValue(v, -1); - } - - public static int getIntValue(String v, int def) { - try { - return Integer.parseInt(v); - } catch (Exception var3) { - return def; - } - } - - public static long getLongValue(String v) { - return getLongValue(v, -1l); - } - - public static long getLongValue(String v, long def) { - try { - return Long.parseLong(v); - } catch (Exception var3) { - return def; - } - } - - -} diff --git a/src/com/engine/salary/elog/util/ElogSeviceSwitchUtils.java b/src/com/engine/salary/elog/util/ElogSeviceSwitchUtils.java deleted file mode 100644 index 78a78dc94..000000000 --- a/src/com/engine/salary/elog/util/ElogSeviceSwitchUtils.java +++ /dev/null @@ -1,1402 +0,0 @@ -package com.engine.salary.elog.util; - -import cn.hutool.core.map.CaseInsensitiveMap; -import com.alibaba.druid.proxy.jdbc.ClobProxyImpl; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.cloudstore.eccom.pc.table.WeaTable; -import com.cloudstore.eccom.pc.table.WeaTableColumn; -import com.engine.salary.elog.annotation.OperateType; -import com.engine.salary.elog.enums.ElogConsts; -import com.engine.salary.util.SalaryI18nUtil; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import weaver.conn.RecordSet; - -import java.sql.Clob; -import java.util.*; - -/** - * @Date: 2022/5/18 19:34 - * @Author: deli.xu - * @Description: elog服务转换类 - **/ -public class ElogSeviceSwitchUtils { - - private static final Logger logger = LoggerFactory.getLogger(ElogSeviceSwitchUtils.class); - // TODO 后续需要考虑多语言label写法 - public static final Map moduleMap = new HashMap<>(); - - private static final Map> moduleFuctionMap = new HashMap<>(); - - static { - /*moduleMap.put("elog", SalaryI18nUtil.getI18nLabel(62975, ElogSeviceUtils.currentLanguage(), "日志")); - moduleMap.put("report", SalaryI18nUtil.getI18nLabel(62976, ElogSeviceUtils.currentLanguage(), "报表")); - moduleMap.put("edc", SalaryI18nUtil.getI18nLabel(62977, ElogSeviceUtils.currentLanguage(), "数据中心")); - moduleMap.put("hrm", SalaryI18nUtil.getI18nLabel(62978, ElogSeviceUtils.currentLanguage(), "人力资源")); - moduleMap.put("crm", SalaryI18nUtil.getI18nLabel(62979, ElogSeviceUtils.currentLanguage(), "资产")); - moduleMap.put("demo", SalaryI18nUtil.getI18nLabel(62980, ElogSeviceUtils.currentLanguage(), "示例")); - moduleMap.put("attc", SalaryI18nUtil.getI18nLabel(62981, ElogSeviceUtils.currentLanguage(), "出勤打卡")); - moduleMap.put("attm", SalaryI18nUtil.getI18nLabel(62982, ElogSeviceUtils.currentLanguage(), "出勤机")); - moduleMap.put("attw", SalaryI18nUtil.getI18nLabel(62983, ElogSeviceUtils.currentLanguage(), "出勤报表")); - moduleMap.put("auth", SalaryI18nUtil.getI18nLabel(62984, ElogSeviceUtils.currentLanguage(), "系统权限")); - moduleMap.put("bank", SalaryI18nUtil.getI18nLabel(62985, ElogSeviceUtils.currentLanguage(), "银企直联")); - moduleMap.put("bap", SalaryI18nUtil.getI18nLabel(62986, ElogSeviceUtils.currentLanguage(), "云办公")); - moduleMap.put("base", SalaryI18nUtil.getI18nLabel(62987, ElogSeviceUtils.currentLanguage(), "应用管理")); - moduleMap.put("batc", SalaryI18nUtil.getI18nLabel(62988, ElogSeviceUtils.currentLanguage(), "导入导出")); - moduleMap.put("blog", SalaryI18nUtil.getI18nLabel(62989, ElogSeviceUtils.currentLanguage(), "日报微博")); - moduleMap.put("cld", SalaryI18nUtil.getI18nLabel(62990, ElogSeviceUtils.currentLanguage(), "日程管理")); - moduleMap.put("cmca", SalaryI18nUtil.getI18nLabel(62991, ElogSeviceUtils.currentLanguage(), "资金管理")); - moduleMap.put("cmcl", SalaryI18nUtil.getI18nLabel(62992, ElogSeviceUtils.currentLanguage(), "线索管理")); - moduleMap.put("cmco", SalaryI18nUtil.getI18nLabel(62993, ElogSeviceUtils.currentLanguage(), "联系人管理")); - moduleMap.put("cmcp", SalaryI18nUtil.getI18nLabel(62994, ElogSeviceUtils.currentLanguage(), "对手管理")); - moduleMap.put("cmcu", SalaryI18nUtil.getI18nLabel(62995, ElogSeviceUtils.currentLanguage(), "客户管理")); - moduleMap.put("cmex", SalaryI18nUtil.getI18nLabel(62996, ElogSeviceUtils.currentLanguage(), "批量操作")); - moduleMap.put("cmmk", SalaryI18nUtil.getI18nLabel(62997, ElogSeviceUtils.currentLanguage(), "营销管理")); - moduleMap.put("cmor", SalaryI18nUtil.getI18nLabel(62998, ElogSeviceUtils.currentLanguage(), "订单管理")); - moduleMap.put("cmpc", SalaryI18nUtil.getI18nLabel(62999, ElogSeviceUtils.currentLanguage(), "价格管理")); - moduleMap.put("cmpr", SalaryI18nUtil.getI18nLabel(63000, ElogSeviceUtils.currentLanguage(), "产品管理")); - moduleMap.put("cmpt", SalaryI18nUtil.getI18nLabel(63001, ElogSeviceUtils.currentLanguage(), "外部门户")); - moduleMap.put("cmqu", SalaryI18nUtil.getI18nLabel(63002, ElogSeviceUtils.currentLanguage(), "报价管理")); - moduleMap.put("cmsa", SalaryI18nUtil.getI18nLabel(63003, ElogSeviceUtils.currentLanguage(), "商机管理")); - moduleMap.put("cmtr", SalaryI18nUtil.getI18nLabel(63004, ElogSeviceUtils.currentLanguage(), "合同管理")); - moduleMap.put("comp", SalaryI18nUtil.getI18nLabel(63005, ElogSeviceUtils.currentLanguage(), "文档对比")); - moduleMap.put("cs", SalaryI18nUtil.getI18nLabel(63006, ElogSeviceUtils.currentLanguage(), "云商店")); - moduleMap.put("cowork", SalaryI18nUtil.getI18nLabel(63007, ElogSeviceUtils.currentLanguage(), "协作区")); - moduleMap.put("dbs", SalaryI18nUtil.getI18nLabel(63008, ElogSeviceUtils.currentLanguage(), "文档公共模块")); - moduleMap.put("dcad", SalaryI18nUtil.getI18nLabel(63009, ElogSeviceUtils.currentLanguage(), "数据中心运行")); - moduleMap.put("dcap", SalaryI18nUtil.getI18nLabel(63010, ElogSeviceUtils.currentLanguage(), "数据中心分析开发配置")); - moduleMap.put("dcrd", SalaryI18nUtil.getI18nLabel(63011, ElogSeviceUtils.currentLanguage(), "数据中心开发配置")); - moduleMap.put("dcre", SalaryI18nUtil.getI18nLabel(63012, ElogSeviceUtils.currentLanguage(), "数据中心分析生产运行")); - moduleMap.put("dcs", SalaryI18nUtil.getI18nLabel(63013, ElogSeviceUtils.currentLanguage(), "文档目录模块")); - moduleMap.put("dds", SalaryI18nUtil.getI18nLabel(63014, ElogSeviceUtils.currentLanguage(), "文档模块")); - moduleMap.put("dps", SalaryI18nUtil.getI18nLabel(63015, ElogSeviceUtils.currentLanguage(), "文档权限模块")); - moduleMap.put("drle", SalaryI18nUtil.getI18nLabel(63016, ElogSeviceUtils.currentLanguage(), "数据规则库")); - moduleMap.put("ds", SalaryI18nUtil.getI18nLabel(63017, ElogSeviceUtils.currentLanguage(), "数据安全")); - moduleMap.put("dw_etl", SalaryI18nUtil.getI18nLabel(63018, ElogSeviceUtils.currentLanguage(), "ETL(抽取,转换,治理)")); - moduleMap.put("dw_model", SalaryI18nUtil.getI18nLabel(63019, ElogSeviceUtils.currentLanguage(), "建模服务")); - moduleMap.put("dw_process", SalaryI18nUtil.getI18nLabel(63020, ElogSeviceUtils.currentLanguage(), "计算服务")); - moduleMap.put("dw_search", SalaryI18nUtil.getI18nLabel(63021, ElogSeviceUtils.currentLanguage(), "查询服务")); - moduleMap.put("dw_sync", SalaryI18nUtil.getI18nLabel(63022, ElogSeviceUtils.currentLanguage(), "数据抽取")); - moduleMap.put("eb", SalaryI18nUtil.getI18nLabel(63023, ElogSeviceUtils.currentLanguage(), "云桥")); - moduleMap.put("ebda", SalaryI18nUtil.getI18nLabel(62987, ElogSeviceUtils.currentLanguage(), "应用管理")); - moduleMap.put("ebdd", SalaryI18nUtil.getI18nLabel(63024, ElogSeviceUtils.currentLanguage(), "页面设计")); - moduleMap.put("ebdf", SalaryI18nUtil.getI18nLabel(63025, ElogSeviceUtils.currentLanguage(), "表单服务")); - moduleMap.put("ebdp", SalaryI18nUtil.getI18nLabel(63026, ElogSeviceUtils.currentLanguage(), "页面管理")); - moduleMap.put("ecod", SalaryI18nUtil.getI18nLabel(63027, ElogSeviceUtils.currentLanguage(), "ecode")); - moduleMap.put("ei", SalaryI18nUtil.getI18nLabel(63028, ElogSeviceUtils.currentLanguage(), "数据导出导入")); - moduleMap.put("em", SalaryI18nUtil.getI18nLabel(63029, ElogSeviceUtils.currentLanguage(), "移动相关")); - moduleMap.put("es", SalaryI18nUtil.getI18nLabel(63030, ElogSeviceUtils.currentLanguage(), "微搜搜索")); - moduleMap.put("esa", SalaryI18nUtil.getI18nLabel(63031, ElogSeviceUtils.currentLanguage(), "微搜文件分析")); - moduleMap.put("esb", SalaryI18nUtil.getI18nLabel(63032, ElogSeviceUtils.currentLanguage(), "ESB")); - moduleMap.put("esch", SalaryI18nUtil.getI18nLabel(63033, ElogSeviceUtils.currentLanguage(), "计划任务")); - moduleMap.put("esd", SalaryI18nUtil.getI18nLabel(63034, ElogSeviceUtils.currentLanguage(), "微搜索引数据")); - moduleMap.put("exfo", SalaryI18nUtil.getI18nLabel(63035, ElogSeviceUtils.currentLanguage(), "excel函数引擎")); - moduleMap.put("fbdg", SalaryI18nUtil.getI18nLabel(63036, ElogSeviceUtils.currentLanguage(), "预算编制")); - moduleMap.put("fdt", SalaryI18nUtil.getI18nLabel(63037, ElogSeviceUtils.currentLanguage(), "表单数据")); - moduleMap.put("fexs", SalaryI18nUtil.getI18nLabel(63038, ElogSeviceUtils.currentLanguage(), "费用管理")); - moduleMap.put("file", SalaryI18nUtil.getI18nLabel(63039, ElogSeviceUtils.currentLanguage(), "文件服务")); - moduleMap.put("finc", SalaryI18nUtil.getI18nLabel(63040, ElogSeviceUtils.currentLanguage(), "微报账")); - moduleMap.put("fnar", SalaryI18nUtil.getI18nLabel(63041, ElogSeviceUtils.currentLanguage(), "财务报表")); - moduleMap.put("fomo", SalaryI18nUtil.getI18nLabel(63042, ElogSeviceUtils.currentLanguage(), "表单监控")); - moduleMap.put("form", SalaryI18nUtil.getI18nLabel(63043, ElogSeviceUtils.currentLanguage(), "表单服务")); - moduleMap.put("frpt", SalaryI18nUtil.getI18nLabel(63043, ElogSeviceUtils.currentLanguage(), "业务表单")); - moduleMap.put("fvou", SalaryI18nUtil.getI18nLabel(63044, ElogSeviceUtils.currentLanguage(), "凭证集成")); - moduleMap.put("hp", SalaryI18nUtil.getI18nLabel(63045, ElogSeviceUtils.currentLanguage(), "门户")); - moduleMap.put("hr", SalaryI18nUtil.getI18nLabel(63046, ElogSeviceUtils.currentLanguage(), "人事档案")); - moduleMap.put("ic", SalaryI18nUtil.getI18nLabel(63047, ElogSeviceUtils.currentLanguage(), "集成服务")); - moduleMap.put("il", SalaryI18nUtil.getI18nLabel(63048, ElogSeviceUtils.currentLanguage(), "集成登录")); - moduleMap.put("im", SalaryI18nUtil.getI18nLabel(63049, ElogSeviceUtils.currentLanguage(), "IM相关服务")); - moduleMap.put("inc", SalaryI18nUtil.getI18nLabel(63050, ElogSeviceUtils.currentLanguage(), "发票云服务")); - moduleMap.put("iua", SalaryI18nUtil.getI18nLabel(63051, ElogSeviceUtils.currentLanguage(), "统一认证")); - moduleMap.put("iut", SalaryI18nUtil.getI18nLabel(63052, ElogSeviceUtils.currentLanguage(), "统一待办")); - moduleMap.put("mail", SalaryI18nUtil.getI18nLabel(63053, ElogSeviceUtils.currentLanguage(), "邮件服务")); - moduleMap.put("mc", SalaryI18nUtil.getI18nLabel(63054, ElogSeviceUtils.currentLanguage(), "消息服务")); - moduleMap.put("mt", SalaryI18nUtil.getI18nLabel(63055, ElogSeviceUtils.currentLanguage(), "会议管理")); - moduleMap.put("my", SalaryI18nUtil.getI18nLabel(63056, ElogSeviceUtils.currentLanguage(), "关注&收藏&标签")); - moduleMap.put("odoc", SalaryI18nUtil.getI18nLabel(63057, ElogSeviceUtils.currentLanguage(), "公文管理")); - moduleMap.put("odoc_exchange", SalaryI18nUtil.getI18nLabel(63058, ElogSeviceUtils.currentLanguage(), "公文交换平台")); - moduleMap.put("open", SalaryI18nUtil.getI18nLabel(63059, ElogSeviceUtils.currentLanguage(), "开放平台")); - moduleMap.put("pr", SalaryI18nUtil.getI18nLabel(63060, ElogSeviceUtils.currentLanguage(), "工作画像")); - moduleMap.put("proj", SalaryI18nUtil.getI18nLabel(63061, ElogSeviceUtils.currentLanguage(), "项目管理")); - moduleMap.put("prt", SalaryI18nUtil.getI18nLabel(63062, ElogSeviceUtils.currentLanguage(), "打印服务")); - moduleMap.put("pspt", SalaryI18nUtil.getI18nLabel(63063, ElogSeviceUtils.currentLanguage(), "系统登录")); - moduleMap.put("rptc", SalaryI18nUtil.getI18nLabel(63064, ElogSeviceUtils.currentLanguage(), "数据协作")); - moduleMap.put("rpts", SalaryI18nUtil.getI18nLabel(63065, ElogSeviceUtils.currentLanguage(), "上报调查")); - moduleMap.put("sala", SalaryI18nUtil.getI18nLabel(63066, ElogSeviceUtils.currentLanguage(), "薪资管理")); - moduleMap.put("sign", SalaryI18nUtil.getI18nLabel(63067, ElogSeviceUtils.currentLanguage(), "印控中心")); - moduleMap.put("sms", SalaryI18nUtil.getI18nLabel(63068, ElogSeviceUtils.currentLanguage(), "短信")); - moduleMap.put("task", SalaryI18nUtil.getI18nLabel(63069, ElogSeviceUtils.currentLanguage(), "任务管理")); - moduleMap.put("tnt", SalaryI18nUtil.getI18nLabel(63070, ElogSeviceUtils.currentLanguage(), "租户管理")); - moduleMap.put("wf", SalaryI18nUtil.getI18nLabel(63071, ElogSeviceUtils.currentLanguage(), "路径定义")); - moduleMap.put("wfc", SalaryI18nUtil.getI18nLabel(63072, ElogSeviceUtils.currentLanguage(), "流程流转")); - moduleMap.put("wfr", SalaryI18nUtil.getI18nLabel(63073, ElogSeviceUtils.currentLanguage(), "流程规则路由")); - moduleMap.put("wrgm", SalaryI18nUtil.getI18nLabel(63074, ElogSeviceUtils.currentLanguage(), "目标管理")); - moduleMap.put("wrgp", SalaryI18nUtil.getI18nLabel(63075, ElogSeviceUtils.currentLanguage(), "绩效考核")); - moduleMap.put("wrpr", SalaryI18nUtil.getI18nLabel(63076, ElogSeviceUtils.currentLanguage(), "计划报告")); - moduleMap.put("doc", SalaryI18nUtil.getI18nLabel(63077, ElogSeviceUtils.currentLanguage(), "文档服务")); - moduleMap.put("placard", SalaryI18nUtil.getI18nLabel(63078, ElogSeviceUtils.currentLanguage(), "团队公告")); - moduleMap.put("fna", SalaryI18nUtil.getI18nLabel(135042, ElogSeviceUtils.currentLanguage(), "云报销")); - moduleMap.put("meeting", SalaryI18nUtil.getI18nLabel(63080, ElogSeviceUtils.currentLanguage(), "会议")); - moduleMap.put("wfp", SalaryI18nUtil.getI18nLabel(63081, ElogSeviceUtils.currentLanguage(), "流程")); - moduleMap.put("portal", SalaryI18nUtil.getI18nLabel(63045, ElogSeviceUtils.currentLanguage(), "门户")); - moduleMap.put("workreport", SalaryI18nUtil.getI18nLabel(63082, ElogSeviceUtils.currentLanguage(), "工作报告")); - moduleMap.put("goal", SalaryI18nUtil.getI18nLabel(63074, ElogSeviceUtils.currentLanguage(), "目标管理")); - moduleMap.put("performance", SalaryI18nUtil.getI18nLabel(63075, ElogSeviceUtils.currentLanguage(), "绩效考核")); - moduleMap.put("intlogin", SalaryI18nUtil.getI18nLabel(63083, ElogSeviceUtils.currentLanguage(), "集成登录设置")); - moduleMap.put("i18n", SalaryI18nUtil.getI18nLabel(64559, ElogSeviceUtils.currentLanguage(), "国际化")); - moduleMap.put("timecard", SalaryI18nUtil.getI18nLabel(63085, ElogSeviceUtils.currentLanguage(), "出勤")); - moduleMap.put("market", SalaryI18nUtil.getI18nLabel(63086, ElogSeviceUtils.currentLanguage(), "营销")); - moduleMap.put("excelformula", SalaryI18nUtil.getI18nLabel(64560, ElogSeviceUtils.currentLanguage(), "函数服务")); - moduleMap.put("ic_ldap", SalaryI18nUtil.getI18nLabel(70081, ElogSeviceUtils.currentLanguage(), "Ldap集成")); - moduleMap.put("iut_c_c", SalaryI18nUtil.getI18nLabel(70303, ElogSeviceUtils.currentLanguage(), "统一待办推送设置")); - moduleMap.put("plan", SalaryI18nUtil.getI18nLabel(70303, ElogSeviceUtils.currentLanguage(), "计划报告")); - moduleMap.put("document", SalaryI18nUtil.getI18nLabel(34218, ElogSeviceUtils.currentLanguage(), "文档")); - moduleMap.put("taskCustStatus", SalaryI18nUtil.getI18nLabel(73988, ElogSeviceUtils.currentLanguage(), "任务状态")); - moduleMap.put("project", SalaryI18nUtil.getI18nLabel(55158, ElogSeviceUtils.currentLanguage(), "项目")); - moduleMap.put("calendar", SalaryI18nUtil.getI18nLabel(74186, ElogSeviceUtils.currentLanguage(), "日历")); - moduleMap.put("web", SalaryI18nUtil.getI18nLabel(75598, ElogSeviceUtils.currentLanguage(), "浏览")); - moduleMap.put("formdatareport", SalaryI18nUtil.getI18nLabel(76068, ElogSeviceUtils.currentLanguage(), "来自上报数据")); - moduleMap.put("mainline", SalaryI18nUtil.getI18nLabel(31898, ElogSeviceUtils.currentLanguage(), "主线")); - moduleMap.put("customer", SalaryI18nUtil.getI18nLabel(32726, ElogSeviceUtils.currentLanguage(), "客户")); - moduleMap.put("contract", SalaryI18nUtil.getI18nLabel(32864, ElogSeviceUtils.currentLanguage(), "合同")); - moduleMap.put("group", SalaryI18nUtil.getI18nLabel(19426, ElogSeviceUtils.currentLanguage(), "分组")); - moduleMap.put("workflow", SalaryI18nUtil.getI18nLabel(81851, ElogSeviceUtils.currentLanguage(), "工作流程")); - moduleMap.put("biaoge", SalaryI18nUtil.getI18nLabel(30919, ElogSeviceUtils.currentLanguage(), "表格")); - moduleMap.put("clue", SalaryI18nUtil.getI18nLabel(28908, ElogSeviceUtils.currentLanguage(), "线索")); - moduleMap.put("competitor", SalaryI18nUtil.getI18nLabel(81852, ElogSeviceUtils.currentLanguage(), "竞争对手")); - moduleMap.put("kpiFlow", SalaryI18nUtil.getI18nLabel(81853, ElogSeviceUtils.currentLanguage(), "kpil流程")); - moduleMap.put("mainlineCustStatus", SalaryI18nUtil.getI18nLabel(81854, ElogSeviceUtils.currentLanguage(), "主线客户状态")); - moduleMap.put("marketactivity", SalaryI18nUtil.getI18nLabel(34221, ElogSeviceUtils.currentLanguage(), "市场活动")); - moduleMap.put("mtPhase", SalaryI18nUtil.getI18nLabel(81855, ElogSeviceUtils.currentLanguage(), "mt阶段")); - moduleMap.put("production", SalaryI18nUtil.getI18nLabel(29329, ElogSeviceUtils.currentLanguage(), "产品")); - moduleMap.put("quote", SalaryI18nUtil.getI18nLabel(34231, ElogSeviceUtils.currentLanguage(), "报价")); - moduleMap.put("saleChance", SalaryI18nUtil.getI18nLabel(32863, ElogSeviceUtils.currentLanguage(), "商机")); - moduleMap.put("orderform", SalaryI18nUtil.getI18nLabel(34230, ElogSeviceUtils.currentLanguage(), "订单")); - moduleMap.put("contact", SalaryI18nUtil.getI18nLabel(32711, ElogSeviceUtils.currentLanguage(), "联系人")); - moduleMap.put("price", SalaryI18nUtil.getI18nLabel(31922, ElogSeviceUtils.currentLanguage(), "价格")); - moduleMap.put("capital", SalaryI18nUtil.getI18nLabel(83428, ElogSeviceUtils.currentLanguage(), "资金")); - moduleMap.put("ice", SalaryI18nUtil.getI18nLabel(94360, ElogSeviceUtils.currentLanguage(), "日程会议集成")); - moduleMap.put("ic_hr", SalaryI18nUtil.getI18nLabel(84284, ElogSeviceUtils.currentLanguage(), "HR同步")); - moduleMap.put("intunifyauth", SalaryI18nUtil.getI18nLabel(84467, ElogSeviceUtils.currentLanguage(), "统一认证接入管理")); - moduleMap.put("signcenter", SalaryI18nUtil.getI18nLabel(84691, ElogSeviceUtils.currentLanguage(), "电子签")); - moduleMap.put("iut_s_c", SalaryI18nUtil.getI18nLabel(91503, ElogSeviceUtils.currentLanguage(), "统一待办-异构系统")); - moduleMap.put("iut_s_c1", SalaryI18nUtil.getI18nLabel(91503, ElogSeviceUtils.currentLanguage(), "统一待办-应用系统")); - moduleMap.put("iut_s_c2", SalaryI18nUtil.getI18nLabel(91503, ElogSeviceUtils.currentLanguage(), "统一待办中心")); - moduleMap.put("iut_s_c3", SalaryI18nUtil.getI18nLabel(91503, ElogSeviceUtils.currentLanguage(), "统一待办-应用系统-流程类型")); - moduleMap.put("ic_mail", SalaryI18nUtil.getI18nLabel(100715, ElogSeviceUtils.currentLanguage(), "邮箱集成")); - moduleMap.put("hrsa", SalaryI18nUtil.getI18nLabel(105038, ElogSeviceUtils.currentLanguage(), "薪酬管理")); - moduleMap.put("icc", SalaryI18nUtil.getI18nLabel(113884, ElogSeviceUtils.currentLanguage(), "转换规则")); - moduleMap.put("basicserver", SalaryI18nUtil.getI18nLabel(113885, ElogSeviceUtils.currentLanguage(), "整体基础")); - moduleMap.put("dw", SalaryI18nUtil.getI18nLabel(115549, ElogSeviceUtils.currentLanguage(), "数据仓库")); - moduleMap.put("msg", SalaryI18nUtil.getI18nLabel(115563, ElogSeviceUtils.currentLanguage(), "工作消息")); - moduleMap.put("intunifybase", SalaryI18nUtil.getI18nLabel(115599, ElogSeviceUtils.currentLanguage(), "统一认证服务")); - moduleMap.put("esearch", SalaryI18nUtil.getI18nLabel(21694, ElogSeviceUtils.currentLanguage(), "全文检索")); - moduleMap.put("iaauthserver", SalaryI18nUtil.getI18nLabel(115603, ElogSeviceUtils.currentLanguage(), "统一认证注册应用")); - moduleMap.put("excel", SalaryI18nUtil.getI18nLabel(115543, ElogSeviceUtils.currentLanguage(), "excel函数")); - moduleMap.put("scene", SalaryI18nUtil.getI18nLabel(115539, ElogSeviceUtils.currentLanguage(), "绘图")); - moduleMap.put("bcw", SalaryI18nUtil.getI18nLabel(115651, ElogSeviceUtils.currentLanguage(), "公共模块")); - moduleMap.put("folder", SalaryI18nUtil.getI18nLabel(10734, ElogSeviceUtils.currentLanguage(), "文件夹")); - moduleMap.put("pdfcnv", SalaryI18nUtil.getI18nLabel(115957, ElogSeviceUtils.currentLanguage(), "PDF转换服务")); - moduleMap.put("ebform", SalaryI18nUtil.getI18nLabel(121462, ElogSeviceUtils.currentLanguage(), "e-Builder表单")); - moduleMap.put("statistics", SalaryI18nUtil.getI18nLabel(17745, ElogSeviceUtils.currentLanguage(), "自定义统计")); - moduleMap.put("edcapp", SalaryI18nUtil.getI18nLabel(121631, ElogSeviceUtils.currentLanguage(), "多级填报")); - - */ - - moduleMap.put("elog", 62975); - moduleMap.put("report", 62976); - moduleMap.put("edc", 52689); - moduleMap.put("hrm", 62978); - moduleMap.put("crm", 62979); - moduleMap.put("demo", 62980); - moduleMap.put("attc", 62981); - moduleMap.put("attm", 62982); - moduleMap.put("attw", 62983); - moduleMap.put("auth", 62984); - moduleMap.put("bank", 62985); - moduleMap.put("bap", 62986); - moduleMap.put("base", 62987); - moduleMap.put("batc", 62988); - moduleMap.put("blog", 62989); - moduleMap.put("cld", 62990); - moduleMap.put("cmca", 62991); - moduleMap.put("cmcl", 62992); - moduleMap.put("cmco", 62993); - moduleMap.put("cmcp", 62994); - moduleMap.put("cmcu", 62995); - moduleMap.put("cmex", 62996); - moduleMap.put("cmmk", 62997); - moduleMap.put("cmor", 62998); - moduleMap.put("cmpc", 62999); - moduleMap.put("cmpr", 63000); - moduleMap.put("cmpt", 63001); - moduleMap.put("cmqu", 63002); - moduleMap.put("cmsa", 63003); - moduleMap.put("cmtr", 63004); - moduleMap.put("comp", 63005); - moduleMap.put("cs", 63006); - moduleMap.put("cowork", 63007); - moduleMap.put("dbs", 63008); - moduleMap.put("dcad", 63009); - moduleMap.put("dcap", 63010); - moduleMap.put("dcrd", 63011); - moduleMap.put("dcre", 63012); - moduleMap.put("dcs", 63013); - moduleMap.put("dds", 63014); - moduleMap.put("dps", 63015); - moduleMap.put("drle", 63016); - moduleMap.put("ds", 63017); - moduleMap.put("dw_etl", 63018); - moduleMap.put("dw_model", 63019); - moduleMap.put("dw_process", 63020); - moduleMap.put("dw_search", 63021); - moduleMap.put("dw_sync", 63022); - moduleMap.put("eb", 63023); - moduleMap.put("ebda", 62987); - moduleMap.put("ebdd", 63024); - moduleMap.put("ebdf", 63025); - moduleMap.put("ebdp", 63026); - moduleMap.put("ecod", 63027); - moduleMap.put("ei", 63028); - moduleMap.put("em", 63029); - moduleMap.put("es", 63030); - moduleMap.put("esa", 63031); - moduleMap.put("esb", 63032); - moduleMap.put("esch", 63033); - moduleMap.put("esd", 63034); - moduleMap.put("exfo", 63035); - moduleMap.put("fbdg", 63036); - moduleMap.put("fdt", 63037); - moduleMap.put("fexs", 63038); - moduleMap.put("file", 63039); - moduleMap.put("finc", 63040); - moduleMap.put("fnar", 63041); - moduleMap.put("fomo", 63042); - moduleMap.put("form", 63043); - moduleMap.put("frpt", 63043); - moduleMap.put("fvou", 63044); - moduleMap.put("hp", 63045); - moduleMap.put("hr", 63046); - moduleMap.put("ic", 63047); - moduleMap.put("il", 63048); - moduleMap.put("im", 63049); - moduleMap.put("inc", 63050); - moduleMap.put("iua", 63051); - moduleMap.put("iut", 63052); - moduleMap.put("mail", 63053); - moduleMap.put("mc", 63054); - moduleMap.put("mt", 63055); - moduleMap.put("my", 63056); - moduleMap.put("odoc", 63057); - moduleMap.put("odoc_exchange", 63058); - moduleMap.put("open", 63059); - moduleMap.put("pr", 63060); - moduleMap.put("proj", 63061); - moduleMap.put("prt", 63062); - moduleMap.put("pspt", 63063); - moduleMap.put("rptc", 63064); - moduleMap.put("rpts", 63065); - moduleMap.put("sala", 63066); - moduleMap.put("sign", 63067); - moduleMap.put("sms", 63068); - moduleMap.put("task", 63069); - moduleMap.put("tnt", 63070); - moduleMap.put("wf", 63071); - moduleMap.put("wfc", 63072); - moduleMap.put("wfr", 63073); - moduleMap.put("wrgm", 63074); - moduleMap.put("wrgp", 63075); - moduleMap.put("wrpr", 63076); - moduleMap.put("doc", 63077); - moduleMap.put("placard", 63078); - moduleMap.put("fna", 135042); - moduleMap.put("meeting", 63080); - moduleMap.put("wfp", 63081); - moduleMap.put("portal", 63045); - moduleMap.put("workreport", 63082); - moduleMap.put("goal", 63074); - moduleMap.put("performance", 63075); - moduleMap.put("intlogin", 63083); - moduleMap.put("i18n", 64559); - moduleMap.put("timecard", 63085); - moduleMap.put("market", 63086); - moduleMap.put("excelformula", 64560); - moduleMap.put("ebatch", 69280); - moduleMap.put("ic_ldap", 70081); - moduleMap.put("iut_c_c", 96493); - moduleMap.put("plan", 63076); - moduleMap.put("document", 34218); - moduleMap.put("taskCustStatus", 73988); - moduleMap.put("calendar", 74186); - moduleMap.put("batch", 69280); - moduleMap.put("project", 55158); - moduleMap.put("web", 75598); - moduleMap.put("formdatareport", 76068); - moduleMap.put("mainline", 31898); - moduleMap.put("customer", 32726); - moduleMap.put("contract", 32864); - moduleMap.put("group", 19426); - moduleMap.put("workflow", 81851); - moduleMap.put("biaoge", 30919); - moduleMap.put("clue", 28908); - moduleMap.put("competitor", 81852); - moduleMap.put("kpiFlow", 81853); - moduleMap.put("mainlineCustStatus", 81854); - moduleMap.put("marketactivity", 34221); - moduleMap.put("mtPhase", 81855); - moduleMap.put("production", 29329); - moduleMap.put("quote", 34231); - moduleMap.put("saleChance", 32863); - moduleMap.put("orderform", 34230); - moduleMap.put("contact", 32711); - moduleMap.put("price", 31922); - moduleMap.put("capital", 83428); - moduleMap.put("ice", 87722); - moduleMap.put("ic_hr", 84284); - moduleMap.put("intunifyauth", 84508); - moduleMap.put("signcenter", 84691); - moduleMap.put("iut_s_c", 91503); - moduleMap.put("iut_s_c1", 95218); - moduleMap.put("iut_s_c2", 95219); - moduleMap.put("iut_s_c3", 95220); - moduleMap.put("iut_c_log", 96494); - moduleMap.put("ic_mail", 100715); - moduleMap.put("hrsa", 105038); - moduleMap.put("icc", 113884); - moduleMap.put("basicserver", 113885); - moduleMap.put("dw", 115549); - moduleMap.put("msg", 115563); - moduleMap.put("intunifybase", 115599); - moduleMap.put("esearch", 21694); - moduleMap.put("iaauthserver", 115603); - moduleMap.put("excel", 115543); - moduleMap.put("scene", 115539); - moduleMap.put("bcw", 115651); - moduleMap.put("folder", 10734); - moduleMap.put("pdfcnv", 115957); - moduleMap.put("login", 63063); - moduleMap.put("ebform", 121462); - moduleMap.put("statistics", 17745); - moduleMap.put("edcapp", 121631); - moduleMap.put("cusapp", 16381); - moduleMap.put("e10-allinone-base", 141083); - moduleMap.put("voice", 142713); - moduleMap.put("filter", 147832); - moduleMap.put("ias", 146674); - moduleMap.put("device", 153666); - moduleMap.put("meetingTopic", 180274); - moduleMap.put("meetingService", 180276); - moduleMap.put("meetingDecision", 180277); - moduleMap.put("meetingSign", 180278); - moduleMap.put("meetingSignSet", 61601); - moduleMap.put("meetingMember", 180280); - moduleMap.put("meetingShare", 180281); - moduleMap.put("int", 40031); - moduleMap.put("print", 160051); - moduleMap.put("wcwIconUpdate", 182661); - moduleMap.put("wcwIconRelease", 183123); - moduleMap.put("wcwIconUse", 183124); - moduleMap.put("wcw", 29385); - moduleMap.put("component", 115651); - moduleMap.put("ic_exchange", 87722); - moduleMap.put("iut_c_c", 240048); - moduleMap.put("iut_c_set", 240049); - - Map elogMap = new HashMap<>(); - Map reportMap = new HashMap<>(); - Map edcMap = new HashMap<>(); - Map hrmMap = new HashMap<>(); - Map crmMap = new HashMap<>(); - Map demoMap = new HashMap<>(); - - moduleFuctionMap.put("elog", elogMap); - moduleFuctionMap.put("report", reportMap); - moduleFuctionMap.put("edc", edcMap); - moduleFuctionMap.put("hrm", hrmMap); - moduleFuctionMap.put("crm", crmMap); - moduleFuctionMap.put("demo", demoMap); - - - elogMap.put("operator", "日志操作"); - elogMap.put("reportcusinfo", "报表自定义"); - edcMap.put("dataset", "数据集合"); - - demoMap.put("reportcusinfo", "报表自定义字段"); - } - - /** - * 获取模块名称 - * - * @param module - * @return - */ - public static String getModuleName(String module) { -// String modulename = ElogSeviceUtils.null2String(moduleMap.get(module), module); -// return ElogSeviceUtils.isLongValue(modulename) ? SalaryI18nUtil.getI18nLabel(ElogSeviceUtils.getLongValue(modulename), modulename) : modulename; - return module; - } - - /** - * 获取模块名称 - * - * @param module - * @return - */ - public static String getModuleNamePapi(String module) { -// String modulename = ElogSeviceUtils.null2String(moduleMap.get(module), module); -// return ElogSeviceUtils.isLongValue(modulename) ? SalaryI18nUtil.getI18nLabel(ElogSeviceUtils.getLongValue(modulename), modulename) : modulename; - return module; - } - - - /** - * 获取方法名称 - * - * @param module - * @param function - * @return - */ - public static String getFunctionName(String module, String function) { -// Map functionMap = moduleFuctionMap.get(module); -// -// if (functionMap != null) -// function = ElogSeviceUtils.null2String(functionMap.get(function), function); -// -// return ElogSeviceUtils.isLongValue(function) ? SalaryI18nUtil.getI18nLabel(ElogSeviceUtils.getLongValue(function), function) : function; - return function; - } - - public static void switchValues(List resultMap, List recordColumns) { - - switchValues(resultMap, recordColumns, false); - - } - - - public static void switchValues(List list, List recordColumns, boolean islocal) { -// if(!islocal) { -// changKey2Lower(list); -// } - for (Map map : list) { - Iterator> iterator = map.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry next = iterator.next(); - for (String recordColumn : recordColumns) { - if (next.getKey().equals(recordColumn) && next.getValue() instanceof String) { - map.put(next.getKey(), transfi18Method(next.getValue())); - } - } - } - map.put("modulenamespan", getModuleName(map.get("modulename"))); - //map.put("functionnamespan", getFunctionName(map.get("modulename"), map.get("functionname"))); - //switchDatabaseField(map); - } - - } - - public static void switchDatabaseField(Map map) { - map.put("date", map.get("log_date")); - map.put("operator", map.get("log_operator")); - map.put("result", map.get("log_result")); - } - - /** - * 转换数据成多语言 - * - * @param lists - */ - public static List transfLanguageData(List lists) { - if (lists != null && lists.size() > 0) { - for (Map map : lists) { - if (map != null) { - Iterator> iterator = map.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - if (entry.getValue() instanceof Integer || entry.getValue() instanceof Long || entry.getValue() instanceof String) { - map.put(entry.getKey(), transfLanguageLableid(ElogSeviceUtils.getLongValue(entry.getValue().toString()), entry.getValue().toString())); - } else { - map.put(entry.getKey(), entry.getValue()); - } - } - } - } - } - return lists; - } - - public static String transfi18Method(String str) { - if ("新增".equals(str)) { - return transfLanguageLableid(63252l, str); - } else if ("查看".equals(str)) { - return transfLanguageLableid(55172l, str); - } else if ("修改".equals(str)) { - return transfLanguageLableid(63253l, str); - } else if ("更新".equals(str)) { - return transfLanguageLableid(29540l, str); - } else if ("删除".equals(str)) { - return transfLanguageLableid(63254l, str); - } else if (StringUtils.isNumeric(str) && str.length() < 10) { - return transfLanguageLableid(Long.parseLong(str), str); - } else { - return str; - } - } - - public static String transfLanguageLableid(Long lableid) { - return SalaryI18nUtil.getI18nLabel(Integer.parseInt(lableid.toString()), lableid.toString()); - } - - /** - * 转换多语言 - * - * @param lableid - * @param def - * @return - */ - public static String transfLanguageLableid(Long lableid, String def) { - return SalaryI18nUtil.getI18nLabel(Integer.parseInt(lableid.toString()), def); - } - - - /** - * 日志本地服务-更新明细转换 - * - * @param mainlist - * @param list - * @return - */ - public static Map switchChangeValue(List mainlist, List list) { - Map res = new HashMap<>(); - StringBuilder valuesChange = new StringBuilder(); - List valuesChanges = new ArrayList<>(); - String values = ""; - String operatetypeName = ""; - int oldCount = 0; - int newCount = 0; - String operatetype = ""; - CaseInsensitiveMap map = null; - if (list != null && list.size() > 0) { - for (Map hashmap : list) { - map = new CaseInsensitiveMap<>(hashmap); - Object obj = map.get("operatetype"); - if (obj != null) { - operatetype = obj.toString(); - } - } - } - if (mainlist != null && mainlist.size() > 0) { - for (Map hashMap : mainlist) { - map = new CaseInsensitiveMap<>(hashMap); - Object isdetail = map.get("isdetail"); - if (isdetail != null) { - if (StringUtils.isBlank(isdetail.toString()) || !"0".equals(isdetail.toString())) { - continue; - } - } else { - continue; - } - Object oldvalue = map.get("oldvalue"); - if (oldvalue != null) { - if (StringUtils.isNotBlank(oldvalue.toString())) { - oldCount++; - } - } - - Object newvalue = map.get("newvalue"); - if (newvalue != null) { - if (StringUtils.isNotBlank(newvalue.toString())) { - newCount++; - } - } - - } - } - CaseInsensitiveMap jo = null; - for (int i = 0; i < mainlist.size(); i++) { - Map jomap = mainlist.get(i); - jo = new CaseInsensitiveMap<>(jomap); - String fieldName = jo.get("fielddesc"); - String oldvalue = obj2String(jo.get("oldvalue")); - String oldrealvalue = obj2String(jo.get("oldrealvalue")); - String newValue = obj2String(jo.get("newvalue")); - String newrealvalue = obj2String(jo.get("newrealvalue")); - // oracle.sql.CLOB类型处理 - jomap.put("oldvalue", oldvalue); - jomap.put("oldrealvalue", oldrealvalue); - jomap.put("newvalue", newValue); - jomap.put("newrealvalue", newrealvalue); - - String fieldNameLabelId = jo.get("fieldnamelabelid"); - if (StringUtils.isNotBlank(fieldNameLabelId) && StringUtils.isNumeric(fieldNameLabelId)) { - fieldName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldNameLabelId), fieldName); - } else if (StringUtils.isNotBlank(fieldNameLabelId) && !StringUtils.isNumeric(fieldNameLabelId) && !"-1".equals(fieldNameLabelId)) { - fieldName = fieldNameLabelId; - } else if (StringUtils.isNotBlank(fieldName) && StringUtils.isNumeric(fieldName)) { - fieldName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldName), fieldName); - } - if (StringUtils.isNotBlank(oldrealvalue) && StringUtils.isNumeric(oldrealvalue)) { - oldvalue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(oldrealvalue), oldvalue); - } else if (StringUtils.isNotBlank(oldrealvalue) && !StringUtils.isNumeric(oldrealvalue)) { - oldvalue = oldrealvalue; - } - if (StringUtils.isNotBlank(newrealvalue) && StringUtils.isNumeric(newrealvalue)) { - newValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(newrealvalue), newValue); - } else if (StringUtils.isNotBlank(newrealvalue) && !StringUtils.isNumeric(newrealvalue)) { - newValue = newrealvalue; - } - - //oldvalue,newValue 避免xss漏洞 分别进行转义 -// oldvalue = StringConversionForXSS(oldvalue); -// newValue = StringConversionForXSS(newValue); - - if (oldCount != 0) { - valuesChanges.add(String.format(valueChangeFormat(), fieldName, oldvalue, newValue)); - - } else if (oldCount == 0 || newCount == 0 || operatetype.startsWith(OperateType.add) || operatetype.startsWith(OperateType.delete)) { - valuesChanges.add(String.format(valueChangeNewFormat(), fieldName, newValue)); - - } else { - valuesChanges.add(String.format(valueChangeFormat(), fieldName, oldvalue, newValue)); - } - //} - /*if (valuesChange.length() > 3) { - values = valuesChange.substring(0, valuesChange.length() - 3); - }*/ - } - - res.put("valueschanges", valuesChanges); - res.put("detailcontexts", mainlist); - return res; - } - - private static String obj2String(Object o) { - if (o == null) { - return ""; - } - if (o instanceof String) { - return (String) o; - } - return JSON.toJSONString(o); - } - - /** - * 服务中心结果集转换 - */ - public static void switchChangeValues(List list) { - CaseInsensitiveMap map = null; - for (Map hashMap : list) { - map = new CaseInsensitiveMap<>(hashMap); - int count = 0; - StringBuilder valuesChange = new StringBuilder(); - List valuesChanges = new ArrayList(); - Object detailContexts = map.get("detailcontexts"); - if (detailContexts != null) { - JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(detailContexts)); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject jo = jsonArray.getJSONObject(i); - String isDetail = jo.getString("isDetail"); - if (StringUtils.isBlank(isDetail) || !"0".equals(isDetail)) { - continue; - } - String oldvalue = jo.getString("oldValue"); - if (StringUtils.isNotBlank(oldvalue)) { - count++; - } - } - } - - if (detailContexts != null) { - JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(detailContexts)); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject jo = jsonArray.getJSONObject(i); - String isDetail = jo.getString("isDetail"); - if (StringUtils.isBlank(isDetail) || !"0".equals(isDetail)) { - continue; - } - String fieldName = jo.getString("fieldDesc"); - String oldvalue = jo.getString("oldValue"); - String oldrealvalue = jo.getString("oldRealValue"); - String newValue = jo.getString("newValue"); - String newrealvalue = jo.getString("newRealValue"); - String fieldNameLabelId = jo.getString("fieldNameLabelId"); - if (StringUtils.isNotBlank(fieldNameLabelId) && StringUtils.isNumeric(fieldNameLabelId)) { - fieldName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldNameLabelId)); - } - if (StringUtils.isNotBlank(oldrealvalue) && StringUtils.isNumeric(oldrealvalue)) { - oldvalue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(oldrealvalue)); - } - if (StringUtils.isNotBlank(newrealvalue) && StringUtils.isNumeric(newrealvalue)) { - newValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(newrealvalue)); - } - if (count == 0) { - valuesChanges.add(String.format(valueChangeNewFormat(), fieldName, newValue)); - } else { - valuesChanges.add(String.format(valueChangeFormat(), fieldName, oldvalue, newValue)); - } - - } - /*String values = ""; - if (valuesChange.length() > 3) { - values = valuesChange.substring(0, valuesChange.length() - 3); - }*/ - - map.put("valueschanges", valuesChanges); - } - - } - } - - public static String valueChangeNewFormat() { - return "【%s】:%s"; - } - - public static String valueChangeFormat() { - return "【%s】:" + SalaryI18nUtil.getI18nLabel(61695, "由") + - "[%s] " + SalaryI18nUtil.getI18nLabel(61697, "改为") + " [%s]"; - } - - public static void changKey2Lower(List list) { - - List newList = new ArrayList<>(); - for (Map orgMap : list) { - Map resultMap = new HashMap<>(); - - if (orgMap == null || orgMap.isEmpty()) { - newList.add(resultMap); - continue; - } - - Set keySet = orgMap.keySet(); - for (String key : keySet) { - resultMap.put(key != null ? key.toLowerCase() : "", orgMap.get(key)); - } - newList.add(resultMap); - } - list.clear(); - list.addAll(newList); - } - - /** - * 查看详细表的数据 - * - * @param list - */ - public static Map switchDetailChangeValue(List list) { - Map res = new HashMap<>(); - List> lists = new ArrayList<>(); - HashMap repeatTableName = new HashMap<>(); - CaseInsensitiveMap map = null; - for (Map hashMap : list) { - map = new CaseInsensitiveMap<>(hashMap); - List detailmap = new ArrayList<>(); - HashMap detailoldMap = new HashMap<>(); - detailoldMap.put("operator", SalaryI18nUtil.getI18nLabel(63248, "操作(旧)")); - detailoldMap.put("dataid", map.get("dataid")); - HashMap detailnewMap = new HashMap<>(); - detailnewMap.put("operator", SalaryI18nUtil.getI18nLabel(63249, "操作(新)")); - detailnewMap.put("dataid", map.get("dataid")); - detailmap.add(detailoldMap); - detailmap.add(detailnewMap); - WeaTable wea = new WeaTable(); - wea.getColumns().add(new WeaTableColumn("5%",SalaryI18nUtil.getI18nLabel(63250, "操作"), "operator")); -// wea.getColumns().add(new WeaTableColumn("dataid", "dataid", true)); - Object tablename = map.get("tablename"); - Object tablenamelabelid = map.get("tablenamelabelid"); - if (tablenamelabelid != null) { - if (StringUtils.isNotBlank(tablenamelabelid.toString()) && StringUtils.isNumeric(tablenamelabelid.toString())) { - tablename = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(tablenamelabelid.toString())); - } - } - Map m = new HashMap<>(); - if (tablename != null && StringUtils.isNotBlank(tablename.toString())) { - String temptablename = repeatTableName.get(tablename.toString()); - if (tablename.toString().equals(temptablename)) { - continue; - } - repeatTableName.put(tablename.toString(), tablename.toString()); - m.put("tablename", tablename.toString()); - m.put("detailmap", detailmap); - m.put("column", wea); - lists.add(m); - } else { - tablename = tablename != null ? tablename : ""; - String temptablename = repeatTableName.get(tablename.toString()); - if (tablename.toString().equals(temptablename)) { - continue; - } - repeatTableName.put(tablename.toString(), tablename.toString()); - m.put("tablename", ""); - m.put("detailmap", detailmap); - m.put("column", wea); - lists.add(m); - } - } - - for (Map hashMap : list) { - map = new CaseInsensitiveMap<>(hashMap); - Object isDetail = map.get("isdetail"); - if (isDetail != null) { - if ("0".equals(isDetail.toString())) { - continue; - } - } else { - continue; - } - String title = ""; - String dataIndex = ""; - String oldValue = ""; - String newValue = ""; - String tableName = ""; - String dataId = ""; - - Object fieldDesc = map.get("fielddesc"); - if (fieldDesc != null) { - if (StringUtils.isNotBlank(fieldDesc.toString())) { - title = fieldDesc.toString(); - } - } - - Object fieldnamelabelid = map.get("fieldnamelabelid"); - if (fieldnamelabelid != null) { - if (StringUtils.isNotBlank(fieldnamelabelid.toString()) && StringUtils.isNumeric(fieldnamelabelid.toString())) { - title = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldnamelabelid.toString())); - } - } - - Object fieldName = map.get("fieldname"); - if (fieldName != null) { - if (StringUtils.isNotBlank(fieldName.toString())) { - dataIndex = fieldName.toString(); - } - } - Object oValue = map.get("oldvalue"); - if (oValue != null) { - if (StringUtils.isNotBlank(oValue.toString())) { - oldValue = oValue.toString(); - } - } - Object nValue = map.get("newvalue"); - if (nValue != null) { - if (StringUtils.isNotBlank(nValue.toString())) { - newValue = nValue.toString(); - } - } - Object oldRealValue = map.get("oldrealvalue"); - if (oldRealValue != null) { - if (StringUtils.isNotBlank(oldRealValue.toString()) && StringUtils.isNumeric(oldRealValue.toString())) { - oldValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(oldRealValue.toString())); - } - } - - Object newrealvalue = map.get("newrealvalue"); - if (newrealvalue != null) { - if (StringUtils.isNotBlank(newrealvalue.toString()) && StringUtils.isNumeric(newrealvalue.toString())) { - newValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(newrealvalue.toString())); - } - } - - Object tablename = map.get("tablename"); - if (StringUtils.isNotBlank(tablename.toString())) { - tableName = tablename.toString(); - } else { - tableName = ""; - } - Object tablenamelabelid = map.get("tablenamelabelid"); - if (tablenamelabelid != null) { - if (tablenamelabelid != null) { - if (StringUtils.isNotBlank(tablenamelabelid.toString()) && StringUtils.isNumeric(tablenamelabelid.toString())) { - tableName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(tablenamelabelid.toString())); - } - } - } - Object dataid = map.get("dataid"); - if (StringUtils.isNotBlank(dataid.toString())) { - dataId = dataid.toString(); - } else { - dataId = ""; - } - for (Map m : lists) { - Object o = m.get("tablename"); - if (o != null) { - if (tableName.equals(o)) { - List details = (List) m.get("detailmap"); - List newDetails = new ArrayList<>(); - if (details != null && details.size() > 0) { - for (Map detail : details) { - Object data_id = detail.get("dataid"); - if (data_id != null) { - if (dataId.equals(data_id)) { - Object operator = detail.get("operator"); - if (operator != null) { - if (SalaryI18nUtil.getI18nLabel(63248, "操作(旧)").equals(operator.toString())) { - detail.put(dataIndex, oldValue); - } else if (SalaryI18nUtil.getI18nLabel(63249, "操作(新)").equals(operator.toString())) { - detail.put(dataIndex, newValue); - } - } - } else { - if (newDetails.size() > 2) { - for (Map newDetail : newDetails) { - if (dataId.equals(newDetail.get("dataid"))) { - Object operator = detail.get("operator"); - if (operator != null) { - if (SalaryI18nUtil.getI18nLabel(63248, "操作(旧)").equals(operator.toString())) { - detail.put(dataIndex, oldValue); - } else if (SalaryI18nUtil.getI18nLabel(63249, "操作(新)").equals(operator.toString())) { - detail.put(dataIndex, newValue); - } - } - } else { - HashMap detailoldMap = new HashMap<>(); - detailoldMap.put("operator", SalaryI18nUtil.getI18nLabel(63248, "操作(旧)")); - detailoldMap.put("dataid", map.get("dataid")); - detailoldMap.put(dataIndex, oldValue); - HashMap detailnewMap = new HashMap<>(); - detailnewMap.put("operator", SalaryI18nUtil.getI18nLabel(63249, "操作(新)")); - detailnewMap.put("dataid", map.get("dataid")); - detailnewMap.put(dataIndex, newValue); - newDetails.add(detailoldMap); - newDetails.add(detailnewMap); - } - } - } else if (newDetails.size() == 0) { - int count = 0; - for (Map mapdetail : details) { - Object dataid_ = mapdetail.get("dataid"); - if (dataid_ != null && dataid_.equals(dataId)) { - count++; - } - } - if (count == 0) { - HashMap detailoldMap = new HashMap<>(); - detailoldMap.put("operator", SalaryI18nUtil.getI18nLabel(63248, "操作(旧)")); - detailoldMap.put("dataid", map.get("dataid")); - detailoldMap.put(dataIndex, oldValue); - HashMap detailnewMap = new HashMap<>(); - detailnewMap.put("operator", SalaryI18nUtil.getI18nLabel(63249, "操作(新)")); - detailnewMap.put("dataid", map.get("dataid")); - detailnewMap.put(dataIndex, newValue); - newDetails.add(detailoldMap); - newDetails.add(detailnewMap); - } - } - } - } - } - } - if (newDetails.size() > 0) { - details.addAll(newDetails); - newDetails.clear(); - } - - WeaTable column = (WeaTable) m.get("column"); - if (column != null) { - List columns = column.getColumns(); - if (columns != null && columns.size() > 0) { - Boolean flag = true; - for (Object object : columns) { - WeaTableColumn weaTableColumn = JSONObject.parseObject(JSON.toJSONString(object), WeaTableColumn.class); - if (weaTableColumn != null) { - String title1 = weaTableColumn.getText(); - if (title.equals(title1)) { - flag = false; - break; - } - } - } - if (flag) { - column.getColumns().add(new WeaTableColumn(title, dataIndex, "5%")); - m.put("column", column); - } - } - } - } - } - } - } - res.put("detail", lists); - return res; - } - - - public static void switchDetailChangeValues(List list) { - for (Map map : list) { - Map repeatTableName = new HashMap<>(); - List detailContexts = (List) map.get("detailcontexts"); - List lists = new ArrayList<>(); - if (detailContexts != null) { - for (Map detailContext : detailContexts) { - List detailmap = new ArrayList<>(); - HashMap detailoldMap = new HashMap<>(); - detailoldMap.put("operator", SalaryI18nUtil.getI18nLabel(63248, "操作(旧)")); - detailoldMap.put("dataid", detailContext.get("dataid")); - HashMap detailnewMap = new HashMap<>(); - detailnewMap.put("operator", SalaryI18nUtil.getI18nLabel(63249, "操作(新)")); - detailnewMap.put("dataid", detailContext.get("dataid")); - detailmap.add(detailoldMap); - detailmap.add(detailnewMap); - WeaTable wea = new WeaTable(); - wea.getColumns().add(new WeaTableColumn(SalaryI18nUtil.getI18nLabel(63250, "操作"), "operator", "5%")); -// wea.getColumns().add(new WeaTableColumn("dataid", "dataid", true)); - Object tableName = detailContext.get("tableName"); - Object tablenamelabelid = detailContext.get("tableNameLabelId"); - if (tablenamelabelid != null) { - if (StringUtils.isNotBlank(tablenamelabelid.toString()) && StringUtils.isNumeric(tablenamelabelid.toString())) { - tableName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(tablenamelabelid.toString())); - } - } - Map m = new HashMap<>(); - if (StringUtils.isNotBlank(tableName.toString())) { - String temptablename = repeatTableName.get(tableName.toString()); - if (tableName.toString().equals(temptablename)) { - continue; - } - repeatTableName.put(tableName.toString(), tableName.toString()); - m.put("tablename", tableName.toString()); - m.put("detailmap", detailmap); - m.put("column", wea); - lists.add(m); - map.put("detail", lists); - } else { - String temptablename = repeatTableName.get(tableName.toString()); - if (tableName.toString().equals(temptablename)) { - continue; - } - repeatTableName.put(tableName.toString(), tableName.toString()); - m.put("tablename", ""); - m.put("detailmap", detailmap); - m.put("column", wea); - lists.add(m); - map.put("detail", lists); - } - } - } - List details = (List) map.get("detail"); - if (details != null) { - int size = details.size(); - int start = 0; - while (start < size) { - start++; - - for (int i = 0; i < size; i++) { - Map detail = details.get(i); - - //for (Map detail : details) { - if (details.size() > size) { - break; - } - for (Map detailContext : detailContexts) { - Object isDetail = detailContext.get("isDetail"); - if (isDetail != null) { - if ("0".equals(isDetail.toString())) { - continue; - } - } else { - continue; - } - String title = ""; - String dataIndex = ""; - String oldValue = ""; - String newValue = ""; - String tableName = ""; - String dataId = ""; - Object fieldDesc = detailContext.get("fieldDesc"); - if (StringUtils.isNotBlank(fieldDesc.toString())) { - title = fieldDesc.toString(); - } - Object fieldnamelabelid = detailContext.get("fieldNameLabelId"); - if (fieldnamelabelid != null) { - if (StringUtils.isNotBlank(fieldnamelabelid.toString()) && StringUtils.isNumeric(fieldnamelabelid.toString())) { - title = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(fieldnamelabelid.toString())); - } - } - Object fieldName = detailContext.get("fieldName"); - if (StringUtils.isNotBlank(fieldName.toString())) { - dataIndex = fieldName.toString(); - } - Object oValue = detailContext.get("oldValue"); - if (StringUtils.isNotBlank(oValue.toString())) { - oldValue = oValue.toString(); - } - Object nValue = detailContext.get("newValue"); - if (StringUtils.isNotBlank(nValue.toString())) { - newValue = nValue.toString(); - } - Object oldRealValue = detailContext.get("oldRealValue"); - if (oldRealValue != null) { - if (StringUtils.isNotBlank(oldRealValue.toString()) && StringUtils.isNumeric(oldRealValue.toString())) { - oldValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(oldRealValue.toString())); - } - } - - Object newrealvalue = detailContext.get("newRealValue"); - if (newrealvalue != null) { - if (StringUtils.isNotBlank(newrealvalue.toString()) && StringUtils.isNumeric(newrealvalue.toString())) { - newValue = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(newrealvalue.toString())); - } - } - Object tablename = detailContext.get("tableName"); - if (StringUtils.isNotBlank(tablename.toString())) { - tableName = tablename.toString(); - } else { - tableName = ""; - } - Object tablenamelabelid = detailContext.get("tableNameLabelId"); - if (tablenamelabelid != null) { - if (tablenamelabelid != null) { - if (StringUtils.isNotBlank(tablenamelabelid.toString()) && StringUtils.isNumeric(tablenamelabelid.toString())) { - tableName = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(tablenamelabelid.toString())); - } - } - } - Object dataid = detailContext.get("dataid"); - if (StringUtils.isNotBlank(dataid.toString())) { - dataId = dataid.toString(); - } else { - dataId = ""; - } - Object detailtablename = detail.get("tablename"); - if (detailtablename != null) { - if (tableName.equals(detailtablename.toString())) { - List detailmap = (List) detail.get("detailmap"); - List newDetails = new ArrayList<>(); - if (detailmap != null && detailmap.size() > 0) { - for (Map d : detailmap) { - Object data_id = d.get("dataid"); - if (data_id != null) { - if (dataId.equals(data_id)) { - Object operator = d.get("operator"); - if (operator != null) { - if (SalaryI18nUtil.getI18nLabel(63248, "操作(旧)").equals(operator.toString())) { - d.put(dataIndex, oldValue); - } else if (SalaryI18nUtil.getI18nLabel(63249, "操作(新)").equals(operator.toString())) { - d.put(dataIndex, newValue); - } - } - } else { - if (newDetails.size() > 2) { - for (Map newDetail : newDetails) { - if (dataId.equals(newDetail.get("dataid"))) { - Object operator = d.get("operator"); - if (operator != null) { - if (SalaryI18nUtil.getI18nLabel(63248, "操作(旧)").equals(operator.toString())) { - d.put(dataIndex, oldValue); - } else if (SalaryI18nUtil.getI18nLabel(63249, "操作(新)").equals(operator.toString())) { - d.put(dataIndex, newValue); - } - } - } else { - HashMap detailoldMap = new HashMap<>(); - detailoldMap.put("operator", SalaryI18nUtil.getI18nLabel(63248, "操作(旧)")); - detailoldMap.put("dataid", detailContext.get("dataid")); - detailoldMap.put(dataIndex, oldValue); - HashMap detailnewMap = new HashMap<>(); - detailnewMap.put("operator", SalaryI18nUtil.getI18nLabel(63249, "操作(新)")); - detailnewMap.put("dataid", detailContext.get("dataid")); - detailnewMap.put(dataIndex, newValue); - newDetails.add(detailoldMap); - newDetails.add(detailnewMap); - } - } - } else if (newDetails.size() == 0) { - int count = 0; - for (Map mapdetail : detailmap) { - Object dataid_ = mapdetail.get("dataid"); - if (dataid_ != null && dataid_.equals(dataId)) { - count++; - } - } - if (count == 0) { - HashMap detailoldMap = new HashMap<>(); - detailoldMap.put("operator", SalaryI18nUtil.getI18nLabel(63248, "操作(旧)")); - detailoldMap.put("dataid", detailContext.get("dataid")); - detailoldMap.put(dataIndex, oldValue); - HashMap detailnewMap = new HashMap<>(); - detailnewMap.put("operator", SalaryI18nUtil.getI18nLabel(63249, "操作(新)")); - detailnewMap.put("dataid", detailContext.get("dataid")); - detailnewMap.put(dataIndex, newValue); - newDetails.add(detailoldMap); - newDetails.add(detailnewMap); - } - } - } - } - } - } - if (newDetails.size() > 0) { - details.addAll(newDetails); - newDetails.clear(); - //detailmap = new ArrayList<>(); - //detail.put("detailmap", detailmap); - } - - WeaTable column = (WeaTable) detail.get("column"); - if (column != null) { - List columns = column.getColumns(); - if (columns != null && columns.size() > 0) { - Boolean flag = true; - for (Object object : columns) { - WeaTableColumn weaTableColumn = JSONObject.parseObject(JSON.toJSONString(object), WeaTableColumn.class); - if (weaTableColumn != null) { - String title1 = weaTableColumn.getText(); - if (title.equals(title1)) { - flag = false; - break; - } else { - flag = true; - } - } - } - if (flag) { - column.getColumns().add(new WeaTableColumn(title, dataIndex, "5%")); - detail.put("column", column); - } - } - } - } - } - } - } - } - } - } - } - - public static List getSwitchDatabaseData(List list) { - String databaseId = new RecordSet().getDBType(); - if (ElogConsts.ORACLE.equalsIgnoreCase(databaseId) || ElogConsts.SQLSERVER.equalsIgnoreCase(databaseId)) { - List arrayList = new ArrayList<>(); - for (Map map : list) { - Set en = map.entrySet(); - Map hashMap = new HashMap<>(); - for (Map.Entry entry : en) { - Object key = entry.getKey(); - Object val = null; - if ("PARAMS".equalsIgnoreCase(key.toString()) || "CUSTOMINFO".equalsIgnoreCase(key.toString()) - || entry.getValue() instanceof ClobProxyImpl || entry.getValue() instanceof Clob) { - val = JSONObject.toJSON(entry.getValue()); - } else { - val = entry.getValue(); - } - hashMap.put(key.toString().toLowerCase(), val); - } - switchDatabaseField(hashMap); - arrayList.add(hashMap); - } - return arrayList; - } else { - for (Map map : list) { - switchDatabaseField(map); - } - return list; - } - } - - public static List getSwitchDatabaseAnalysisData(List list, Map keys) { - String databaseId = new RecordSet().getDBType(); - if (!ElogConsts.MYSQL.equalsIgnoreCase(databaseId)) { - List arrayList = new ArrayList<>(); - - for (Map map : list) { - Set en = map.entrySet(); - Map hashMap = new HashMap<>(); - for (Map.Entry entry : en) { - Object key = entry.getKey(); - Object val = entry.getValue(); - if (key.toString().equalsIgnoreCase(keys.get(key.toString().toLowerCase()))) { - key = keys.get(key.toString().toLowerCase()); - } else { - key = key.toString().toLowerCase(); - } - hashMap.put(key.toString(), val); - } - arrayList.add(hashMap); - } - return arrayList; - } - return list; - } - - /** - * 获取多个模块名称 - * - * @param modules - * @return - */ - public static Map getModuleNames(List modules) { - Map hashMap = new HashMap<>(); - if (modules == null || modules.size() == 0) { - return hashMap; - } - for (String module : modules) { - String modulenum = ElogSeviceUtils.null2String(moduleMap.get(module), module); - String modulename = ElogSeviceUtils.isLongValue(modulenum) ? SalaryI18nUtil.getI18nLabel(Integer.parseInt(modulenum), modulenum) : modulenum; - hashMap.put(module, modulename); - } - return hashMap; - - } - -// private static String StringConversionForXSS(String str) { -// if (StringUtils.isBlank(str)) -// return str; -// //判断是否是json串 是json串的话也直接返回 -// if (isJSONString(str)) -// return str; -// // 判断是否为前端标签类型字符串或带< 或 >的字符串,用false方法 /<(\\w+)[^>]*>(.*?<\\/\\1>)?/ -// Pattern pattern = Pattern.compile("[<>]"); -// Matcher matcher = pattern.matcher(str); -// if (matcher.find()) -// return SecurityUtil.encodeForHtml(str, false); -// //都不是则用true方法 -// return SecurityUtil.encodeForHtml(str, true); -// -// } - - - /** - * 判断是否为json字符串 - * - * @param content - * @return - */ - public static boolean isJSONString(String content) { - if (StringUtils.isEmpty(content)) { - return false; - } - if (!content.startsWith("{") || !content.endsWith("}")) { - if (!content.startsWith("[") || !content.endsWith("]")) { - return false; - } - } - try { - JSONObject.parse(content); - return true; - } catch (Exception e) { - return false; - } - } - - public static List getNameModule(String module) { - if (StringUtils.isBlank(module)) { - return new ArrayList<>(); - } - Map> dataMap = new HashMap<>(); - moduleMap.forEach((k, v) -> { - List list = new ArrayList<>(); - Integer moduleCode = moduleMap.get(k); - String htmlLabelName = SalaryI18nUtil.getI18nLabel(moduleCode, ""); - if (dataMap.containsKey(htmlLabelName)) { - list = dataMap.get(htmlLabelName); - list.add(k); - } else { - list.add(k); - } - dataMap.put(htmlLabelName, list); - }); - return Objects.isNull(dataMap.get(module)) ? Arrays.asList(module) : dataMap.get(module); - } -} diff --git a/src/com/engine/salary/elog/util/ElogSeviceUtils.java b/src/com/engine/salary/elog/util/ElogSeviceUtils.java deleted file mode 100644 index 58ca9ec31..000000000 --- a/src/com/engine/salary/elog/util/ElogSeviceUtils.java +++ /dev/null @@ -1,528 +0,0 @@ -package com.engine.salary.elog.util; - -import com.engine.salary.constant.SalaryDefaultTenantConstant; -import com.engine.salary.elog.entity.dto.LoggerContext; -import com.engine.salary.elog.enums.FromTerminalType; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.servlet.http.HttpServletRequest; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import java.util.zip.GZIPInputStream; -import java.util.zip.GZIPOutputStream; - -/** - * @Date: 2022/5/18 23:34 - * @Author: deli.xu - * @Description: elog服务工具类 - **/ -public class ElogSeviceUtils { - - private static final Logger logger = LoggerFactory.getLogger(ElogSeviceUtils.class); - - /*@Autowired - private ComInfoCache comInfoCache; - private static ComInfoCache baseComInfoCache; - - @PostConstruct - public void init() { - baseComInfoCache = comInfoCache; - }*/ - - private static final String TABLE_SPACER = "_"; - private static final String TABLE_SUFFIX = "logs"; - private static final String DETAIL_TABLE_SUFFIX = "_detail"; - public static final String BASE_TABLE = "BASE_ELOG_TABLE"; - - - public static String getTableName(String module, String function) { - return getTableName(module, function, false); - } - - public static String getTableName(String module, String function, boolean isDetail) { - String tablename = module + TABLE_SPACER + function + TABLE_SUFFIX + (isDetail ? DETAIL_TABLE_SUFFIX : ""); -// SecurityUtil.sqlCheck(tablename); - return tablename; - } - - /** - * String 转枚举 - * - * @param c - * @param string - * @param - * @return - */ - public static > T getEnumFromString(Class c, String string) { - if (c != null && string != null) { - try { - return Enum.valueOf(c, string.trim().toUpperCase()); - } catch (IllegalArgumentException ex) { - } - } - return null; - } - - /** - * 获取ip地址 - * - * @param request - * @return - */ - public static String getIp(HttpServletRequest request) { - String ipAddress = request.getHeader("x-forwarded-for"); - String unknown = "unknown"; - if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) { - ipAddress = request.getHeader("Proxy-Client-IP"); - } - if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) { - ipAddress = request.getHeader("WL-Proxy-Client-IP"); - } - if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) { - ipAddress = request.getRemoteAddr(); - String benji = "127.0.0.1"; - String bj = "0:0:0:0:0:0:0:1"; - if (benji.equals(ipAddress) || bj.equals(ipAddress)) { - ///根据网卡取本机配置的IP - InetAddress inet = null; - try { - inet = InetAddress.getLocalHost(); - } catch (UnknownHostException e) { - logger.error("UnknownHostException", e); - } - if (inet != null) { - ipAddress = inet.getHostAddress(); - } - } - } - ///对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 - int i = 15; - String s = ","; - if (ipAddress != null && ipAddress.length() > i) { - if (ipAddress.indexOf(s) > 0) { - ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); - } - } - return ipAddress; - } - - /** - * 获取设备信息 - * - * @param request - * @return - */ - public static String getDevice(HttpServletRequest request) { - return request.getHeader("User-Agent"); - } - - /** - * 获取来自终端的信息 - * - * @param context - * @param request - * @return - */ - public static void getFromTerminal(LoggerContext context, HttpServletRequest request) { - String fromTerminal = context.getFromTerminal(); - if (StringUtils.isEmpty(fromTerminal)) { - String device = getDevice(request); - String setFT = ""; - if (StringUtils.isNotEmpty(device)) { - context.setFromTerminal(getFromTerminal(device)); - } - } - } - - - private static String getTraceId(HttpServletRequest request) { - String traceId = request.getHeader("traceId"); - if (StringUtils.isNotBlank(traceId)) { - //System.out.println("traceId:====="+traceId); - return traceId; - } - return ""; - } - - /** - * @param request - * @return localhost:9080/api/fs/demo/updateReport - */ - public static String getRequestUrl(HttpServletRequest request) { - if (Objects.isNull(request) || Objects.isNull(request.getRequestURL())) { - return null; - } - return request.getRequestURL().toString(); - } - - /** - * @param request - * @return /api/fs/demo/updateReport - */ - public static String getRequestUri(HttpServletRequest request) { - return request.getRequestURI(); - } - - /** - * @param request - * @return GET/POST - */ - public static String getRequestMethod(HttpServletRequest request) { - return request.getMethod(); - } - - -// /** -// * 获取当前方法中的日志实体类 -// * @return -// */ -// public static LoggerContext currentElogContext() { -// return ElogThreadLocal.currentLoggerContext(); -// } - - - public static int getIntValue(String v) { - return getIntValue(v, -1); - } - - public static int getIntValue(String v, int def) { - try { - return Integer.parseInt(v); - } catch (Exception var3) { - return def; - } - } - - public static long getLongValue(String v) { - return getLongValue(v, -1l); - } - - public static long getLongValue(String v, long def) { - try { - return Long.parseLong(v); - } catch (Exception var3) { - return def; - } - } - - public static boolean isLongValue(String v) { - try { - Long.parseLong(v); - } catch (Exception e) { - return false; - } - return true; - } - - - -// /** -// * 获取request请求 -// * -// * @return -// */ -// public static HttpServletRequest getRequest() { -// return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); -// } - - /** - * 将对象转换程字符串 - * - * @param obj 目标对象 - * @param def 如果为null时的默认值 - * @return - */ - public static String null2String(Object obj, String def) { - return obj == null ? def : obj.toString(); - } - - public static String null2String(Object obj) { - return null2String(obj, ""); - } - - public static int getIntValue(Object obj, int def) { - try { - return Integer.parseInt(null2String(obj)); - } catch (Exception ex) { - return def; - } - } - -// public static Page getPage() { -// HttpServletRequest request = getRequest(); -// String num = request.getParameter("pageNum"); -// String size = request.getParameter("pageSize"); -// -// Page page = new Page(ElogSeviceUtils.getIntValue(num, 1), ElogSeviceUtils.getIntValue(size, 10)); -// return page; -// } - -// public static void main(String[] args) { -// //System.out.println(getTableName("select", "from")); -// //DataTypeEnum columnTypeEnum = getEnumFromString(DataTypeEnum.class, "varchar"); -// } - - public static List switchString(List list) { - if (list != null) { - return list.stream().map(m -> { - Set en = m.entrySet(); - for (Map.Entry entry : en) { - if (entry.getValue() != null) { - entry.setValue(String.valueOf(entry.getValue())); - } - } - return m; - }).collect(Collectors.toList()); - } else { - return list; - } - } - - public static List switchComplexString(List list) { - if (list != null) { - return list.stream().map(m -> { - Iterator iterator = m.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry next = iterator.next(); - if (next.getValue() != null) { - if (next.getValue() instanceof Map && "parmas".equals(next.getKey())) { - next.setValue(String.valueOf(next.getValue())); - } - if (next.getValue() instanceof List) { - } else { - next.setValue(String.valueOf(next.getValue())); - } - } - } - return m; - }).collect(Collectors.toList()); - } else { - return list; - } - } - - public static String getTenantKey() { - return SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY; - } - - public static String getEmployeeId() { - return ""; - } - -// public static String getUserName() { -// -// String employeeId = getEmployeeId(); -// if (StringUtils.isNotEmpty(employeeId)) { -// SimpleEmployee simpleEmployee = null; -// try { -// HrmCommonUtil hrmCommonUtil = (HrmCommonUtil) ApplicationContextProvider.getBean("hrmCommonUtil"); -// simpleEmployee = hrmCommonUtil.getSimpleEmployee(ElogSeviceUtils.getLongValue(employeeId)); -// } catch (Exception e) { -// logger.error("Exception", e); -// } -// if (simpleEmployee != null) { -// if (StringUtils.isNotBlank(simpleEmployee.getUsername())) { -// return simpleEmployee.getUsername(); -// } -// } -// } -// -// -// return ""; -// } - -// /** -// * 获取rpc信息(客户端ip和来源设备) -// * -// * @param context -// */ -// public static void initRpcInfo(LoggerContext context) { -// String device = ""; -// String clientIp = ""; -// String traceId = ""; -// try { -// device = RpcContext.getContext().getAttachment(EteamsConstant.DEVICE); -// clientIp = RpcContext.getContext().getAttachment(EteamsConstant.CLIENT_IP); -// traceId = RpcContext.getContext().getAttachment(ApmConstant.TRACE_ID); -// logger.info("rpc调用获取到 device:{},clientIp:{},traceId:{}", device, clientIp, traceId); -// } catch (Exception e) { -// logger.error("Exception", e); -// } -// if (StringUtils.isEmpty(context.getDevice()) && StringUtils.isNotEmpty(device)) { -// context.setDevice(device); -// } -// if (StringUtils.isEmpty(context.getFromTerminal()) && StringUtils.isNotEmpty(device)) { -// context.setFromTerminal(getFromTerminal(device)); -// } -// -// if (StringUtils.isEmpty(context.getClientIp()) && StringUtils.isNotEmpty(clientIp)) { -// context.setClientIp(clientIp); -// } -// if (StringUtils.isEmpty(context.getBelongMainId()) && StringUtils.isNotEmpty(traceId)) { -// context.setBelongMainId(traceId); -// } -// } - - public static String getFromTerminal(String device) { - String setFT = ""; - if (StringUtils.isNotEmpty(device)) { - if (!device.contains("wxwork") && device.contains("MicroMessenger")) {//来自微信 - setFT = FromTerminalType.MICO_MSG.getCode(); - } else if (device.contains("wxwork") && device.contains("MicroMessenger")) {//企业微信 - setFT = FromTerminalType.WECHAT.getCode(); - } else if (device.contains("iPhone") && device.contains("Mac")) {//来自 Iphone - setFT = FromTerminalType.IOS.getCode(); - } else if (device.contains("Mac OS") && !device.contains("iPhone") && device.contains("weapp-pc")) {//来自 mac_client - setFT = FromTerminalType.MAC_CLIENT.getCode();//mac_client - } else if (!device.contains("wxwork") && device.contains("Mobile")) {//移动端 - setFT = FromTerminalType.H5.getCode(); - } else if (device.contains("Android") && !device.contains("wxwork")) {//来自安卓 包含安卓并且不包含微信 - setFT = FromTerminalType.ANDROID.getCode(); - } else {//pc - setFT = FromTerminalType.PC.getCode(); - } - } - return setFT; - } - - /** - * sql连接条件注入sql - * - * @param condition - * @return - */ - public static String checkConditionSql(String condition) { - if ("AND".equalsIgnoreCase(condition) || - "OR".equalsIgnoreCase(condition) - ) { - return condition; - } - return "AND"; - } - - public static String checkTypeSql(String type) { - if ("LIKE".equalsIgnoreCase(type) || - "IN".equalsIgnoreCase(type) || - "!<>".equalsIgnoreCase(type) || - "!=".equalsIgnoreCase(type) || - "BETWEEN".equalsIgnoreCase(type) || - "IS NULL".equalsIgnoreCase(type) || - "IS NULL".equalsIgnoreCase(type) || - "=".equalsIgnoreCase(type) || - "IS NOT NULL".equalsIgnoreCase(type)) { - return type; - } - return "="; - } - - /** - * sql条件防止注入 - * - * @param value - * @return - */ - public static String checkValSql(String value) { - if (StringUtils.isBlank(value)) { - return ""; - } - Pattern p = Pattern.compile("\\s+"); - Matcher m = p.matcher(value); - String val = m.replaceAll(" "); - String[] keywords = {"master ", "truncate ", "declare ", "alert ", "create ", "drop ", " version", - "show ", "table ", "index ", "insert ", "into ", "from ", - "select ", "delete ", "update ", "mid ", "master ", "char ","union "}; - - String replaceStr = val.replaceAll(" ", ""); - if (replaceStr.contains("1=1") || replaceStr.contains(";")) { - return "-1"; - } - int count = 0; - String filterVal = ""; - for (String keyddlword : keywords) { - if (val.toLowerCase().contains(keyddlword)) { - count++; - if (count == 1) { - filterVal = keyddlword; - } - } - } - - if (count > 2) { - return filterVal; - } -// value = SecurityUtil.ecodeForSql(value); - - return value; - } - - /** - * 压缩工具类- - * - * @param str - * @return desc:version 0.0.1 基于jdk自带 GZIP 压缩。最后转成base64。 - * 市面上有其他压缩像jdk 的 deflate 可以设置压缩级别,但是都是主动的,需要改业务方法, - * snappy 压缩适用于大数据压缩。大数据量比较快 hadoop首选,但是压缩后比例比较大。 - * xz 下的 压缩比率大,但是解压比较慢-不提倡,空间换时间了 - * common下的压缩其实和jdk差不多,网上说优于jdk,但是相差不大。 - * weaver 压缩基于jdk - */ - public static String compress(String str) { - if (str == null || str.trim().length() == 0) { - return str; - } - try (ByteArrayOutputStream out = new ByteArrayOutputStream(); - GZIPOutputStream gzip = new GZIPOutputStream(out)) { - gzip.write(str.getBytes()); - gzip.close(); - return Base64.getEncoder().encodeToString(out.toByteArray()); - } catch (Exception e) { - logger.error("压缩失败", e.getMessage()); - return str; - } - - } - - - /** - * 解压缩 - * - * @param str - * @return - */ - public static String uncompress(String str) { - byte[] decode = Base64.getDecoder().decode(str); - if (str == null || str.trim().length() == 0) { - return str; - } - try (ByteArrayOutputStream out = new ByteArrayOutputStream(); - ByteArrayInputStream in = new ByteArrayInputStream(decode)) { - GZIPInputStream ungzip = new GZIPInputStream(in); - byte[] buffer = new byte[2048]; - int n; - while ((n = ungzip.read(buffer)) >= 0) { - out.write(buffer, 0, n); - } - return new String(out.toByteArray()); - } catch (Exception e) { - logger.error("解缩失败:{}", e.getMessage()); - return str; - } - } - - public static Boolean checkIsNumber(Object obj) { - if (obj == null) { - return false; - } - - return StringUtils.isNumeric(obj.toString()); - - } -} diff --git a/src/com/engine/salary/elog/util/ElogUtils.java b/src/com/engine/salary/elog/util/ElogUtils.java deleted file mode 100644 index 38edd827d..000000000 --- a/src/com/engine/salary/elog/util/ElogUtils.java +++ /dev/null @@ -1,713 +0,0 @@ -package com.engine.salary.elog.util; - -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSONObject; -import com.engine.salary.elog.entity.dto.LoggerContext; -import com.engine.salary.elog.enums.FromTerminalType; -import com.engine.salary.elog.threadlocal.ElogThreadLocal; -import org.apache.commons.lang3.StringUtils; -import org.apache.dubbo.common.utils.CollectionUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; -import weaver.hrm.User; - -import javax.servlet.http.HttpServletRequest; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import java.util.zip.GZIPInputStream; -import java.util.zip.GZIPOutputStream; - -/** - * @ClassName: ElogUtils - * @Description TODO - * @Author tanghj - * @Date 2021/3/12 14:17 - */ -@Component -public class ElogUtils { - - private static final Logger logger = LoggerFactory.getLogger(ElogUtils.class); - - - - private static final String TABLE_SPACER = "_"; - private static final String TABLE_SUFFIX = "logs"; - private static final String DETAIL_TABLE_SUFFIX = "_detail"; - public static final String BASE_TABLE = "BASE_ELOG_TABLE"; - - public String getApplicationName() { - return applicationName; - } - - public void setApplicationName(String applicationName) { - this.applicationName = applicationName; - } - -// @Value("${spring.application.name}") - public static String applicationName; - - - - public static String getTableName(String module, String function) { - return getTableName(module, function, false); - } - - public static String getTableName(String module, String function, boolean isDetail) { - String tablename = module + TABLE_SPACER + function + TABLE_SUFFIX + (isDetail ? DETAIL_TABLE_SUFFIX : ""); -// SecurityUtil.sqlCheck(tablename); - return tablename; - } - - /** - * String 转枚举 - * - * @param c - * @param string - * @param - * @return - */ - public static > T getEnumFromString(Class c, String string) { - if (c != null && string != null) { - try { - return Enum.valueOf(c, string.trim().toUpperCase()); - } catch (IllegalArgumentException ex) { - } - } - return null; - } - - /** - * 获取ip地址 - * - * @param request - * @return - */ - public static String getIp(HttpServletRequest request) { - String ipAddress = request.getHeader("x-forwarded-for"); - String unknown = "unknown"; - if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) { - ipAddress = request.getHeader("Proxy-Client-IP"); - } - if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) { - ipAddress = request.getHeader("WL-Proxy-Client-IP"); - } - if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) { - ipAddress = request.getRemoteAddr(); - String benji = "127.0.0.1"; - String bj = "0:0:0:0:0:0:0:1"; - if (benji.equals(ipAddress) || bj.equals(ipAddress)) { - ///根据网卡取本机配置的IP - InetAddress inet = null; - try { - inet = InetAddress.getLocalHost(); - } catch (UnknownHostException e) { - logger.error("UnknownHostException", e); - } - if (inet != null) { - ipAddress = inet.getHostAddress(); - } - } - } - ///对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 - int i = 15; - String s = ","; - if (ipAddress != null && ipAddress.length() > i) { - if (ipAddress.indexOf(s) > 0) { - ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); - } - } - return ipAddress; - } - - /** - * 获取设备信息 - * - * @param request - * @return - */ - public static String getDevice(HttpServletRequest request) { - return request.getHeader("User-Agent"); - } - - /** - * 获取来自终端的信息 - * - * @param context - * @param request - * @return - */ - public static void getFromTerminal(LoggerContext context, HttpServletRequest request) { - String fromTerminal = context.getFromTerminal(); - if (StringUtils.isEmpty(fromTerminal)) { - String device = getDevice(request); - String setFT = ""; - if (StringUtils.isNotEmpty(device)) { - context.setFromTerminal(getFromTerminal(device)); - } - } - } - - public static void initRequestInfo(HttpServletRequest request, LoggerContext context) { - if (StringUtils.isEmpty(context.getRequestUrl())) { - context.setRequestUrl(getRequestUrl(request)); - } - if (StringUtils.isEmpty(context.getRequestUri())) { - context.setRequestUri(getRequestMethod(request) + ":" + getRequestUri(request)); - } - //if (context.getParams() == null) { - //默认记录params,此参数给true时 或报表服务,不记录 - if (!context.getParamsIgnore() && !applicationName.equalsIgnoreCase("weaver-edcreportd-service")) { - context.setParams(getRequstParam(request,context)); - } - // } - if (StringUtils.isEmpty(context.getClientIp())) { - context.setClientIp(getIp(request)); - } - if (StringUtils.isEmpty(context.getDevice())) { - context.setDevice(getDevice(request)); - } - if (StringUtils.isEmpty(context.getFromTerminal())) { - context.setFromTerminal(getFromTerminal(getDevice(request))); - } - if (StringUtils.isEmpty(context.getBelongMainId())) { - context.setBelongMainId(getTraceId(request)); - } - - } - - private static String getTraceId(HttpServletRequest request) { - String traceId = request.getHeader("traceId"); - if (StringUtils.isNotBlank(traceId)) { - //System.out.println("traceId:====="+traceId); - return traceId; - } - return ""; - } - - /** - * @param request - * @return localhost:9080/api/fs/demo/updateReport - */ - public static String getRequestUrl(HttpServletRequest request) { - if (Objects.isNull(request) || Objects.isNull(request.getRequestURL())) { - return null; - } - return request.getRequestURL().toString(); - } - - /** - * @param request - * @return /api/fs/demo/updateReport - */ - public static String getRequestUri(HttpServletRequest request) { - return request.getRequestURI(); - } - - /** - * @param request - * @return GET/POST - */ - public static String getRequestMethod(HttpServletRequest request) { - return request.getMethod(); - } - - public static Map getRequstParam(HttpServletRequest request, LoggerContext context) { - return request2Map(request, context); - } - - /** - * 获取当前方法中的日志实体类 - * - * @return - */ - public static LoggerContext currentElogContext() { - return ElogThreadLocal.currentLoggerContext(); - } - - public static Map request2Map(HttpServletRequest request, LoggerContext context) { - // 参数Map - Map properties = request.getParameterMap(); - // 返回值Map - Map returnMap = new HashMap(); - Iterator entries = properties.entrySet().iterator(); - Map.Entry entry; - String name = ""; - Object value = null; - while (entries.hasNext()) { - entry = (Map.Entry) entries.next(); - name = (String) entry.getKey(); - Object valueObj = entry.getValue(); - if (null == valueObj) { - value = null; - } else if (valueObj instanceof String[]) { - String[] values = (String[]) valueObj; - if (values.length == 1) { - value = values[0]; - } else { - value = values; - } - } else { - value = valueObj.toString(); - } - returnMap.put(name, value); - } - //放入ip - returnMap.put("param_ip", getIp(request)); - returnMap.put("request_header_user_agent", request.getHeader("user-agent")); - JSONObject body = ElogThreadLocal.getRequestBody(); - if (body != null) { -// returnMap.put("request_body", body); - setReturnMapBody(returnMap,context.getParamsBodyKeys(),body); - } - return returnMap; - } - - public static void setReturnMapBody(Map returnMap,List keys,JSONObject body) { - //模块没设置则全部记录 - if (CollectionUtils.isEmpty(keys)) { - returnMap.put("request_body", body); - }else { - JSONObject newBody = new JSONObject(); - for (String key : keys) { - newBody.put(key,body.get(key)); - } - returnMap.put("request_body", newBody); - } - } - - public static int getIntValue(String v) { - return getIntValue(v, -1); - } - - public static int getIntValue(String v, int def) { - try { - return Integer.parseInt(v); - } catch (Exception var3) { - return def; - } - } - - public static long getLongValue(String v) { - return getLongValue(v, -1l); - } - - public static long getLongValue(String v, long def) { - try { - return Long.parseLong(v); - } catch (Exception var3) { - return def; - } - } - - - /** - * 将对象转换程字符串 - * - * @param obj 目标对象 - * @param def 如果为null时的默认值 - * @return - */ - public static String null2String(Object obj, String def) { - return obj == null ? def : obj.toString(); - } - - public static String null2String(Object obj) { - return null2String(obj, ""); - } - - public static int getIntValue(Object obj, int def) { - try { - return Integer.parseInt(null2String(obj)); - } catch (Exception ex) { - return def; - } - } - -// public static Page getPage() { -// HttpServletRequest request = getRequest(); -// String num = request.getParameter("pageNum"); -// String size = request.getParameter("pageSize"); -// -// Page page = new Page(ElogUtils.getIntValue(num, 1), ElogUtils.getIntValue(size, 10)); -// return page; -// } - -// public static void main(String[] args) { -// //System.out.println(getTableName("select", "from")); -// //DataTypeEnum columnTypeEnum = getEnumFromString(DataTypeEnum.class, "varchar"); -// } - - public static List switchString(List list) { - if (list != null) { - return list.stream().map(m -> { - Set en = m.entrySet(); - for (Map.Entry entry : en) { - if (entry.getValue() != null) { - entry.setValue(String.valueOf(entry.getValue())); - } - } - return m; - }).collect(Collectors.toList()); - } else { - return list; - } - } - - public static List switchComplexString(List list) { - if (list != null) { - return list.stream().map(m -> { - Iterator iterator = m.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry next = iterator.next(); - if (next.getValue() != null) { - if (next.getValue() instanceof Map && "parmas".equals(next.getKey())) { - next.setValue(String.valueOf(next.getValue())); - } - if (next.getValue() instanceof List) { - } else { - next.setValue(String.valueOf(next.getValue())); - } - } - } - return m; - }).collect(Collectors.toList()); - } else { - return list; - } - } - - /** - * 获取rpc信息(客户端ip和来源设备) - * - * @param context - */ - public static void initRpcInfo(LoggerContext context) { - User user = context.getUser(); - if(user == null){ - return; - } - String device = user.getLogintype(); - String clientIp = user.getLoginip(); - String traceId = ""; - if (StringUtils.isEmpty(context.getDevice()) && StringUtils.isNotEmpty(device)) { - context.setDevice(device); - } - if (StringUtils.isEmpty(context.getFromTerminal()) && StringUtils.isNotEmpty(device)) { - context.setFromTerminal(getFromTerminal(device)); - } - - if (StringUtils.isEmpty(context.getClientIp()) && StringUtils.isNotEmpty(clientIp)) { - context.setClientIp(clientIp); - } - if (StringUtils.isEmpty(context.getBelongMainId()) && StringUtils.isNotEmpty(traceId)) { - context.setBelongMainId(traceId); - } - } - - public static String getFromTerminal(String device) { - String setFT = ""; - if (StringUtils.isNotEmpty(device)) { - if (!device.contains("wxwork") && device.contains("MicroMessenger")) {//来自微信 - setFT = FromTerminalType.MICO_MSG.getCode(); - } else if (device.contains("wxwork") && device.contains("MicroMessenger")) {//企业微信 - setFT = FromTerminalType.WECHAT.getCode(); - } else if (device.contains("iPhone") && device.contains("Mac")) {//来自 Iphone - setFT = FromTerminalType.IOS.getCode(); - } else if (device.contains("Mac OS") && !device.contains("iPhone") && device.contains("weapp-pc")) {//来自 mac_client - setFT = FromTerminalType.MAC_CLIENT.getCode();//mac_client - } else if (!device.contains("wxwork") && device.contains("Mobile")) {//移动端 - setFT = FromTerminalType.H5.getCode(); - } else if (device.contains("Android") && !device.contains("wxwork")) {//来自安卓 包含安卓并且不包含微信 - setFT = FromTerminalType.ANDROID.getCode(); - } else {//pc - setFT = FromTerminalType.PC.getCode(); - } - } - return setFT; - } - - /** - * sql连接条件注入sql - * - * @param condition - * @return - */ - public static String checkConditionSql(String condition) { - if ("AND".equalsIgnoreCase(condition) || - "OR".equalsIgnoreCase(condition) - ) { - return condition; - } - return "AND"; - } - - public static String checkTypeSql(String type) { - if ("LIKE".equalsIgnoreCase(type) || - "IN".equalsIgnoreCase(type) || - "!<>".equalsIgnoreCase(type) || - "!=".equalsIgnoreCase(type) || - "BETWEEN".equalsIgnoreCase(type) || - "IS NULL".equalsIgnoreCase(type) || - "IS NULL".equalsIgnoreCase(type) || - "=".equalsIgnoreCase(type) || - "IS NOT NULL".equalsIgnoreCase(type)) { - return type; - } - return "="; - } - - /** - * sql条件防止注入 - * - * @param value - * @return - */ - public static String checkValSql(String value) { - Pattern p = Pattern.compile("\\s+"); - Matcher m = p.matcher(value); - String val = m.replaceAll(" "); - String[] keywords = {"master", "truncate", "declare", "alert", "create", "drop", "version", - "show", "table", "index", "insert", "into", "from", - "insert", "select", "delete", "update", "chr", "mid", "master", "truncate", "char", "declare", "union"}; - - - int count = 0; - String filterVal = ""; - for (String keyddlword : keywords) { - if (val.toLowerCase().contains(keyddlword)) { - count++; - if (count == 1) { - filterVal = keyddlword; - } - } - } - - if (count > 2) { - return filterVal; - } -// value = SecurityUtil.ecodeForSql(value); - - return value; - } - - /** - * 压缩工具类- - * - * @param str - * @return desc:version 0.0.1 基于jdk自带 GZIP 压缩。最后转成base64。 - * 市面上有其他压缩像jdk 的 deflate 可以设置压缩级别,但是都是主动的,需要改业务方法, - * snappy 压缩适用于大数据压缩。大数据量比较快 hadoop首选,但是压缩后比例比较大。 - * xz 下的 压缩比率大,但是解压比较慢-不提倡,空间换时间了 - * common下的压缩其实和jdk差不多,网上说优于jdk,但是相差不大。 - * weaver 压缩基于jdk - */ - public static String compress(String str) { - if (str == null || str.trim().length() == 0) { - return str; - } - try (ByteArrayOutputStream out = new ByteArrayOutputStream(); - GZIPOutputStream gzip = new GZIPOutputStream(out)) { - gzip.write(str.getBytes()); - gzip.close(); - return Base64.getEncoder().encodeToString(out.toByteArray()); - } catch (Exception e) { - logger.error("压缩失败", e.getMessage()); - return str; - } - - } - - - /** - * 解压缩 - * - * @param str - * @return - */ - public static String uncompress(String str) { - byte[] decode = Base64.getDecoder().decode(str); - if (str == null || str.trim().length() == 0) { - return str; - } - try (ByteArrayOutputStream out = new ByteArrayOutputStream(); - ByteArrayInputStream in = new ByteArrayInputStream(decode)) { - GZIPInputStream ungzip = new GZIPInputStream(in); - byte[] buffer = new byte[2048]; - int n; - while ((n = ungzip.read(buffer)) >= 0) { - out.write(buffer, 0, n); - } - return new String(out.toByteArray()); - } catch (Exception e) { - logger.error("解缩失败:{}", e.getMessage()); - return str; - } - } - - public static LoggerContext getEsField(LoggerContext context, String field) { - - switch (field.toLowerCase()) { - case "interfacename": - context.setInterfaceName(""); - break; - case "operatetype": - context.setOperateType(""); - break; - case "operatedesc": - context.setOperatedesc(""); - break; - case "params": - context.setParamsStr("ES"); - break; - case "clientip": - context.setClientIp(""); - break; - case "groupnamelabel": - context.setGroupNameLabel(""); - break; - case "redoservice": - context.setRedoService(""); - break; - case "redocontext": - context.setRedoContextStr(""); - break; - case "cancelservice": - context.setCancelService(""); - break; - case "cancelcontext": - context.setCancelContextStr(""); - break; - case "device": - context.setDevice(""); - break; - case "groupid": - context.setGroupId(""); - break; - case "belongmainid": - context.setBelongMainId(""); - break; - case "requesturl": - context.setRequestUrl(""); - break; - case "requesturi": - context.setRequestUri(""); - break; - case "log_result": - context.setResult(""); - break; - case "fromterminal": - context.setFromTerminal(""); - break; - case "resultdesc": - context.setResultDesc(""); - break; - case "old_content": - context.setOld_content(""); - break; - case "link_type": - context.setLink_type(""); - break; - } - - return context; - } - - public static String[] getESfields(String value) { - String[] split = value.split(","); - List list = new ArrayList<>(); - for (String s : split) { - switch (s.toLowerCase()) { - case "interfacename": - list.add("interfacename"); - break; - case "operatetype": - list.add("operatetype"); - break; - case "operatedesc": - list.add("operatedesc"); - break; - case "params": - list.add("params"); - break; - case "clientip": - list.add("clientip"); - break; - case "groupnamelabel": - list.add("groupnamelabel"); - break; - case "redoservice": - list.add("redoservice"); - break; - case "redocontext": - list.add("redocontext"); - break; - case "cancelservice": - list.add("cancelservice"); - break; - case "cancelcontext": - list.add("cancelcontext"); - break; - case "device": - list.add("device"); - break; - case "groupid": - list.add("groupid"); - break; - case "belongmainid": - list.add("belongmainid"); - break; - case "requesturl": - list.add("requesturl"); - break; - case "requesturi": - list.add("requesturi"); - break; - case "log_result": - list.add("logResult"); - break; - case "fromterminal": - list.add("fromterminal"); - break; - case "resultdesc": - list.add("resultdesc"); - break; - case "old_content": - list.add("oldContent"); - break; - case "link_type": - list.add("linkType"); - break; - } - } - //list转为数组 - if (list.size() > 0) { - String[] strings = list.toArray(new String[list.size()]); - return strings; - } - return null; - } - - public static String handleClobColumn(String value) { - // 处理超长字符串,oracle插入报错ORA-01704: string literal too long - if (StringUtils.isBlank(value)){ - return ""; - } - StringBuilder formatValue = new StringBuilder(); - String[] split = StrUtil.split(value, 1000); - for (int i = 0; i < split.length; i++) { - formatValue.append("TO_CLOB('").append(split[i]).append("')"); - if (i != split.length - 1) { - formatValue.append("||"); - } - } - return formatValue.toString(); - } - -} diff --git a/src/com/engine/salary/elog/util/FieldNameMap.java b/src/com/engine/salary/elog/util/FieldNameMap.java deleted file mode 100644 index dcde0258c..000000000 --- a/src/com/engine/salary/elog/util/FieldNameMap.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.engine.salary.elog.util; - -import org.apache.commons.lang3.StringUtils; - -import java.util.HashMap; -import java.util.Map; - -/** - * @ClassName: FieldNameMap - * @Description TODO - * @Author tanghj - * @Date 2021/3/31 14:27 - */ -public class FieldNameMap { - - private static Map mainFieldNameMap = new HashMap<>(); - - private static Map detailFieldNameMap = new HashMap<>(); - - private static Map> mainCusFieldNameMap = new HashMap<>(); - - private static Map> detailCusFieldNameMap = new HashMap<>(); - - - public static void setMainFieldName(Map fieldNameMap) { - mainFieldNameMap.putAll(fieldNameMap); - } - - public static void setDetailFieldName(Map fieldNameMap) { - detailFieldNameMap.putAll(fieldNameMap); - } - - public static void setMainCusFieldName(String module, String function, Map fieldNameMap) { - mainCusFieldNameMap.put(getKey(module, function), fieldNameMap); - } - - public static void setDetailCusFieldName(String module, String function, Map fieldNameMap) { - detailCusFieldNameMap.put(getKey(module, function), fieldNameMap); - } - - - public static String getMainFieldNameMap(String module, String function, String key) { - - String str = key.toLowerCase(); - if(mainFieldNameMap.containsKey(str)) { - return StringUtils.isNotEmpty(mainFieldNameMap.get(str)) ? mainFieldNameMap.get(str) : key; - } else { - return getMainCusFieldNameMap(module, function,key); - } - } - - public static String getDetailFieldNameMap(String module, String function, String key) { - key = key.toLowerCase(); - if(detailFieldNameMap.containsKey(key)) { - return StringUtils.isNotEmpty(detailFieldNameMap.get(key)) ? detailFieldNameMap.get(key) : key; - } else { - return getDetailCusFieldNameMap(module, function, key); - } - } - - public static String getMainCusFieldNameMap(String module, String function, String key) { - - if(mainCusFieldNameMap.containsKey(getKey(module, function))) { - if(mainCusFieldNameMap.get(getKey(module, function)).containsKey(key)) { - return StringUtils.isNotEmpty(mainCusFieldNameMap.get(getKey(module, function)).get(key)) ? - mainCusFieldNameMap.get(getKey(module, function)).get(key) : - key; - } else { - return key; - } - } else { - return key; - } - } - - public static String getDetailCusFieldNameMap(String module, String function, String key) { - - if(detailCusFieldNameMap.containsKey(getKey(module, function))) { - if(detailCusFieldNameMap.get(getKey(module, function)).containsKey(key)) { - return StringUtils.isNotEmpty(detailCusFieldNameMap.get(getKey(module, function)).get(key)) ? - detailCusFieldNameMap.get(getKey(module, function)).get(key) : - key; - } else { - return key; - } - } else { - return key; - } - } - - private static String getKey(String module, String function) { - return module + "@" + function; - } -} diff --git a/src/com/engine/salary/elog/util/LoggerTemplate.java b/src/com/engine/salary/elog/util/LoggerTemplate.java deleted file mode 100644 index 842f72783..000000000 --- a/src/com/engine/salary/elog/util/LoggerTemplate.java +++ /dev/null @@ -1,630 +0,0 @@ -package com.engine.salary.elog.util; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.parser.Feature; -import com.alibaba.fastjson.serializer.SerializerFeature; -import com.engine.salary.constant.SalaryDefaultTenantConstant; -import com.engine.salary.elog.annotation.ElogTransform; -import com.engine.salary.elog.async.LoggerMessageListener; -import com.engine.salary.elog.entity.dto.LoggerContext; -import com.engine.salary.elog.entity.dto.LoggerDetailContext; -import com.engine.salary.elog.entity.dto.TableChangeBean; -import com.engine.salary.util.db.IdGenerator; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import org.apache.commons.lang3.ArrayUtils; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import weaver.hrm.User; - -import java.lang.reflect.Field; -import java.util.*; - -/** - * @ClassName: LoggerTemplate - * @Description 日志基本功能类 - * @Author tanghj - * @Date 2021/2/10 14:18 - */ -//@Component -public class LoggerTemplate { - protected String function = "common"; - - protected String module; - - protected String logCenterQueue = "Elog_cneterlogQueue"; - - public static final String AUDITLOGQUEUE = "AuditLog"; - public static final String ELOG = "Elog"; - - protected String localQueue; - - protected String moduleName; - - protected static String applicationName; - - public void setApplicationName(String applicationName) { - LoggerTemplate.applicationName = applicationName; - } - - public String getApplicationName() { - return applicationName; - } - - private static final Logger logger = LoggerFactory.getLogger(LoggerTemplate.class); - - protected static String publishkitGroup; - - public void setPublishkitGroup(String publishkitGroup) { - LoggerTemplate.publishkitGroup = publishkitGroup; - } - - public String getPublishkitGroup() { - return publishkitGroup; - } - - - LoggerMessageListener loggerMessageListener = new LoggerMessageListener(); - - /** - * 写入日志消息队列 - * - * @param context 日志实体 - */ - public void write(LoggerContext context) { - this.write(context, true); - } - - /** - * 写入日志消息队列 - * - * @param context 日志实体 - * @param isLocal true 存储本地, false不存储本地 - */ - public void write(LoggerContext context, boolean isLocal) { - String elogLocalQueue = ELOG + this.applicationName; - if (StringUtils.isEmpty(this.localQueue)) - this.localQueue = (StringUtils.isNotEmpty(this.moduleName) ? this.moduleName : elogLocalQueue) + "LocalQueue" + this.publishkitGroup; - try { - handleContext(context); - } catch (Exception e) { - logger.error("handleContext方法异常!{}", e.getMessage(), e); - } - loggerMessageListener.receiveold(context); - - } - -// public void writeLocal(LoggerContext context){ -// String elogLocalQueue = ELOG + this.applicationName; -// if(StringUtils.isEmpty(this.localQueue)) -// this.localQueue = (StringUtils.isNotEmpty(this.moduleName) ? this.moduleName : elogLocalQueue) + "LocalQueue" + this.publishkitGroup; -// AsyncBean asyncBean = new AsyncBean<>(); -// handleContext(context); -// if (context.getWeakElogReocrd() && CollectionUtils.isEmpty(context.getDetailContexts() )) { -// logger.info("日志弱控且没有明细记录,不记录日志,modulename:{},functionname:{}",context.getModuleName(),context.getFunctionName()); -// return; -// } -// -// try { -// asyncBean.setMessage(context); -// asyncBean.setQueue(localQueue); -// asyncClient.send(asyncBean); -// } catch (Exception e) { -// logger.error("发送writeLocal-mq消息异常!{}",e.getMessage(),e); -// } -// } - - -// public void checkAsyncBean(AsyncBean asyncBean) { -// int length = JSON.toJSON(asyncBean).toString().getBytes(StandardCharsets.UTF_8).length / 1000; -// boolean checkPass = length <= 5120; -// if (!checkPass) -// throw new RuntimeException("消息体超出5M,不支持发送!"); -// } - -// /** -// * 没有明细变化可以不写入日志 -// * @param context 日志信息 -// * @param isLocal 是否写入本地 -// * @param notChangeDetailSendLog 没有明细变化不写入日志 -// */ -// public void write(LoggerContext context, boolean isLocal,boolean notChangeDetailSendLog){ -// String elogLocalQueue = ELOG + this.applicationName; -// if(StringUtils.isEmpty(this.localQueue)) -// this.localQueue = (StringUtils.isNotEmpty(this.moduleName) ? this.moduleName : elogLocalQueue) + "LocalQueue"; -// AsyncBean asyncBean = new AsyncBean<>(); -// handleContext(context); -// -// if (notChangeDetailSendLog && (context.getDetailContexts() == null || context.getDetailContexts().size() == 0)) { -// return; -// } -// try { -// asyncBean.setMessage(context); -// asyncBean.setQueue(logCenterQueue); -// asyncClient.send(asyncBean); -// writeHrmLog(context); -// if(isLocal) { -// asyncBean.setQueue(localQueue); -// asyncClient.send(asyncBean); -// } -// } catch (Exception e) { -// logger.error("发送mq消息异常!{}",e.getMessage(),e); -// } -// -// } - -// /** -// * 支持了向其他模块服务发送业务日志 -// * @param context -// * @param isLocal -// * @param moduleName -// */ -// public void write(LoggerContext context, boolean isLocal, String moduleName){ -// -// if(StringUtils.isNotEmpty(moduleName)) { -// String localQueue = moduleName + "LocalQueue"; -// // context.setModuleName(moduleName); -// AsyncBean asyncBean = new AsyncBean<>(); -// handleContext(context); -// try { -// asyncBean.setMessage(context); -// asyncBean.setQueue(logCenterQueue); -// asyncClient.send(asyncBean); -// writeHrmLog(context); -// if(isLocal) { -// asyncBean.setQueue(localQueue); -// asyncClient.send(asyncBean); -// } -// } catch (Exception e) { -// logger.error("发送mq消息异常!:{}",e.getMessage()); -// } -// } else { -// write(context, isLocal); -// } -// -// } - -// public void writeHrmLog(LoggerContext context) { -// AsyncBean asyncBean = new AsyncBean<>(); -// handleContext(context); -// asyncBean.setMessage(context); -// //asyncBean.setTopic(WRITEAUDITLOGTOPIC); -// asyncBean.setQueue(AUDITLOGQUEUE); -// asyncClient.send(asyncBean); -// -// } - -// /** -// * 支持了向其他模块服务发送业务日志 -// * @param context -// * @param isLocal -// * @param moduleName -// */ -// public void write(LoggerContext context, boolean isLocal, String moduleName,String functionName,String queueName){ -// -// if (StringUtils.isNotEmpty(moduleName) && StringUtils.isNotEmpty(functionName)) { -// context.setModuleName(moduleName); -// context.setFunctionName(functionName); -// this.localQueue = queueName + "LocalQueue"; -// AsyncBean asyncBean = new AsyncBean<>(); -// handleContext(context); -// try { -// asyncBean.setMessage(context); -// asyncBean.setQueue(logCenterQueue); -// asyncClient.send(asyncBean); -// writeHrmLog(context); -// if (isLocal) { -// asyncBean.setQueue(localQueue); -// asyncClient.send(asyncBean); -// } -// } catch (Exception e) { -// logger.error("发送mq消息异常!,{}!",e); -// } -// } else { -// write(context, isLocal); -// } -// -// } - - private void handleContext(LoggerContext context) { - if (StringUtils.isEmpty(context.getModuleName())) - context.setModuleName(module); - if (StringUtils.isEmpty(context.getFunctionName())) - context.setFunctionName(function); - if (!(context.getId() > 0)) - context.setId(IdGenerator.generate()); - if (StringUtils.isEmpty(context.getUuid())) { - context.setUuid(UUID.randomUUID().toString().replace("-", "")); - } - - context.setTempParams(null); - String employeeId = Optional.ofNullable(context.getUser()).map(User::getUID).orElse(0).toString(); - String tenantKey = SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY; - String userName = Optional.ofNullable(context.getUser()).map(User::getUsername).orElse("").toString(); - if (StringUtils.isEmpty(context.getOperator()) && StringUtils.isNotEmpty(employeeId)) { - context.setOperator(employeeId + ""); - } - if (StringUtils.isEmpty(context.getTenant_key()) && StringUtils.isNotEmpty(tenantKey)) { - context.setTenant_key(tenantKey); - } - if (StringUtils.isEmpty(context.getOperatorName()) && StringUtils.isNotEmpty(userName)) { - context.setOperatorName(userName); - } - //} - - if (StringUtils.isBlank(context.getOperator()) || "null".equals(context.getOperator())) { - context.setOperator("-1"); - } - if (StringUtils.isBlank(context.getTargetId()) || "null".equals(context.getTargetId())) { - context.setTargetId("-1"); - } - -// RequestAttributes requestAttributes = SalaryContext.get().getRequestAttributesSafely(); -// if ((requestAttributes instanceof ServletRequestAttributes)) { -// HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest(); -// ElogUtils.initRequestInfo(request, context); -// } else { -// if (StringUtils.isEmpty(context.getRequestUrl())) { -// context.setRequestUrl("非http请求"); -// } -// ElogUtils.initRpcInfo(context); -// } - ElogUtils.initRpcInfo(context); - - List changeBeans = context.getChangeValues(); - - List valueChangeList = new ArrayList<>(); - int showOrder = 0; - if (changeBeans != null) - for (TableChangeBean changeBean : changeBeans) { - if (changeBean != null && (changeBean.getNewValue() != null || changeBean.getOldValue() != null)) { - String uuid = UUID.randomUUID().toString().replace("-", ""); - ApiModel apiModel = null; - ElogTransform tableTransform = null; - JSONObject newJo = new JSONObject(); - JSONObject oldJo = new JSONObject(); - JSONObject valueChange = JSONObject.parseObject(JSONObject.toJSONString(changeBean, SerializerFeature.WriteDateUseDateFormat), Feature.OrderedField); - Field[] fields = null; - if (changeBean.getNewValue() != null) { - apiModel = changeBean.getNewValue().getClass().getAnnotation(ApiModel.class); - tableTransform = changeBean.getNewValue().getClass().getAnnotation(ElogTransform.class); - //fields = changeBean.getNewValue().getClass().getDeclaredFields(); - fields = getAllFields(changeBean.getNewValue().getClass()); - newJo = valueChange.getJSONObject("newValue"); - } else { - apiModel = changeBean.getOldValue().getClass().getAnnotation(ApiModel.class); - tableTransform = changeBean.getOldValue().getClass().getAnnotation(ElogTransform.class); - //fields = changeBean.getOldValue().getClass().getDeclaredFields(); - fields = getAllFields(changeBean.getOldValue().getClass()); - } - if (changeBean.getOldValue() != null) { - oldJo = valueChange.getJSONObject("oldValue"); - } - if ((apiModel != null || tableTransform != null) && fields != null) { - - for (Field field : fields) { - if (StringUtils.isEmpty(newJo.getString(field.getName())) && StringUtils.isEmpty(oldJo.getString(field.getName()))) { - continue; - } - if (StringUtils.isNotEmpty(newJo.getString(field.getName())) && newJo.getString(field.getName()).equals(oldJo.getString(field.getName()))) { - continue; - } - - ApiModelProperty apiModelProperty = field.getAnnotation(ApiModelProperty.class); - ElogTransform fieldElogTransform = field.getAnnotation(ElogTransform.class); - LoggerDetailContext valueChangeBean = new LoggerDetailContext(); - if (fieldElogTransform != null && fieldElogTransform.ignore()) { - continue; - } - - //todo 若analyticList为true 且 新旧值属于JSONArray 解析List - if (fieldElogTransform != null && fieldElogTransform.analyticList() && fieldElogTransform.analyticListClass() != void.class) { - analyticListMethod(field, newJo, oldJo, valueChangeList, fieldElogTransform); - continue; - } - - valueChangeBean.setUuid(uuid); - valueChangeBean.setTableName(tableTransform != null && StringUtils.isNotEmpty(tableTransform.name()) ? tableTransform.name() : changeBean.getTableName()); - valueChangeBean.setTableNameDesc(tableTransform != null && StringUtils.isNotEmpty(tableTransform.tablename()) ? tableTransform.tablename() : ""); - valueChangeBean.setTableNameLabelId(tableTransform != null && tableTransform.labelId() != -1 ? tableTransform.labelId() + "" : ""); - valueChangeBean.setIsDetail(changeBean.getIsDetail()); - valueChangeBean.setFieldName(field.getName()); - valueChangeBean.setFieldDesc(fieldElogTransform != null ? fieldElogTransform.name() : apiModelProperty != null ? apiModelProperty.value() : field.getName()); - valueChangeBean.setFieldNameLabelId(fieldElogTransform != null ? fieldElogTransform.labelId() + "" : "-1"); - valueChangeBean.setDataid(StringUtils.isNotEmpty(changeBean.getDataid()) ? changeBean.getDataid() : - StringUtils.isNoneEmpty(newJo.getString("id")) ? newJo.getString("id") : oldJo.getString("id")); - valueChangeBean.setBelongDataid(StringUtils.isNotEmpty(changeBean.getBelongDataid()) ? changeBean.getBelongDataid() : ""); - - valueChangeBean.setNewValue(newJo.getString(field.getName())); - valueChangeBean.setOldValue(oldJo.getString(field.getName())); - valueChangeBean.setCreator(-1l); - try { - extracted(newJo, oldJo, field, fieldElogTransform, valueChangeBean); - } catch (Exception e) { - logger.error("转换出错:{}", e); - //System.out.println("转换出错:" + e.getMessage()); - } - - - valueChangeBean.setShoworder(showOrder++); - valueChangeList.add(valueChangeBean); - } - } else { - Set keys = new HashSet<>(); - for (String key : (Set) newJo.keySet()) { - keys.add(key); - if (newJo.getString(key).equals(oldJo.getString(key))) { - continue; - } - LoggerDetailContext valueChangeBean = new LoggerDetailContext(); - valueChangeBean.setUuid(uuid); - valueChangeBean.setTableName(changeBean.getTableName()); - valueChangeBean.setIsDetail(changeBean.getIsDetail()); - valueChangeBean.setDataid(StringUtils.isNotEmpty(changeBean.getDataid()) ? changeBean.getDataid() : - StringUtils.isNoneEmpty(newJo.getString("id")) ? newJo.getString("id") : oldJo.getString("id")); - valueChangeBean.setBelongDataid(StringUtils.isNotEmpty(changeBean.getBelongDataid()) ? changeBean.getBelongDataid() : ""); - valueChangeBean.setFieldName(key); - valueChangeBean.setFieldDesc(key); - valueChangeBean.setNewValue(newJo.getString(key)); - valueChangeBean.setOldValue(oldJo.getString(key)); - valueChangeBean.setShoworder(showOrder++); - valueChangeBean.setCreator(-1l); - valueChangeList.add(valueChangeBean); - } - for (String key : (Set) oldJo.keySet()) { - if (keys.contains(key)) - continue; - keys.add(key); - if (oldJo.getString(key).equals(newJo.getString(key))) { - continue; - } - LoggerDetailContext valueChangeBean = new LoggerDetailContext(); - valueChangeBean.setTableName(changeBean.getTableName()); - valueChangeBean.setIsDetail(changeBean.getIsDetail()); - valueChangeBean.setFieldName(key); - valueChangeBean.setFieldDesc(key); - valueChangeBean.setNewValue(newJo.getString(key)); - valueChangeBean.setOldValue(oldJo.getString(key)); - valueChangeBean.setShoworder(showOrder++); - valueChangeBean.setCreator(-1l); - valueChangeList.add(valueChangeBean); - } - } - } - } - - if (valueChangeList.size() > 0) - context.setDetailContexts(valueChangeList); - } - - - private void analyticListMethod(Field field, JSONObject newJo, JSONObject oldJo, List valueChangeList, ElogTransform tableTransform) { - JSONArray newValueArr = newJo.get(field.getName()) == null ? new JSONArray() : (JSONArray) newJo.get(field.getName()); - JSONArray oldvalueArr = oldJo.get(field.getName()) == null ? new JSONArray() : (JSONArray) oldJo.get(field.getName()); - Field[] allFields = getAllFields(tableTransform.analyticListClass()); - - - Boolean oldvalueIsNull = false; - Boolean newvalueIsNull = false; - - if (oldvalueArr.size() == 0) { - oldvalueIsNull = true; - } - if (newValueArr.size() == 0) { - newvalueIsNull = true; - } - if ((oldvalueIsNull && newvalueIsNull) || (!oldvalueIsNull && !newvalueIsNull && oldvalueArr.size() != newValueArr.size())) { - //如果新、旧没值或新旧值list数量对不上 直接返回 - return; - } - - JSONArray foreachArr = oldvalueIsNull ? newValueArr : oldvalueArr; - - //遍历list - for (int i = 0; i < foreachArr.size(); i++) { - //默认另一个list关系是一一对应的 - JSONObject oldValue = oldvalueIsNull ? new JSONObject() : (JSONObject) oldvalueArr.get(i); - JSONObject newValue = newvalueIsNull ? new JSONObject() : (JSONObject) newValueArr.get(i); - - //dataid uuid showOrder - long dataid = IdGenerator.generate(); - String uuid = UUID.randomUUID().toString().replace("-", ""); - int showOrder = 0; - - //遍历字段 - for (Field allField : allFields) { - if (StringUtils.isEmpty(newValue.getString(allField.getName())) && StringUtils.isEmpty(oldValue.getString(allField.getName()))) { - continue; - } - if (StringUtils.isNotEmpty(newValue.getString(allField.getName())) && newValue.getString(allField.getName()).equals(oldValue.getString(allField.getName()))) { - continue; - } - - ApiModelProperty apiModelProperty = allField.getAnnotation(ApiModelProperty.class); - ElogTransform fieldElogTransform = allField.getAnnotation(ElogTransform.class); - LoggerDetailContext valueChangeBean = new LoggerDetailContext(); - - valueChangeBean.setUuid(uuid); - valueChangeBean.setTableName(tableTransform != null && StringUtils.isNotEmpty(tableTransform.name()) ? tableTransform.name() : field.getName()); - valueChangeBean.setTableNameDesc(tableTransform != null && StringUtils.isNotEmpty(tableTransform.tablename()) ? tableTransform.tablename() : ""); - valueChangeBean.setTableNameLabelId(tableTransform != null && tableTransform.labelId() != -1 ? tableTransform.labelId() + "" : ""); - valueChangeBean.setIsDetail(1); - valueChangeBean.setFieldName(allField.getName()); - valueChangeBean.setNewValue(newValue.getString(allField.getName())); - valueChangeBean.setOldValue(oldValue.getString(allField.getName())); - valueChangeBean.setCreator(-1l); - valueChangeBean.setBelongDataid(""); - valueChangeBean.setDataid(String.valueOf(dataid)); - - if (fieldElogTransform != null) { - if (fieldElogTransform.ignore()) { - continue; - } - - valueChangeBean.setFieldDesc(fieldElogTransform != null ? fieldElogTransform.name() : apiModelProperty != null ? apiModelProperty.value() : field.getName()); - valueChangeBean.setFieldNameLabelId(fieldElogTransform != null ? fieldElogTransform.labelId() + "" : "-1"); - - try { - extracted(newValue, oldValue, allField, fieldElogTransform, valueChangeBean); - } catch (Exception e) { - logger.error("转换出错", e); - //System.out.println("转换出错:" + e.getMessage()); - } - - valueChangeBean.setShoworder(showOrder++); - } else { - valueChangeBean.setFieldDesc(allField.getName()); - valueChangeBean.setShoworder(showOrder++); - - } - valueChangeList.add(valueChangeBean); - } - } - } - - private void extracted(JSONObject newJo, JSONObject oldJo, Field field, ElogTransform fieldElogTransform, LoggerDetailContext valueChangeBean) { - JSONObject jo = null; - if (fieldElogTransform != null && StringUtils.isNotEmpty(fieldElogTransform.valuesKVPairs())) { - jo = JSONObject.parseObject(fieldElogTransform.valuesKVPairs()); - if (jo != null) { - valueChangeBean.setNewRealValue(jo.getString(newJo.getString(field.getName()))); - valueChangeBean.setOldRealValue(jo.getString(oldJo.getString(field.getName()))); - } - } - } - - public void setModuleName(String moduleName) { - this.moduleName = moduleName; - } - - public void setLocalQueue(String localQueue) { - this.localQueue = localQueue; - } - - public String getFunction() { - return function; - } - - public void setFunction(String function) { - this.function = function; - } - - public String getModule() { - return module; - } - - /** - * 获取日志实体类 - * - * @return - */ - public LoggerContext getContext() { - - LoggerContext loggerContext = new LoggerContext(); - loggerContext.setUuid(UUID.randomUUID().toString().replace("-", "")); - loggerContext.setModuleName(this.module); - loggerContext.setFunctionName(this.function); - - return loggerContext; - - } - - public void setModule(String module) { - this.module = module; - } - -// public void setAsyncClient(AsyncClient asyncClient) { -// this.asyncClient = asyncClient; -// } - - - public static Field[] getAllFields(Class obj) { - Class superclass = obj.getSuperclass(); - Field[] superField = null; - //获取父类 - if (superclass != Object.class) { - superField = superclass.getDeclaredFields(); - } - //获取当前类 - Field[] nowfield = obj.getDeclaredFields(); - return addFields(superField, nowfield); - } - - public static Field[] addFields(Field[] superFields, Field[] fields) { - - return ArrayUtils.addAll(superFields, fields); - - } - - public void write(List context, boolean isLocal) { - context.forEach(loggerContext -> { - this.write(loggerContext, isLocal); - }); - } - - - public void write(List context) { - context.forEach(loggerContext -> { - this.write(loggerContext); - }); - } - -// public void writeAsync(LoggerContext context, boolean isLocal){ -// String applicationNameBak = this.applicationName; -// String localQueueBak = this.localQueue; -// String moduleNameBak = this.moduleName; -// String pk = this.publishkitGroup; -// LocalRunnable localRunnable = new LocalRunnable() { -// @Override -// public void execute() { -// String localQueueBakBak = localQueueBak; -// String elogLocalQueue = ELOG + applicationNameBak; -// if(StringUtils.isEmpty(localQueueBakBak)) -// localQueueBakBak = (StringUtils.isNotEmpty(moduleNameBak) ? moduleNameBak : elogLocalQueue) + "LocalQueue" + pk; -// AsyncBean asyncBean = new AsyncBean<>(); -// handleContext(context); -// if (context.getWeakElogReocrd() && CollectionUtils.isEmpty(context.getDetailContexts() )) { -// logger.info("日志弱控且没有明细记录,不记录日志,modulename:{},functionname:{}",context.getModuleName(),context.getFunctionName()); -// return; -// } -// try { -// asyncBean.setMessage(context); -// asyncBean.setQueue(logCenterQueue); -// checkAsyncBean(asyncBean);//检查消息体大小 -// asyncClient.send(asyncBean); -// writeHrmLog(context); -// if(isLocal) { -// asyncBean.setQueue(localQueueBakBak); -// asyncClient.send(asyncBean); -// } -// } catch (Exception e) { -// logger.error("发送mq消息异常!{}",e.getMessage(),e); -// } -// } -// }; -// ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "LoggerTemplate_writeAsync", localRunnable); -// -// } -// -// /** -// * 回滚队列 -// * -// * @param context -// */ -// public void writeRollBack(LoggerContext context){ -// String elogRollBackQueue = ELOG + this.applicationName + "RollBackQueue" + this.publishkitGroup; -// AsyncBean asyncBean = new AsyncBean<>(); -// -// try { -// asyncBean.setMessage(context); -// asyncBean.setQueue(elogRollBackQueue); -// checkAsyncBean(asyncBean);//检查消息体大小 -// asyncClient.send(asyncBean); -// } catch (Exception e) { -// logger.error("发送mq消息异常!{}",e.getMessage(),e); -// } -// } - -} diff --git a/src/com/engine/salary/elog/util/LoggerTemplateBuilder.java b/src/com/engine/salary/elog/util/LoggerTemplateBuilder.java deleted file mode 100644 index 14ae29945..000000000 --- a/src/com/engine/salary/elog/util/LoggerTemplateBuilder.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.engine.salary.elog.util; - -/** - * @ClassName: LoggerTemplateBuilder - * @Description 日志基本类构造器 - * @Author tanghj - * @Date 2021/2/10 14:18 - */ -public class LoggerTemplateBuilder { - - public static LoggerTemplate build(String module){ - return build(module, "common"); - } - public static LoggerTemplate build(String module, String function){ - LoggerTemplate loggerTemplate = new LoggerTemplate(); - loggerTemplate.setFunction(function); - loggerTemplate.setModule(module); - - return loggerTemplate; - } -} diff --git a/src/com/engine/salary/elog/web/LoggerTableController.java b/src/com/engine/salary/elog/web/LoggerTableController.java deleted file mode 100644 index fe85d3045..000000000 --- a/src/com/engine/salary/elog/web/LoggerTableController.java +++ /dev/null @@ -1,200 +0,0 @@ -package com.engine.salary.elog.web; - -import com.engine.common.util.ServiceUtil; -import com.engine.salary.elog.entity.param.ELogGetLogParam; -import com.engine.salary.elog.entity.param.GetDetailChangesParam; -import com.engine.salary.elog.service.ILoggerTableService; -import com.engine.salary.elog.service.impl.LoggerTableService; -import com.engine.salary.util.ResponseResult; -import com.engine.salary.util.page.PageInfo; -import io.swagger.v3.oas.annotations.parameters.RequestBody; -import weaver.hrm.HrmUserVarify; -import weaver.hrm.User; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import java.util.List; -import java.util.Map; - -public class LoggerTableController { - - private ILoggerTableService getLoggerTableService(User user) { - return ServiceUtil.getService(LoggerTableService.class, user); - } - - /** - * 获取日志 - * - * @param request - * @param response - * @param data - * @return - */ - @POST - @Path("/getLogs") - @Produces(MediaType.APPLICATION_JSON) - public String getLogs(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody String data) { - User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getLoggerTableService(user)::queryLogs, data); - } - - /** - * 获取日志(卡片) - * - * @param request - * @param response - * @param data - * @return - */ - @POST - @Path("/getCardLogs") - @Produces(MediaType.APPLICATION_JSON) - public String carddatas(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody String data) { - User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>>(user).run(getLoggerTableService(user)::queryCardLogList, data); - } - - /** - * 获取单条操作记录的更新明细 - * @param request - * @param response - * @param param - * @return - */ - @POST - @Path("/getDetailChanges") - @Produces(MediaType.APPLICATION_JSON) - public String getDetailChanges(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody GetDetailChangesParam param) { - User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getLoggerTableService(user)::getDetailChanges, param); - } -// @ApiOperation("获取单条操作记录的更新明细") -// @POST -// @Path("/getDetailChanges") -// @Produces(MediaType.APPLICATION_JSON) -// public String getDetailChanges(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody String data) { -// User user = HrmUserVarify.getUser(request, response); -// return new ResponseResult>>(user).run(getLoggerTableService(user)::getDetailChanges, data); -// } -// -// /** -// * 获取单条操作记录的更新明细(分页) -// * -// * @param module 服务(模块)名 -// * @param function 方法名 -// * @param mainid 主键id -// * @param detailTransMethod 转换方法 -// * @param current 页码 -// * @param pageSize 每页条数 -// * @return WeaTable -// */ -// @ApiOperation("获取单条操作记录的更新明细(分页)") -// @RequestMapping(path = "getDetailChangePages", method = {RequestMethod.GET, RequestMethod.POST}) -// @WeaPermission(publicPermission = true) -// public WeaResult getDetailChangePages(@PathVariable("module") @ApiParam("服务(模块)名") String module, -// @PathVariable("function") @ApiParam("方法名") String function, -// @RequestParam("mainid") @ApiParam("主键id") String mainid, -// @RequestParam("detailTransMethod") @ApiParam("转换方法") String detailTransMethod, -// @RequestParam("page") @ApiParam("页码") String current, -// @RequestParam("pageSize") @ApiParam("每页条数") String pageSize) { -// return WeaResult.success(getLoggerTableService(user).getDetailChangePages(module, function, mainid, detailTransMethod, current, pageSize)); -// } - - /** - * 获取日志列表 - * - * @param request - * @param response - * @param param - * @return - */ - @POST - @Path("/datas") - @Produces(MediaType.APPLICATION_JSON) - public String datas(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody ELogGetLogParam param) { - User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getLoggerTableService(user)::queryLogList, param); - } - - -// @ApiOperation("获取日志总数") -// @RequestMapping(path = "counts", method = {RequestMethod.GET, RequestMethod.POST}) -// @WeaPermission(publicPermission = true) -// public WeaResult> counts(@PathVariable("module") @ApiParam("服务(模块)名") String module, -// @PathVariable("function") @ApiParam("方法名") String function) { -// return WeaResult.success(getLoggerTableService(user).countLog(module, function), "success"); -// } -// -// @ApiOperation("获取明细日志列表") -// @RequestMapping(path = "detaildatas", method = {RequestMethod.GET, RequestMethod.POST}) -// @WeaPermission(publicPermission = true) -// public WeaResult>> detaildatas(@PathVariable("module") @ApiParam("服务(模块)名") String module, -// @PathVariable("function") @ApiParam("方法名") String function, -// @Param("pageSize") @ApiParam("每页多少数据") String pageSize, -// @Param("current") @ApiParam("当前页") String current, -// @Param("mainId") @ApiParam("主表id") String mainId, -// @ApiParam("查询条件") String condition) { -// -// if ("datasecurity".equals(module) && "auditLog".equals(function)) { -// try { -// ILoggerTableService tableService = ApplicationContextProvider.getBean("auditLogService", ILoggerTableService.class); -// if (tableService != null) { -// List> list = tableService.queryDetailLogList(module, function, current, pageSize, condition, mainId); -// return WeaResult.success(list); -// } -// } catch (Exception e) { -// -// } -// } -// List> list = getLoggerTableService(user).queryDetailLogList(module, function, current, pageSize, condition, mainId); -// return WeaResult.success(list); -// } -// -// @ApiOperation("获取日志总数") -// @RequestMapping(path = "detailcounts", method = {RequestMethod.GET, RequestMethod.POST}) -// @WeaPermission(publicPermission = true) -// public WeaResult> detailcounts(@PathVariable("module") @ApiParam("服务(模块)名") String module, -// @PathVariable("function") @ApiParam("方法名") String function, -// @Param("mainId") @ApiParam("主表id") String mainId) { -// return WeaResult.success(getLoggerTableService(user).countDestailLog(module, function, mainId), "success"); -// } -// -// @ApiOperation("根据traceId获取链路列表") -// @RequestMapping(path = "queryLogTraceInfo", method = {RequestMethod.GET, RequestMethod.POST}) -// @WeaPermission(publicPermission = true) -// public WeaResult queryLogTraceInfo(@PathVariable("module") @ApiParam("服务(模块)名") String module, -// @PathVariable("function") @ApiParam("方法名") String function, -// @Param("traceId") @ApiParam("traceId") String traceId, -// @Param("currentPage") @ApiParam("currentPage") Integer currentPage, -// @Param("pageSize") @ApiParam("pageSize") Integer pageSize, -// @Param("traceTransMethod") @ApiParam("traceTransMethod") String traceTransMethod -// ) { -// -// if ("datasecurity".equals(module) && "auditLog".equals(function)) { -// try { -// ILoggerTableService tableService = ApplicationContextProvider.getBean("auditLogService", ILoggerTableService.class); -// if (tableService != null) { -// return WeaResult.success(tableService.queryElogTraceInfo(traceId, module, function, currentPage, pageSize, traceTransMethod), "success"); -// } -// } catch (Exception e) { -// -// } -// } -// -// return WeaResult.success(getLoggerTableService(user).queryElogTraceInfo(traceId, module, function, currentPage, pageSize, traceTransMethod), "success"); -// } -// -// @ApiOperation("日志下载") -// @RequestMapping(path = "downloadLog", method = {RequestMethod.GET, RequestMethod.POST}) -// @WeaPermission(publicPermission = true) -// public WeaResult downloadLog(@RequestBody(required = false) @ApiParam("数据") String data) { -// -// BatchDocumentMessage message = getLoggerTableService(user).downloadLog(data); -// return WeaResult.success(message); -// } -} diff --git a/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.java b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.java deleted file mode 100644 index c5547e753..000000000 --- a/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.engine.salary.mapper.elog; - -import com.engine.salary.elog.entity.dto.TableColumnBean; -import org.apache.ibatis.annotations.Param; - -import java.util.List; -import java.util.Map; -import java.util.Set; - -public interface ElogTableCheckerMapper { - Long getVersion(@Param("mainTable") String mainTable); - - void recordVersion(@Param("id") long id, @Param("mainTable") String mainTable, @Param("version") long version); - - void createMainTable(@Param("mainTable") String mainTable); - - void createDetailTable(@Param("detailTable") String detailTable); - - List getTableStructure(@Param("tableName") String tableName); - - void createElogTable(@Param("createElogSql") String createElogSql); - - Map getTableIndex(@Param("tableName") String tableName, @Param("columnName") String columnName); - - Map getDataBase(); - - void createTableIndex(@Param("tableName") String tableName, @Param("columnName") String columnName, @Param("id") long id); - - List getAllExistTables(@Param("tableNames") Set tables); -} diff --git a/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml b/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml deleted file mode 100644 index 3581e1039..000000000 --- a/src/com/engine/salary/mapper/elog/ElogTableCheckerMapper.xml +++ /dev/null @@ -1,451 +0,0 @@ - - - - - insert into hrsa_elog_version (id, maintable, version) values (#{id},#{mainTable},#{version}) - - - - create table ${mainTable} - ( - id bigint comment 'ID', - create_time datetime default current_timestamp , - update_time datetime default current_timestamp , - creator bigint, - delete_type int, - tenant_key varchar(10), - uuid char(36), - log_date datetime default current_timestamp , - log_operator varchar(50), - operatorName varchar(50), - targetId varchar(50), - targetName text, - modulename varchar(100), - functionname varchar(100), - interfaceName varchar(100), - requesturl varchar(200), - requesturi varchar(200), - operateType varchar(50), - operatetypename varchar(100), - operatedesc varchar(1000), - params longtext, - belongmainid varchar(36), - clientIp varchar(50), - groupid varchar(50), - device varchar(200), - groupNameLabel varchar(500), - redoService varchar(200), - redoContext longtext, - cancelService varchar(200), - cancelContext longtext, - totalruntime bigint, - mainruntime bigint, - log_result varchar(100), - fromterminal varchar(100), - resultdesc text, - old_content varchar(1000), - link_type varchar(20), - link_id bigint, - old_link_id bigint, - PRIMARY KEY (id) - ) - - - - create table ${mainTable} - ( - id number(*,0) not null primary key, - create_time date default sysdate, - update_time date default sysdate, - creator number(*,0), - delete_type number(*,0), - tenant_key varchar2(10), - uuid varchar2(36), - log_date date default sysdate, - log_operator varchar2(50), - operatorName varchar2(50), - targetId varchar2(50), - targetName varchar2(4000), - modulename varchar2(100), - functionname varchar2(100), - interfaceName varchar2(100), - requesturl varchar2(200), - requesturi varchar2(200), - operateType varchar2(50), - operatetypename varchar2(100), - operatedesc varchar2(1000), - params clob, - belongmainid varchar2(36), - clientIp varchar2(200), - groupid varchar2(50), - device varchar2(200), - groupNameLabel varchar2(500), - redoService varchar2(200), - redoContext varchar2(4000), - cancelService varchar2(200), - cancelContext varchar2(4000), - totalruntime number(*,0), - mainruntime number(*,0), - log_result varchar2(4000), - fromterminal varchar2(100), - resultdesc varchar2(4000), - old_content varchar2(1000), - link_type varchar2(20), - link_id number(*,0), - old_link_id number(*,0) - ) - - - create table ${mainTable} - ( - id bigint not null primary key, - create_time datetime default getdate(), - update_time datetime default getdate(), - creator bigint default '-1', - delete_type bigint default 0, - tenant_key nvarchar(10), - uuid nvarchar(36), - log_date datetime default getdate(), - device nvarchar(500), - log_operator bigint default '-1', - operatorname nvarchar(100), - targetid bigint default '-1', - targetname nvarchar(3000), - modulename nvarchar(100), - functionname nvarchar(100), - interfacename nvarchar(100), - requesturl nvarchar(200), - requesturi nvarchar(200), - operatetype nvarchar(50), - operatetypename nvarchar(100), - operatedesc nvarchar(3000), - params nvarchar(max), - belongmainid nvarchar(36), - clientip nvarchar(200), - groupid nvarchar(50), - groupnamelabel nvarchar(1000), - redoservice nvarchar(200), - redocontext nvarchar(3000), - cancelservice nvarchar(200), - cancelcontext nvarchar(3000), - totalruntime bigint default 0, - mainruntime bigint default 0, - log_result nvarchar(100), - fromterminal nvarchar(100), - resultdesc nvarchar(3000), - old_content nvarchar(3000), - link_type nvarchar(20), - link_id bigint default 0, - old_link_id bigint default 0 - ) - - - create table ${mainTable} - ( - id int8 not null primary key, - create_time timestamp default current_timestamp, - update_time timestamp default current_timestamp, - creator int8, - delete_type int, - tenant_key varchar(10), - uuid varchar(36), - log_date timestamp default current_timestamp, - log_operator varchar(50), - operatorName varchar(50), - targetId varchar(50), - targetName text, - modulename varchar(100), - functionname varchar(100), - interfaceName varchar(100), - requesturl varchar(200), - requesturi varchar(200), - operateType varchar(50), - operatetypename varchar(100), - operatedesc varchar(1000), - params text, - belongmainid varchar(36), - clientIp varchar(200), - groupid varchar(50), - device varchar(200), - groupNameLabel varchar(500), - redoService varchar(200), - redoContext text, - cancelService varchar(200), - cancelContext text, - totalruntime int4, - mainruntime int4, - log_result varchar(100), - fromterminal varchar(100), - resultdesc text, - old_content varchar(1000), - link_type varchar(20), - link_id int4, - old_link_id int4 - ) - - - create table ${detailTable} - ( - id bigint not null primary key, - create_time datetime default current_timestamp , - update_time datetime default current_timestamp , - creator bigint, - delete_type int, - tenant_key varchar(10), - uuid varchar(36), - mainid varchar(36), - dataid varchar(50), - belongdataid varchar(50), - tableName varchar(200), - tablenamelabelid varchar(50), - tablenamedesc varchar(50), - fieldName varchar(200), - fieldnamelabelid varchar(200), - newValue longtext, - oldValue longtext, - newrealvalue longtext, - oldrealvalue longtext, - fieldDesc varchar(200), - showorder int default 0, - isdetail int default 0 - ) - - - create table ${detailTable} - ( - id int8 not null primary key, - create_time timestamp default current_timestamp , - update_time timestamp default current_timestamp , - creator int8, - delete_type int8, - tenant_key varchar(10), - uuid varchar(36), - mainid varchar(36), - dataid varchar(50), - belongdataid varchar(50), - tableName varchar(200), - tablenamelabelid varchar(50), - tablenamedesc varchar(50), - fieldName varchar(200), - fieldnamelabelid varchar(200), - newValue text, - oldValue text, - newrealvalue text, - oldrealvalue text, - fieldDesc varchar(200), - showorder int8 default 0, - isdetail int8 default 0 - ) - - - create table ${detailTable} - ( - id number(*,0) not null primary key, - create_time date default sysdate, - update_time date default sysdate, - creator number(*,0), - delete_type number(*,0), - tenant_key varchar2(10), - uuid varchar2(36), - mainid varchar2(36), - dataid varchar2(50), - belongdataid varchar2(50), - tableName varchar2(200), - tablenamelabelid varchar2(50), - tablenamedesc varchar2(50), - fieldName varchar2(200), - fieldnamelabelid varchar2(200), - newValue CLOB, - oldValue CLOB, - newrealvalue CLOB, - oldrealvalue CLOB, - fieldDesc varchar2(200), - showorder number(*,0) default 0, - isdetail number(*,0) default 0 - ) - - - create table ${detailTable} - ( - id bigint not null primary key, - create_time datetime default getdate(), - update_time datetime default getdate(), - creator bigint, - delete_type bigint, - tenant_key nvarchar(10), - uuid nvarchar(36), - mainid nvarchar(36), - dataid nvarchar(50), - belongdataid nvarchar(50), - tableName nvarchar(200), - tablenamelabelid nvarchar(50), - tablenamedesc nvarchar(50), - fieldName nvarchar(200), - fieldnamelabelid nvarchar(200), - newValue nvarchar(max), - oldValue nvarchar(max), - newrealvalue nvarchar(max), - oldrealvalue nvarchar(max), - fieldDesc varchar(200), - showorder bigint default 0, - isdetail bigint default 0 - ) - - - - - - - - - - - ${createElogSql} - - - - - - - - - - - - - - - - create index idx${id} on ${tableName} (${columnName}) - - - - create index idx${id} on ${tableName} (${columnName}) - - - - create index idx${id} on ${tableName} (${columnName}) - - - - - - - - - - diff --git a/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.java b/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.java deleted file mode 100644 index eda527efa..000000000 --- a/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.engine.salary.mapper.elog; - - -import com.engine.salary.elog.entity.dto.LoggerContext; -import com.engine.salary.elog.entity.dto.LoggerDetailContext; -import org.apache.ibatis.annotations.Param; - -import java.util.List; - -/** - * @ClassName: LocalElogAopDaoMapper - * @Description 本地操作日志持久层 - * @Author tanghj - * @Date 2021/2/24 9:35 - */ -public interface LocalElogAopDaoMapper { - - int insertElogContext(@Param(value="logContent") LoggerContext loggerContext, - @Param(value="cusColumns")String cusColumns , - @Param(value="cusValus")String cusValus, - @Param(value="tableName")String tableName); - - - - int insertElogDetail(@Param(value="detailContext") LoggerDetailContext loggerDetailContext, - @Param(value="mainid")String mainid, - @Param(value="cusColumns")String cusColumns , - @Param(value="cusValus")String cusValus, - @Param(value="detailTableName")String tableName); - - - Integer queryElogContextById(@Param(value="id")Long id, - @Param(value="tableName")String tableName); - - void batchInsertDetail(@Param("sql") String sql); - - void insertElogDetailPrepared(@Param("tablename") String detailTableName, @Param("list") List detailContexts, @Param("mainid") String mainid); - - void insertElogDetailPreparedHasCustonInfo(@Param("tablename") String detailTableName, @Param("list") List detailContexts, @Param("mainid") String mainid, @Param(value="cusColumns")String cusColumns); - - void rollBackElogById(@Param("id") Long id,@Param("tableName") String tableName); - - void rollBackDetailElogByUUID(@Param("mainid") String uuid,@Param("tableName") String detailTableName); - -} diff --git a/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.xml b/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.xml deleted file mode 100644 index 81eb589f2..000000000 --- a/src/com/engine/salary/mapper/elog/LocalElogAopDaoMapper.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - insert into ${tableName} (id, uuid, log_date, tenant_key, modulename, functionName, operatetypename, - log_operator, operatorname, targetid, targetname, interfacename, operatetype, - operatedesc, - params, clientIp, groupnamelabel, redoservice, redocontext, cancelservice, - cancelcontext, device, groupid, - belongMainId, requestUrl, requestUri, totalRunTime, mainRunTime, log_result, - fromTerminal, resultDesc, old_content, - link_type, link_id, old_link_id, create_time, update_time, delete_type, creator - ${cusColumns}) - values (#{logContent.id}, #{logContent.uuid}, #{logContent.date}, - #{logContent.tenant_key}, #{logContent.moduleName}, #{logContent.functionName}, - #{logContent.operateTypeName}, #{logContent.logOperator}, #{logContent.operatorName}, - #{logContent.logTargetid} - , #{logContent.targetName}, #{logContent.interfaceName}, #{logContent.operateType}, - #{logContent.operatedesc}, - #{logContent.paramsStr}, #{logContent.clientIp}, #{logContent.groupNameLabel}, - #{logContent.redoService}, - #{logContent.redoContextStr}, #{logContent.cancelService}, #{logContent.cancelContextStr}, - #{logContent.device}, #{logContent.groupId}, - #{logContent.belongMainId}, #{logContent.requestUrl}, #{logContent.requestUri}, - #{logContent.totalRunTime}, #{logContent.mainRunTime} - , #{logContent.result}, #{logContent.fromTerminal}, #{logContent.resultDesc}, - #{logContent.old_content}, #{logContent.link_type} - , #{logContent.link_id}, #{logContent.old_link_id}, #{logContent.create_time}, - #{logContent.update_time}, #{logContent.delete_type}, #{logContent.logOperator} - ${cusValus}) - - - - insert into ${detailTableName} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue, - fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key, creator, - newRealValue, oldRealValue, tableNameDesc, - tableNameLabelId, fieldNameLabelId, create_time, update_time - ${cusColumns}) - values (#{detailContext.id}, #{mainid}, #{detailContext.uuid}, #{detailContext.tableName}, - #{detailContext.fieldName}, #{detailContext.newValue}, - #{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder}, - #{detailContext.dataid}, - #{detailContext.belongDataid}, #{detailContext.isDetail}, #{detailContext.tenant_key}, - #{detailContext.creator}, #{detailContext.newRealValue} - , #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId}, - #{detailContext.fieldNameLabelId}, #{detailContext.create_time}, #{detailContext.update_time} - ${cusValus}) - - - ${sql} - - - - - - - - insert into ${tablename} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue, - fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue, - oldRealValue,tableNameDesc, - tableNameLabelId,fieldNameLabelId, create_time, update_time,delete_type) - values - - ( #{detailContext.id},#{mainid}, #{detailContext.uuid}, #{detailContext.tableName}, - #{detailContext.fieldName}, #{detailContext.newValue}, - #{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder}, #{detailContext.dataid}, - #{detailContext.belongDataid}, #{detailContext.isDetail}, - #{detailContext.tenant_key},#{detailContext.creator}, #{detailContext.newRealValue} - , #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId}, - #{detailContext.fieldNameLabelId} - , #{detailContext.create_time}, #{detailContext.update_time}, #{detailContext.delete_type}) - - - - - - insert into ${tablename} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue, - fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue, - oldRealValue,tableNameDesc, - tableNameLabelId,fieldNameLabelId, create_time, update_time,delete_type) - VALUES - ( - #{detailContext.id},#{mainid}, #{detailContext.uuid}, #{detailContext.tableName}, - #{detailContext.fieldName}, #{detailContext.newValue}, - #{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder}, #{detailContext.dataid}, - #{detailContext.belongDataid}, #{detailContext.isDetail}, - #{detailContext.tenant_key},#{detailContext.creator}, #{detailContext.newRealValue} - , #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId}, - #{detailContext.fieldNameLabelId} - , #{detailContext.create_time}, #{detailContext.update_time}, #{detailContext.delete_type} - ) - - - - - insert into ${tablename} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue, - fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue, - oldRealValue,tableNameDesc, - tableNameLabelId,fieldNameLabelId, create_time, update_time - ${cusColumns}) - values - - ( #{detailContext.id},#{mainid}, #{detailContext.uuid}, #{detailContext.tableName}, - #{detailContext.fieldName}, #{detailContext.newValue}, - #{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder}, #{detailContext.dataid}, - #{detailContext.belongDataid}, #{detailContext.isDetail}, - #{detailContext.tenant_key},#{detailContext.creator}, #{detailContext.newRealValue} - , #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId}, - #{detailContext.fieldNameLabelId} - , #{detailContext.create_time}, #{detailContext.update_time} - ${detailContext.cusValus}) - - - - - update ${tableName} - set delete_type = 3 - where id = #{id} - - - update ${tableName} - set delete_type = 3 - where mainid = #{mainid} - - - - insert into ${tablename} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue, - fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue, - oldRealValue,tableNameDesc, - tableNameLabelId,fieldNameLabelId, create_time, update_time,delete_type) - - SELECT #{detailContext.id},#{mainid}, #{detailContext.uuid}, #{detailContext.tableName}, - #{detailContext.fieldName}, #{detailContext.newValue}, - #{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder}, #{detailContext.dataid}, - #{detailContext.belongDataid}, #{detailContext.isDetail}, - #{detailContext.tenant_key},#{detailContext.creator}, #{detailContext.newRealValue} - , #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId}, - #{detailContext.fieldNameLabelId} - , #{detailContext.create_time}, #{detailContext.update_time}, #{detailContext.delete_type} - FROM DUAL - - - - - insert into ${tablename} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue, - fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue, - oldRealValue,tableNameDesc, - tableNameLabelId,fieldNameLabelId, create_time, update_time - ${cusColumns}) - - SELECT #{detailContext.id},#{mainid}, #{detailContext.uuid}, #{detailContext.tableName}, - #{detailContext.fieldName}, #{detailContext.newValue}, - #{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder}, #{detailContext.dataid}, - #{detailContext.belongDataid}, #{detailContext.isDetail}, - #{detailContext.tenant_key},#{detailContext.creator}, #{detailContext.newRealValue} - , #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId}, - #{detailContext.fieldNameLabelId} - , #{detailContext.create_time}, #{detailContext.update_time} - ${detailContext.cusValus} - FROM DUAL - - - - diff --git a/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.java b/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.java deleted file mode 100644 index 70807d832..000000000 --- a/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.java +++ /dev/null @@ -1,219 +0,0 @@ -package com.engine.salary.mapper.elog; - -import com.engine.salary.elog.entity.dto.LoggerContext; -import com.engine.salary.elog.entity.dto.ReadInfoEntity; -import com.github.pagehelper.Page; -import org.apache.ibatis.annotations.Param; - -import java.util.List; -import java.util.Map; - -/** - * @ClassName: LocalElogDao - * @Description 本地操作日志持久层 - * @Author tanghj - * @Date 2021/2/24 9:35 - */ -public interface LocalElogDaoMapper { - - - List> queryCardElogList(@Param(value = "logContent") LoggerContext loggerContext, - @Param("limit") String limit, - @Param(value = "tableName") String tableName, - @Param(value = "conditionSql") String conditionSql); - - List queryElogList(@Param(value = "page") Page page, - @Param(value = "logContent") LoggerContext loggerContext, - @Param("limit") String limit, - @Param(value = "tableName") String tableName, - @Param(value = "conditionSql") String conditionSql, - @Param(value = "columns") String columns); - - List queryElogListPapi(@Param(value = "page") Page page, - @Param(value = "logContent") LoggerContext loggerContext, - @Param("limit") String limit, - @Param(value = "tableName") String tableName, - @Param(value = "conditionSql") String conditionSql, - @Param(value = "columns") String columns); - - // @WeaDataPermission(mainDataTable = "#{mainDataTable}", -// permissionId = "#{permissionId}", -// permissionType = "#{permissionType}", -// mainDataTableAlias = "#{mainDataTableAlias}", -// primaryKey = "#{primaryKey}", -// permissionTargetId = "#{permissionTargetId}", -// permissionConfigSourceId = "#{permissionConfigSourceId}", -// permissionExcept = "true") - List queryElogList(@Param(value = "page") Page page, @Param(value = "logContent") LoggerContext loggerContext, - @Param("limit") String limit, - @Param(value = "tableName") String tableName, - @Param(value = "conditionSql") String conditionSql, - @Param(value = "mainDataTable") String mainDataTable, - @Param(value = "permissionId") String permissionId, - @Param(value = "permissionType") String permissionType, - @Param(value = "mainDataTableAlias") String mainDataTableAlias, - @Param(value = "primaryKey") String primaryKey, - @Param(value = "permissionTargetId") String permissionTargetId, - @Param(value = "permissionConfigSourceId") String permissionConfigSourceId, - @Param(value = "columns") String columns - ); - - // @WeaDataPermission(mainDataTable = "#{mainDataTable}", -// permissionId = "#{permissionId}", -// permissionType = "#{permissionType}", -// mainDataTableAlias = "#{mainDataTableAlias}", -// primaryKey = "#{primaryKey}", -// permissionExcept = "true") - List queryElogListPapi(@Param(value = "page") Page page, @Param(value = "logContent") LoggerContext loggerContext, - @Param("limit") String limit, - @Param(value = "tableName") String tableName, - @Param(value = "conditionSql") String conditionSql, - @Param(value = "mainDataTable") String mainDataTable, - @Param(value = "permissionId") String permissionId, - @Param(value = "permissionType") String permissionType, - @Param(value = "mainDataTableAlias") String mainDataTableAlias, - @Param(value = "primaryKey") String primaryKey, - @Param(value = "columns") String columns - ); - - List queryAllChanges(@Param(value = "tableName") String tableName, @Param("mainid") String mainid); - - Map elogCount(@Param(value = "logContent") LoggerContext loggerContext, - @Param(value = "tableName") String tableName, - @Param(value = "conditionSql") String conditionSql); - - Map elogCountPapi(@Param(value = "logContent") LoggerContext loggerContext, - @Param(value = "tableName") String tableName, - @Param(value = "conditionSql") String conditionSql); - - - // @WeaDataPermission(mainDataTable = "#{mainDataTable}", -// permissionId = "#{permissionId}", -// permissionType = "#{permissionType}", -// mainDataTableAlias = "#{mainDataTableAlias}", -// primaryKey = "#{primaryKey}", -// permissionTargetId = "#{permissionTargetId}", -// permissionConfigSourceId = "#{permissionConfigSourceId}", -// permissionExcept = "true") - Map elogCountByMorePermission(@Param(value = "logContent") LoggerContext loggerContext, - @Param(value = "tableName") String tableName, - @Param(value = "conditionSql") String conditionSql, - @Param(value = "mainDataTable") String mainDataTable, - @Param(value = "permissionId") String permissionId, - @Param(value = "permissionType") String permissionType, - @Param(value = "mainDataTableAlias") String mainDataTableAlias, - @Param(value = "primaryKey") String primaryKey, - @Param(value = "permissionTargetId") String permissionTargetId, - @Param(value = "permissionConfigSourceId") String permissionConfigSourceId); - - // @WeaDataPermission(mainDataTable = "#{mainDataTable}", -// permissionId = "#{permissionId}", -// permissionType = "#{permissionType}", -// mainDataTableAlias = "#{mainDataTableAlias}", -// primaryKey = "#{primaryKey}", -// permissionTargetId = "#{permissionTargetId}", -// permissionConfigSourceId = "#{permissionConfigSourceId}", -// permissionCount = "count(*)", -// permissionExcept = "true") - Long elogCountOnlyNum(@Param(value = "logContent") LoggerContext loggerContext, - @Param(value = "tableName") String tableName, - @Param(value = "conditionSql") String conditionSql, - @Param(value = "mainDataTable") String mainDataTable, - @Param(value = "permissionId") String permissionId, - @Param(value = "permissionType") String permissionType, - @Param(value = "mainDataTableAlias") String mainDataTableAlias, - @Param(value = "primaryKey") String primaryKey, - @Param(value = "permissionTargetId") String permissionTargetId, - @Param(value = "permissionConfigSourceId") String permissionConfigSourceId); - - - // @WeaDataPermission(mainDataTable = "#{mainDataTable}", -// permissionId = "#{permissionId}", -// permissionType = "#{permissionType}", -// mainDataTableAlias = "#{mainDataTableAlias}", -// primaryKey = "#{primaryKey}", -// permissionExcept = "true") - Map elogCount(@Param(value = "logContent") LoggerContext loggerContext, - @Param(value = "tableName") String tableName, - @Param(value = "conditionSql") String conditionSql, - @Param(value = "mainDataTable") String mainDataTable, - @Param(value = "permissionId") String permissionId, - @Param(value = "permissionType") String permissionType, - @Param(value = "mainDataTableAlias") String mainDataTableAlias, - @Param(value = "primaryKey") String primaryKey); - - // @WeaDataPermission(mainDataTable = "#{mainDataTable}", -// permissionId = "#{permissionId}", -// permissionType = "#{permissionType}", -// mainDataTableAlias = "#{mainDataTableAlias}", -// primaryKey = "#{primaryKey}", -// permissionExcept = "true") - Map elogCountPapi(@Param(value = "logContent") LoggerContext loggerContext, - @Param(value = "tableName") String tableName, - @Param(value = "conditionSql") String conditionSql, - @Param(value = "mainDataTable") String mainDataTable, - @Param(value = "permissionId") String permissionId, - @Param(value = "permissionType") String permissionType, - @Param(value = "mainDataTableAlias") String mainDataTableAlias, - @Param(value = "primaryKey") String primaryKey); - - - List queryDetailElogList(@Param(value = "logContent") LoggerContext loggerContext, - @Param("limit") String limit, - @Param(value = "tableName") String tableName, - @Param(value = "conditionSql") String conditionSql); - - Map elogDetailCount(@Param(value = "logContent") LoggerContext loggerContext, - @Param(value = "tableName") String tableName, - @Param(value = "conditionSql") String conditionSql); - -// List queryOperators(@Param(value = "tableName") String tableName, -// @Param(value = "targetId") String targetId, -// @Param(value = "operateType") String operateType); - - List queryReadInfoOperators(@Param(value = "tableName") String tableName, - @Param(value = "targetId") String targetId, - @Param(value = "operateType") String operateType, - @Param(value = "flag") Boolean flag); - - List queryReadInfoDateOperators(@Param(value = "tableName") String tableName, - @Param(value = "targetId") String targetId, - @Param(value = "operateType") String operateType, - @Param(value = "flag") Boolean flag, - @Param(value = "startDate") String startDate, - @Param(value = "endDate") String endDate); - - List queryAllMainData(@Param(value = "tableName") String tableName, @Param("uuid") String uuid); - - List queryAllMainChanges(@Param(value = "tableName") String tableName, @Param("mainid") String mainid); - - List queryAllDetailChanges(@Param(value = "tableName") String tableName, @Param("mainid") String mainid); - - Integer queryElogContextById(@Param(value = "id") Long id, - @Param(value = "tableName") String tableName); - - List queryElogTraceInfo(@Param(value = "traceId") String traceId, - @Param(value = "tableName") String tableName, - @Param(value = "offset") Integer offset, - @Param(value = "pageSize") Integer pageSize); - - int queryElogTraceInfoCount(@Param(value = "traceId") String traceId, - @Param(value = "tableName") String tableName); - - List queryLogInfoByCustom(@Param(value = "tableName") String tableName, - @Param(value = "sql") String sql); - - List queryAllChangesData(@Param("tableName") String tableName, @Param("mainid") String mainid); - - List queryTenantKeyOperators(@Param(value = "tableName") String tableName, - @Param(value = "tenantKey") String tenantKey, - @Param(value = "targetId") String targetId, - @Param(value = "operateType") String operateType, - @Param(value = "flag") Boolean flag); - - List queryAllChangesDataPages(@Param("tableName") String tableName, - @Param("mainid") String mainid, - @Param(value = "page") Page page); - - Integer queryAllChangesPageCounts(@Param("tableName") String tableName, @Param("mainid") String mainid); -} diff --git a/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.xml b/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.xml deleted file mode 100644 index 93c233896..000000000 --- a/src/com/engine/salary/mapper/elog/LocalElogDaoMapper.xml +++ /dev/null @@ -1,412 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/com/engine/salary/mapper/elog/QueryCurretValusMapper.java b/src/com/engine/salary/mapper/elog/QueryCurretValusMapper.java deleted file mode 100644 index 0a8e14928..000000000 --- a/src/com/engine/salary/mapper/elog/QueryCurretValusMapper.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.engine.salary.mapper.elog; - -import java.util.Map; - -public interface QueryCurretValusMapper { - - Map queryValues(String sql); -} diff --git a/src/com/engine/salary/mapper/elog/QueryCurretValusMapper.xml b/src/com/engine/salary/mapper/elog/QueryCurretValusMapper.xml deleted file mode 100644 index c3d7a16d1..000000000 --- a/src/com/engine/salary/mapper/elog/QueryCurretValusMapper.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - \ No newline at end of file From 8213eedbc53a5b9ba0146432f4d3ebac0a0c95e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 6 Feb 2024 14:12:24 +0800 Subject: [PATCH 27/64] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/lib/hrmelog.jar | Bin 0 -> 143257 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 resource/WEB-INF/lib/hrmelog.jar diff --git a/resource/WEB-INF/lib/hrmelog.jar b/resource/WEB-INF/lib/hrmelog.jar new file mode 100644 index 0000000000000000000000000000000000000000..1b2ea6e7994bf51932e268d3d64c0a907c76194b GIT binary patch literal 143257 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�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

xj7bUX{DF}iX}k$Fq8Lc>>>Nq z>ZuU~1=^2R*=(h#A;V7Y%Oz1Cq5bu9m#2%k(A^jc@PFx&+OF_r{O0Ch( zu)rr=Wl;i1)#)pHq4lLp7!?>-P8RjqFkxg?<75By^&Iahg>;aB{Ae*f5Xk|gGea3^ ze>Y2=#z-9Dr}M%cb=PCj#?r3D@Kr-#Bxcbjj*#CnhO+11Un}F|8!rry*dn`+bTjo| z*iFIvlrT?1CW5A4?w}U%{UL8F%fNM0+(cY%!^x~Q05iQeI=>x1iTA8@qZhQ`P47kB z@ZPgE&Zy#m?S(am*}>H&^GyAHnX_Oer(1CMh|u~Bv)RXsF74R?$aQoL9tn0R?d}o0 z%zHn?eY8Kpm48mD7^(rM-8OtJ6ZY-i)x$BC(dW@Q%*6q;T^p8hu5SgJy;A%W9oFse z@NK|AK-r-Gjt*!bAV?sf-v8!QMD#yIhog~&8H1t>=nqsNNJvPa>i>3}=YMlt#KG3h z&Ytw&+y4__*@<=v3yP>C-yXI$8WFp_cH9KT1sA}j2!!K_D99+pa~PP&o*pe*lg3u5 z)hu^atXOf9`w%xGSTkCgSf**g7pR zSa})~hL>RHV9hGc-DZ6T#)#oDxYFKk$l%qiGT3O&)l$bnUi2z~oLz#xifPBVW-iO` zZrHns5iZ3AY&zrospuWGa3lRI%k4f9UpUw;=)B~9X_(C(S)>>6QoKUA_|kk?{+vCK zaVIdY4f*_Mel59s>Uz$Y_r9oap4Ef&~bK3+lvmY`6jJ7}>HOs#5M67?^3Mn04f z(X+}Ie_v~JMoUvmMRE``h@gFupn4?A&@-644<G!1HgO7VK;skur-3R{dW>K2{O*gpUya+?2dIq=!HdARu<||2vQV_fV(%--r6Y zvuC!Nj*E&K>X*ASJldeQik1OSPXLcwH( z8dT~D8_F{n@`74Tn||A@Ygd8_O078!S_%8*+GD#4#w?EgfXk107n>*0j@`9nXQMJD z7n&oe0L?M`)rRDR`!2zU?t8^v+O|iy8FEs4Xv~w%h>bL4PM-P|KY@g~bC7k{CQ+z| z={7Wr{I>4>#gt1lfg4B_9`8WA_Ldq`Ez?)vFP`(`X^(hpaBIf{fgwO~C?&h0}&8v@EY)ui!$&fin2}xR>toA>0_k*-iE*+lm&}b%+-CPN^=`i?4pZh@7#BY%Zpy?Yx(F zDdRr9EtU-qKQ3UrIYbUbpK(q+5l>`2aqW7XLIODn_J8v^#n|?3I^bUE$B2xq#gdqh zl8d)Xn5-G(*~E@~0epY(y?I_BjK1o+<1jUmA{va&F;*Xa3oD5G1b}AN-eK9{@X^88 z=+4|)nz}YK=@WK^i;B-+;)#blv5fqlOtU2gC1D}qiApd{_(;dV*5GZoaA^6g-0<-c zjgpP)CJ@-g9V2$-CNNAeRpMsANh2 ziHyd7#<4oxl7Y+W76?%3@7E%jWX~3?ve3ydO-`Q6ntKemr-(b0)Tqp(l(V{4fETri zv4fv&E)H_pDWmOLS{o;yrk2&orM=ocY-g)B+Ek8O28cT=`KlS~YEXAo%_m0$%ib%H z>Td#a>ZQ=9AChuKhuV(R>qrl4ND=j;lIq#+$lEkRY+t{gNY2rD z6J~D@3ms<`yXMBy4S({>GvePkIpc)RheA1!Ecn%p#dMtczS|c(`_2rBUyDB@#f0kH zQaCmp%1@);6gw?=C7p|x_lHsbgIlYp_ z5Izz7lcI~OXJ{nBfPjo(|5J+opKKTZRm_MQxf-cBxH+5r7v(QmP0s;G43*F1IyGDF zpjAp+L|b`1P@n_sO=zD}FtbrE6LnEFc{e<|p}xiK(y%7}P2&alkPLw^fF=O2TO|1j z_W_Gfb+ozVHqVV7NSV&%aRS*tA;XRHO+>lZhB23 zL;&+PIM~EGui5CRcdQ0ugKiJmX|8*LO4M;X`?>C>ZQrqH3#QkzRZ4vtK+wnw zX0qn+-Ur?G+7AkL>1`1@R|eN}xpgV9{nY-vWw&R>!R^-a*n9a_9}}cK```ne9PNEl zchH0*>+Eemamnx0sa~@80NQhO(GEAGM?Yb(k#(%dz$c;(1wex_}nj)ib+^zoVtQO`K^^eC7O62RJ$k z8f(C$Di7sxbU)sX!#7+3@6A)_t(Ga03r7pLg(>I&y6D>pg`Ix4GTJMv{pyU!|?;dr8V_ z?IA4xy9Hl-sINM$(HU9JlDt9C7>ZVBPMT@&TdKupqkgFvaa7Tm-*^WcH{=#%mjqH@ zz~R^82~%}rB_re%5{XrHV-7|{^7_O&+AI-81o4;AQ?!M#>>BL0U>5W-| zrip|!6{ec8I=4GUS&Uv8F_)Y~5lL-WR2?D}wGhKWNM~|}-tW0N?BNX~>(=b+4JS|< zgLx6dahyp6NRE(mi4lX6nKKZYY5&|y3%`SzOfS7zQD$&t4y582_Clxwjm#RN(9_=e z#vpkF_2L%GMuqnzam4zQB?0B0Y1= zj_aj;FftsS(?^IO_SS&!{`RS)db<-K`FvH8HN6BTFEWx}GeK(pq2Po`$nqwt@0ax& zMB&V4>i2^1&o!6Q9Tf@t`(D9=_)piI;eS(!DgJ%9NZFe^{8ufe5$So*8V$aUlY{v94@qhqj^p-pk)q^&q5U zX@+D4{Qk@34dXFud44B5J=-rh%@NY$+T;53>iPZ3#{BEC2cZV|bf60T$E`9=cT~*_ z(y$er!Q(*C0-o)lgdn>uyzwZ|B(qGShs4I%7@ndtqzH1jXEb zGfh%uo+~Arb^bkCS9&>SRwYepPVFHv{(=Z=Ox6Mgc@$fL!eU~Zoo-W(>nZ3lRa4gY zsC)ZMm0S%|brv__s9sS7EsS%Ouo+krN#8^?0d&ZucU*zdS;bJPca=h;fs=n`nF#LT5YMr9NvGQfx z17jbx6ND|e+V<_|BRxmESMBEkk2z7c?J9BRSd3`aK8SLkqwsK&C?Dd%`jq6?p=5Q|%%Z4wQQLFBlo=7|xLy-?OVy{$f)jf@&jz;yMdkIYq9nUV$4^ zhcV(pqQC`g#h;or($bQj=OL>>%xDF_m(RL(Shh2%rsmmWM4yJ}v2M_^Zs4(A-{4YJ z-SAox^WFcr2%xq^xO;a3Wgw_0tZu^VKpcP<-6M6CLtl+h>uR`O3-s@w`xhvly1CK+*K}SDpr|heIR)&K><7r^j#~d+>ym=d zC$xHPzWx*CiG7cG01;;_TCtEiiYHWb>KxWDGusqI9XA#oR~Q`Ev}C4nnP?Zcuz*Z+ zN_iGjhuJH-=0t#V1|0Wf%dZ(@fWLV9z=)LJCQ6AbD&1yVIs@eI#?0d9EziIz-;9&X zzLUSIE1@@}X8M1M>r&rUp>h&4%sj!~Yj?`p}fYgpg!3h@~vMwLrPvtW)B58 z{~DIoHMsoBe6ij`T|(5@7fp`Rb%YtVf!e6>*0wvfTH;!9_X(@Fn2@S*s#xrRqwTNC z^Rt(4+4gSHi*)o!V;;yBea{ZCnaPZF^M5R-e`=@Ow@ahaZ(-_$V=?Q`red@3!th=` zZVy-TOHs9Wt(0>1HE5J*XO@?OIkG5-f6nusmJkrWu`8WA`OSg2xir93H?N(b)zlG6 zdUe(nyqtGJo{|-`jq{K+tJkcFr{M$e4k};ubSSvTT@SRL)iG-%uYQCy3yp}MVVW-_ zvm=@DYS}8U`G|sB?7G83|C#Ux6nX<|CZ`#T`b~ya4O!y_$O?6Sj9$Bb2Lo+4M_Mi-n%Y2(! zYp7md+5}{8B`T3zn%2-yqb@~Z+%5Y#*|FzG6W}o$VfDj$kD&3Dt>1yrK)BR@vQaHM zy*q?y;Y7D<&1#fkH*)zp^#)_KBeNf3D6=&pN3Y+BkpefY}9Wc#_8Bs&v&OkyR=)gnwb3+^@LFE@Rmernqv6V56!1P2mB->e6Gn zYqEE85VB5Yh0Ee;?Ii2d&nLHQ<|z03^Lz&gch~?Hcd#;m(zw13Zjz|lWLvNaRfB{m zGm<-pL-AZHpqft`&JO@S@)N1x~p_Gg4%JGC;*Z7n*h zAWwsk@kA8t3H?Y}NiL^hfoTKlaI~A4&E^gH46rdnmLEfP#hDhq<~$<0&Y!I?wLV?Q zmRVTnM2pgtppudp*W;IeJWb&Y!e=rkOKn_opo==DB{iWHwmK%uo8W;mCb=B35f4Si zH?ik6?rHBf-GsZojdT|!t9|Ba3Q!-iD`^Ro#4eervP>3K0fP(3%gUA1Ei%&~*QI&; zXia{ktID3DNMQ2n?j7vHf1Rs63?Vsdiy~FVO1-U$6Aq|`yR7x&8-iI=%OL1}wtFL| z@Of|3xD+MMY2NG{I6CVdJFwZ!PVcgm*xLSjpXvXzSLd_o9c{^Ib>xg=+R2^KSgnud znP*EdW)^O{)SSwXj+N}O^+Rk94zKhHOXhGBj#>5ET$hF`O^O_fIbI5eHOZcGR+m_t z?RMzBS9Pp7lW=^CREdD4+1fe16Q#+`S7qd!yL;$?!SV8o#d!xrdgjRDs2OA+6TYf` z7P4M5s#aeY36TUOWPGjL@ar21Kbd51a&4?FAT9aP_+@pSgTrR{`jQrXwpA`Ri$t_qay=Hd%-O{(ia&uS&~L8LKq49njjIHi z*@dI3#wYa9ot%4asF(Q`99_;AXJ_tK4`pZISqtuZ?V8;G7l+&jqQhMhu^niP37zDX z><8q^p^|_(Q07ZG?;pBOyZr^ul7kX*|B&4Cm*8-NeGTQ87(p2-G77V)Mm&_BVTT`t z@8{(Hkvr+0hzRMB`2&O3x79HMX`To_7jG$0IBvRCJIAm)uhfLSAvD(#=8JVeeE9dR zh?l--5!ZGn0beE+4TfsG%^0r2MruL2pr*4z;F0f$+6p>ELic8<+mH)QI%SF|&NR zhk3CHw9hM(OB{iU8sxZYpOT_E%u^F0^LHKGy#|1f1*ZJ3n)0>=O#9k0r4b*zkU3tF z;8N()9X{_qgMaqA+QmEfH~eoGC^ZL>m1>dHfelFBB{8Q|WC$GC@ebbCw5;dhbuce; z!R$3ixhA@g;|N0>@43q9ovZ8siB~g7wl`7<5D89pMHLK8RGlUvai*Akra#gXUqgJL z7Zel! z=`J6-Ny{xh?z?FYpM?&eN`LSuhN<^&IiE-=D5=DjYd-E;g?m|KLjLE@cS8mTLs>d61jVapc3Xh6OGRS$p!9+>s^SHywX5W3w9 z<0{8D2RU`cDs7Fm#xRaY#Cb#iYdJ=IC9jnKhE2%Ap`VnJ#0MaO87&48hO~OH9hJ#> zR%hn$R5w}k52{a%td<9V19v@fM-k&KDgzMxD%2lN`7CQSV?cH6VLxnm?hccyEco`|S~0Ql z7qHnl2qEZ7xHY(o{-4s`0<5YgY8wUw>5?vy25F=lq`SM}P|_tGN+aDN2uL@GlyrwQ zBAtSCN+bWq=Xqbj$NJuXypA5>+V?%PX3d&4v)8PFXM1wLccg!iSMAV)q0RG|I9bz| z%Xf;=4aj}ZK9r`(WtV03@4{XoAHg#|$QD~Cc!&wyj4;e46V9v>V^GgL@0d!T{W%2w z=*iV%EVb(^>_Yp7|eV9R!b!-9b1y7>Mayj(?U;Hr8m`D`fX=Nw5x`WL>f!R zKiC}BkZscCVp{Dw2}>rS8z+Et9~2?&SX#Y*Pe3+}BRoO5##1Pv!zJ#S2bH;~0zSydin+F(vS4|76Ow)K#>N82lAg(ynb90w9Y2Tm zMzio!LoP!#h?YC*&?GO!$9GEoQlO$zCp2@CZre?jK0KmRr5!#8(+t1rTWTV5r$87A zI^fv%EYUu1eD-y5w=8D`Zv+Z)-|XuNh826okE$e>rW_B;!$PoIjM?mG4^R7Fym-?= zN78bXrhI7qSlBh8G`^^(WYT!CmM`&%`gX;EJnuXNuXPotbj!9;b+3+^{4>_C0>z3? z7PXp6-P~|0={0=oyGhkw-6KzkGM(lb!=++t8t3z1xe7t3&oodYwKX_YT`-3}7x@}58Bmh6~j`RDg{2%?nKOL7>0NLAETiJtve;q9x z{%2e5R22_!1@FR&1n!YfRX2wrwq;|(j+TxFWks-mWG;jH2(v_H87*+XZGLDt5%r@w zZl`$sYs=aavt+up29EB$(2ciV{9d1Rhf-3$qVZhLj+mk_aj#hcFV0r_oi0}V z>eMcT&Wm}ng>!WbdeJhx?CNQ`Jqh$J29j!=_5$Z3#I)8`W%qQ9^SyRTolZPdck#9p zJ4oH2`S+BQ^SLMH=(?@r%I=Q^x*mSQXk#MdN^>YYU1>jv2snl4zFcER~)~VzKC? z!5HB4Q1G$SXntF!Fl75BgR4LjBNJzgPgtP31s2W;6o=^1T^bGVMC39XnXWNxJmesX zvAH&*$HUp1XP8Cp|BL{q!c`*$G3e)g9ZX*2>h@bm&nXQuJ1R2=H@S1I!!Ut~ihKxr z&DK9DCTyC8lDDp8$I)v0VH=50J@6UT$MIgx2MH^RZ?((E^FFEHp~!_IA32z&%=4!5 z!Q)o@;?Td3Yo4omIN;#Aaw3v60&bWoVEG`4R(Ugp(JI)f+Rd^P59KRv6a(|2A%A-n z^R@421HOvxU@=?4d^n#8hor(~P63}4O;BO4!&cNUWTIa6MQ|0KKJTR1pKXr^ajsJs zaX^6L85ogTCSiluPOF=>*Y0>SVPT;|-ieQY)$U`T$Njx|Cz1YyOP2k}VpLHVLIM}S z?X#`2Q0>|UU%td_(+qZKtb%`5Q7h&f*|mR{xrl}98Ki5w5pq%s>IZ`F`zk0~RFM@9 zT<*K6U)fGaNGrCM?BQWFj_qc2!x)p?RRZQu8%;qhtV8Lnc2dZ}dZ;z^8)LGRl& z-2KPvzKTy8>Qw5}Xkuv|=Txsp?Itd&&&|5k@RqC+xt=8Pip6|_ljptHWD~Mszx#R( z=Cxt=%YxF;>`<3h)?kjM*9$$wxINQPD<5s9H;Ly|C`MNWHc(**d5?yan zskQb%4cp+TGO7sEtm&z&pMuNvR?#8KYA#mul4W}w)=uA z{Irp0h2+`ETXMOTElq>j#%Bb{iaR2{<4fodgr6j#6OvrYyK>7+p}qDZj`(Vo_BBw} z%hx_Fu1$n>kZ^AezGS3feC2RJ>~kaLg;=XP zYp#_kaWRHDw!hn-YmdkKf^VQ!kH=RBJY4$y8)dks?`-6UO+R8|jMeW;zvtl%v> znJe##YDTmp*uPxWOgL7bJOwRS4q|odo)9(!IEl=~2X*q^(`ml*bO^P@&-ujqqZifT zeIz5*-T5L%&0}>DFC@40@lQOPd*Sn7s9GAWSEZee=5GeGgCrQ4lv9zC>(PRy{VALL`_7(64a1)VKL$uzRBxB~{rm?GaQfIAFg4oVdVy|9?D!e>R828QHDAZw`gZ^-8n?A){3#A8{>< z-nyy2RmO)zO|GUIorNonUvvEQi)ce!%* zxMTCe6JFVZ>!a-;33IEk1;hePapV2 z+LDs1=P#LZU(llB8xqXE;J;s$n8%fvTxcVlguX<0S%wV^w`=&AhUmkeiD z;J*FiuQv3GTM+7Uche?S!6(A-@%kW17(a;8zgi{Uvavv4L-yUKT2S|s3-Vfonr?1(Np8? zji;;q_2*#66I|(Fa;_|K^lWU7Grp4}g2XO3h3tS26wSX}Bee zmfjo5mAU(m)MRLW8m5XyIrgJ{cQ^j6=E{@uCVQ(I{3qSDGV?WWY3r%{FF`mKoV}7I zRv6-|QshHw^YHroEZvr$`IqpP)U-kYfqpn;y#Tjlel_kz^-T6vlr84Uf2~UY-L5gsHkmkg z(AZl0BN4~gKw7|;CKcWRT0h}6G;57f^S8>QA}9GfoCqYEFRMwoMPc2uzc7_b?vgAE@M##y#6`ijt$?z`Nz?I=0hO0IHYtbu7 znBt+>zR#oUU|**t^D^MN3@!5B;kgRC%qV1S*-X_sDon7HVLgs<;6f)W(5P^EqR&)n zWPtND&%#M}48h%O@qU9r!bcHy1e#=Pq4f4yKltOxS@VjG+2wn9~9!Tf?E=8WRf z*KQ&Ujyb2!$>eWJq;oPcr%QSwAUYXRaI6JVo*}v}in4VQ!>z@cpjvMU+*2~3H<_%= zlA%&U1BrjBr&&$GP>sb@uA&k-?dxS;`uM2Gh0Gzi_DnY%b~trcaGxo8t?L7h%?k-| zCmfL}2rKgebx-sZ+}8J&L|Y9=*2-scR~_#JK~M4@%_r`b85?NV_ucIwmuY6&d+r)U zA{`N@_>@pA6>UsVe6S9aIs?1zo4#j8iXGXxa~0 z%7N+&F&1m#BF`+p+P+28vKU?NB@iL!>J6((HTJVyE#j{~1b5BQA=zF@3ahJwqw$$z zSCPEK_vpnI98YUxzx#=|XXA*RF5#tvV#O=l1eFwH5&NAsw9>ht&&>@9uu7@NBc>t< z?A}#}92i?_C-;h6O=S?jNbw3U(vy0*3A9dWwE6^6e|VMK>X3oZ`26YGfbQB^38Ofk_s5Wkzc5!tbAZ4n+cxB7!d7kbU`QL49d5RH#u|oJ#+W*|)J;c} zutlWx;AyrFJ!FF>OwO*nD$1-WvVPcf%@CCD2zv#ZZ$+J-4bp1evt461n2lwbOllay z9ms{~83D0*#jReb(MmQ1Z~@r0BJFY5)HZ~@K7|PDwo&Qn;Jm47G(}y#1-|PUG-8yC z<~|UR7J>Xb(~a{}3v8)xV*|4LX1ITD@$dicF_49|$#0B4=O3RH1^~Woy*xGr89o8o z0Vza*>in~y4^^158sSHIDNRo#E{XRFlCsJla~SI=i@P#^6i=Z59VL%=kG)KE8`F*8 z!$$5U%l#8DUN}Z4y0@iy=H2_-DUTkR^q(B3r8R=-LC-4d7rSoo`b71L2CqH(#8ivS~xyl635T5 z7gs=J#~1H|VS2x408esgcux*qZVi6f6(SCiBi+`dR^w$wMrp-XgLkkUl#;08Vz40$ z?Msua4?QA_Z7T^bQkb!P3#`)@Mcw_cMS(3BJiOYmS05khIw>2uWNXN};C52YZAX-k zJGSsg9mSC2q=&DFL=n2;m-ozyjr%jj+M%D>zCwomvh6wCN!~2G`PJeOO(wZELD-eg zy+Ib5bBs+alpCSi|$hK>R7qZ;l%}=a90y|(!tI15k%$i((56uoHjI7WkISfSK&7Eh?vWz zJ=m&2Fk2RzunjuxwYlPpRgs8P7D?LmuH-g)4G|9ag2kAd?!6`BK4hv)gbG=FG(j4p z8A0lu-D9YCG&tn4{h?hKs=Kb_7MX($@6*_*-kxGzEB#*2=P_Jh6A21X{O=n{dk(^C zfYSYMVF$h$T3gbCtW3;=G}Dufvt4YaN2vX_^oTuKc_>Tnc$A| zWj^9M=g{S%9)gQWf=-s?J?KAgIOsp<+q7{!{1m(4Es5^?c87osi3=Lhn|q|n!rEh+ zU6b3A&&>U_y_1l@gDK$%Yd{upzUBR0sQJT9Bj(NLB5q!D^*YU6NL-$!vvY(rclD%* z!a1SO&pTf4?TJ2cVWG<~Jvgv~r!F7fILc(LoNXp#6)O=px$huf?L*FKmC!IHFgtl9 zN8yWvP|PKcwtTV?=5wXq6#M)PtIOR7VjY%IxR$TH9t8@uv}j4hTZ*r=A=@VhY+r&= zXZd-^17Ar4=R_kIX3HnYIbdFrt`m}v#v$SdCo)i&`8+H&t&ey;q#4R6mWc)G&B#1A zM`RSL1eYH~*H((iucN`pRXb+1f4LiQiTKW!0NQni*bam z7Fg1mc>&4%AYq}d=hewrpObWSTbkZ^3mojeYOj4qOYzX3=L`p)BojYeab0k$D-eos zAe#BzXjW&6B$YXY8SbYpn7h?+0qS7NU8BU}gBZz=#;e{U?K6p`KI)%5{qTrHYxn+A zI#_V$U8vOr<){XXL9qI^3a-h!G7~;PE;v;|Gu9zu+PM68Bnm3FdT^>}xqgDt?=b>q zn!sxHJ-76%P=UyqE-WL1k!MoU`<14gti^8@$m`=o-ymIVWy{Ukz4oKCL<2{n5;L`k zd9eaxkQO2W)oOHVk8YG5OJaWNF-H<459;a(@zhtd?4L6n?G16*!i^I@<%n7ohyGo?^YltUpSN*gh;@0F{9 zI%rRb4ZLTVAl)L3lB*`Dq6*<_E{lz#~@g!KZ;eRmX}G_SK*BHR|k(h zKrG0xdo3i#>t{U$FTw@mGIV&Ri5#Suf-y0qauaSiin~ zc>XHYOuz_)e)xk zTSd%Ri=kFXbBXxY7YrIp2=xw51)U$KDA?qeF8s3(RZRS7#;cmvAMITt?SOCeT3-(G zPT&1%gQpgEHZ=$FVQyqLz^$pS{;I%s2TOHr6(fqu`=V{<9FEwyJ%WE7ejZGC&?!HR zvj{(n-l^)N$M*b3d+60vSLig{eAUNC=3S=>bAYZvu8_GEh++1JyaIa#`o*+WQ z3Kl+AZT&d@5f}1+)TypAW}d(@Vq{1)s_s~%*Un6WZ*Vaosq^E*T*P7VrQ!XA&3YSuC|OcvC-nb=C3hhB8_X!xEs zF&)1IIbe$fXgef);wkNk)_AkOT)!*fd6tqi4VyE)e{xE`I>5%^U2F@Xy#!O+kMm}I zR91wHxbTIfP^Tvo6Dr}ukO?8@W%5k4Jbm!Az)~hbR8As8bfSdJn6IX;3c^$n2%=O5 zT(Q_VSuihG*|XR;-sA~?Gz~z=v}ewdWIA5sma#u35wd-uurx32$luHu4AILNyy*MP z5FIMc5PeJlqLWhDKjcM5liiC9JK(1n3BXS$?upVqWawnXi2Kr9rO~C7!eQgCxH?F5 zDLp+zvBm0qT<3MMd(KyXeq?=hxk@oa}N-j|%riajHawNOO8j`w2fjN;gbnDw9w zImkqkHjK@=)Iqry8U8R~P&^y&T`&C@HN)H*?}rU^^hPqCwlCrkw4fr<*6Jl8toC+K zn2vJc;5ajoC$L6e1fCOO%et9l3NN;JhecseriFEOkoq01h40%hk4!l9RWrG8z6^B> zS#T&%IZne_(g{dPTCG0WyVKmJGmLk*Z07qyU>4nWu%hXiP+~&Ips@mW9zKhvdQfbd zu5$^LQhlgw?G?=xsVBQ(g-%Dhzm$`y;Dze_R9}~fwFZ}vvA6Bys4g`auFcRgHewa!AX+ihHZ&gyAIr%eG=u(L zWMZAkO{*ZmAG+j#ewF@ZVFLUN7CIYuHb*LUZ z9uQQ0CR*?|a?7E^rZrrY6H*svpx11?=ddId=TW9yNbvL#`SW2LG$Y<+{1~$KHq8ui zih2&5y9~Ht0q{1t+8eRmLl5fR65qra!3RU&PgRoGz+4<0pn%|$UYf{v#0pOYqG3g+ zZK-pg!VZ&xxYa)l-}RfWEKhv9k$|xYt=GAPrEvn1;H_F5NYwHhPnYHvB=XjR2lM10 zkYPfY4fWH5%0{~n!{w}MgP?N4_f<0LF~V*k`r}zD&I8rC`9i;@d?- zK4cCoW%}aU+K#0@kZ6sD8x)}+Chd7~xTMYCG%rU&zLor7Bt^exY8<)Ds-Rl=_%-P2 z4>C4IV@szg9N-8QuI~#Zc@Q1WMss9SBevTpsBlpCYtWFDM)isozXXZU8Eu3@sO~*2 zGGJ|*FMwV~wVHQxCW{(pFy+7?Y=}3Gyh@P3h_-_ID_H z&v?YnhIlXWs86>3$s&FV_xg<~umEEax#`XRcgPCNX~G7fhqKqiDX`M zBSzKkewv_G(ANl zf?QK0TfRf7z4bn(KD#9j>xJ(Y3=KQpBjLEE6w5dzeQ#){7cmqOHMwf5F#!_3o4f_pqtBR+zu z+QsxC(@aR96~yK=m_y9QGRKG8UUR6Ahe@*nJgbr^KxFRk0C zge?q>af*BWVJHvw#Eoc=QN^90G{y9Br)4%@Is3|r%U#ml#djF;sf6qbaKawN8&1dG z&`wccUvVCsD^b|=>O%}*aP#y&6TgrllXF~n1OJ3BMc^|{A7Xk5HJ$x?zXPl?ng@~u z#mMS$omwj$Ybqh7%rr@4boOYEdI$Mgsu&*KrFLmwuP&(GYT@#$L3xU`ec3+4m*WLl z{0f@tep71*g|43{nJ`o~&V@@#_|V0-;7(4j#89-1y+oxin2AGuLtvR@hx$hBTq&`QRvo`?iJbvs-HTAy z&X&#+A!bMdjqd^1+W`*Vqf>W;!v=R`MrR=!ILbAyv>90>{N^lweDrQ@ z+VN(O<7@A$LFQNo3xgqb|LXmL07ZeXLkxEsJS4$c>*R}IWiEp-!sA9;z#Fw>9?;H~xc`&H^MgCft(O zb_hEt+hG3g4^vLDoyFL=x2zbU?;$U|84yWMjfCBejLTPo6a5&7!YW_R9RQAVKAdXJ z7<}?VKl46JxB}9iqg1w!g8`+831STyf-vKX${FShf5o;IZ~m;uGWZfZ5W$x<8gOON zzIT9p>UentcB@%03Ktkj-&*y@ChqkN;PJMIv5p$CykNqMEyw3}vt@q8jwJr(lqBs7 zOqmT9`^6;(B2mjs)0_kULdc8QeKxa+Y~%NS0xoi~IU6X7dur>9cZ%f&>_&51s2t0M zzAyz<*{R|NsF({mCJC))e^@13;7r({=@G0e9#IS3>H$Ttg^huGwo=Q8ku+RrLuJ0P zAzo^fZy;?674aVX2>HSBE)}~``8wzOZp2z-=^BRrGj7^+@i2~lcA?l}&u;|>;?`- zE1CuQpf*P~=2Xmxq(xuu;i!p6!kcGe^ce{lWKa9y9pIjqpte;d4vA3rcKW{s5(!Lj z`;og`6~tmRSkwt^Rdx-#o2?f~dB@BqyHY4ueoULmXdiGf&~R%Ad0tWZ0p{MUN<(EN z$q_M*W{IF-`f&V9d_00Pi-{M^vbv!k4%t6&42Ur#eIcc&o_#toF)dRbjC{bsb>tXA z-wS;zJeBr7Pd5|1c^HQo#VmhHoNJ6(jbhei_EN2~pp?rwtYJYKkuh2}@N^l&Ee(q7onar{6GwynzPt>pAt=XJfh8seg&WO6#~#ZXNrE-v zHq^Bzkj}zC_2RU_)1NX*<8gg*)FUPr%CP1bUCo|Hl+RL(PQR_^+hGvXRB_=b9hqef z)7aR%aNI8x^JylJG6Vw$G{Hvzs^NLrC&ETnzQtQcyYiOWigEl+0Uw^dFweRFEFS}I z8)}Y`6y_W0k2(ipvzK62_EnhXjl`qDQAj;@5(B0fgrVFc`xpZWf$5Jv^N3~SL6@OE z=q^3OvhuAyWh34jN1W@4S+5S&TMWa^=dLE_r;f6+17E)kMDu~oKb+q2apT!#@mUA}Kj<-A z|Ad9FZ&FPU8$)kwmto2{zCu^wzAjf{!RQ_;8P!`J8{g6cGi9u!Q61$$o%0C!Gl@CJ zXk}61Vf7OVjl_H!s3@*DCLZZm^u3nxJxzv?o|f^1k0Mt=8c7rKo$D)i;-W{YcGH^L zT)m4iCbYK?qyviN!!Z+$W(zmq#L2LVW%ZayxTiA6lBNtW=h{GX8UD?~3b}<=#dgaZV+Sg!MXpos#(5}QJ z1o&I9dhlaY^Z=I=w~o}F4JPg=&EEUm4NF0pPlIgT+k#7LD@d-}cQRQwtOmV2dBt9- z;&(^5XU65>n*Tb|M;w$l#K#^Mh>|W4&sS_SwOWozrcO)qMAhEz?b5fa)>FxRQPE6QxO4LmFB${ z_W7D)e4WADhG!9oqo|r6(`pR!`+0o`k=o>1_MnnQ1ATal^tjzqsp;Xvi~N#Pn?{}| zy`NO>;CxK#2-zZ~Mfg~sr?6JWg^co^^ATZ(C_M<04&~&aw0+{E#aG^CB2u~$d5^)q zN8&YxbOLjY58}If)N>J3xeHS{aw^Qi3SCW@gN1|m^jWcr(Ow@bwin$e8(W>8pD|yf8oKH<8Sd~f>Lr@&cc(Qz?Wu_GwHZGh6=}2Ip z#+F=@H@3B}^eMB2Se1~egNa!5i!HA#l!gd0Jv9-8D(;BF=nnOSSxjq(3Ll#TT2nE^ z`i>Tb3ZKKGA{MVBKilE_PL_<(XQ(kMB2bs-;^O3JU4fd+Oi4Q-Y`joZ5s_aaA zxaznype9;a18c;KZ0*|@o#e8pR@mv-erOzGhc$0N$(Hp=$XvCCNBTbJ9_G7HWJ@N` z`?Ij9)vsSxkJstSd=?_et?7;A1yz2?DSo4-vD4y~K7EduP12`|cc>AmntBo*R8dWYX#d@RG*Io9Qz zTmx9%kg|&EnSO%9cac;X%+IBI>lpJ&RrFX6ouwbmeGUeF5gNOCCf@gX2|b6p=VJHJRsPSg<)h1<8eIt$DjpN0_zV$dR6;2mZ_d5u5z%RgsUa|qjV3+?H`XQV zwJWe3G)!`!)-4SHu6>YNwnr$Lm|QH^Ne5x>g%2cB|2nkYrCytIQyc#w4sf;1T@^D5 zNFA!rDH@K1FKpaG5g?Ul)Zq;7J}3X!m`PAoCK4e6xf(5wecCX0_T72LSNTj=8*JQf#R2pGJ3pmlR3 zZko^hE09W{?yrmGa`ravFjU@7NF}d=T$Lm`$rFd(^2Iuo!`zoGPG3M%E2S;7=(b+#e3k5t25pk`Vo>uQ=paP=n8=Cwt#cijT zTP3RM;_B2%-q8Nhsd_=~X*C8E$$7KMm3wIxY%4!~Il zp_r5=jPQa_TSk2y<#~(Qb^Bg|JG&gpBChkA4Do`wl3S zt`lCb3|qyZA4s3^mT;iVn^GL`4AtxLOXw+_jP_a8qKWIxHX1;l z%yv-fNpE~q1ZUiAiwUo`zG{Ajop)~dek1UGC{L=ak=5rF6Zn`i5}YcSVHW8JF!|XJ z^s}q=hFIjVyYq`*(Oo`Y4eY>6wT2?`Ee%@sD_6>Td$oTo_poVrB1cTMQw^FC-H;Za z0hZY~u-b-`&sE`F*%Efx!>;$i$2-$=ee=~_eNA!OMS-cPWh!55aXuQ*Cq(-5q8`l% zVbY<-xK5(yl%n!HFid-q9!3&f^8l5`nZRL76V?-V0itH~i$O|hBZsje)7OwkOo%71 zEQuEj1eHEOnU8>(4A`b2@3upDn3X4^+Jt%7Km|<8Gl|;ODR+%1%*Q`FgPS(93xX>P zq(HA50RvI`M|44&L?jKyJ3eO^dH#;HR?@+47WTtd$Lz7wsu1@nl7{r|l4uCh{L=_f zGK|?Ut|802GOfK&BxJSS{)+?Tmn7y#tPsNmXqLS}a0~pJfjM={jEgpXM^Ah82lAc` zn|7xzy?yymuG7BQF-CpiDHN<_Z+vm+C+xcApt?$@tncN zVR5n%hP@slW9z(&uPFPP`hkH=k~MVKoxrir`SRqSKe4OrSG+>P_QKq6TD}_; z(9jgzqJ)G{@)`Yuar(?dgI2Wu`e?TR4%D1F&-|dcjr#+yltlp)t_u(rX9X_ zxPNNL4hE{Cx3wX{S84vVyKx#1evW<283M@(Q7rGv5>5bj2M5lau~94=J!08E5jO0^ zm~#Td_$p(0ykZ+P{&=}wke5Y(V;O0_stNpIx=|ZeCd{+rNBdOk6jO&WZ`#1`DPv{a zH=Kj33-ut`M#Y5M7}TlaenFqa74~TYb;@-nNTRL7%z6K8 zpm_Lz6q3iYD7WiyneL%wdxyWi4ZGL?&T!xHJK|C&l4D(RAP{)^gNnX|qy5btSj(__xE6jCUlSJcugphrtdq{twK30PiSL#2 zwc2S_UpRNey0E|#HU-?X*Z9cZUf#FO)_36O1s2E{gd&WMW~|!zmP>M}nutdATx<3< zL%9;MWf7fn`B#nNF%f*Dmnhk0pDa4KEE7uEPrZvO;xq|I4*6K7LIYrIRWP1OW=Ud( zG7mdtoJ>O{O9Wlf=zo1;`))a#iFXurP$ShH>wWE+iPUbA7 zp6YMQIHw(Z3~$A&*pP1+Jz>%+BZElHFUm4w;*P88X0c*BP_Ly--QV9Tg{G|yqrnfW zJFmlMSkOY=X_4&In6lA{f#PoKN}}bM<6CsUJJO20QFrbk`b}TeXwMkP2|2xQ>Ck^n-Rw!qP#HjpAL~K2?vcvX7oHSe8lZ%Ar|?# zblLS&Z#o_YZ@YTwtYo_gcPZ9o!4BWbr`MkR;8>ChJ}cb>&!0Egj#pS;be+$I9MnDJqp4#<-l>iwR5LGAexz4im zy%Ydn|EJRb(tktvO%U<#st5la8TdvF>}TJI82a6VK*0KqB6<74zmN;ojihwo`lhJCmSUM40Wn7aPt)AO+x;uN>laS{#O(dp ziMeGQE1m%IQvm1sJ;3+U2q^CjIp6HZ8#TQ~76Liwn^}CjW&GzPN^qv1`2Z5i|Bz$= zFDCw9NWO(4{+z_iw|1@fS`~qmVAm%~zZVf;Nc|njZ`yD|lRXU&!1n;3>;1Iv#ReGt ze+MsTXJ)By=OPJm`FRtDJr!}d0epNwPPdyd2aJKgLU56guo-^8m4i9~S8lM8jfBcrj0y**}yOdz{&%|@wRHL;QkHt%_!&pS3yub_$33#%E8RR<+pP; z@pmZz-wgkVW#nM}AHh}^!SrANg2ezNaC>ZL{uSP1eJewd#r4r1kn=A_MnMvU3M^nc zE&y%2Enqy7KQ;fl%GbG6uZM-OmE$k0hYj8Yr54ZtW566;pD_Pk`~g4c7n=63fUg;@ z?S>#o-|Bn!-Bgh7ierj2Kt$)joO8WS_+I#_{{~&e%)$X=2Z+eX?0S+Ga`-o04_FX!KvuUWYf-wt;gK?X@(UH`oqStV01Ux9CO>wv4j`^S%jcg#|JzRPTgoW% z14fV>5g6EYzW(pULiX<|{_zNYOY|5O`~(N+4OXDPZ_lS18h=Bi0Ma+QPT48^ZG8Q_ z$4N_6H824VXn^CkEg#qVI}Ri3-!{Sn7b0s1AaDj2rng6(jPBnMD4JS7{dUuV{V%o2 zp}^|1)b)r%`O!gpW$-r?|C%*@D-+PKhlU@P{6Rd>j#5BS*D*}ri@fRIlYG0m;hKb$ z@#p=qNKEb)0gS%z|FlK+$^U`oJISx6E7I=`0lo>@{fWdz-%j81Ken|1^H}sHAe~E~ z>TAdIRJmlT{DpW@c&!aT>NNGf@H$j-T?~m1nI}VNq79a_WZ#1U2He4 zW96m|l_${1TA-1@;J8uR-2RRRXyCu&-t=1A?Eh)%Pk;K`1~+k(^YH==zCZx{yc_iZ z1MBnr|520g&Hk0P-1f$v`u>K@(bE1uYSMY(Rb2(x{T@Jyw|$%PKS5njT!5jmcd-9n z%bT4ehb7Y*0f;06u*|m&S)2bKYAIr8ZK(vZvoy2Px47+;-Xw4?f@UZMD%s8;$I^EoqU3~ z?xeW$12KycU|`(0Iuy6|?`r;kkrCj*-Yn<8WO6XI13V9l>oDH`h^UCQ={`Or7}zJ+ zAG=oI?*OmufYLXDZ?gKXK)>o*{F{{qYrXnqwH<+soZssEE2P_F=kgCoM%SqXZjYT% z>l0Hppz+tUB*U$0ae{&W$~pa3EdWg1Nc5jARqGpz(3=JdJTVZP5wL)(z(&aJeX0S- zKcfG$$1i7R?d&3=Z|Goc_ly0P99Iuo6~L9#0`@9y?_Pl5eou1UasQ6T>+}}CFykAN zacc9tfG_v#$421Y`y2dgo2B^F%)!v~7bMrOL;OqwEEs`tS^_wvw>OdWs#7>B)WMS%WbcS8CWF$PB`D{{SVQ9<$itg z;^qYqw>5pdKIKW?G=zV+wup_wYYU4)`Pb&1^Tf(a9HokN%Hn zZYLVLM*r1d!n>vYMN7X#|0jRW?Md%uW{2AjPvlN9qCK LA_Bh!1N;8~8Xh;+ literal 0 HcmV?d00001 From 6a79b22c1720aeacdbddd8a2d7e8f2b0ba0fe9c5 Mon Sep 17 00:00:00 2001 From: sy Date: Wed, 7 Feb 2024 17:39:26 +0800 Subject: [PATCH 28/64] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../po/InsuranceArchivesBaseInfoPO.java | 15 + .../po/InsuranceArchivesFundSchemePO.java | 20 + .../po/InsuranceArchivesOtherSchemePO.java | 18 + .../po/InsuranceArchivesSocialSchemePO.java | 19 + .../service/impl/SIArchivesServiceImpl.java | 981 +++++++++++------- .../service/impl/SICategoryServiceImpl.java | 112 +- .../service/impl/SISchemeServiceImpl.java | 272 +++-- 7 files changed, 934 insertions(+), 503 deletions(-) diff --git a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesBaseInfoPO.java b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesBaseInfoPO.java index f05cc309d..1ed65489f 100644 --- a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesBaseInfoPO.java +++ b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesBaseInfoPO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.siarchives.po; +import com.engine.salary.elog.annotation.ElogTransform; import com.engine.salary.enums.datacollection.DataCollectionEmployeeTypeEnum; import lombok.AllArgsConstructor; import lombok.Builder; @@ -19,65 +20,78 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor //hrsa_insurance_base_info +@ElogTransform(name = "福利档案主表") public class InsuranceArchivesBaseInfoPO { /** * 主键id */ + @ElogTransform(name = "主键id") private Long id; /** * 员工id */ + @ElogTransform(name = "员工id") private Long employeeId; /** * 个税扣缴义务人id */ + @ElogTransform(name = "个税扣缴义务人id") private Long paymentOrganization; /** * 社保档案id */ + @ElogTransform(name = "社保档案id") private Long socialArchivesId; /** * 公积金档案id */ + @ElogTransform(name = "公积金档案id") private Long fundArchivesId; /** * 其他福利档案id */ + @ElogTransform(name = "其他福利档案id") private Long otherArchivesId; /** * 租户key */ + @ElogTransform(name = "租户key") private String tenantKey; /** * 创建人id */ + @ElogTransform(name = "创建人id") private Long creator; /** * 是否删除 */ + @ElogTransform(name = "是否删除") private Integer deleteType; /** * 创建时间 */ + @ElogTransform(name = "创建时间") private Date createTime; /** * 更新时间 */ + @ElogTransform(name = "更新时间") private Date updateTime; /** * 福利执行状态 */ + @ElogTransform(name = "福利执行状态") private String runStatus; /** @@ -85,6 +99,7 @@ public class InsuranceArchivesBaseInfoPO { * * @see DataCollectionEmployeeTypeEnum */ + @ElogTransform(name = "人员类型") private Integer employeeType; //---------条件------- diff --git a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesFundSchemePO.java b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesFundSchemePO.java index fc171c94b..15e37cfb0 100644 --- a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesFundSchemePO.java +++ b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesFundSchemePO.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.siarchives.po; import com.engine.salary.annotation.Encrypt; +import com.engine.salary.elog.annotation.ElogTransform; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -19,35 +20,42 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor //hrsa_fund_archives +@ElogTransform(name = "福利档案明细表-公积金信息") public class InsuranceArchivesFundSchemePO { /** * 主键id */ + @ElogTransform(name = "主键id") private Long id; /** * 员工id */ + @ElogTransform(name = "员工id") private Long employeeId; /** * 福利类型 */ + @ElogTransform(name = "福利类型") private Integer welfareType; /** * 暂不缴纳 */ + @ElogTransform(name = "是否暂不缴纳") private Integer nonPayment; /** * 公积金起始缴纳月 */ + @ElogTransform(name = "公积金起始缴纳月") private String fundStartTime; /** * 公积金最后缴纳月 */ + @ElogTransform(name = "公积金最后缴纳月") private String fundEndTime; /** @@ -59,63 +67,75 @@ public class InsuranceArchivesFundSchemePO { /** * 公积金方案id */ + @ElogTransform(name = "公积金方案id") private Long fundSchemeId; /** * 公积金账号 */ + @ElogTransform(name = "公积金账号") private String fundAccount; /** * 补充公积金账号 */ + @ElogTransform(name = "补充公积金账号") private String supplementFundAccount; /** * 公积金缴纳组织 */ + @ElogTransform(name = "公积金缴纳组织") private Long paymentOrganization; /** * 公积金个人实际承担方 */ + @ElogTransform(name = "公积金个人实际承担方") private Integer underTake; /** * 公积金缴纳基数 */ @Encrypt + @ElogTransform(name = "公积金缴纳基数") private String fundPaymentBaseString; /** * 公积金缴纳基数——单位 */ @Encrypt + @ElogTransform(name = "公积金缴纳基数——单位") private String fundPaymentComBaseString; /** * 租户key */ + @ElogTransform(name = "租户key") private String tenantKey; /** * 创建人id */ + @ElogTransform(name = "创建人id") private Long creator; /** * 是否删除 */ + @ElogTransform(name = "是否删除") private Integer deleteType; /** * 创建时间 */ + @ElogTransform(name = "创建时间") private Date createTime; /** * 更新时间 */ + @ElogTransform(name = "更新时间") private Date updateTime; } diff --git a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesOtherSchemePO.java b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesOtherSchemePO.java index 9ad9d9668..71836e143 100644 --- a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesOtherSchemePO.java +++ b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesOtherSchemePO.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.siarchives.po; import com.engine.salary.annotation.Encrypt; +import com.engine.salary.elog.annotation.ElogTransform; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -19,35 +20,42 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor //hrsa_other_archives +@ElogTransform(name = "福利档案明细表-其他福利信息") public class InsuranceArchivesOtherSchemePO { /** * 主键id */ + @ElogTransform(name = "主键id") private Long id; /** * 员工id */ + @ElogTransform(name = "员工id") private Long employeeId; /** * 暂不缴纳 */ + @ElogTransform(name = "是否暂不缴纳") private Integer nonPayment; /** * 福利类型 */ + @ElogTransform(name = "福利类型") private Integer welfareType; /** * 其他福利起始缴纳月 */ + @ElogTransform(name = "其他福利起始缴纳月") private String otherStartTime; /** * 其他福利最后缴纳月 */ + @ElogTransform(name = "其他福利最后缴纳月") private String otherEndTime; /** @@ -59,52 +67,62 @@ public class InsuranceArchivesOtherSchemePO { /** * 其他福利方案id */ + @ElogTransform(name = "其他福利方案id") private Long otherSchemeId; /** * 其他福利缴纳组织 */ + @ElogTransform(name = "其他福利缴纳组织") private Long paymentOrganization; /** * 其他福利个人实际承担方 */ + @ElogTransform(name = "其他福利个人实际承担方") private Integer underTake; /** * 其他福利缴纳基数 */ @Encrypt + @ElogTransform(name = "其他福利缴纳基数") private String otherPaymentBaseString; /** * 其他福利缴纳基数——单位 */ @Encrypt + @ElogTransform(name = "其他福利缴纳基数——单位") private String otherPaymentComBaseString; /** * 租户key */ + @ElogTransform(name = "租户key") private String tenantKey; /** * 创建人id */ + @ElogTransform(name = "创建人id") private Long creator; /** * 是否删除 */ + @ElogTransform(name = "是否删除") private Integer deleteType; /** * 创建时间 */ + @ElogTransform(name = "创建时间") private Date createTime; /** * 更新时间 */ + @ElogTransform(name = "更新时间") private Date updateTime; } diff --git a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesSocialSchemePO.java b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesSocialSchemePO.java index 645e5215b..5e5c3cf9e 100644 --- a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesSocialSchemePO.java +++ b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesSocialSchemePO.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.siarchives.po; import com.engine.salary.annotation.Encrypt; +import com.engine.salary.elog.annotation.ElogTransform; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -19,36 +20,43 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor //hrsa_social_archives +@ElogTransform(name = "福利档案明细表-社保信息") public class InsuranceArchivesSocialSchemePO { /** * 主键id */ + @ElogTransform(name = "主键id") private Long id; /** * 员工id */ + @ElogTransform(name = "员工id") private Long employeeId; /** * 暂不缴纳 */ + @ElogTransform(name = "是否暂不缴纳") private Integer nonPayment; /** * 福利类型 */ + @ElogTransform(name = "福利类型") private Integer welfareType; /** * 社保起始缴纳月 */ + @ElogTransform(name = "社保起始缴纳月") private String socialStartTime; /** * 社保最后缴纳月 */ + @ElogTransform(name = "社保最后缴纳月") private String socialEndTime; /** @@ -60,57 +68,68 @@ public class InsuranceArchivesSocialSchemePO { /** * 社保方案id */ + @ElogTransform(name = "社保方案id") private Long socialSchemeId; /** * 社保账号 */ + @ElogTransform(name = "社保账号") private String socialAccount; /** * 社保缴纳组织 */ + @ElogTransform(name = "社保缴纳组织") private Long paymentOrganization; /** * 社保个人实际承担方 */ + @ElogTransform(name = "社保个人实际承担方") private Integer underTake; /** * 社保缴纳基数 */ @Encrypt + @ElogTransform(name = "社保缴纳基数") private String socialPaymentBaseString; /** * 社保缴纳基数——单位 */ @Encrypt + @ElogTransform(name = "社保缴纳基数——单位") private String socialPaymentComBaseString; /** * 租户key */ + @ElogTransform(name = "租户key") private String tenantKey; /** * 创建人id */ + @ElogTransform(name = "创建人id") private Long creator; /** * 是否删除 */ + @ElogTransform(name = "是否删除") private Integer deleteType; /** * 创建时间 */ + @ElogTransform(name = "创建时间") private Date createTime; /** * 更新时间 */ + @ElogTransform(name = "更新时间") private Date updateTime; } diff --git a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java index 798eed713..5f317d94b 100644 --- a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java @@ -18,7 +18,9 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.cmd.siarchives.SIArchivesTipsCmd; import com.engine.salary.common.SalaryContext; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.siarchives.bo.InsuranceArchivesBO; @@ -33,6 +35,7 @@ import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeDTO; import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; import com.engine.salary.entity.taxagent.po.TaxAgentEmpChangePO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.datacollection.DataCollectionEmployeeTypeEnum; import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum; @@ -40,6 +43,7 @@ import com.engine.salary.enums.siaccount.EmployeeStatusEnum; import com.engine.salary.enums.sicategory.*; import com.engine.salary.enums.taxagent.TaxAgentEmpChangeModuleEnum; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.datacollection.EmployMapper; import com.engine.salary.mapper.siarchives.*; import com.engine.salary.mapper.sicategory.ICategoryMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeDetailMapper; @@ -152,6 +156,10 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService return ServiceUtil.getService(SISchemeServiceImpl.class,user); } + private EmployMapper getEmployMapper() { + return MapperProxyFactory.getProxy(EmployMapper.class); + } + @Override public Map getTips(Map params) { return commandExecutor.execute(new SIArchivesTipsCmd(params, user)); @@ -172,6 +180,18 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService Long paymentOrganization = welfareTypeEnum != null ? Long.valueOf(Util.null2String(params.get("paymentOrganization"))) : null; // apidatas = siArchivesBiz.getBaseForm(welfareTypeEnum, employeeId, (long) user.getUID(), user, paymentOrganization); apidatas = getBaseForm(welfareTypeEnum, employeeId, paymentOrganization, taxAgentPOS); + //记录操作日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); +// loggerContext.setTargetId(String.valueOf(form.getId())); +// loggerContext.setTargetName(form.getInsuranceName()); + loggerContext.setOperateType(OperateTypeEnum.READ.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "查看福利档案基础信息")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "查看福利档案基础信息") + + ": " + "人员id" + "-" + employeeId + "," + "个税扣缴义务人id" + "-" +paymentOrganization + "," + + (welfareTypeEnum == null ? SalaryI18nUtil.getI18nLabel(0, "员工基本信息") + : SalaryI18nUtil.getI18nLabel(welfareTypeEnum.getLabelId(), welfareTypeEnum.getDefaultLabel()))); + SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); return apidatas; } @@ -188,6 +208,17 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService } // apidatas = siArchivesBiz.getPaymentForm(user, welfareTypeEnum, employeeId, (long) user.getUID(), schemeId, paymentOrganization); apidatas = getPaymentForm(user, welfareTypeEnum, employeeId, schemeId, paymentOrganization); + //记录操作日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); +// loggerContext.setTargetId(String.valueOf(form.getId())); +// loggerContext.setTargetName(form.getInsuranceName()); + loggerContext.setOperateType(OperateTypeEnum.READ.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "查看福利档案缴纳基数")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "查看缴纳基数明细") + + ": " + "人员id" + "-" + employeeId + "," + "个税扣缴义务人id" + "-" +paymentOrganization + "," + + SalaryI18nUtil.getI18nLabel(welfareTypeEnum.getLabelId(), welfareTypeEnum.getDefaultLabel())); + SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); return apidatas; } @@ -477,7 +508,13 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService List socialArchiveDelIds = insuranceArchivesList.stream().map(InsuranceArchivesBaseInfoPO::getSocialArchivesId).collect(Collectors.toList()); List fundArchiveDelIds = insuranceArchivesList.stream().map(InsuranceArchivesBaseInfoPO::getFundArchivesId).collect(Collectors.toList()); List otherArchiveDelIds = insuranceArchivesList.stream().map(InsuranceArchivesBaseInfoPO::getOtherArchivesId).collect(Collectors.toList()); - + //获取子表数据,方便记录操作日志 + List socialArchives = getSocialSchemeMapper().getSocialById(socialArchiveDelIds); + List fundArchives = getFundSchemeMapper().getFundById(fundArchiveDelIds); + List otherArchives = getOtherSchemeMapper().getOtherById(otherArchiveDelIds); + Map socialArchiveMap = SalaryEntityUtil.convert2Map(socialArchives, InsuranceArchivesSocialSchemePO::getId); + Map fundArchiveMap = SalaryEntityUtil.convert2Map(fundArchives, InsuranceArchivesFundSchemePO::getId); + Map otherArchiveMap = SalaryEntityUtil.convert2Map(otherArchives, InsuranceArchivesOtherSchemePO::getId); // 删除社保档案主表及3张明细表数据 if(CollectionUtils.isNotEmpty(archiveDelIds)){ getInsuranceBaseInfoMapper().deleteByIds(archiveDelIds); @@ -491,6 +528,65 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService if(CollectionUtils.isNotEmpty(otherArchiveDelIds)){ getOtherSchemeMapper().deleteByIds(otherArchiveDelIds); } + //记录操作日志 + List targetPOList = insuranceArchivesList.stream().filter(f -> archiveDelIds.contains(f.getId())).collect(Collectors.toList()); + if (targetPOList.size() > 0) { + targetPOList.forEach(targetPO -> { + DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); + TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); + targetPO.setDeleteType(DeleteTypeEnum.DELETED.getValue()); + //记录主表操作日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除福利档案主表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除福利档案") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setNewValues(targetPO); + SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); + //记录明细表操作日志 + InsuranceArchivesSocialSchemePO socialTargetDetail = socialArchiveMap.get(targetPO.getSocialArchivesId()); + if (socialTargetDetail != null) { + socialTargetDetail.setDeleteType(DeleteTypeEnum.DELETED.getValue()); + LoggerContext detailLoggerContext = new LoggerContext<>(); + detailLoggerContext.setUser(user); + detailLoggerContext.setTargetId(String.valueOf(targetPO.getId())); + detailLoggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); + detailLoggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + detailLoggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除福利档案-社保明细")); + detailLoggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除福利档案-社保明细") + ":" + taxAgentInfo.getName() + "-" + empInfo.getUsername()); + detailLoggerContext.setNewValues(socialTargetDetail); + SalaryElogConfig.siArchivesLoggerTemplate.write(detailLoggerContext); + } + InsuranceArchivesFundSchemePO fundTargetDetail = fundArchiveMap.get(targetPO.getFundArchivesId()); + if (fundTargetDetail != null) { + fundTargetDetail.setDeleteType(DeleteTypeEnum.DELETED.getValue()); + LoggerContext detailLoggerContext = new LoggerContext<>(); + detailLoggerContext.setUser(user); + detailLoggerContext.setTargetId(String.valueOf(targetPO.getId())); + detailLoggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); + detailLoggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + detailLoggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除福利档案-公积金明细")); + detailLoggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除福利档案-公积金明细") + ":" + taxAgentInfo.getName() + "-" + empInfo.getUsername()); + detailLoggerContext.setNewValues(fundTargetDetail); + SalaryElogConfig.siArchivesLoggerTemplate.write(detailLoggerContext); + } + InsuranceArchivesOtherSchemePO otherTargetDetail = otherArchiveMap.get(targetPO.getOtherArchivesId()); + if (otherTargetDetail != null) { + otherTargetDetail.setDeleteType(DeleteTypeEnum.DELETED.getValue()); + LoggerContext detailLoggerContext = new LoggerContext<>(); + detailLoggerContext.setUser(user); + detailLoggerContext.setTargetId(String.valueOf(targetPO.getId())); + detailLoggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); + detailLoggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + detailLoggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除福利档案-其他福利明细")); + detailLoggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除福利档案-其他福利明细") + ":" + taxAgentInfo.getName() + "-" + empInfo.getUsername()); + detailLoggerContext.setNewValues(otherTargetDetail); + SalaryElogConfig.siArchivesLoggerTemplate.write(detailLoggerContext); + } + }); + } } //新增社保、公积金、其他福利档案、福利档案基础信息 @@ -781,12 +877,28 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService } /** - * 批量变更档案列表的runStatus + * 批量变更档案列表的runStatus,目前仅在待增员tab中删除待办使用,后边其他方调用时需修改操作日志记录 */ @Override public void updateRunStatus(InsuranceArchivesBaseInfoPO po) { - getInsuranceBaseInfoMapper().updateRunStatusByIds(po); + //记录操作日志 + List targetPOList = getInsuranceBaseInfoMapper().listByIds(po.getIds()); + if (targetPOList != null && targetPOList.size() > 0) { + targetPOList.forEach(targetPO -> { + DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); + TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "待增员档案-删除待办")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "待增员档案-删除待办") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); +// loggerContext.setNewValues(targetPO); + SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); + }); + } } @Override @@ -828,7 +940,23 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService if (stayDelPO.getIds().size() > 0) { getInsuranceBaseInfoMapper().updateRunStatusByIds(stayDelPO); } - + //记录操作日志 + Map oldBaseInfoMap = SalaryEntityUtil.convert2Map(pos, e -> e.getPaymentOrganization() + "-" + e.getEmployeeId()); + List newPos = getInsuranceBaseInfoMapper().listByIds(ids); + newPos.forEach(targetPO -> { + DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); + TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "停缴档案-取消停缴")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "停缴档案-取消停缴") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setOldValues(oldBaseInfoMap.get(targetPO.getPaymentOrganization() + "-" + targetPO.getEmployeeId())); + loggerContext.setNewValues(targetPO); + SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); + }); } /** @@ -908,6 +1036,24 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService if (toStopBaseInfoIdList.size() > 0) { getInsuranceBaseInfoMapper().updateRunStatusByIds(InsuranceArchivesBaseInfoPO.builder() .ids(toStopBaseInfoIdList).runStatus(EmployeeStatusEnum.STOP_PAYMENT_FROM_DEL.getValue()).build()); + + //记录操作日志 + toStopBaseInfoIdList.forEach(f -> { + InsuranceArchivesBaseInfoPO targetPO = getInsuranceBaseInfoMapper().getById(f); + if (targetPO != null) { + DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); + TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案减员")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "停缴一名在缴员工") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setNewValues(targetPO); + SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); + } + }); } Map resultMap = new HashMap<>(2); @@ -1127,6 +1273,23 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService .ids(part).runStatus(EmployeeStatusEnum.PAYING.getValue()).build()); }); + //记录操作日志 + toPayBaseInfoIdList.forEach(f -> { + InsuranceArchivesBaseInfoPO targetPO = getInsuranceBaseInfoMapper().getById(f); + if (targetPO != null) { + DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); + TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案增员")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "增加一名在缴员工") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setNewValues(targetPO); + SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); + } + }); } Map resultMap = new HashMap<>(2); @@ -1239,7 +1402,19 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService .runStatus(EmployeeStatusEnum.PAYING.getValue()) .build()); }); - + nowList.forEach(targetPO -> { + DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); + TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "待减员档案-删除待办")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "待减员档案-删除待办") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); +// loggerContext.setNewValues(targetPO); + SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); + }); } } @@ -2725,145 +2900,157 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService public void otherSave(InsuranceArchivesSaveParam paramReq, User user, boolean welBaseDiffSign) { long employeeId = user.getUID(); - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - OtherSchemeMapper otherSchemeMapper = sqlSession.getMapper(OtherSchemeMapper.class); + InsuranceArchivesOtherSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesOtherSaveParam.class); + SalaryAssert.notNull(SalaryI18nUtil.getI18nLabel(0, "员工id为空"), param, param.getEmployeeId()); - InsuranceArchivesOtherSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesOtherSaveParam.class); - SalaryAssert.notNull(SalaryI18nUtil.getI18nLabel(0, "员工id为空"), param, param.getEmployeeId()); + if (org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherStartTime()) && !SalaryDateUtil.checkYearMonth(param.getOtherStartTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "其他福利起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } + if (org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherEndTime()) && !SalaryDateUtil.checkYearMonth(param.getOtherEndTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "其他福利最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } + //创建操作日志记录对象 + InsuranceArchivesBaseInfoPO targetPO = new InsuranceArchivesBaseInfoPO(); + InsuranceArchivesOtherSchemePO targetDetailPO = new InsuranceArchivesOtherSchemePO(); - if (org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherStartTime()) && !SalaryDateUtil.checkYearMonth(param.getOtherStartTime())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "其他福利起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); - } - if (org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherEndTime()) && !SalaryDateUtil.checkYearMonth(param.getOtherEndTime())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "其他福利最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); - } - - List otherIds = new ArrayList(); - otherIds.add(param.getId()); - List oldOtherInfoList = otherSchemeMapper.getOtherById(otherIds); + List otherIds = new ArrayList(); + otherIds.add(param.getId()); + List oldOtherInfoList = getOtherSchemeMapper().getOtherById(otherIds); + //设置福利档案基数调整记录数据 + InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() + .adjustAfterSchemeId(param.getOtherSchemeId()) + .adjustAfterBaseJson(paramReq.getPaymentForm()) + .adjustAfterComBaseJson(paramReq.getPaymentComForm()) + .welfareType(paramReq.getWelfareType().getValue()) + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build(); + if (oldOtherInfoList.size() == 1) { + InsuranceArchivesOtherSchemePO oldOtherInfo = oldOtherInfoList.get(0); //设置福利档案基数调整记录数据 - InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() - .adjustAfterSchemeId(param.getOtherSchemeId()) - .adjustAfterBaseJson(paramReq.getPaymentForm()) - .adjustAfterComBaseJson(paramReq.getPaymentComForm()) - .welfareType(paramReq.getWelfareType().getValue()) - .employeeId(param.getEmployeeId()) - .paymentOrganization(param.getPaymentOrganization()) - .build(); - - if (oldOtherInfoList.size() == 1) { - InsuranceArchivesOtherSchemePO oldOtherInfo = oldOtherInfoList.get(0); - //设置福利档案基数调整记录数据 - encryptUtil.decrypt(oldOtherInfo, InsuranceArchivesOtherSchemePO.class); - adjustInfo.setAdjustBeforeBaseJson(oldOtherInfo.getOtherPaymentBaseString()); - adjustInfo.setAdjustBeforeSchemeId(oldOtherInfo.getOtherSchemeId()); - adjustInfo.setAdjustBeforeComBaseJson(oldOtherInfo.getOtherPaymentComBaseString()); - //新数据 - InsuranceArchivesOtherSchemePO updateOtherInfo = - InsuranceArchivesOtherSchemePO.builder() - .id(oldOtherInfo.getId()) - .otherSchemeId(param.getOtherSchemeId()) - .otherStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherStartTime()) ? param.getOtherStartTime() : null) - .underTake(param.getUnderTake()) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .welfareType(paramReq.getWelfareType().getValue()) - .otherEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherEndTime()) ? param.getOtherEndTime() : null) - .employeeId(param.getEmployeeId()) - .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) - .updateTime(new Date()) - .nonPayment(param.getNonPayment()) - .creator(employeeId) - .paymentOrganization(param.getPaymentOrganization()) - .otherPaymentBaseString(paramReq.getPaymentForm()) - .build(); - //校验福利基数是否符合上下限要求, - if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { + encryptUtil.decrypt(oldOtherInfo, InsuranceArchivesOtherSchemePO.class); + adjustInfo.setAdjustBeforeBaseJson(oldOtherInfo.getOtherPaymentBaseString()); + adjustInfo.setAdjustBeforeSchemeId(oldOtherInfo.getOtherSchemeId()); + adjustInfo.setAdjustBeforeComBaseJson(oldOtherInfo.getOtherPaymentComBaseString()); + //新数据 + InsuranceArchivesOtherSchemePO updateOtherInfo = + InsuranceArchivesOtherSchemePO.builder() + .id(oldOtherInfo.getId()) + .otherSchemeId(param.getOtherSchemeId()) + .otherStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherStartTime()) ? param.getOtherStartTime() : null) + .underTake(param.getUnderTake()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .welfareType(paramReq.getWelfareType().getValue()) + .otherEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherEndTime()) ? param.getOtherEndTime() : null) + .employeeId(param.getEmployeeId()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .updateTime(new Date()) + .nonPayment(param.getNonPayment()) + .creator(employeeId) + .paymentOrganization(param.getPaymentOrganization()) + .otherPaymentBaseString(paramReq.getPaymentForm()) + .build(); + //校验福利基数是否符合上下限要求, + if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + //需要拆分个人和公司福利基数时 + if (welBaseDiffSign) { + updateOtherInfo.setOtherPaymentComBaseString(paramReq.getPaymentComForm()); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } - //需要拆分个人和公司福利基数时 - if (welBaseDiffSign) { - updateOtherInfo.setOtherPaymentComBaseString(paramReq.getPaymentComForm()); - //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); - } + } + encryptUtil.encrypt(updateOtherInfo, InsuranceArchivesOtherSchemePO.class); + getOtherSchemeMapper().updateById(updateOtherInfo); + //更新base_info表状态 + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null && baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + //对于非系统人员,编辑后状态切换为正在缴纳 + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); + } + baseInfoPO.setOtherArchivesId(updateOtherInfo.getId()); + getInsuranceBaseInfoMapper().updateById(baseInfoPO); + + targetPO = baseInfoPO; + encryptUtil.decrypt(updateOtherInfo, InsuranceArchivesOtherSchemePO.class); + targetDetailPO = updateOtherInfo; + } else { + getOtherSchemeMapper().deleteByEmployeeIdAndPayOrg(InsuranceArchivesOtherSchemePO.builder() + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build()); + //新建社保档案,并关联主表 + InsuranceArchivesOtherSchemePO insertOtherInfo = InsuranceArchivesOtherSchemePO.builder() + .otherSchemeId(param.getOtherSchemeId()) + .otherStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherStartTime()) ? param.getOtherStartTime() : null) + .underTake(param.getUnderTake()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .welfareType(paramReq.getWelfareType().getValue()) + .otherEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherEndTime()) ? param.getOtherEndTime() : null) + .employeeId(param.getEmployeeId()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .createTime(new Date()) + .updateTime(new Date()) + .nonPayment(param.getNonPayment()) + .creator(employeeId) + .paymentOrganization(param.getPaymentOrganization()) + .otherPaymentBaseString(paramReq.getPaymentForm()) + .build(); + //校验福利基数是否符合上下限要求, + if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + //需要拆分个人和公司福利基数时 + if (welBaseDiffSign) { + insertOtherInfo.setOtherPaymentComBaseString(paramReq.getPaymentComForm()); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } - encryptUtil.encrypt(updateOtherInfo, InsuranceArchivesOtherSchemePO.class); - otherSchemeMapper.updateById(updateOtherInfo); - //更新base_info表状态 - InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); - if(baseInfoPO != null && baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { - //对于非系统人员,编辑后状态切换为正在缴纳 - baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); - } - baseInfoPO.setOtherArchivesId(updateOtherInfo.getId()); - getInsuranceBaseInfoMapper().updateById(baseInfoPO); - sqlSession.commit(); - } else { - otherSchemeMapper.deleteByEmployeeIdAndPayOrg(InsuranceArchivesOtherSchemePO.builder() + } + encryptUtil.encrypt(insertOtherInfo, InsuranceArchivesOtherSchemePO.class); + getOtherSchemeMapper().insert(insertOtherInfo); + + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null) { + List otherInfos = getOtherSchemeMapper().getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .employeeId(param.getEmployeeId()) .paymentOrganization(param.getPaymentOrganization()) .build()); - //新建社保档案,并关联主表 - InsuranceArchivesOtherSchemePO insertOtherInfo = InsuranceArchivesOtherSchemePO.builder() - .otherSchemeId(param.getOtherSchemeId()) - .otherStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherStartTime()) ? param.getOtherStartTime() : null) - .underTake(param.getUnderTake()) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .welfareType(paramReq.getWelfareType().getValue()) - .otherEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherEndTime()) ? param.getOtherEndTime() : null) - .employeeId(param.getEmployeeId()) - .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) - .createTime(new Date()) - .updateTime(new Date()) - .nonPayment(param.getNonPayment()) - .creator(employeeId) - .paymentOrganization(param.getPaymentOrganization()) - .otherPaymentBaseString(paramReq.getPaymentForm()) - .build(); - //校验福利基数是否符合上下限要求, - if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + baseInfoPO.setOtherArchivesId(otherInfos.get(0).getId()); + //对于非系统人员,编辑后状态切换为正在缴纳 + if (baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); } - //需要拆分个人和公司福利基数时 - if (welBaseDiffSign) { - insertOtherInfo.setOtherPaymentComBaseString(paramReq.getPaymentComForm()); - //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); - } - } - encryptUtil.encrypt(insertOtherInfo, InsuranceArchivesOtherSchemePO.class); - otherSchemeMapper.insert(insertOtherInfo); - sqlSession.commit(); + getInsuranceBaseInfoMapper().updateById(baseInfoPO); - InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); - if(baseInfoPO != null) { - List otherInfos = otherSchemeMapper.getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() - .employeeId(param.getEmployeeId()) - .paymentOrganization(param.getPaymentOrganization()) - .build()); - baseInfoPO.setOtherArchivesId(otherInfos.get(0).getId()); - //对于非系统人员,编辑后状态切换为正在缴纳 - if (baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { - baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); - } - getInsuranceBaseInfoMapper().updateById(baseInfoPO); - } else { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); - } + targetPO = baseInfoPO; + encryptUtil.decrypt(insertOtherInfo, InsuranceArchivesOtherSchemePO.class); + targetDetailPO = insertOtherInfo; + } else { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); } - - //生成福利档案基数调整记录数据 - List adjustHistoryList = createAdjustInfo(adjustInfo, employeeId); - //福利档案基数调整记录数据入库 - batchInsertAdjustHistory(adjustHistoryList); - - } finally { - sqlSession.close(); } + //记录操作日志 + DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); + TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案-其他福利明细保存")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利档案-其他福利明细保存") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setNewValues(targetDetailPO); + SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); + //生成福利档案基数调整记录数据 + List adjustHistoryList = createAdjustInfo(adjustInfo, employeeId); + //福利档案基数调整记录数据入库 + batchInsertAdjustHistory(adjustHistoryList); + } /** @@ -2872,149 +3059,159 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService */ public void fundSave(InsuranceArchivesSaveParam paramReq, User user, boolean welBaseDiffSign) { long employeeId = user.getUID(); - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - FundSchemeMapper fundSchemeMapper = sqlSession.getMapper(FundSchemeMapper.class); - InsuranceArchivesFundSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesFundSaveParam.class); - SalaryAssert.notNull(SalaryI18nUtil.getI18nLabel(0,"员工id为空"), param, param.getEmployeeId()); + InsuranceArchivesFundSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesFundSaveParam.class); + SalaryAssert.notNull(SalaryI18nUtil.getI18nLabel(0,"员工id为空"), param, param.getEmployeeId()); - if (org.apache.commons.lang.StringUtils.isNotBlank(param.getFundStartTime()) && !SalaryDateUtil.checkYearMonth(param.getFundStartTime())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "公积金起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); - } - if (org.apache.commons.lang.StringUtils.isNotBlank(param.getFundEndTime()) && !SalaryDateUtil.checkYearMonth(param.getFundEndTime())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "公积金最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); - } + if (org.apache.commons.lang.StringUtils.isNotBlank(param.getFundStartTime()) && !SalaryDateUtil.checkYearMonth(param.getFundStartTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "公积金起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } + if (org.apache.commons.lang.StringUtils.isNotBlank(param.getFundEndTime()) && !SalaryDateUtil.checkYearMonth(param.getFundEndTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "公积金最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } + //创建操作日志记录对象 + InsuranceArchivesBaseInfoPO targetPO = new InsuranceArchivesBaseInfoPO(); + InsuranceArchivesFundSchemePO targetDetailPO = new InsuranceArchivesFundSchemePO(); - List fundIds = new ArrayList(); - fundIds.add(param.getId()); - List oldFundInfoList = fundSchemeMapper.getFundById(fundIds); + List fundIds = new ArrayList(); + fundIds.add(param.getId()); + List oldFundInfoList = getFundSchemeMapper().getFundById(fundIds); + //设置福利档案基数调整记录数据 + InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() + .adjustAfterSchemeId(param.getFundSchemeId()) + .adjustAfterBaseJson(paramReq.getPaymentForm()) + .adjustAfterComBaseJson(paramReq.getPaymentComForm()) + .welfareType(paramReq.getWelfareType().getValue()) + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build(); + if (oldFundInfoList.size() == 1) { + InsuranceArchivesFundSchemePO oldFundInfo = oldFundInfoList.get(0); //设置福利档案基数调整记录数据 - InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() - .adjustAfterSchemeId(param.getFundSchemeId()) - .adjustAfterBaseJson(paramReq.getPaymentForm()) - .adjustAfterComBaseJson(paramReq.getPaymentComForm()) + encryptUtil.decrypt(oldFundInfo, InsuranceArchivesFundSchemePO.class); + adjustInfo.setAdjustBeforeBaseJson(oldFundInfo.getFundPaymentBaseString()); + adjustInfo.setAdjustBeforeSchemeId(oldFundInfo.getFundSchemeId()); + adjustInfo.setAdjustBeforeComBaseJson(oldFundInfo.getFundPaymentComBaseString()); + //新数据 + InsuranceArchivesFundSchemePO updateFundInfo = InsuranceArchivesFundSchemePO.builder() + .id(oldFundInfo.getId()) + .fundSchemeId(param.getFundSchemeId()) + .fundAccount(param.getFundAccount()) + .fundEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getFundEndTime()) ? param.getFundEndTime() : null) + .fundStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getFundStartTime()) ? param.getFundStartTime() : null) + .fundPaymentBaseString(paramReq.getPaymentForm()) + .supplementFundAccount(param.getSupplementFundAccount()) + .creator(employeeId) + .nonPayment(param.getNonPayment()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .underTake(param.getUnderTake()) + .paymentOrganization(param.getPaymentOrganization()) + .updateTime(new Date()) .welfareType(paramReq.getWelfareType().getValue()) .employeeId(param.getEmployeeId()) - .paymentOrganization(param.getPaymentOrganization()) .build(); - - if (oldFundInfoList.size() == 1) { - InsuranceArchivesFundSchemePO oldFundInfo = oldFundInfoList.get(0); - //设置福利档案基数调整记录数据 - encryptUtil.decrypt(oldFundInfo, InsuranceArchivesFundSchemePO.class); - adjustInfo.setAdjustBeforeBaseJson(oldFundInfo.getFundPaymentBaseString()); - adjustInfo.setAdjustBeforeSchemeId(oldFundInfo.getFundSchemeId()); - adjustInfo.setAdjustBeforeComBaseJson(oldFundInfo.getFundPaymentComBaseString()); - //新数据 - InsuranceArchivesFundSchemePO updateFundInfo = InsuranceArchivesFundSchemePO.builder() - .id(oldFundInfo.getId()) - .fundSchemeId(param.getFundSchemeId()) - .fundAccount(param.getFundAccount()) - .fundEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getFundEndTime()) ? param.getFundEndTime() : null) - .fundStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getFundStartTime()) ? param.getFundStartTime() : null) - .fundPaymentBaseString(paramReq.getPaymentForm()) - .supplementFundAccount(param.getSupplementFundAccount()) - .creator(employeeId) - .nonPayment(param.getNonPayment()) - .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .underTake(param.getUnderTake()) - .paymentOrganization(param.getPaymentOrganization()) - .updateTime(new Date()) - .welfareType(paramReq.getWelfareType().getValue()) - .employeeId(param.getEmployeeId()) - .build(); - //校验福利基数是否符合上下限要求, - if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { + //校验福利基数是否符合上下限要求, + if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + //需要拆分个人和公司福利基数时 + if (welBaseDiffSign) { + updateFundInfo.setFundPaymentComBaseString(paramReq.getPaymentComForm()); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } - //需要拆分个人和公司福利基数时 - if (welBaseDiffSign) { - updateFundInfo.setFundPaymentComBaseString(paramReq.getPaymentComForm()); - //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); - } + } + encryptUtil.encrypt(updateFundInfo, InsuranceArchivesFundSchemePO.class); + getFundSchemeMapper().updateById(updateFundInfo); + //更新base_info表状态 + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null && baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + //对于非系统人员,编辑后状态切换为正在缴纳 + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); + } + baseInfoPO.setFundArchivesId(updateFundInfo.getId()); + getInsuranceBaseInfoMapper().updateById(baseInfoPO); + + targetPO = baseInfoPO; + encryptUtil.decrypt(updateFundInfo, InsuranceArchivesFundSchemePO.class); + targetDetailPO = updateFundInfo; + } else { + getFundSchemeMapper().deleteByEmployeeIdAndPayOrg(InsuranceArchivesFundSchemePO.builder() + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build()); + //新建社保档案,并关联主表 + InsuranceArchivesFundSchemePO insertFundInfo = InsuranceArchivesFundSchemePO.builder() + .fundSchemeId(param.getFundSchemeId()) + .fundAccount(param.getFundAccount()) + .fundEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getFundEndTime()) ? param.getFundEndTime() : null) + .fundStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getFundStartTime()) ? param.getFundStartTime() : null) + .fundPaymentBaseString(paramReq.getPaymentForm()) + .supplementFundAccount(param.getSupplementFundAccount()) + .creator(employeeId) + .nonPayment(param.getNonPayment()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .underTake(param.getUnderTake()) + .paymentOrganization(param.getPaymentOrganization()) + .createTime(new Date()) + .updateTime(new Date()) + .welfareType(paramReq.getWelfareType().getValue()) + .employeeId(param.getEmployeeId()) + .build(); + //校验福利基数是否符合上下限要求, + if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + //需要拆分个人和公司福利基数时 + if (welBaseDiffSign) { + insertFundInfo.setFundPaymentComBaseString(paramReq.getPaymentComForm()); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } - encryptUtil.encrypt(updateFundInfo, InsuranceArchivesFundSchemePO.class); - fundSchemeMapper.updateById(updateFundInfo); - //更新base_info表状态 - InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); - if(baseInfoPO != null && baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { - //对于非系统人员,编辑后状态切换为正在缴纳 - baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); - } - baseInfoPO.setFundArchivesId(updateFundInfo.getId()); - getInsuranceBaseInfoMapper().updateById(baseInfoPO); - sqlSession.commit(); - } else { - fundSchemeMapper.deleteByEmployeeIdAndPayOrg(InsuranceArchivesFundSchemePO.builder() + } + encryptUtil.encrypt(insertFundInfo, InsuranceArchivesFundSchemePO.class); + getFundSchemeMapper().insert(insertFundInfo); + + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null) { + List fundInfos = getFundSchemeMapper().getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .employeeId(param.getEmployeeId()) .paymentOrganization(param.getPaymentOrganization()) .build()); - //新建社保档案,并关联主表 - InsuranceArchivesFundSchemePO insertFundInfo = InsuranceArchivesFundSchemePO.builder() - .fundSchemeId(param.getFundSchemeId()) - .fundAccount(param.getFundAccount()) - .fundEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getFundEndTime()) ? param.getFundEndTime() : null) - .fundStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getFundStartTime()) ? param.getFundStartTime() : null) - .fundPaymentBaseString(paramReq.getPaymentForm()) - .supplementFundAccount(param.getSupplementFundAccount()) - .creator(employeeId) - .nonPayment(param.getNonPayment()) - .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .underTake(param.getUnderTake()) - .paymentOrganization(param.getPaymentOrganization()) - .createTime(new Date()) - .updateTime(new Date()) - .welfareType(paramReq.getWelfareType().getValue()) - .employeeId(param.getEmployeeId()) - .build(); - //校验福利基数是否符合上下限要求, - if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); - } - //需要拆分个人和公司福利基数时 - if (welBaseDiffSign) { - insertFundInfo.setFundPaymentComBaseString(paramReq.getPaymentComForm()); - //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); - } - } - encryptUtil.encrypt(insertFundInfo, InsuranceArchivesFundSchemePO.class); - fundSchemeMapper.insert(insertFundInfo); - sqlSession.commit(); - - InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); - if(baseInfoPO != null) { - List fundInfos = fundSchemeMapper.getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() - .employeeId(param.getEmployeeId()) - .paymentOrganization(param.getPaymentOrganization()) - .build()); - baseInfoPO.setFundArchivesId(fundInfos.get(0).getId()); - //对于非系统人员,编辑后状态切换为正在缴纳 - if (baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { - baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); - } - getInsuranceBaseInfoMapper().updateById(baseInfoPO); - } else { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); + baseInfoPO.setFundArchivesId(fundInfos.get(0).getId()); + //对于非系统人员,编辑后状态切换为正在缴纳 + if (baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); } + getInsuranceBaseInfoMapper().updateById(baseInfoPO); + targetPO = baseInfoPO; + encryptUtil.decrypt(insertFundInfo, InsuranceArchivesFundSchemePO.class); + targetDetailPO = insertFundInfo; + } else { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); } - - //生成福利档案基数调整记录数据 - List adjustHistoryList = createAdjustInfo(adjustInfo, employeeId); - //福利档案基数调整记录数据入库 - batchInsertAdjustHistory(adjustHistoryList); - - } finally { - sqlSession.close(); } - + //记录操作日志 + DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); + TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案-公积金明细保存")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利档案-公积金明细保存") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setNewValues(targetDetailPO); + SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); + //生成福利档案基数调整记录数据 + List adjustHistoryList = createAdjustInfo(adjustInfo, employeeId); + //福利档案基数调整记录数据入库 + batchInsertAdjustHistory(adjustHistoryList); } /** @@ -3023,154 +3220,164 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService */ public void socialSave(InsuranceArchivesSaveParam paramReq, User user, boolean welBaseDiffSign) { long employeeId = user.getUID(); - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - SocialSchemeMapper socialSchemeMapper = sqlSession.getMapper(SocialSchemeMapper.class); + InsuranceArchivesSocialSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesSocialSaveParam.class); + SalaryAssert.notNull(SalaryI18nUtil.getI18nLabel(0,"员工id为空"), param, param.getEmployeeId()); - InsuranceArchivesSocialSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesSocialSaveParam.class); - SalaryAssert.notNull(SalaryI18nUtil.getI18nLabel(0,"员工id为空"), param, param.getEmployeeId()); - - if (org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialStartTime()) && !SalaryDateUtil.checkYearMonth(param.getSocialStartTime())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "社保起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); - } - if (org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialEndTime()) && !SalaryDateUtil.checkYearMonth(param.getSocialEndTime())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "社保最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); - } + if (org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialStartTime()) && !SalaryDateUtil.checkYearMonth(param.getSocialStartTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "社保起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } + if (org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialEndTime()) && !SalaryDateUtil.checkYearMonth(param.getSocialEndTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "社保最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } // //删除社保数据 // socialSchemeMapper.batchDeleteByEmployeeIds(Collections.singletonList(param.getEmployeeId())); - //查询已有数据 - List socialIds = new ArrayList(); - socialIds.add(param.getId()); - List oldSocialInfoList = socialSchemeMapper.getSocialById(socialIds); - + //创建操作日志记录对象 + InsuranceArchivesBaseInfoPO targetPO = new InsuranceArchivesBaseInfoPO(); + InsuranceArchivesSocialSchemePO targetDetailPO = new InsuranceArchivesSocialSchemePO(); + //查询已有数据 + List socialIds = new ArrayList(); + socialIds.add(param.getId()); + List oldSocialInfoList = getSocialSchemeMapper().getSocialById(socialIds); + //设置福利档案基数调整记录数据 + InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() + .adjustAfterSchemeId(param.getSocialSchemeId()) + .adjustAfterBaseJson(paramReq.getPaymentForm()) + .adjustAfterComBaseJson(paramReq.getPaymentComForm()) + .welfareType(paramReq.getWelfareType().getValue()) + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build(); + //组装新数据 + if (oldSocialInfoList.size() == 1) { + //老数据 + InsuranceArchivesSocialSchemePO oldSocialInfo = oldSocialInfoList.get(0); //设置福利档案基数调整记录数据 - InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() - .adjustAfterSchemeId(param.getSocialSchemeId()) - .adjustAfterBaseJson(paramReq.getPaymentForm()) - .adjustAfterComBaseJson(paramReq.getPaymentComForm()) - .welfareType(paramReq.getWelfareType().getValue()) - .employeeId(param.getEmployeeId()) - .paymentOrganization(param.getPaymentOrganization()) - .build(); - - //组装新数据 - if (oldSocialInfoList.size() == 1) { - //老数据 - InsuranceArchivesSocialSchemePO oldSocialInfo = oldSocialInfoList.get(0); - //设置福利档案基数调整记录数据 - encryptUtil.decrypt(oldSocialInfo, InsuranceArchivesSocialSchemePO.class); - adjustInfo.setAdjustBeforeBaseJson(oldSocialInfo.getSocialPaymentBaseString()); - adjustInfo.setAdjustBeforeSchemeId(oldSocialInfo.getSocialSchemeId()); - adjustInfo.setAdjustBeforeComBaseJson(oldSocialInfo.getSocialPaymentComBaseString()); - //新数据 - InsuranceArchivesSocialSchemePO updateSocialInfo = - InsuranceArchivesSocialSchemePO.builder() - .id(oldSocialInfo.getId()) - .welfareType(paramReq.getWelfareType().getValue()) - .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) - .socialPaymentBaseString(paramReq.getPaymentForm()) - .socialSchemeId(param.getSocialSchemeId()) - .socialEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialEndTime()) ? param.getSocialEndTime() : null) - .socialStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialStartTime()) ? param.getSocialStartTime() : null) - .creator(employeeId) - .nonPayment(param.getNonPayment()) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .employeeId(param.getEmployeeId()) - .updateTime(new Date()) - .underTake(param.getUnderTake()) - .socialAccount(param.getSchemeAccount()) - .paymentOrganization(param.getPaymentOrganization()) - .build(); + encryptUtil.decrypt(oldSocialInfo, InsuranceArchivesSocialSchemePO.class); + adjustInfo.setAdjustBeforeBaseJson(oldSocialInfo.getSocialPaymentBaseString()); + adjustInfo.setAdjustBeforeSchemeId(oldSocialInfo.getSocialSchemeId()); + adjustInfo.setAdjustBeforeComBaseJson(oldSocialInfo.getSocialPaymentComBaseString()); + //新数据 + InsuranceArchivesSocialSchemePO updateSocialInfo = + InsuranceArchivesSocialSchemePO.builder() + .id(oldSocialInfo.getId()) + .welfareType(paramReq.getWelfareType().getValue()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .socialPaymentBaseString(paramReq.getPaymentForm()) + .socialSchemeId(param.getSocialSchemeId()) + .socialEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialEndTime()) ? param.getSocialEndTime() : null) + .socialStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialStartTime()) ? param.getSocialStartTime() : null) + .creator(employeeId) + .nonPayment(param.getNonPayment()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .employeeId(param.getEmployeeId()) + .updateTime(new Date()) + .underTake(param.getUnderTake()) + .socialAccount(param.getSchemeAccount()) + .paymentOrganization(param.getPaymentOrganization()) + .build(); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + //需要拆分个人和公司福利基数时 + if (welBaseDiffSign) { + updateSocialInfo.setSocialPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { + if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } - //需要拆分个人和公司福利基数时 - if (welBaseDiffSign) { - updateSocialInfo.setSocialPaymentComBaseString(paramReq.getPaymentComForm()); - //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); - } + } + encryptUtil.encrypt(updateSocialInfo, InsuranceArchivesSocialSchemePO.class); + getSocialSchemeMapper().updateById(updateSocialInfo); + //更新base_info表状态 + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null && baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + //对于非系统人员,编辑后状态切换为正在缴纳 + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); + } + baseInfoPO.setSocialArchivesId(updateSocialInfo.getId()); + getInsuranceBaseInfoMapper().updateById(baseInfoPO); + + targetPO = baseInfoPO; + encryptUtil.decrypt(updateSocialInfo, InsuranceArchivesSocialSchemePO.class); + targetDetailPO = updateSocialInfo; + } else { + getSocialSchemeMapper().deleteByEmployeeIdAndPayOrg(InsuranceArchivesSocialSchemePO.builder() + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build()); + //新建社保档案,并关联主表 + InsuranceArchivesSocialSchemePO insertSocialInfo = + InsuranceArchivesSocialSchemePO.builder() + .welfareType(paramReq.getWelfareType().getValue()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .socialPaymentBaseString(paramReq.getPaymentForm()) + .socialSchemeId(param.getSocialSchemeId()) + .socialEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialEndTime()) ? param.getSocialEndTime() : null) + .socialStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialStartTime()) ? param.getSocialStartTime() : null) + .creator(employeeId) + .nonPayment(param.getNonPayment()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .employeeId(param.getEmployeeId()) + .createTime(new Date()) + .updateTime(new Date()) + .underTake(param.getUnderTake()) + .socialAccount(param.getSchemeAccount()) + .paymentOrganization(param.getPaymentOrganization()) + .build(); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } + //需要拆分个人和公司福利基数时 + if (welBaseDiffSign) { + insertSocialInfo.setSocialPaymentComBaseString(paramReq.getPaymentComForm()); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } - encryptUtil.encrypt(updateSocialInfo, InsuranceArchivesSocialSchemePO.class); - socialSchemeMapper.updateById(updateSocialInfo); - //更新base_info表状态 - InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); - if(baseInfoPO != null && baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { - //对于非系统人员,编辑后状态切换为正在缴纳 - baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); - } - baseInfoPO.setSocialArchivesId(updateSocialInfo.getId()); - getInsuranceBaseInfoMapper().updateById(baseInfoPO); - sqlSession.commit(); - } else { - socialSchemeMapper.deleteByEmployeeIdAndPayOrg(InsuranceArchivesSocialSchemePO.builder() + } + encryptUtil.encrypt(insertSocialInfo, InsuranceArchivesSocialSchemePO.class); + getSocialSchemeMapper().insert(insertSocialInfo); + + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null) { + List socialInfos = getSocialSchemeMapper().getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .employeeId(param.getEmployeeId()) .paymentOrganization(param.getPaymentOrganization()) .build()); - //新建社保档案,并关联主表 - InsuranceArchivesSocialSchemePO insertSocialInfo = - InsuranceArchivesSocialSchemePO.builder() - .welfareType(paramReq.getWelfareType().getValue()) - .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) - .socialPaymentBaseString(paramReq.getPaymentForm()) - .socialSchemeId(param.getSocialSchemeId()) - .socialEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialEndTime()) ? param.getSocialEndTime() : null) - .socialStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialStartTime()) ? param.getSocialStartTime() : null) - .creator(employeeId) - .nonPayment(param.getNonPayment()) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .employeeId(param.getEmployeeId()) - .createTime(new Date()) - .updateTime(new Date()) - .underTake(param.getUnderTake()) - .socialAccount(param.getSchemeAccount()) - .paymentOrganization(param.getPaymentOrganization()) - .build(); - //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); - } - //需要拆分个人和公司福利基数时 - if (welBaseDiffSign) { - insertSocialInfo.setSocialPaymentComBaseString(paramReq.getPaymentComForm()); - //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); - } - } - encryptUtil.encrypt(insertSocialInfo, InsuranceArchivesSocialSchemePO.class); - socialSchemeMapper.insert(insertSocialInfo); - sqlSession.commit(); - - InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); - if(baseInfoPO != null) { - List socialInfos = socialSchemeMapper.getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() - .employeeId(param.getEmployeeId()) - .paymentOrganization(param.getPaymentOrganization()) - .build()); - baseInfoPO.setSocialArchivesId(socialInfos.get(0).getId()); - //对于非系统人员,编辑后状态切换为正在缴纳 - if (baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { - baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); - } - getInsuranceBaseInfoMapper().updateById(baseInfoPO); - } else { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); + baseInfoPO.setSocialArchivesId(socialInfos.get(0).getId()); + //对于非系统人员,编辑后状态切换为正在缴纳 + if (baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); } + getInsuranceBaseInfoMapper().updateById(baseInfoPO); + targetPO = baseInfoPO; + encryptUtil.decrypt(insertSocialInfo, InsuranceArchivesSocialSchemePO.class); + targetDetailPO = insertSocialInfo; + } else { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); } - - //生成福利档案基数调整记录数据 - List adjustHistoryList = createAdjustInfo(adjustInfo, employeeId); - //福利档案基数调整记录数据入库 - batchInsertAdjustHistory(adjustHistoryList); - } finally { - sqlSession.close(); } + //记录操作日志 + DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); + TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案-社保明细保存")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利档案-社保明细保存") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setNewValues(targetDetailPO); + SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); + //生成福利档案基数调整记录数据 + List adjustHistoryList = createAdjustInfo(adjustInfo, employeeId); + //福利档案基数调整记录数据入库 + batchInsertAdjustHistory(adjustHistoryList); } /** diff --git a/src/com/engine/salary/service/impl/SICategoryServiceImpl.java b/src/com/engine/salary/service/impl/SICategoryServiceImpl.java index 11b7cf378..453ff9729 100644 --- a/src/com/engine/salary/service/impl/SICategoryServiceImpl.java +++ b/src/com/engine/salary/service/impl/SICategoryServiceImpl.java @@ -6,6 +6,8 @@ import com.api.browser.util.ConditionFactory; import com.api.browser.util.ConditionType; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; import com.engine.salary.entity.sicategory.bo.ICategoryBO; @@ -15,6 +17,7 @@ import com.engine.salary.entity.sicategory.dto.ICategoryListDTO; import com.engine.salary.entity.sicategory.po.ICategoryPO; import com.engine.salary.entity.sischeme.param.InsuranceSchemeParam; import com.engine.salary.entity.sischeme.po.InsuranceSchemeDetailPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.sicategory.DataTypeEnum; import com.engine.salary.enums.sicategory.IsPaymentEnum; import com.engine.salary.enums.sicategory.PaymentScopeEnum; @@ -119,6 +122,15 @@ public class SICategoryServiceImpl extends Service implements SICategoryService items.put("paymentScope",checkbox); apidatas.put("item",items); + //记录操作日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(form.getId())); + loggerContext.setTargetName(form.getInsuranceName()); + loggerContext.setOperateType(OperateTypeEnum.READ.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "查看自定义福利明细")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "查看自定义福利明细") + ": " + form.getInsuranceName()); + SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); return apidatas; } @@ -250,6 +262,16 @@ public class SICategoryServiceImpl extends Service implements SICategoryService .updateTime(new Date()) .build(); getICategoryMapper().updateNameAndPayScopeById(iCategoryPO); + //记录操作日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(iCategoryPO.getId())); + loggerContext.setTargetName(iCategoryPO.getInsuranceName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "更新自定义福利信息")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "更新自定义福利信息")); + loggerContext.setNewValues(iCategoryPO); + SalaryElogConfig.siCategoryLoggerTemplate.write(loggerContext); return null; } @@ -297,6 +319,16 @@ public class SICategoryServiceImpl extends Service implements SICategoryService //删除自定义福利项 categoryPO.setUpdateTime(new Date()); getICategoryMapper().deleteCustomCategoryById(categoryPO); + //记录操作日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(categoryPO.getId())); + loggerContext.setTargetName(categoryPO.getInsuranceName()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新建自定义福利项")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新建自定义福利项")); +// loggerContext.setNewValues(categoryPO); + SalaryElogConfig.siCategoryLoggerTemplate.write(loggerContext); return null; } @@ -381,22 +413,23 @@ public class SICategoryServiceImpl extends Service implements SICategoryService * @param employeeId DataTypeEnum.SYSTEM.getValue() */ public void save(ICategoryFormDTO iCategoryFormDTO, long employeeId) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - ICategoryMapper iCategoryMapper = sqlSession.getMapper(ICategoryMapper.class); - iCategoryFormDTO.setInsuranceName(StringUtils.trim(iCategoryFormDTO.getInsuranceName())); - List iCategoryPOS = listByName(iCategoryFormDTO.getInsuranceName()); - if (CollectionUtils.isNotEmpty(iCategoryPOS)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"福利名称不允许重复")); - } - ICategoryPO iCategoryPO = ICategoryBO.convertToInsuranceCategoryPO(iCategoryFormDTO, employeeId); - iCategoryMapper.insert(iCategoryPO); - - sqlSession.commit(); - - } finally { - sqlSession.close(); + iCategoryFormDTO.setInsuranceName(StringUtils.trim(iCategoryFormDTO.getInsuranceName())); + List iCategoryPOS = listByName(iCategoryFormDTO.getInsuranceName()); + if (CollectionUtils.isNotEmpty(iCategoryPOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"福利名称不允许重复")); } + ICategoryPO iCategoryPO = ICategoryBO.convertToInsuranceCategoryPO(iCategoryFormDTO, employeeId); + getICategoryMapper().insert(iCategoryPO); + //记录操作日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(iCategoryPO.getId())); + loggerContext.setTargetName(iCategoryPO.getInsuranceName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新建自定义福利项")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新建自定义福利项")); + loggerContext.setNewValues(iCategoryPO); + SalaryElogConfig.siCategoryLoggerTemplate.write(loggerContext); } /** @@ -436,31 +469,34 @@ public class SICategoryServiceImpl extends Service implements SICategoryService * @param isUse */ public void updateStatusById(Long id, Integer isUse) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - if(id == null) { - throw new SalaryRunTimeException("id is required"); - } - if (isUse == null) { - throw new SalaryRunTimeException("isUse is required"); - } -// List insuranceSchemeDetailPOS = new SISchemeBiz().queryListByInsuranceIdIsPayment(id, IsPaymentEnum.YES.getValue()); - List insuranceSchemeDetailPOS = getSISchemeService(user).queryListByInsuranceIdIsPayment(id, IsPaymentEnum.YES.getValue()); - if(CollectionUtils.isNotEmpty(insuranceSchemeDetailPOS) && isUse == 0) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"该福利开启缴费,不可删除(或停用)")); - } - ICategoryPO iCategoryPO = getICategoryPOByID(id); - if (Objects.isNull(iCategoryPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"数据记录不存在")); - } - iCategoryPO.setIsUse(isUse); - ICategoryMapper iCategoryMapper = sqlSession.getMapper(ICategoryMapper.class); - iCategoryMapper.updateById(iCategoryPO); - sqlSession.commit(); - }finally { - sqlSession.close(); + if(id == null) { + throw new SalaryRunTimeException("id is required"); } + if (isUse == null) { + throw new SalaryRunTimeException("isUse is required"); + } +// List insuranceSchemeDetailPOS = new SISchemeBiz().queryListByInsuranceIdIsPayment(id, IsPaymentEnum.YES.getValue()); + List insuranceSchemeDetailPOS = getSISchemeService(user).queryListByInsuranceIdIsPayment(id, IsPaymentEnum.YES.getValue()); + if(CollectionUtils.isNotEmpty(insuranceSchemeDetailPOS) && isUse == 0) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"该福利开启缴费,不可删除(或停用)")); + } + ICategoryPO iCategoryPO = getICategoryPOByID(id); + if (Objects.isNull(iCategoryPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"数据记录不存在")); + } + iCategoryPO.setIsUse(isUse); + getICategoryMapper().updateById(iCategoryPO); + //记录操作日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(iCategoryPO.getId())); + loggerContext.setTargetName(iCategoryPO.getInsuranceName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "更新自定义福利状态")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "更新自定义福利状态")); + loggerContext.setNewValues(iCategoryPO); + SalaryElogConfig.siCategoryLoggerTemplate.write(loggerContext); } /*****以上代码为SICategoryBiz中方法逻辑迁移,旨在减少Biz类的使用*****/ diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 22e584b4f..3c7db3426 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -14,6 +14,7 @@ import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.entity.siarchives.dto.InsuranceArchivesBaseHistoryDTO; import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam; import com.engine.salary.entity.siarchives.param.SIArchiveImportParam; import com.engine.salary.entity.siarchives.po.*; @@ -40,6 +41,7 @@ import com.engine.salary.enums.salarysob.TargetTypeEnum; import com.engine.salary.enums.siaccount.EmployeeStatusEnum; import com.engine.salary.enums.sicategory.*; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.datacollection.EmployMapper; import com.engine.salary.mapper.siaccount.SIAccountUtilMapper; import com.engine.salary.mapper.siarchives.FundSchemeMapper; import com.engine.salary.mapper.siarchives.InsuranceBaseInfoMapper; @@ -173,6 +175,9 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { return SqlProxyHandle.getProxy(SIAccountUtilMapper.class); } + private EmployMapper getEmployMapper() { + return MapperProxyFactory.getProxy(EmployMapper.class); + } @Override public Map getForm(Map params) { // return commandExecutor.execute(new SISchemeGetFormCmd(params, user)); @@ -186,6 +191,16 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { // InsuranceSchemeFormVO form = siSchemeBiz.getForm(id, welfareTypeEnum); InsuranceSchemeFormVO form = getForm(id, welfareTypeEnum); apidatas.put("form",form); + //记录操作日志 + InsuranceSchemeDTO schemeBatch = form.getSchemeBatch(); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(schemeBatch.getId())); + loggerContext.setTargetName(schemeBatch.getSchemeName()); + loggerContext.setOperateType(OperateTypeEnum.READ.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "查看福利方案明细")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "查看福利方案明细") + ": " + schemeBatch.getSchemeName()); + SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); return apidatas; } @@ -623,6 +638,13 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { } rows.add(row); } + //记录操作日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setOperateType(OperateTypeEnum.EXPORT.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案导出")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利档案导出")); + SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); //获取excel return ExcelUtilPlus.genWorkbookV2(rows, sheetName); } @@ -1821,10 +1843,17 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { } public void handleImportData(List insuranceArchivesAccountPOS, SIArchiveImportParam param) { + List baseInfoPOS = insuranceArchivesAccountPOS.stream().filter(Objects::nonNull).map(InsuranceArchivesAccountPO::getBaseInfo).collect(Collectors.toList()); + //去除员工id+个税扣缴义务人下重复的数据 + baseInfoPOS = baseInfoPOS.stream() + .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getPaymentOrganization() + "-" + f.getEmployeeId()))), ArrayList::new)); + //老数据map + Map oldSocialArchiveMap = getSocialArchiveMap(baseInfoPOS); + Map oldFundArchiveMap = getFundArchiveMap(baseInfoPOS); + Map oldOtherArchiveMap = getOtherArchiveMap(baseInfoPOS); //导入社保档案 List socialSchemePOS = insuranceArchivesAccountPOS.stream().filter(Objects::nonNull).map(InsuranceArchivesAccountPO::getSocial).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(socialSchemePOS)) { - //去除员工id+个税扣缴义务人下重复的数据 socialSchemePOS = socialSchemePOS.stream() .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getPaymentOrganization() + "-" + f.getEmployeeId()))), ArrayList::new)); @@ -1848,7 +1877,6 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { //导入公积金档案 List fundSchemePOS = insuranceArchivesAccountPOS.stream().filter(Objects::nonNull).map(InsuranceArchivesAccountPO::getFund).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(fundSchemePOS)) { - //去除员工id+个税扣缴义务人下重复的数据 fundSchemePOS = fundSchemePOS.stream() .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getPaymentOrganization() + "-" + f.getEmployeeId()))), ArrayList::new)); @@ -1869,7 +1897,6 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { //导入其他福利档案 List otherSchemePOS = insuranceArchivesAccountPOS.stream().filter(Objects::nonNull).map(InsuranceArchivesAccountPO::getOther).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(otherSchemePOS)) { - //去除员工id+个税扣缴义务人下重复的数据 otherSchemePOS = otherSchemePOS.stream() .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getPaymentOrganization() + "-" + f.getEmployeeId()))), ArrayList::new)); @@ -1889,12 +1916,12 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { getSIArchivesService(user).batchInsertAdjustHistory(adjustOtherHistoryPOList); } //导入福利档案基础信息 - List baseInfoPOS = insuranceArchivesAccountPOS.stream().filter(Objects::nonNull).map(InsuranceArchivesAccountPO::getBaseInfo).collect(Collectors.toList()); +// List baseInfoPOS = insuranceArchivesAccountPOS.stream().filter(Objects::nonNull).map(InsuranceArchivesAccountPO::getBaseInfo).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(baseInfoPOS)) { // baseInfoPOS = baseInfoPOS.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(InsuranceArchivesBaseInfoPO::getEmployeeId))), ArrayList::new)); - //去除员工id+个税扣缴义务人下重复的数据 - baseInfoPOS = baseInfoPOS.stream() - .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getPaymentOrganization() + "-" + f.getEmployeeId()))), ArrayList::new)); +// //去除员工id+个税扣缴义务人下重复的数据 +// baseInfoPOS = baseInfoPOS.stream() +// .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getPaymentOrganization() + "-" + f.getEmployeeId()))), ArrayList::new)); //根据人员id和个税扣缴义务人id删除对应档案 baseInfoPOS.forEach(getInsuranceBaseInfoMapper()::deleteByEmployeeIdAndPayOrg); //分批批量删除 @@ -1919,6 +1946,54 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { //分批批量入库 List> partition = Lists.partition(newInsuranceArchivesBaseInfoList, 100); partition.forEach(getInsuranceBaseInfoMapper()::batchSave); + //记录操作日志 + //获取新数据map和老数据map + Map newSocialArchiveMap = getSocialArchiveMap(baseInfoPOS); + Map newFundArchiveMap = getFundArchiveMap(baseInfoPOS); + Map newOtherArchiveMap = getOtherArchiveMap(baseInfoPOS); + newInsuranceArchivesBaseInfoList.forEach(targetPO -> { + InsuranceArchivesSocialSchemePO targetSocialDetail = newSocialArchiveMap.get(targetPO.getPaymentOrganization() + "-" + targetPO.getEmployeeId()); + InsuranceArchivesFundSchemePO targetFundDetail = newFundArchiveMap.get(targetPO.getPaymentOrganization() + "-" + targetPO.getEmployeeId()); + InsuranceArchivesOtherSchemePO targetOtherDetail = newOtherArchiveMap.get(targetPO.getPaymentOrganization() + "-" + targetPO.getEmployeeId()); + DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); + TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); + if (targetSocialDetail != null) { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案-社保明细导入")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利档案-社保明细导入") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setOldValues(oldSocialArchiveMap.get(targetPO.getPaymentOrganization() + "-" + targetPO.getEmployeeId())); + loggerContext.setNewValues(targetSocialDetail); + SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); + } + if (targetFundDetail != null) { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案-公积金明细导入")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利档案-公积金明细导入") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setOldValues(oldFundArchiveMap.get(targetPO.getPaymentOrganization() + "-" + targetPO.getEmployeeId())); + loggerContext.setNewValues(targetFundDetail); + SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); + } + if (targetOtherDetail != null) { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案-其他福利明细导入")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利档案-其他福利明细导入") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); + loggerContext.setOldValues(oldOtherArchiveMap.get(targetPO.getPaymentOrganization() + "-" + targetPO.getEmployeeId())); + loggerContext.setNewValues(targetOtherDetail); + SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); + } + }); } //新增人员范围(会自动生成人员档案) if (CollectionUtils.isNotEmpty(param.getTaxAgentRanges())) { @@ -1926,6 +2001,61 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { } } + private Map getSocialArchiveMap(List baseInfoPOS) { + Map map = new HashMap<>(); + if (baseInfoPOS.size() > 0) { + //遍历待更新的福利档案数据,对每组档案生成基数调整记录(基数单元未变化则忽略) + for (InsuranceArchivesBaseInfoPO po : baseInfoPOS) { + List archiveList = getSocialSchemeMapper().getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .paymentOrganization(po.getPaymentOrganization()).employeeId(po.getEmployeeId()).build()); + if (archiveList.size() == 1) { + //新增调整记录,变更 + encryptUtil.decryptList(archiveList, InsuranceArchivesSocialSchemePO.class); + map.put(po.getPaymentOrganization() + "-" + po.getEmployeeId(), archiveList.get(0)); + } else if (archiveList.size() > 1) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保档案存在冗余数据!")); + } + } + } + return map; + } + private Map getFundArchiveMap(List baseInfoPOS) { + Map map = new HashMap<>(); + if (baseInfoPOS.size() > 0) { + //遍历待更新的福利档案数据,对每组档案生成基数调整记录(基数单元未变化则忽略) + for (InsuranceArchivesBaseInfoPO po : baseInfoPOS) { + List archiveList = getFundSchemeMapper().getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .paymentOrganization(po.getPaymentOrganization()).employeeId(po.getEmployeeId()).build()); + if (archiveList.size() == 1) { + //新增调整记录,变更 + encryptUtil.decryptList(archiveList, InsuranceArchivesFundSchemePO.class); + map.put(po.getPaymentOrganization() + "-" + po.getEmployeeId(), archiveList.get(0)); + } else if (archiveList.size() > 1) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金档案存在冗余数据!")); + } + } + } + return map; + } + private Map getOtherArchiveMap(List baseInfoPOS) { + Map map = new HashMap<>(); + if (baseInfoPOS.size() > 0) { + //遍历待更新的福利档案数据,对每组档案生成基数调整记录(基数单元未变化则忽略) + for (InsuranceArchivesBaseInfoPO po : baseInfoPOS) { + List archiveList = getOtherSchemeMapper().getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .paymentOrganization(po.getPaymentOrganization()).employeeId(po.getEmployeeId()).build()); + if (archiveList.size() == 1) { + //新增调整记录,变更 + encryptUtil.decryptList(archiveList, InsuranceArchivesOtherSchemePO.class); + map.put(po.getPaymentOrganization() + "-" + po.getEmployeeId(), archiveList.get(0)); + } else if (archiveList.size() > 1) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保档案存在冗余数据!")); + } + } + } + return map; + } + /** * 导出档案导入所需要的模板,可根据开关选择是否导出现有的档案数据 @@ -2335,8 +2465,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { loggerContext.setTargetId(String.valueOf(targetPO.getId())); loggerContext.setTargetName(targetPO.getSchemeName()); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新建福利方案")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新建福利方案") + ": " + targetPO.getSchemeName()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增福利方案主表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案基础信息") + ": " + targetPO.getSchemeName()); loggerContext.setNewValues(targetPO); SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); } @@ -2345,26 +2475,19 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { //加密入库 encryptUtil.encryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); insuranceSchemeDetailPOS.forEach(getInsuranceSchemeDetailMapper()::insert); - //记录操作日志 + //记录明细表操作日志 if (insuranceSchemeDetailPOS.size() > 0) { encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); - List allCategoryList = getICategoryMapper().listAll(); - Map categoryNameMap = SalaryEntityUtil.convert2Map(allCategoryList, ICategoryPO::getId, ICategoryPO::getInsuranceName); - InsuranceSchemePO finalTargetPO = targetPO; - insuranceSchemeDetailPOS.forEach(schemeDetailPO -> { - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId(String.valueOf(finalTargetPO.getId())); - loggerContext.setTargetName(categoryNameMap.get(schemeDetailPO.getInsuranceId())); - loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新建福利方案明细")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新建福利方案明细") + ": " - + categoryNameMap.get(schemeDetailPO.getInsuranceId()) - + "-" + SalaryEnumUtil.enumMatchByValue(schemeDetailPO.getPaymentScope(), PaymentScopeEnum.values(), PaymentScopeEnum.class)); - loggerContext.setNewValues(schemeDetailPO); - SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); - }); + LoggerContext> loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(targetPO.getSchemeName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增福利方案明细表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案明细")); + insuranceSchemeDetailPOS.forEach(loggerContext::setNewValues); + SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); } } @@ -2397,32 +2520,37 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案可见性为私有时,未设置可见范围")); } } - //记录操作日志 - LoggerContext loggerContext = new LoggerContext<>(); + //记录主表操作日志 + LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId(insuranceSchemePO.getId().toString()); loggerContext.setTargetName(insuranceSchemePO.getSchemeName()); loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利方案保存")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案保存") + ": " + insuranceSchemePO.getSchemeName()); - loggerContext.setOldValues(insuranceSchemePO); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "修改福利方案主表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案基础信息") + ": " + insuranceSchemePO.getSchemeName()); +// loggerContext.setOldValues(insuranceSchemePO); //更新福利方案主表 InsuranceSchemePO insuranceSchemePO1 = InsuranceSchemeBO.buildInsuranceSchemePO(insuranceSchemePO, updateParam.getInsuranceScheme()); getInsuranceSchemeMapper().update(insuranceSchemePO1); - //记录操作日志 + //记录主表操作日志 loggerContext.setNewValues(insuranceSchemePO1); SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); - List oldInsuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(updateParam.getInsuranceScheme().getId()); - encryptUtil.decryptList(oldInsuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); - //更新福利方案明细表 先删后插 getInsuranceSchemeDetailMapper().batchDeleteByPrimaryIds(Collections.singleton(updateParam.getInsuranceScheme().getId())); //更新明细表 List insuranceSchemeDetailPOS = InsuranceSchemeBO.convertToInsuranceSchemeDetailPoList(updateParam.getInsuranceSchemeDetailList(), employeeId, insuranceSchemePO.getId()); encryptUtil.encryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); insuranceSchemeDetailPOS.forEach(getInsuranceSchemeDetailMapper()::insert); - //记录操作日志, todo - + //记录明细表操作日志 + encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); + LoggerContext> insuranceSchemeDetailContext = new LoggerContext<>(); + insuranceSchemeDetailContext.setTargetId(String.valueOf(insuranceSchemePO.getId())); + insuranceSchemeDetailContext.setTargetName(insuranceSchemePO.getSchemeName()); + insuranceSchemeDetailContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + insuranceSchemeDetailContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "修改福利方案明细表")); + insuranceSchemeDetailContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案明细")); + insuranceSchemeDetailPOS.forEach(insuranceSchemeDetailContext::setNewValues); + SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(insuranceSchemeDetailContext); } @@ -2451,38 +2579,33 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { getInsuranceSchemeDetailMapper().deleteByIds(schemeIds); //记录操作日志 + Map> targetDetailMap = targetDetailPoList.stream() + .collect(Collectors.groupingBy(InsuranceSchemeDetailPO::getPrimaryId)); if (targetPoList.size() > 0) { targetPoList.forEach(targetPO -> { + //记录主表操作日志 LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(targetPO.getId())); loggerContext.setTargetName(targetPO.getSchemeName()); loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除福利方案")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除福利方案主表")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除福利方案") + ": " + targetPO.getSchemeName()); loggerContext.setNewValues(targetPO); SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); - }); - } - if (targetDetailPoList.size() > 0) { - List allCategoryList = getICategoryMapper().listAll(); - Map categoryNameMap = SalaryEntityUtil.convert2Map(allCategoryList, ICategoryPO::getId, ICategoryPO::getInsuranceName); - Map> targetDetailMap = targetDetailPoList.stream() - .collect(Collectors.groupingBy(InsuranceSchemeDetailPO::getPrimaryId)); - targetDetailMap.forEach((k, v) -> { - v.forEach(schemeDetailPO -> { - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId(String.valueOf(k)); - loggerContext.setTargetName(categoryNameMap.get(schemeDetailPO.getInsuranceId())); - loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除福利方案明细")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除福利方案明细") + ": " - + categoryNameMap.get(schemeDetailPO.getInsuranceId()) - + "-" + SalaryEnumUtil.enumMatchByValue(schemeDetailPO.getPaymentScope(), PaymentScopeEnum.values(), PaymentScopeEnum.class)); - loggerContext.setNewValues(schemeDetailPO); - SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); - }); + //记录明细表操作日志 + List targetDetails = targetDetailMap.get(targetPO.getId()); + if (targetDetails != null && targetDetails.size() > 0) { + LoggerContext> detailLoggerContext = new LoggerContext<>(); + detailLoggerContext.setUser(user); + detailLoggerContext.setTargetId(String.valueOf(targetPO.getId())); + detailLoggerContext.setTargetName(targetPO.getSchemeName()); + detailLoggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + detailLoggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除福利方案明细")); + detailLoggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案明细")); + targetDetails.forEach(detailLoggerContext::setNewValues); + SalaryElogConfig.siSchemeLoggerTemplate.write(detailLoggerContext); + } }); } @@ -2537,8 +2660,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { loggerContext.setTargetId(String.valueOf(targetPO.getId())); loggerContext.setTargetName(targetPO.getSchemeName()); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "复制福利方案")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "复制(新建)福利方案") + ": " + targetPO.getSchemeName()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "复制新增福利方案主表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案基础信息") + ": " + targetPO.getSchemeName()); loggerContext.setNewValues(targetPO); SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); } @@ -2569,26 +2692,19 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { //加密入库 encryptUtil.encryptList(detailPOS, InsuranceSchemeDetailPO.class); detailPOS.forEach(getInsuranceSchemeDetailMapper()::insert); - //记录操作日志 + //记录明细表操作日志 if (detailPOS.size() > 0) { encryptUtil.decryptList(detailPOS, InsuranceSchemeDetailPO.class); - List allCategoryList = getICategoryMapper().listAll(); - Map categoryNameMap = SalaryEntityUtil.convert2Map(allCategoryList, ICategoryPO::getId, ICategoryPO::getInsuranceName); - InsuranceSchemePO finalTargetPO = targetPO; - detailPOS.forEach(schemeDetailPO -> { - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId(String.valueOf(finalTargetPO.getId())); - loggerContext.setTargetName(categoryNameMap.get(schemeDetailPO.getInsuranceId())); - loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "复制福利方案明细")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "复制(新建)福利方案明细") + ": " - + categoryNameMap.get(schemeDetailPO.getInsuranceId()) - + "-" + SalaryEnumUtil.enumMatchByValue(schemeDetailPO.getPaymentScope(), PaymentScopeEnum.values(), PaymentScopeEnum.class)); - loggerContext.setNewValues(schemeDetailPO); - SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); - }); + LoggerContext> loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(targetPO.getSchemeName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "复制新增福利方案明细表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案明细")); + detailPOS.forEach(loggerContext::setNewValues); + SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); } } From 8f8bc5256d06407582b3c3174f311e909eca1475 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sun, 18 Feb 2024 11:39:49 +0800 Subject: [PATCH 29/64] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/enums/OperateTypeEnum.java | 43 +++++++++++++------ 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/src/com/engine/salary/enums/OperateTypeEnum.java b/src/com/engine/salary/enums/OperateTypeEnum.java index 697e1aea6..524a6f603 100644 --- a/src/com/engine/salary/enums/OperateTypeEnum.java +++ b/src/com/engine/salary/enums/OperateTypeEnum.java @@ -1,5 +1,8 @@ package com.engine.salary.enums; +import lombok.AllArgsConstructor; +import lombok.Getter; + /** * 操作类型 *

Copyright: Copyright (c) 2023

@@ -8,28 +11,40 @@ package com.engine.salary.enums; * @author qiantao * @version 1.0 **/ -public enum OperateTypeEnum { +@Getter +@AllArgsConstructor +public enum OperateTypeEnum implements BaseEnum{ - READ("0", "查看"), - ADD("1", "新增"), - UPDATE("2", "更新"), - DELETE("4", "删除"), - EXPORT("5", "导出"); + READ("0", "查看",1111), + ADD("1", "新建", 94607), + UPDATE("2", "更新", 249295), + DELETE("3", "删除", 87061), + FILE("4", "归档", 92144), + CANCEL_FILE("5", "取消归档", 145989), + CLEAR("6", "一键清空", 158473), + CALCULATE("7", "核算", 94146), + SYNC("8", "同步", 93950), + EXCEL_IMPORT("9", "导入", 87622), + EXCEL_EXPORT("9", "导出", 87622); - private String value; + private final String value; - private String label; + private final String defaultLabel; - OperateTypeEnum(String value, String label) { - this.value = value; - this.label = label; - } + private final Integer labelId; + @Override public String getValue() { return value; } - public String getLabel() { - return label; + @Override + public Integer getLabelId() { + return labelId; + } + + @Override + public String getDefaultLabel() { + return defaultLabel; } } From b2972e8acad74a9104308ee0cd2937fee67e77ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sun, 18 Feb 2024 11:40:59 +0800 Subject: [PATCH 30/64] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/SISchemeServiceImpl.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 3c7db3426..ac0391195 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -13,8 +13,6 @@ import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; -import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; -import com.engine.salary.entity.siarchives.dto.InsuranceArchivesBaseHistoryDTO; import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam; import com.engine.salary.entity.siarchives.param.SIArchiveImportParam; import com.engine.salary.entity.siarchives.po.*; @@ -59,6 +57,7 @@ import com.engine.salary.sys.enums.OpenEnum; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.*; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.excel.ExcelParseHelper; import com.engine.salary.util.excel.ExcelSupport; @@ -68,7 +67,6 @@ import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.engine.salary.util.db.IdGenerator; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -641,7 +639,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { //记录操作日志 LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); - loggerContext.setOperateType(OperateTypeEnum.EXPORT.getValue()); + loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案导出")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利档案导出")); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); From cfb82cb9b20f037e082871c670357b4b9143848e Mon Sep 17 00:00:00 2001 From: sy Date: Mon, 19 Feb 2024 17:27:42 +0800 Subject: [PATCH 31/64] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=96=B9=E6=A1=88=E3=80=81=E6=A1=A3=E6=A1=88?= =?UTF-8?q?=E3=80=81=E5=8F=B0=E8=B4=A6=EF=BC=8C=E7=9B=B8=E5=85=B3=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E7=B1=BB=E4=BB=A3=E7=A0=81=E6=A2=B3=E7=90=86=EF=BC=8C?= =?UTF-8?q?=E5=8E=BB=E9=99=A4sqlsession=E5=BD=A2=E5=BC=8F=E7=9A=84mpper?= =?UTF-8?q?=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SIArchivesServiceImpl.java | 736 ++++++++---------- .../service/impl/SICategoryServiceImpl.java | 59 +- .../service/impl/SISchemeServiceImpl.java | 72 +- 3 files changed, 355 insertions(+), 512 deletions(-) diff --git a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java index 5f317d94b..a8aaa54c5 100644 --- a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java @@ -140,6 +140,10 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService return MapperProxyFactory.getProxy(InsuranceSchemeDetailMapper.class); } + private InsuranceSchemeMapper getInsuranceSchemeMapper() { + return MapperProxyFactory.getProxy(InsuranceSchemeMapper.class); + } + private SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } @@ -160,6 +164,11 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService return MapperProxyFactory.getProxy(EmployMapper.class); } + private InsuranceBaseAdjustHistoryMapper getInsuranceBaseAdjustHistoryMapper() { + return MapperProxyFactory.getProxy(InsuranceBaseAdjustHistoryMapper.class); + } + + @Override public Map getTips(Map params) { return commandExecutor.execute(new SIArchivesTipsCmd(params, user)); @@ -813,12 +822,9 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService @Override public Map queryInsuranceTabTotal() { long currentEmployeeId = user.getUID(); - // tab页签数量 Map result = new HashMap<>(); - Boolean needAuth = getTaxAgentService(user).isNeedAuth(currentEmployeeId); - //获取管理的人员范围 List taxAgentEmployeeDTOS = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); Map> taxAgentEmployeesMap = SalaryEntityUtil.convert2Map(taxAgentEmployeeDTOS, TaxAgentManageRangeEmployeeDTO::getTaxAgentId, TaxAgentManageRangeEmployeeDTO::getEmployeeList); @@ -827,22 +833,18 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService // 获取作为管理员的所有个税扣缴义务人列表 Collection taxAgentPOS = getTaxAgentService(user).listAllTaxAgentsAsAdmin(currentEmployeeId); Set taxAgentIds = SalaryEntityUtil.properties(taxAgentPOS, TaxAgentPO::getId); - //获取所有福利档案基础信息 List archiveListDTOS = getInsuranceBaseInfoMapper().listAll(); list = archiveListDTOS.stream().filter(dto -> taxAgentIds.contains(dto.getPaymentOrganization())).collect(Collectors.toList()); - Boolean adminEnable = getTaxAgentService(user).isAdminEnable(currentEmployeeId); //不是管理员看不到数据,返回空 if (!adminEnable) { list = new ArrayList<>(); } - } else { list = getInsuranceBaseInfoMapper().listAll(); } - long stayAddTotal = 0L; long payTotal = 0L; long stayDelTotal = 0L; @@ -915,11 +917,9 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService List oldStayAddList = pos.stream().filter(f -> f.getRunStatus().equals(EmployeeStatusEnum.STOP_PAYMENT_FROM_ADD.getValue())).collect(Collectors.toList()); boolean isNotExist = oldStayAddList.stream().anyMatch(te -> taxAgentManageRangeEmployees.stream().noneMatch(p -> p.getEmployeeId() != null && p.getEmployeeId().equals(te.getEmployeeId()) && p.getTaxAgentId().equals(te.getPaymentOrganization()))); - if (isNotExist) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(116196, "不在当前个税扣缴义人的人员范围中,不可取消停缴")); } - for(InsuranceArchivesBaseInfoPO po : pos) { if (po.getRunStatus().equals(EmployeeStatusEnum.STOP_PAYMENT_FROM_ADD.getValue())) { //来自待增员的停缴->待增员 @@ -969,12 +969,10 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(145969, "没有可以操作的记录")); } List baseInfoPOList = getInsuranceBaseInfoMapper().listByIds(ids); - //分别新建福利档案基础信息相关的社保、公积金、其他福利档案列表 List socialList = new ArrayList<>(); List fundList = new ArrayList<>(); List otherList = new ArrayList<>(); - //新建最终可以进行减员的福利档案基础信息id列表 List toStopBaseInfoIdList = new ArrayList<>(); //新建最终不可以进行减员的福利档案基础信息id列表 @@ -997,10 +995,9 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService //获取社保档案 socialList = getSocialSchemeMapper().getSocialById(socialIds); //筛选可减员的社保档案相关信息 - toStopSocialIds = socialList.stream().filter(f-> f.getSocialSchemeId() == null || (f.getSocialEndTime() != null && f.getSocialEndTime().length() > 0 && (f.getSocialEndTime().compareTo(todayMonth)) <= 0)) .map(InsuranceArchivesSocialSchemePO::getId).collect(Collectors.toList()); - // + List finalToStopSocialIds = toStopSocialIds; noStopBaseInfoIds = baseInfoPOList.stream().filter(f -> !finalToStopSocialIds.contains(f.getSocialArchivesId())).map(InsuranceArchivesBaseInfoPO::getId).collect(Collectors.toList()); @@ -1028,7 +1025,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService //社保、公积金、其他福利档案的可减员的人员信息与入参中的人员信息一致时 toStopBaseInfoIdList = baseInfoIds; } else { - //与最终不可减员的baseInfoId信息做差集 toStopBaseInfoIdList = (List) CollectionUtils.subtract(baseInfoIds, noStopBaseInfoIds); } @@ -1036,7 +1032,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService if (toStopBaseInfoIdList.size() > 0) { getInsuranceBaseInfoMapper().updateRunStatusByIds(InsuranceArchivesBaseInfoPO.builder() .ids(toStopBaseInfoIdList).runStatus(EmployeeStatusEnum.STOP_PAYMENT_FROM_DEL.getValue()).build()); - //记录操作日志 toStopBaseInfoIdList.forEach(f -> { InsuranceArchivesBaseInfoPO targetPO = getInsuranceBaseInfoMapper().getById(f); @@ -1163,19 +1158,15 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService if (CollectionUtils.isEmpty(ids)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(145969, "没有可以操作的记录")); } - // List baseInfoPOList = new ArrayList<>(); List> partitionInfo = Lists.partition((List) ids, 100); partitionInfo.forEach(part -> baseInfoPOList.addAll( getInsuranceBaseInfoMapper().listByIds(part))); - // - //分别新建福利档案基础信息相关的社保、公积金、其他福利档案列表 List socialList = new ArrayList<>(); List fundList = new ArrayList<>(); List otherList = new ArrayList<>(); - //新建最终可以进行增员的福利档案基础信息id列表 List toPayBaseInfoIdList = new ArrayList<>(); //新建最终不可以进行增员的福利档案基础信息id列表 @@ -1360,7 +1351,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService if (insuranceArchivesBaseInfoPO.getIds() == null || StringUtils.isBlank(insuranceArchivesBaseInfoPO.getRunStatus())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); } - if (insuranceArchivesBaseInfoPO.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue())) { List> baseInfoIdsPartition = Lists.partition((List) insuranceArchivesBaseInfoPO.getIds(), 100); List nowList = new ArrayList<>(); @@ -1377,7 +1367,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService if (isNotExist) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(116196, "个税扣缴义务人不存在或不在权限范围内,删除失败!")); } - //置空社保、公积金、其他福利档案的最后缴纳月信息,并将福利档案基础信息表的状态置为“正在缴纳” if (nowList.size() > 0) { List socialIds = nowList.stream() @@ -1443,7 +1432,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService // List adjustHistoryDTOS = siArchivesBiz.getBaseHistoryByEmployeeIdAndOperator(param.getOperator(), param.getEmployeeId()); List adjustHistoryDTOS = getBaseHistoryByEmployeeIdAndOperator(param.getOperator(), param.getEmployeeId()); - // 分权逻辑 Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); if (needAuth) { @@ -1605,8 +1593,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService * 判断是否需要生成历史福利档案基本信息 */ public Boolean createOldInsuranceBaseInfo(Long creator) { - - log.info("判断是否需要生成历史数据"); List nowBaseInfoList = getInsuranceBaseInfoMapper().getInsuranceBaseInfoList(); if (nowBaseInfoList.size() == 0) { @@ -1633,7 +1619,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService InsuranceArchivesOtherSchemePO toDealOtherPO = toDealOtherList.get(0); toDealOtherPO.setPaymentOrganization(socialSchemePO.getPaymentOrganization()); updateOtherList.add(toDealOtherPO); - } } @@ -1676,8 +1661,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService }else { return false; } - - } else { return false; } @@ -1693,178 +1676,173 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService * @return */ public List> buildTableData(List insuranceArchivesEmployeePOS, boolean export) { - boolean welBaseDiffSign = isDiffWelBase(); List taxAgentPOS = getTaxAgentMapper().listAll(); Map longTaxAgentPOMap = SalaryEntityUtil.convert2Map(taxAgentPOS, TaxAgentPO::getId); - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + List> records = new ArrayList<>(); - try { - InsuranceSchemeMapper insuranceSchemeMapper = sqlSession.getMapper(InsuranceSchemeMapper.class); - Map socialSchemePOMap = encryptUtil.decryptList(this.getSocialByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS), InsuranceArchivesSocialSchemePO.class) - .stream().collect(Collectors.toMap(InsuranceArchivesSocialSchemePO::getId, Function.identity())); + Map socialSchemePOMap = encryptUtil.decryptList(this.getSocialByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS), InsuranceArchivesSocialSchemePO.class) + .stream().collect(Collectors.toMap(InsuranceArchivesSocialSchemePO::getId, Function.identity())); - Map fundSchemePOMap = encryptUtil.decryptList(this.getFundByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS), InsuranceArchivesFundSchemePO.class) - .stream().collect(Collectors.toMap(InsuranceArchivesFundSchemePO::getId, Function.identity())); - List otherByEmployeeList = this.getOtherByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS); - encryptUtil.decryptList(otherByEmployeeList, InsuranceArchivesOtherSchemePO.class); - Map otherSchemePOMap = otherByEmployeeList - .stream().collect(Collectors.toMap(InsuranceArchivesOtherSchemePO::getId, Function.identity())); - insuranceArchivesEmployeePOS.forEach(item -> { - InsuranceArchivesSocialSchemePO socialItem = socialSchemePOMap.get(item.getSocialId()); - InsuranceArchivesFundSchemePO fundItem = fundSchemePOMap.get(item.getFundId()); - InsuranceArchivesOtherSchemePO otherItem = otherSchemePOMap.get(item.getOtherId()); - Map map = new HashMap<>(); - map.put("employeeName", item.getUserName()); - map.put("paymentOrganizationName", longTaxAgentPOMap.get(item.getPaymentOrganization()) != null ? longTaxAgentPOMap.get(item.getPaymentOrganization()).getName() : ""); - map.put("employeeId", item.getEmployeeId()); - map.put("departmentName", item.getDepartmentName()); - map.put("subcompanyName", item.getSubcompanyName()); - map.put("departmentId", item.getDepartmentId()); - map.put("jobNum", item.getJobNum()); - map.put("companystartdate", item.getCompanystartdate()); - map.put("dismissdate", item.getDimissionDate()); - map.put("mobile", item.getTelephone()); - map.put("siSchemeId", item.getSiSchemeId()); - map.put("fundSchemeId", item.getFundSchemeId()); - map.put("otherSchemeId", item.getOtherSchemeId()); - map.put("status", item.getUserStatus() != null ? UserStatusEnum.getDefaultLabelByValue(item.getUserStatus()) : ""); - map.put("baseInfo", item.getBaseInfoId()); - map.put("paymentOrganization", item.getPaymentOrganization()); - if (socialItem != null) { - map.put("socialName", insuranceSchemeMapper.querySchemeName(socialItem.getSocialSchemeId())); - Map socialJson = JSON.parseObject(socialItem.getSocialPaymentBaseString(), new TypeReference>() { - }); - if (welBaseDiffSign) { - if (socialJson != null) { - //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = payInsuranceIds(socialItem.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); - socialJson.forEach((k, v) -> { - if (insuranceIdList.contains(Long.valueOf(k))) { - map.put(k + "per", v); - } - }); - } - Map socialComJson = JSON.parseObject(socialItem.getSocialPaymentComBaseString(), new TypeReference>() { + Map fundSchemePOMap = encryptUtil.decryptList(this.getFundByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS), InsuranceArchivesFundSchemePO.class) + .stream().collect(Collectors.toMap(InsuranceArchivesFundSchemePO::getId, Function.identity())); + List otherByEmployeeList = this.getOtherByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS); + encryptUtil.decryptList(otherByEmployeeList, InsuranceArchivesOtherSchemePO.class); + Map otherSchemePOMap = otherByEmployeeList + .stream().collect(Collectors.toMap(InsuranceArchivesOtherSchemePO::getId, Function.identity())); + insuranceArchivesEmployeePOS.forEach(item -> { + InsuranceArchivesSocialSchemePO socialItem = socialSchemePOMap.get(item.getSocialId()); + InsuranceArchivesFundSchemePO fundItem = fundSchemePOMap.get(item.getFundId()); + InsuranceArchivesOtherSchemePO otherItem = otherSchemePOMap.get(item.getOtherId()); + Map map = new HashMap<>(); + map.put("employeeName", item.getUserName()); + map.put("paymentOrganizationName", longTaxAgentPOMap.get(item.getPaymentOrganization()) != null ? longTaxAgentPOMap.get(item.getPaymentOrganization()).getName() : ""); + map.put("employeeId", item.getEmployeeId()); + map.put("departmentName", item.getDepartmentName()); + map.put("subcompanyName", item.getSubcompanyName()); + map.put("departmentId", item.getDepartmentId()); + map.put("jobNum", item.getJobNum()); + map.put("companystartdate", item.getCompanystartdate()); + map.put("dismissdate", item.getDimissionDate()); + map.put("mobile", item.getTelephone()); + map.put("siSchemeId", item.getSiSchemeId()); + map.put("fundSchemeId", item.getFundSchemeId()); + map.put("otherSchemeId", item.getOtherSchemeId()); + map.put("status", item.getUserStatus() != null ? UserStatusEnum.getDefaultLabelByValue(item.getUserStatus()) : ""); + map.put("baseInfo", item.getBaseInfoId()); + map.put("paymentOrganization", item.getPaymentOrganization()); + if (socialItem != null) { + map.put("socialName", getInsuranceSchemeMapper().querySchemeName(socialItem.getSocialSchemeId())); + Map socialJson = JSON.parseObject(socialItem.getSocialPaymentBaseString(), new TypeReference>() { + }); + if (welBaseDiffSign) { + if (socialJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(socialItem.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + socialJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k + "per", v); + } }); - if (socialComJson != null) { - //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = payInsuranceIds(socialItem.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); - socialComJson.forEach((k, v) -> { - if (insuranceIdList.contains(Long.valueOf(k))) { - map.put(k + "com", v); - } - }); - } - } else { - if (socialJson != null) { - //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = payInsuranceIds(socialItem.getSocialSchemeId()); - socialJson.forEach((k, v) -> { - if (insuranceIdList.contains(Long.valueOf(k))) { - map.put(k, v); - } - }); - } } - - map.put("socialAccount", socialItem.getSocialAccount()); - map.put("socialStartTime", socialItem.getSocialStartTime()); - map.put("socialEndTime", socialItem.getSocialEndTime()); - } - if (fundItem != null) { - map.put("fundName", insuranceSchemeMapper.querySchemeName(fundItem.getFundSchemeId())); - map.put("fundAccount", fundItem.getFundAccount()); - Map fundJson = JSON.parseObject(fundItem.getFundPaymentBaseString(), new TypeReference>() { + Map socialComJson = JSON.parseObject(socialItem.getSocialPaymentComBaseString(), new TypeReference>() { }); - if (welBaseDiffSign) { - if (fundJson != null) { - //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = payInsuranceIds(fundItem.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); - fundJson.forEach((k, v) -> { - if (insuranceIdList.contains(Long.valueOf(k))) { - map.put(k + "per", v); - } - }); - } - Map fundComJson = JSON.parseObject(fundItem.getFundPaymentComBaseString(), new TypeReference>() { + if (socialComJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(socialItem.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + socialComJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k + "com", v); + } + }); + } + } else { + if (socialJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(socialItem.getSocialSchemeId()); + socialJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k, v); + } }); - if (fundComJson != null) { - //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = payInsuranceIds(fundItem.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); - fundComJson.forEach((k, v) -> { - if (insuranceIdList.contains(Long.valueOf(k))) { - map.put(k + "com", v); - } - }); - } - } else { - if (fundJson != null) { - //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = payInsuranceIds(fundItem.getFundSchemeId()); - fundJson.forEach((k, v) -> { - if (insuranceIdList.contains(Long.valueOf(k))) { - map.put(k, v); - } - }); - } } - - map.put("supplementFundAccount", fundItem.getSupplementFundAccount()); - map.put("fundStartTime", fundItem.getFundStartTime()); - map.put("fundEndTime", fundItem.getFundEndTime()); - } - if (otherItem != null) { - map.put("otherName", insuranceSchemeMapper.querySchemeName(otherItem.getOtherSchemeId())); - Map otherJson = JSON.parseObject(otherItem.getOtherPaymentBaseString(), new TypeReference>() { + + map.put("socialAccount", socialItem.getSocialAccount()); + map.put("socialStartTime", socialItem.getSocialStartTime()); + map.put("socialEndTime", socialItem.getSocialEndTime()); + } + if (fundItem != null) { + map.put("fundName", getInsuranceSchemeMapper().querySchemeName(fundItem.getFundSchemeId())); + map.put("fundAccount", fundItem.getFundAccount()); + Map fundJson = JSON.parseObject(fundItem.getFundPaymentBaseString(), new TypeReference>() { + }); + if (welBaseDiffSign) { + if (fundJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(fundItem.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + fundJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k + "per", v); + } + }); + } + Map fundComJson = JSON.parseObject(fundItem.getFundPaymentComBaseString(), new TypeReference>() { }); - if (welBaseDiffSign) { - if (otherJson != null) { - //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = payInsuranceIds(otherItem.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); - otherJson.forEach((k, v) -> { - if (insuranceIdList.contains(Long.valueOf(k))) { - map.put(k + "per", v); - } - }); - } - Map otherComJson = JSON.parseObject(otherItem.getOtherPaymentComBaseString(), new TypeReference>() { + if (fundComJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(fundItem.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + fundComJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k + "com", v); + } + }); + } + } else { + if (fundJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(fundItem.getFundSchemeId()); + fundJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k, v); + } }); - if (otherComJson != null) { - //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = payInsuranceIds(otherItem.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); - otherComJson.forEach((k, v) -> { - if (insuranceIdList.contains(Long.valueOf(k))) { - map.put(k + "com", v); - } - }); - } - } else { - if (otherJson != null) { - //查询该福利方案下开启缴纳的福利项 - List insuranceIdList = payInsuranceIds(otherItem.getOtherSchemeId()); - otherJson.forEach((k, v) -> { - if (insuranceIdList.contains(Long.valueOf(k))) { - map.put(k, v); - } - }); - } } - - map.put("otherStartTime", otherItem.getOtherStartTime()); - map.put("otherEndTime", otherItem.getOtherEndTime()); } - records.add(map); - }); - return records; - } finally { - sqlSession.close(); - } + map.put("supplementFundAccount", fundItem.getSupplementFundAccount()); + map.put("fundStartTime", fundItem.getFundStartTime()); + map.put("fundEndTime", fundItem.getFundEndTime()); + + } + if (otherItem != null) { + map.put("otherName", getInsuranceSchemeMapper().querySchemeName(otherItem.getOtherSchemeId())); + Map otherJson = JSON.parseObject(otherItem.getOtherPaymentBaseString(), new TypeReference>() { + }); + if (welBaseDiffSign) { + if (otherJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(otherItem.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + otherJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k + "per", v); + } + }); + } + Map otherComJson = JSON.parseObject(otherItem.getOtherPaymentComBaseString(), new TypeReference>() { + }); + if (otherComJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(otherItem.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + otherComJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k + "com", v); + } + }); + } + } else { + if (otherJson != null) { + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(otherItem.getOtherSchemeId()); + otherJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k, v); + } + }); + } + } + + map.put("otherStartTime", otherItem.getOtherStartTime()); + map.put("otherEndTime", otherItem.getOtherEndTime()); + } + records.add(map); + }); + return records; + + } @Override @@ -1880,54 +1858,39 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService * 根据人员id和个税扣缴人id获取记录 */ public List getSocialByEmployeeIdAndPayOrg(List insuranceArchivesEmployeePOS) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - SocialSchemeMapper socialSchemeMapper = sqlSession.getMapper(SocialSchemeMapper.class); - List allList = new ArrayList<>(); - for (InsuranceArchivesEmployeePO po : insuranceArchivesEmployeePOS) { - List socialList = socialSchemeMapper.getSocialByEmployeeIdAndPayOrg(po); - if (socialList.size() > 0) { - allList.add(socialList.get(0)); - } + + List allList = new ArrayList<>(); + for (InsuranceArchivesEmployeePO po : insuranceArchivesEmployeePOS) { + List socialList = getSocialSchemeMapper().getSocialByEmployeeIdAndPayOrg(po); + if (socialList.size() > 0) { + allList.add(socialList.get(0)); } - return allList; - } finally { - sqlSession.close(); } + return allList; } public List getFundByEmployeeIdAndPayOrg(List insuranceArchivesEmployeePOS) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - FundSchemeMapper fundSchemeMapper = sqlSession.getMapper(FundSchemeMapper.class); - List allList = new ArrayList<>(); - for (InsuranceArchivesEmployeePO po : insuranceArchivesEmployeePOS) { - List fundList = fundSchemeMapper.getFundByEmployeeIdAndPayOrg(po); - if (fundList.size() > 0) { - allList.add(fundList.get(0)); - } + + List allList = new ArrayList<>(); + for (InsuranceArchivesEmployeePO po : insuranceArchivesEmployeePOS) { + List fundList = getFundSchemeMapper().getFundByEmployeeIdAndPayOrg(po); + if (fundList.size() > 0) { + allList.add(fundList.get(0)); } - return allList; - } finally { - sqlSession.close(); } + return allList; } public List getOtherByEmployeeIdAndPayOrg(List insuranceArchivesEmployeePOS) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - OtherSchemeMapper otherSchemeMapper = sqlSession.getMapper(OtherSchemeMapper.class); - List allList = new ArrayList<>(); - for (InsuranceArchivesEmployeePO po : insuranceArchivesEmployeePOS) { - List otherList = otherSchemeMapper.getOtherByEmployeeIdAndPayOrg(po); - if (otherList.size() > 0) { - allList.add(otherList.get(0)); - } + + List allList = new ArrayList<>(); + for (InsuranceArchivesEmployeePO po : insuranceArchivesEmployeePOS) { + List otherList = getOtherSchemeMapper().getOtherByEmployeeIdAndPayOrg(po); + if (otherList.size() > 0) { + allList.add(otherList.get(0)); } - return allList; - } finally { - sqlSession.close(); } + return allList; } @Override @@ -2238,20 +2201,15 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService * */ public List getBaseHistoryByEmployeeIdAndOperator(Long operator, Long employeeId) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - InsuranceBaseAdjustHistoryMapper mapper = sqlSession.getMapper(InsuranceBaseAdjustHistoryMapper.class); - List empList = mapper.listByEmployeeIdAndOperator(operator, employeeId); - List extEmpList = mapper.listByExtEmpIdAndOperator(operator, employeeId); - if (extEmpList != null) { - empList.addAll(extEmpList); - empList = empList.stream().filter(f -> org.apache.commons.lang.StringUtils.isNotBlank(f.getEmployeeName())) - .sorted(Comparator.comparing(InsuranceArchivesBaseHistoryDTO::getOperateTime).reversed()).collect(Collectors.toList()); - } - return empList; - } finally { - sqlSession.close(); + + List empList = getInsuranceBaseAdjustHistoryMapper().listByEmployeeIdAndOperator(operator, employeeId); + List extEmpList = getInsuranceBaseAdjustHistoryMapper().listByExtEmpIdAndOperator(operator, employeeId); + if (extEmpList != null) { + empList.addAll(extEmpList); + empList = empList.stream().filter(f -> org.apache.commons.lang.StringUtils.isNotBlank(f.getEmployeeName())) + .sorted(Comparator.comparing(InsuranceArchivesBaseHistoryDTO::getOperateTime).reversed()).collect(Collectors.toList()); } + return empList; } //生成基数调整记录(基数单元未变化则忽略) @@ -2394,15 +2352,8 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService if (org.apache.commons.collections.CollectionUtils.isEmpty(adjustHistoryList)) { return; } - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - InsuranceBaseAdjustHistoryMapper mapper = sqlSession.getMapper(InsuranceBaseAdjustHistoryMapper.class); - List> partition = Lists.partition(adjustHistoryList, 100); - partition.forEach(mapper::batchSave); - sqlSession.commit(); - } finally { - sqlSession.close(); - } + List> partition = Lists.partition(adjustHistoryList, 100); + partition.forEach(getInsuranceBaseAdjustHistoryMapper()::batchSave); } public Map getBaseForm(WelfareTypeEnum welfareType, Long employeeId, Long paymentOrganization, Collection taxAgentPOS) { @@ -2412,7 +2363,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService SalaryAssert.notEmpty(employeeByIds, SalaryI18nUtil.getI18nLabel(0, "员工信息不存在")); DataCollectionEmployee item = employeeByIds.get(0); - if (welfareType == null) { //基础信息表单 InsuranceArchivesBaseDTO insuranceArchivesBaseDTO = InsuranceArchivesBaseDTO.builder().department(item.getDepartmentName()) @@ -2436,8 +2386,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService List paymentOptions = paymentOrganizationOptions(taxAgentPOS); List underTakeOptions = Arrays.stream(UndertakerEnum.values()) .map(e -> new SearchConditionOption(e.getValue().toString(), e.getDefaultLabel())).collect(Collectors.toList()); - - //返回数据 switch (welfareType) { case SOCIAL_SECURITY: @@ -2550,25 +2498,19 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService * @return */ public InsuranceArchivesOtherSchemeDTO buildOtherForm(Long employeeId, Long paymentOrganization) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - OtherSchemeMapper otherSchemeMapper = sqlSession.getMapper(OtherSchemeMapper.class); - List otherList = otherSchemeMapper.getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() - .employeeId(employeeId) - .paymentOrganization(paymentOrganization) - .build()); - encryptUtil.decryptList(otherList, InsuranceArchivesOtherSchemePO.class); - InsuranceArchivesOtherSchemePO insuranceArchivesOtherSchemePO = otherList.size() != 0 ? otherList.get(0) : null; - InsuranceArchivesOtherSchemeDTO data = InsuranceArchivesBO.convertOtherPOtoDTO(insuranceArchivesOtherSchemePO, employeeId); - if (insuranceArchivesOtherSchemePO == null) { - data.setEmployeeId(employeeId); - data.setUnderTake(UndertakerEnum.SCOPE_PERSON.getValue().toString()); - } - return data; - } finally { - sqlSession.close(); - } + List otherList = getOtherSchemeMapper().getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .employeeId(employeeId) + .paymentOrganization(paymentOrganization) + .build()); + encryptUtil.decryptList(otherList, InsuranceArchivesOtherSchemePO.class); + InsuranceArchivesOtherSchemePO insuranceArchivesOtherSchemePO = otherList.size() != 0 ? otherList.get(0) : null; + InsuranceArchivesOtherSchemeDTO data = InsuranceArchivesBO.convertOtherPOtoDTO(insuranceArchivesOtherSchemePO, employeeId); + if (insuranceArchivesOtherSchemePO == null) { + data.setEmployeeId(employeeId); + data.setUnderTake(UndertakerEnum.SCOPE_PERSON.getValue().toString()); + } + return data; } /** @@ -2579,25 +2521,18 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService */ public InsuranceArchivesFundSchemeDTO buildFundForm(Long employeeId, Long paymentOrganization) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - FundSchemeMapper fundSchemeMapper = sqlSession.getMapper(FundSchemeMapper.class); - List fundList = fundSchemeMapper.getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() - .employeeId(employeeId) - .paymentOrganization(paymentOrganization) - .build()); - encryptUtil.decryptList(fundList, InsuranceArchivesFundSchemePO.class); - InsuranceArchivesFundSchemePO insuranceArchivesFundSchemePO = fundList.size() != 0 ? fundList.get(0) : null; - InsuranceArchivesFundSchemeDTO data = InsuranceArchivesBO.convertFundPOtoDTO(insuranceArchivesFundSchemePO, employeeId); - if (insuranceArchivesFundSchemePO == null) { - data.setEmployeeId(employeeId); - data.setUnderTake(UndertakerEnum.SCOPE_PERSON.getValue().toString()); - } - return data; - } finally { - sqlSession.close(); + List fundList = getFundSchemeMapper().getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .employeeId(employeeId) + .paymentOrganization(paymentOrganization) + .build()); + encryptUtil.decryptList(fundList, InsuranceArchivesFundSchemePO.class); + InsuranceArchivesFundSchemePO insuranceArchivesFundSchemePO = fundList.size() != 0 ? fundList.get(0) : null; + InsuranceArchivesFundSchemeDTO data = InsuranceArchivesBO.convertFundPOtoDTO(insuranceArchivesFundSchemePO, employeeId); + if (insuranceArchivesFundSchemePO == null) { + data.setEmployeeId(employeeId); + data.setUnderTake(UndertakerEnum.SCOPE_PERSON.getValue().toString()); } - + return data; } /** @@ -2623,18 +2558,13 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService * @return */ public InsuranceArchivesSocialSchemePO getSocialByEmployeeId(Long employeeId, Long paymentOrganization) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - SocialSchemeMapper socialSchemeMapper = sqlSession.getMapper(SocialSchemeMapper.class); - List socialList = socialSchemeMapper.getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() - .employeeId(employeeId) - .paymentOrganization(paymentOrganization) - .build()); - encryptUtil.decryptList(socialList, InsuranceArchivesSocialSchemePO.class); - return socialList.size() != 0 ? socialList.get(0) : null; - } finally { - sqlSession.close(); - } + + List socialList = getSocialSchemeMapper().getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .employeeId(employeeId) + .paymentOrganization(paymentOrganization) + .build()); + encryptUtil.decryptList(socialList, InsuranceArchivesSocialSchemePO.class); + return socialList.size() != 0 ? socialList.get(0) : null; } /** @@ -2887,15 +2817,10 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService * @return */ public List queryListByPrimaryIdIsPayment(Long schemeId, Integer welfareType) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - InsuranceSchemeDetailMapper insuranceSchemeDetailMapper = sqlSession.getMapper(InsuranceSchemeDetailMapper.class); - List insuranceSchemeDetailPOS = insuranceSchemeDetailMapper.queryListByPrimaryIdIsPayment(schemeId, IsPaymentEnum.YES.getValue(), welfareType); - encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); - return insuranceSchemeDetailPOS; - } finally { - sqlSession.close(); - } + + List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().queryListByPrimaryIdIsPayment(schemeId, IsPaymentEnum.YES.getValue(), welfareType); + encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); + return insuranceSchemeDetailPOS; } public void otherSave(InsuranceArchivesSaveParam paramReq, User user, boolean welBaseDiffSign) { @@ -3461,7 +3386,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService } for (Map.Entry entry : paymentBaseJson.entrySet()) { - //判断福利值是否为空/数字 if (entry.getValue() == null || entry.getValue().length() == 0) { continue; @@ -3601,89 +3525,83 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService //是否分权 Boolean needAuth = param.getNeedAuth(); StopWatch sw = new StopWatch(); - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); Map datas = new HashMap<>(16); - try { - SocialSchemeMapper socialSchemeMapper = sqlSession.getMapper(SocialSchemeMapper.class); - List page = new ArrayList<>(); - PageInfo pageInfo = new PageInfo<>(InsuranceArchivesEmployeePO.class); - //获取福利档案列表数据 - if (needAuth) { - Collection taxAgentEmployeeIds = param.getTaxAgentEmployeeIds(); - Collection taxAgentIds = param.getTaxAgentIds(); - log.info("从数据库获取档案列表数据开始"); - sw.start("获取福利档案列表数据"); - if (param.isExtWelArchiveList()) { - page = socialSchemeMapper.queryExtEmployeeList(param); - } else { - page = socialSchemeMapper.queryEmployeeList(param); - } - sw.stop(); - log.info("从数据库获取档案列表数据完成!"); - page = page.stream().filter(f -> + + List page = new ArrayList<>(); + PageInfo pageInfo = new PageInfo<>(InsuranceArchivesEmployeePO.class); + //获取福利档案列表数据 + if (needAuth) { + Collection taxAgentEmployeeIds = param.getTaxAgentEmployeeIds(); + Collection taxAgentIds = param.getTaxAgentIds(); + log.info("从数据库获取档案列表数据开始"); + sw.start("获取福利档案列表数据"); + if (param.isExtWelArchiveList()) { + page = getSocialSchemeMapper().queryExtEmployeeList(param); + } else { + page = getSocialSchemeMapper().queryEmployeeList(param); + } + sw.stop(); + log.info("从数据库获取档案列表数据完成!"); + page = page.stream().filter(f -> // taxAgentEmployeeIds.contains(f.getEmployeeId())|| - taxAgentIds.contains(f.getPaymentOrganization()) - ).collect(Collectors.toList()); - // 填充总数和当页数据 - // 分页参数 - pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), InsuranceArchivesEmployeePO.class); - pageInfo.setTotal(page.size()); - pageInfo.setList(SalaryPageUtil.subList(pageInfo.getPageNum(), pageInfo.getPageSize(), page)); + taxAgentIds.contains(f.getPaymentOrganization()) + ).collect(Collectors.toList()); + // 填充总数和当页数据 + // 分页参数 + pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), InsuranceArchivesEmployeePO.class); + pageInfo.setTotal(page.size()); + pageInfo.setList(SalaryPageUtil.subList(pageInfo.getPageNum(), pageInfo.getPageSize(), page)); + } else { + log.info("从数据库获取档案列表数据开始"); + sw.start("获取档案列表数据"); + if (param.isExtWelArchiveList()) { + page = getSocialSchemeMapper().queryExtEmployeeList(param); } else { - log.info("从数据库获取档案列表数据开始"); - sw.start("获取档案列表数据"); - if (param.isExtWelArchiveList()) { - page = socialSchemeMapper.queryExtEmployeeList(param); - } else { - page = socialSchemeMapper.queryEmployeeList(param); - } - sw.stop(); - log.info("从数据库获取档案列表数据完成!"); - pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), - page, InsuranceArchivesEmployeePO.class); - } - List> records = null; - log.info("buildTableData方法处理福利档案列表数据开始"); - sw.start("buildTableData方法处理福利档案列表数据"); - if (param.getExportData() != null && param.getExportData()) { - records = buildTableData(pageInfo.getList(), true); - } else { - records = buildTableData(pageInfo.getList(), false); + page = getSocialSchemeMapper().queryEmployeeList(param); } sw.stop(); - log.info("buildTableData方法处理福利档案列表数据完成!"); - - log.info("buildWeaTableColumns方法处理福利档案列表数据开始"); - sw.start("buildWeaTableColumns方法处理福利档案列表数据"); - List columns = buildWeaTableColumns(pageInfo.getList()); - sw.stop(); - log.info("buildWeaTableColumns方法处理福利档案列表数据完成!"); - WeaTable table = new WeaTable(); - table.setColumns(columns); - //设置check是否可用 - List checkboxpopedomList = new ArrayList<>(); - WeaTableCheckboxpopedom checkboxpopedom = new WeaTableCheckboxpopedom(); - checkboxpopedom.setPopedompara("column:system_type"); - checkboxpopedom.setShowmethod("com.engine.salary.transmethod.TaxRateTransMethod.getCheckBoxPopedom"); - checkboxpopedomList.add(checkboxpopedom); - table.setCheckboxList(checkboxpopedomList); - table.setCheckboxpopedom(null); - - WeaResultMsg result = new WeaResultMsg(false); - result.putAll(table.makeDataResult()); - result.success(); - - datas.put("pageInfo", pageInfo); - datas.put("datas", records); - datas.put("columns", columns); - datas.put("dataKey", result.getResultMap()); - - log.info("各操作计时 {}", sw.prettyPrint()); - return datas; - - } finally { - sqlSession.close(); + log.info("从数据库获取档案列表数据完成!"); + pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), + page, InsuranceArchivesEmployeePO.class); } + List> records = null; + log.info("buildTableData方法处理福利档案列表数据开始"); + sw.start("buildTableData方法处理福利档案列表数据"); + if (param.getExportData() != null && param.getExportData()) { + records = buildTableData(pageInfo.getList(), true); + } else { + records = buildTableData(pageInfo.getList(), false); + } + sw.stop(); + log.info("buildTableData方法处理福利档案列表数据完成!"); + + log.info("buildWeaTableColumns方法处理福利档案列表数据开始"); + sw.start("buildWeaTableColumns方法处理福利档案列表数据"); + List columns = buildWeaTableColumns(pageInfo.getList()); + sw.stop(); + log.info("buildWeaTableColumns方法处理福利档案列表数据完成!"); + WeaTable table = new WeaTable(); + table.setColumns(columns); + //设置check是否可用 + List checkboxpopedomList = new ArrayList<>(); + WeaTableCheckboxpopedom checkboxpopedom = new WeaTableCheckboxpopedom(); + checkboxpopedom.setPopedompara("column:system_type"); + checkboxpopedom.setShowmethod("com.engine.salary.transmethod.TaxRateTransMethod.getCheckBoxPopedom"); + checkboxpopedomList.add(checkboxpopedom); + table.setCheckboxList(checkboxpopedomList); + table.setCheckboxpopedom(null); + + WeaResultMsg result = new WeaResultMsg(false); + result.putAll(table.makeDataResult()); + result.success(); + + datas.put("pageInfo", pageInfo); + datas.put("datas", records); + datas.put("columns", columns); + datas.put("dataKey", result.getResultMap()); + + log.info("各操作计时 {}", sw.prettyPrint()); + return datas; } /** @@ -3712,15 +3630,11 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService List> taxAgentList = getTaxAgentWrapper(user).selectListAsAdmin(); List taxAgentOption = taxAgentList.stream().map(item -> new SearchConditionOption(item.get("id").toString(), item.get("content").toString())).collect(Collectors.toList()); - Map apidatas = new HashMap(); ConditionFactory conditionFactory = new ConditionFactory(user); - //条件组 List addGroups = new ArrayList(); - List conditionItems = new ArrayList(); - //文本输入框 SearchConditionItem username = conditionFactory.createCondition(ConditionType.INPUT, 25034, "username"); username.setInputType("input"); @@ -3730,7 +3644,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService username.setViewAttr(2); // 编辑权限 1:只读,2:可编辑, 3:必填 默认2 username.setLabel(SalaryI18nUtil.getI18nLabel(0,"姓名")); //设置文本值 这个将覆盖多语言标签的值 conditionItems.add(username); - //文本输入框 SearchConditionItem jobNum = conditionFactory.createCondition(ConditionType.INPUT, 25034, "jobNum"); jobNum.setInputType("input"); @@ -3741,7 +3654,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService jobNum.setLabel(SalaryI18nUtil.getI18nLabel(0,"工号")); //设置文本值 这个将覆盖多语言标签的值 conditionItems.add(jobNum); - SearchConditionItem departmentIds = conditionFactory.createCondition(ConditionType.BROWSER, 502329, "departmentIdsStr", "57"); departmentIds.setColSpan(2); departmentIds.setFieldcol(16); @@ -3749,7 +3661,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService departmentIds.setLabel(SalaryI18nUtil.getI18nLabel(0,"部门")); conditionItems.add(departmentIds); - SearchConditionItem statuses = conditionFactory.createCondition(ConditionType.SELECT, 502327, "statusesStr"); statuses.setInputType("select"); statuses.setMultiple(true); @@ -3761,7 +3672,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService statuses.setLabel(SalaryI18nUtil.getI18nLabel(0,"状态")); conditionItems.add(statuses); - SearchConditionItem positions = conditionFactory.createCondition(ConditionType.BROWSER, 502327, "positionsStr", "278"); positions.setInputType("browser"); positions.setColSpan(2); @@ -3810,7 +3720,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService siSchemeId.setLabel(SalaryI18nUtil.getI18nLabel(0,"社保方案")); conditionItems.add(siSchemeId); - SearchConditionItem fundSchemeId = conditionFactory.createCondition(ConditionType.SELECT, 502327, "fundSchemeId"); fundSchemeId.setInputType("select"); fundSchemeId.setOptions(fundOption); @@ -3848,53 +3757,38 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService @Override public List getSocialByEmployeeIds(List employeeIds) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - SocialSchemeMapper socialSchemeMapper = sqlSession.getMapper(SocialSchemeMapper.class); - List> partition = Lists.partition(employeeIds, 1000); - List allList = new ArrayList<>(); - for (List longs : partition) { - List socialList = socialSchemeMapper.getSocialByEmployeeId(longs); - allList.addAll(socialList); - } - return allList; - } finally { - sqlSession.close(); + + List> partition = Lists.partition(employeeIds, 1000); + List allList = new ArrayList<>(); + for (List longs : partition) { + List socialList = getSocialSchemeMapper().getSocialByEmployeeId(longs); + allList.addAll(socialList); } + return allList; } @Override public List getFundByEmployeeIds(List employeeIds) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - FundSchemeMapper fundSchemeMapper = sqlSession.getMapper(FundSchemeMapper.class); - List> partition = Lists.partition(employeeIds, 1000); - List allList = new ArrayList<>(); - for (List longs : partition) { - List fundList = fundSchemeMapper.getFundByEmployeeId(longs); - allList.addAll(fundList); - } - return allList; - } finally { - sqlSession.close(); + + List> partition = Lists.partition(employeeIds, 1000); + List allList = new ArrayList<>(); + for (List longs : partition) { + List fundList = getFundSchemeMapper().getFundByEmployeeId(longs); + allList.addAll(fundList); } + return allList; } @Override public List getOtherByEmployeeIds(List employeeIds) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - OtherSchemeMapper otherSchemeMapper = sqlSession.getMapper(OtherSchemeMapper.class); - List> partition = Lists.partition(employeeIds, 1000); - List allList = new ArrayList<>(); - for (List longs : partition) { - List otherList = otherSchemeMapper.getOtherByEmployeeId(longs); - allList.addAll(otherList); - } - return allList; - } finally { - sqlSession.close(); + + List> partition = Lists.partition(employeeIds, 1000); + List allList = new ArrayList<>(); + for (List longs : partition) { + List otherList = getOtherSchemeMapper().getOtherByEmployeeId(longs); + allList.addAll(otherList); } + return allList; } /** diff --git a/src/com/engine/salary/service/impl/SICategoryServiceImpl.java b/src/com/engine/salary/service/impl/SICategoryServiceImpl.java index 453ff9729..7e127f570 100644 --- a/src/com/engine/salary/service/impl/SICategoryServiceImpl.java +++ b/src/com/engine/salary/service/impl/SICategoryServiceImpl.java @@ -38,8 +38,6 @@ import com.mzlion.core.utils.BeanUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.ibatis.session.SqlSession; -import weaver.conn.mybatis.MyBatisFactory; import weaver.hrm.User; import java.util.*; @@ -377,15 +375,10 @@ public class SICategoryServiceImpl extends Service implements SICategoryService */ @Override public ICategoryPO getICategoryPOByID(Long id) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - ICategoryMapper iCategoryMapper = sqlSession.getMapper(ICategoryMapper.class); - ICategoryPO iCategoryPO = iCategoryMapper.getById(id); - return iCategoryPO; - } finally { - sqlSession.close(); - } + ICategoryPO iCategoryPO = getICategoryMapper().getById(id); + return iCategoryPO; + } /** @@ -395,16 +388,10 @@ public class SICategoryServiceImpl extends Service implements SICategoryService */ @Override public List listByName(String insuranceName) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try{ - ICategoryMapper iCategoryMapper = sqlSession.getMapper(ICategoryMapper.class); - List iCategoryPOS = iCategoryMapper.listByName(insuranceName); - return iCategoryPOS; + List iCategoryPOS = getICategoryMapper().listByName(insuranceName); + return iCategoryPOS; - } finally { - sqlSession.close(); - } } /** @@ -437,30 +424,24 @@ public class SICategoryServiceImpl extends Service implements SICategoryService * @param iCategoryFormDTO */ public void update(ICategoryFormDTO iCategoryFormDTO) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try{ - if (iCategoryFormDTO.getId() == null) { - throw new SalaryRunTimeException("id is required"); - } - ICategoryPO iCategoryPO = getICategoryPOByID(iCategoryFormDTO.getId()); - if (Objects.isNull(iCategoryPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"数据不存在")); - } - List iCategoryPOS = listByName(iCategoryFormDTO.getInsuranceName()); - if (CollectionUtils.isNotEmpty(iCategoryPOS)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"福利名称不允许重复")); - } - iCategoryPO.setInsuranceName(iCategoryFormDTO.getInsuranceName()); + if (iCategoryFormDTO.getId() == null) { + throw new SalaryRunTimeException("id is required"); + } + ICategoryPO iCategoryPO = getICategoryPOByID(iCategoryFormDTO.getId()); + if (Objects.isNull(iCategoryPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"数据不存在")); + } + List iCategoryPOS = listByName(iCategoryFormDTO.getInsuranceName()); + if (CollectionUtils.isNotEmpty(iCategoryPOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"福利名称不允许重复")); + } + iCategoryPO.setInsuranceName(iCategoryFormDTO.getInsuranceName()); // iCategoryPO.setWelfareType(iCategoryFormDTO.getWelfareType().getValue()); // iCategoryPO.setPaymentScope(SalaryEnumUtil.enumArrToString(iCategoryFormDTO.getPaymentScope())); - iCategoryPO.setUpdateTime(new Date()); - ICategoryMapper iCategoryMapper = sqlSession.getMapper(ICategoryMapper.class); - iCategoryMapper.update(iCategoryPO); + iCategoryPO.setUpdateTime(new Date()); + + getICategoryMapper().update(iCategoryPO); - sqlSession.commit(); - } finally { - sqlSession.close(); - } } /** diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index ac0391195..491850815 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -279,15 +279,10 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { @Override public List queryListByInsuranceIdIsPayment(Long insuranceId, Integer isPayment) { // return new SISchemeBiz().queryListByInsuranceIdIsPayment(insuranceId, isPayment); - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - InsuranceSchemeDetailMapper insuranceSchemeDetailMapper = sqlSession.getMapper(InsuranceSchemeDetailMapper.class); - List insuranceSchemeDetailPOList = insuranceSchemeDetailMapper.queryListByInsuranceIdIsPayment(insuranceId, isPayment); - encryptUtil.decryptList(insuranceSchemeDetailPOList, InsuranceSchemeDetailPO.class); - return insuranceSchemeDetailPOList; - } finally { - sqlSession.close(); - } + + List insuranceSchemeDetailPOList = getInsuranceSchemeDetailMapper().queryListByInsuranceIdIsPayment(insuranceId, isPayment); + encryptUtil.decryptList(insuranceSchemeDetailPOList, InsuranceSchemeDetailPO.class); + return insuranceSchemeDetailPOList; } @Override @@ -2387,15 +2382,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { */ public InsuranceSchemePO getById(Long id) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - InsuranceSchemeMapper insuranceSchemeMapper = sqlSession.getMapper(InsuranceSchemeMapper.class); - InsuranceSchemePO insuranceSchemePO = insuranceSchemeMapper.getById(id); - - return insuranceSchemePO; - } finally { - sqlSession.close(); - } + InsuranceSchemePO insuranceSchemePO = getInsuranceSchemeMapper().getById(id); + return insuranceSchemePO; } /** @@ -2405,14 +2393,9 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { * @return */ public List listByWelfareType(Integer welfareType) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - ICategoryMapper iCategoryMapper = sqlSession.getMapper(ICategoryMapper.class); - List insuranceCategoryPOS = iCategoryMapper.listByWelfareType(welfareType, null); - return insuranceCategoryPOS; - } finally { - sqlSession.close(); - } + + List insuranceCategoryPOS = getICategoryMapper().listByWelfareType(welfareType, null); + return insuranceCategoryPOS; } public boolean numberCheck(String number) { @@ -2420,15 +2403,11 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { } private InsuranceSchemeDetailPO getByPPI(Long primaryId, Integer paymentScope, Long insuranceId) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - InsuranceSchemeDetailMapper insuranceSchemeDetailMapper = sqlSession.getMapper(InsuranceSchemeDetailMapper.class); - InsuranceSchemeDetailPO insuranceSchemeDetailPO = insuranceSchemeDetailMapper.getByPPI(primaryId, paymentScope, insuranceId); - encryptUtil.decrypt(insuranceSchemeDetailPO, InsuranceSchemeDetailPO.class); - return insuranceSchemeDetailPO; - } finally { - sqlSession.close(); - } + + InsuranceSchemeDetailPO insuranceSchemeDetailPO = getInsuranceSchemeDetailMapper().getByPPI(primaryId, paymentScope, insuranceId); + encryptUtil.decrypt(insuranceSchemeDetailPO, InsuranceSchemeDetailPO.class); + return insuranceSchemeDetailPO; + } /** @@ -2715,16 +2694,10 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { * @return */ public List listByPrimaryId(Long primaryId) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - InsuranceSchemeDetailMapper insuranceSchemeDetailMapper = sqlSession.getMapper(InsuranceSchemeDetailMapper.class); - List insuranceSchemeDetailPOS = insuranceSchemeDetailMapper.queryListBySchemeId(primaryId); - encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); - return insuranceSchemeDetailPOS; - } finally { - sqlSession.close(); - } + List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(primaryId); + encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); + return insuranceSchemeDetailPOS; } /** @@ -2734,14 +2707,9 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { */ @Override public List listAll(){ - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - InsuranceSchemeMapper insuranceSchemeMapper = sqlSession.getMapper(InsuranceSchemeMapper.class); - List insuranceSchemePOList = insuranceSchemeMapper.listAll(); - return insuranceSchemePOList; - } finally { - sqlSession.close(); - } + + List insuranceSchemePOList = getInsuranceSchemeMapper().listAll(); + return insuranceSchemePOList; } /*****以上代码为SISchemeBiz中方法逻辑迁移,旨在减少Biz类的使用*****/ From 088a5c1d728fa590a3c3cd7da0b6ac914e937f79 Mon Sep 17 00:00:00 2001 From: sy Date: Tue, 20 Feb 2024 16:50:45 +0800 Subject: [PATCH 32/64] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E5=8F=B0=E8=B4=A6=EF=BC=8C=E6=AD=A3=E5=B8=B8?= =?UTF-8?q?=E7=BC=B4=E7=BA=B3=E9=A1=B5=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../siaccount/po/InsuranceAccountBatchPO.java | 19 +++ .../po/InsuranceAccountDetailPO.java | 49 +++++++ .../siaccount/po/InsuranceCompensationPO.java | 18 +++ .../InsuranceAccountBatchMapper.java | 3 + .../siaccount/InsuranceAccountBatchMapper.xml | 9 ++ .../service/impl/SIAccountServiceImpl.java | 138 +++++++++++++----- .../impl/SICompensationServiceImpl.java | 42 ++++++ 7 files changed, 243 insertions(+), 35 deletions(-) diff --git a/src/com/engine/salary/entity/siaccount/po/InsuranceAccountBatchPO.java b/src/com/engine/salary/entity/siaccount/po/InsuranceAccountBatchPO.java index b3296596e..45de6f2ab 100644 --- a/src/com/engine/salary/entity/siaccount/po/InsuranceAccountBatchPO.java +++ b/src/com/engine/salary/entity/siaccount/po/InsuranceAccountBatchPO.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.siaccount.po; import com.engine.salary.annotation.Encrypt; +import com.engine.salary.elog.annotation.ElogTransform; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -20,94 +21,112 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor //hrsa_bill_batch +@ElogTransform(name = "福利台账主表") public class InsuranceAccountBatchPO { /** * 主键id */ + @ElogTransform(name = "主键id") private Long id; /** * 账单月份 */ + @ElogTransform(name = "账单月份") private String billMonth; /** * 账单状态 0-未归档 1-已归档 */ + @ElogTransform(name = "账单状态") private Integer billStatus; /** * 社保核算人数 */ + @ElogTransform(name = "社保核算人数") private Integer socialNum; /** * 公积金核算人数 */ + @ElogTransform(name = "公积金核算人数") private Integer fundNum; /** * 其他福利核算人数 */ + @ElogTransform(name = "其他福利核算人数") private Integer otherNum; /** * 社保缴费总额(单位+个人) */ @Encrypt + @ElogTransform(name = "社保缴费总额(单位+个人)") private String socialPay; /** * 公积金缴费总额(单位+个人) */ @Encrypt + @ElogTransform(name = "公积金缴费总额(单位+个人)") private String fundPay; /** * 其他福利缴费总额(单位+个人) */ @Encrypt + @ElogTransform(name = "其他福利缴费总额(单位+个人)") private String otherPay; /** * 核算人 */ + @ElogTransform(name = "核算人") private String accountant; /** * 备注 */ + @ElogTransform(name = "备注") private String remarks; /** * 创建人id */ + @ElogTransform(name = "创建人id") private Long creator; /** * 是否删除 */ + @ElogTransform(name = "是否删除") private Integer deleteType; /** * 创建时间 */ + @ElogTransform(name = "创建时间") private Date createTime; /** * 更新时间 */ + @ElogTransform(name = "更新时间") private Date updateTime; /** * 租户key */ + @ElogTransform(name = "租户key") private String tenantKey; /** * 个税扣缴义务人 */ + @ElogTransform(name = "个税扣缴义务人id") private Long paymentOrganization; diff --git a/src/com/engine/salary/entity/siaccount/po/InsuranceAccountDetailPO.java b/src/com/engine/salary/entity/siaccount/po/InsuranceAccountDetailPO.java index 9cd2ad7f0..9b7c33cef 100644 --- a/src/com/engine/salary/entity/siaccount/po/InsuranceAccountDetailPO.java +++ b/src/com/engine/salary/entity/siaccount/po/InsuranceAccountDetailPO.java @@ -3,6 +3,7 @@ package com.engine.salary.entity.siaccount.po; import com.cloudstore.eccom.pc.table.WeaTableType; import com.engine.salary.annotation.Encrypt; import com.engine.salary.annotation.SalaryTable; +import com.engine.salary.elog.annotation.ElogTransform; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -23,260 +24,308 @@ import java.util.Date; @AllArgsConstructor @SalaryTable(pageId = "2394fba1-1381-428a-8532-4e1e6b86626e", tableType = WeaTableType.CHECKBOX) //hrsa_bill_detail +@ElogTransform(name = "福利台账明细表") public class InsuranceAccountDetailPO { /** * 主键id */ + @ElogTransform(name = "主键id") private Long id; /** * 员工id */ + @ElogTransform(name = "员工id") private Long employeeId; /** * 账单月份 */ + @ElogTransform(name = "账单月份") private String billMonth; /** * 账单状态 0-未归档 1-已归档 */ + @ElogTransform(name = "账单状态") private Integer billStatus; /** * 缴纳状态 */ + @ElogTransform(name = "缴纳状态") private Integer paymentStatus; /** * 补缴月份/退差月份 */ + @ElogTransform(name = "补缴月份/退差月份") private String supplementaryMonth; /** * 补缴项目 */ + @ElogTransform(name = "补缴项目") private String supplementaryProjects; /** * 数据来源 0-系统核算 1-临时数据 */ + @ElogTransform(name = "数据来源") private Integer resourceFrom; /** * 社保缴纳组织 */ + @ElogTransform(name = "社保缴纳组织") private Long socialPayOrg; /** * 社保账号 */ + @ElogTransform(name = "社保账号") private String socialAccount; /** * 公积金缴纳组织 */ + @ElogTransform(name = "公积金缴纳组织") private Long fundPayOrg; /** * 公积金账号 */ + @ElogTransform(name = "公积金账号") private String fundAccount; /** * 补充公积金账号 */ + @ElogTransform(name = "补充公积金账号") private String supplementFundAccount; /** * 其他福利缴纳组织 */ + @ElogTransform(name = "其他福利缴纳组织") private Long otherPayOrg; /** * 社保方案ID */ + @ElogTransform(name = "社保方案ID") private Long socialSchemeId; /** * 社保缴纳基数 */ @Encrypt + @ElogTransform(name = "社保缴纳基数") private String socialPaymentBaseString; /** * 社保缴纳基数——单位 */ @Encrypt + @ElogTransform(name = "社保缴纳基数——单位") private String socialPaymentComBaseString; /** * 公积金方案ID */ + @ElogTransform(name = "公积金方案ID") private Long fundSchemeId; /** * 公积金缴纳基数 */ @Encrypt + @ElogTransform(name = "公积金缴纳基数") private String fundPaymentBaseString; /** * 公积金缴纳基数——单位 */ @Encrypt + @ElogTransform(name = "公积金缴纳基数——单位") private String fundPaymentComBaseString; /** * 其他福利方案id */ + @ElogTransform(name = "其他福利方案id") private Long otherSchemeId; /** * 其他福利缴纳基数 */ @Encrypt + @ElogTransform(name = "其他福利缴纳基数") private String otherPaymentBaseString; /** * 其他福利缴纳基数——单位 */ @Encrypt + @ElogTransform(name = "其他福利缴纳基数——单位") private String otherPaymentComBaseString; /** * 社保个人缴费明细 */ @Encrypt + @ElogTransform(name = "社保个人缴费明细") private String socialPerJson; /** * 社保个人合计 */ @Encrypt + @ElogTransform(name = "社保个人合计") private String socialPerSum; /** * 公积金个人缴费明细 */ @Encrypt + @ElogTransform(name = "公积金个人缴费明细") private String fundPerJson; /** * 公积金个人合计 */ @Encrypt + @ElogTransform(name = "公积金个人合计") private String fundPerSum; /** * 其他福利个人缴费明细 */ @Encrypt + @ElogTransform(name = "其他福利个人缴费明细") private String otherPerJson; /** * 其他福利个人合计 */ @Encrypt + @ElogTransform(name = "其他福利个人合计") private String otherPerSum; /** * 个人合计 */ @Encrypt + @ElogTransform(name = "个人合计") private String perSum; /** * 社保单位缴费明细 */ @Encrypt + @ElogTransform(name = "社保单位缴费明细") private String socialComJson; /** * 社保单位合计 */ @Encrypt + @ElogTransform(name = "社保单位合计") private String socialComSum; /** * 公积金单位缴费明细 */ + @ElogTransform(name = "公积金单位缴费明细") private String fundComJson; /** * 公积金单位合计 */ + @ElogTransform(name = "公积金单位合计") private String fundComSum; /** * 其他福利单位缴费明细 */ + @ElogTransform(name = "其他福利单位缴费明细") private String otherComJson; /** * 其他福利单位合计 */ + @ElogTransform(name = "其他福利单位合计") private String otherComSum; /** * 单位合计 */ @Encrypt + @ElogTransform(name = "单位合计") private String comSum; /** * 社保合计 */ @Encrypt + @ElogTransform(name = "社保合计") private String socialSum; /** * 公积金合计 */ @Encrypt + @ElogTransform(name = "公积金合计") private String fundSum; /** * 其他福利合计 */ @Encrypt + @ElogTransform(name = "其他福利合计") private String otherSum; /** * 合计 */ @Encrypt + @ElogTransform(name = "合计") private String total; /** * 创建人id */ + @ElogTransform(name = "创建人id") private Long creator; /** * 是否删除 */ + @ElogTransform(name = "是否删除") private Integer deleteType; /** * 创建时间 */ + @ElogTransform(name = "创建时间") private Date createTime; /** * 更新时间 */ + @ElogTransform(name = "更新时间") private Date updateTime; /** * 租户key */ + @ElogTransform(name = "租户key") private String tenantKey; /** * 个税扣缴义务人 */ + @ElogTransform(name = "个税扣缴义务人") private Long paymentOrganization; } diff --git a/src/com/engine/salary/entity/siaccount/po/InsuranceCompensationPO.java b/src/com/engine/salary/entity/siaccount/po/InsuranceCompensationPO.java index 24ebde645..ff9ece22b 100644 --- a/src/com/engine/salary/entity/siaccount/po/InsuranceCompensationPO.java +++ b/src/com/engine/salary/entity/siaccount/po/InsuranceCompensationPO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.siaccount.po; +import com.engine.salary.elog.annotation.ElogTransform; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -18,86 +19,103 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor //hrsa_compensation_log +@ElogTransform(name = "福利台账-调差历史表") public class InsuranceCompensationPO { /** * 主键id */ + @ElogTransform(name = "主键id") private Long id; /** * 缴纳组织 */ + @ElogTransform(name = "缴纳组织") private Long paymentAgency; /** * 个税扣缴义务人 */ + @ElogTransform(name = "个税扣缴义务人id") private Long paymentOrganization; /** * 创建人id */ + @ElogTransform(name = "创建人id") private Long creator; /** * 是否删除 */ + @ElogTransform(name = "是否删除") private Integer deleteType; /** * 创建时间 */ + @ElogTransform(name = "创建时间") private Date createTime; /** * 更新时间 */ + @ElogTransform(name = "更新时间") private Date updateTime; /** * 租户key */ + @ElogTransform(name = "租户key") private String tenantKey; /** * 员工id */ + @ElogTransform(name = "员工id") private Long employeeId; /** * 统计调差福利 */ + @ElogTransform(name = "统计调差福利") private Integer welfareType; /** * 统计调差福利类型 */ + @ElogTransform(name = "统计调差福利类型") private String categoryType; /** * 国家核算金额 */ + @ElogTransform(name = "国家核算金额") private String countryTotal; /** * 公司核算金额 */ + @ElogTransform(name = "公司核算金额") private String companyTotal; /** * 应调差额 */ + @ElogTransform(name = "应调差额") private String adjustmentTotal; /** * 调差到 */ + @ElogTransform(name = "调差到") private Long adjustTo; /** * 账单月份 */ + @ElogTransform(name = "账单月份") private String billMonth; //---------条件------- diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.java b/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.java index 60cd71788..7a183297d 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.java +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.java @@ -50,6 +50,9 @@ public interface InsuranceAccountBatchMapper { */ void updateById(InsuranceAccountBatchPO pos); + InsuranceAccountBatchPO getById(@Param("id") Long id); + + /** * * @param billMonth diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.xml b/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.xml index 61223c9b0..4b45cb2f3 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.xml @@ -244,6 +244,15 @@ + + + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendMapper.xml b/src/com/engine/salary/mapper/salarybill/SalarySendMapper.xml index c78a00525..e3d729fd4 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalarySendMapper.xml @@ -97,7 +97,8 @@ send_total, last_send_time, send_status, - salary_acct_type + salary_acct_type, + creator FROM hrsa_salary_send WHERE delete_type = 0 AND id = #{id} diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java index bcf430d57..d0305777b 100644 --- a/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java @@ -1,5 +1,6 @@ package com.engine.salary.report.entity.po; +import com.engine.salary.elog.annotation.ElogTransform; import com.engine.salary.report.enums.UnitTypeEnum; import lombok.*; @@ -14,20 +15,25 @@ import java.util.Date; @ToString //hrsa_salary_statistics_item") //薪酬报表统计子表自定义统计项") +@ElogTransform(name = "统计项目") public class SalaryStatisticsItemPO implements Serializable { private static final long serialVersionUID = 5335849418826222822L; //主键id") + @ElogTransform(name = "主键id") private Long id; //统计报表id") + @ElogTransform(name = "报表id") private Long statReportId; //统计项名称") + @ElogTransform(name = "统计项名称") private String itemName; //统计项集合") + @ElogTransform(name = "统计项集合") private String itemValue; /** @@ -44,6 +50,7 @@ public class SalaryStatisticsItemPO implements Serializable { * jsonToString */ //计数规则") + @ElogTransform(name = "计数规则") private String countRule; /** @@ -60,6 +67,7 @@ public class SalaryStatisticsItemPO implements Serializable { * jsonToString */ //求和规则") + @ElogTransform(name = "求和规则") private String sumRule; /** @@ -76,6 +84,7 @@ public class SalaryStatisticsItemPO implements Serializable { * jsonToString */ //平均值规则") + @ElogTransform(name = "平均值规则") private String avgRule; /** @@ -92,6 +101,7 @@ public class SalaryStatisticsItemPO implements Serializable { * jsonToString */ //最大值规则") + @ElogTransform(name = "最大值规则") private String maxRule; /** @@ -108,6 +118,7 @@ public class SalaryStatisticsItemPO implements Serializable { * jsonToString */ //最小值规则") + @ElogTransform(name = "最小值规则") private String minRule; /** @@ -124,6 +135,7 @@ public class SalaryStatisticsItemPO implements Serializable { * jsonToString */ //中位数规则") + @ElogTransform(name = "中位数规则") private String medianRule; @@ -132,6 +144,7 @@ public class SalaryStatisticsItemPO implements Serializable { *

* "totalValue":"1", 是否使用 */ + @ElogTransform(name = "最近值是否使用") private String lastRule; /** @@ -141,6 +154,7 @@ public class SalaryStatisticsItemPO implements Serializable { * "totalValue":"1", 是否使用 * } */ + @ElogTransform(name = "最早值是否使用") private String oldRule; /** @@ -150,6 +164,7 @@ public class SalaryStatisticsItemPO implements Serializable { * "totalValue":"1", 是否使用 * } */ + @ElogTransform(name = "出现最多是否使用") private String frequentRule; /** @@ -159,9 +174,11 @@ public class SalaryStatisticsItemPO implements Serializable { * "totalValue":"1", 是否使用 * } */ + @ElogTransform(name = "平铺是否使用") private String tileRule; //顺序") + @ElogTransform(name = "顺序") private Integer indexValue; /** @@ -170,6 +187,7 @@ public class SalaryStatisticsItemPO implements Serializable { * @see UnitTypeEnum */ //统计单位") + @ElogTransform(name = "统计单位") private Integer unitType; //创建时间") diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java index cdf364f62..da04ef937 100644 --- a/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java @@ -1,5 +1,6 @@ package com.engine.salary.report.entity.po; +import com.engine.salary.elog.annotation.ElogTransform; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -22,77 +23,105 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor //hrsa_salary_stats_report +@ElogTransform(name = "薪酬统计报表") public class SalaryStatisticsReportPO implements Serializable { private static final long serialVersionUID = 6526480959578343197L; //主键id + @ElogTransform(name = "主键id") private Long id; //报表名称 + @ElogTransform(name = "报表名称") private String reportName; + @ElogTransform(name = "备注") private String remark; + @ElogTransform(name = "二级维度") private String secondDimension; + + @ElogTransform(name = "排序列") private String sortIndex; + + @ElogTransform(name = "排序方式") private String sortType; //时间类型 + @ElogTransform(name = "时间类型") private Integer timeType; //统计维度 + @ElogTransform(name = "统计维度") private String dimension; //薪资所属月-起始 + @ElogTransform(name = "薪资所属月-起始") private Date salaryStartMonth; //薪资所属月-截止 + @ElogTransform(name = "薪资所属月-截止") private Date salaryEndMonth; //个税扣缴义务人配置 + @ElogTransform(name = "个税扣缴义务人配置") private String taxAgentSetting; //收入所得项目配置 + @ElogTransform(name = "收入所得项目配置") private String incomeCategorySetting; //分部配置 + @ElogTransform(name = "分部配置") private String subCompanySetting; //部门配置 + @ElogTransform(name = "部门配置") private String departSetting; //职级配置 + @ElogTransform(name = "职级配置") private String gradeSetting; //岗位配置 + @ElogTransform(name = "岗位配置") private String positionSetting; //人员状态配置 + @ElogTransform(name = "人员状态配置") private String statusSetting; //人员配置 + @ElogTransform(name = "人员配置") private String employeeSetting; //入职日期配置 + @ElogTransform(name = "入职日期配置") private String hiredateSetting; //离职日期配置 + @ElogTransform(name = "离职日期配置") private String leavedateSetting; //租户key + @ElogTransform(name = "租户key", ignore = true) private String tenantKey; //创建人id + @ElogTransform(name = "创建人id", ignore = true) private Long creator; //是否删除 + @ElogTransform(name = "是否删除", ignore = true) private Integer deleteType; //创建时间 + @ElogTransform(name = "创建时间", ignore = true) private Date createTime; //更新时间 + @ElogTransform(name = "更新时间", ignore = true) private Date updateTime; diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java index 41b3fb90b..176192125 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java @@ -1,7 +1,10 @@ package com.engine.salary.report.service.impl; import com.engine.core.impl.Service; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.elog.entity.dto.LoggerContext; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.report.SalaryStatisticsItemMapper; @@ -12,10 +15,11 @@ import com.engine.salary.report.service.SalaryStatisticsItemService; import com.engine.salary.util.SalaryAssert; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; -import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.db.IdGenerator; +import com.engine.salary.util.db.MapperProxyFactory; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; +import org.springframework.beans.BeanUtils; import java.util.*; import java.util.stream.Collectors; @@ -66,15 +70,17 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt List list = this.listByIds(ids); if (CollectionUtils.isNotEmpty(list)) { getSalaryStatisticsItemMapper().deleteByIds(ids); -// list.forEach(po -> { -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId(String.valueOf(po.getId())); -// loggerContext.setTargetName(po.getItemName()); -// loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(152639, "删除统计项目")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(152639, "删除统计项目")); -// salaryStatReportLoggerTemplate.write(loggerContext); -// }); + list.forEach(po -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(po.getId())); + loggerContext.setTargetName(po.getItemName()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除统计项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除统计项目")); + loggerContext.setOldValues(po); + SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); + }); } return StringUtils.EMPTY; } @@ -130,19 +136,24 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt getSalaryStatisticsItemMapper().insertIgnoreNull(subTableItemPO); // 记录操作日志 -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId(String.valueOf(subTableItemPO.getId())); -// loggerContext.setTargetName(subTableItemPO.getItemName()); -// loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(152643, "新增统计项目")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(152643, "新增统计项目")); -// salaryStatReportLoggerTemplate.write(loggerContext); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(subTableItemPO.getId())); + loggerContext.setTargetName(subTableItemPO.getItemName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增统计项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增统计项目")); + loggerContext.setNewValues(subTableItemPO); + SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); // 更新 } else { SalaryStatisticsItemPO itemPO = this.getById(saveParam.getId()); SalaryAssert.notNull(itemPO, SalaryI18nUtil.getI18nLabel(152591, "统计项目不存在")); Optional.ofNullable(saveParam.getItemName()).ifPresent(itemPO::setItemName); + SalaryStatisticsItemPO oldPO = new SalaryStatisticsItemPO(); + BeanUtils.copyProperties(itemPO, oldPO); + if (Objects.nonNull(saveParam.getUnitType())) { itemPO.setUnitType(saveParam.getUnitType()); } else { @@ -162,13 +173,16 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt getSalaryStatisticsItemMapper().updateIgnoreNull(itemPO); // 记录操作日志 -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId(String.valueOf(itemPO.getId())); -// loggerContext.setTargetName(itemPO.getItemName()); -// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(152669, "更新统计项目")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(152669, "更新统计项目")); -// salaryStatReportLoggerTemplate.write(loggerContext); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(itemPO.getId().toString()); + loggerContext.setTargetName(itemPO.getItemName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增统计项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增统计项目")); + loggerContext.setOldValues(oldPO); + loggerContext.setNewValues(itemPO); + SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); } return StringUtils.EMPTY; } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 368918f4c..60acca9fc 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -4,7 +4,9 @@ import com.alibaba.fastjson.JSON; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.cache.SalaryCacheKey; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.hrm.dto.EmployeeInfoExpandDTO; import com.engine.salary.entity.hrm.dto.FieldSetting; @@ -13,6 +15,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.report.SalaryStatisticsReportMapper; import com.engine.salary.report.common.constant.SalaryConstant; @@ -31,13 +34,13 @@ import com.engine.salary.report.util.ReportTimeUtil; import com.engine.salary.service.*; import com.engine.salary.service.impl.*; import com.engine.salary.util.*; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import com.engine.salary.util.db.IdGenerator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; @@ -194,13 +197,16 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary this.getSalaryStatisticsReportMapper().updateIgnoreNull(poNew); // 记录日志 -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId(String.valueOf(poNew.getId())); -// loggerContext.setTargetName(poNew.getReportName()); -// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 152565, "更新报表")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 152565, "更新报表")); -// salaryStatReportLoggerTemplate.write(loggerContext); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(poNew.getId())); + loggerContext.setTargetName(poNew.getReportName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "更新报表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "更新报表")); + loggerContext.setOldValues(po); + loggerContext.setNewValues(poNew); + SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); } else { List list = listByName(saveParam.getReportName()); if (CollectionUtils.isNotEmpty(list)) { @@ -211,13 +217,15 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary getSalaryStatisticsReportMapper().insertIgnoreNull(poNew); // 记录日志 -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId(String.valueOf(poNew.getId())); -// loggerContext.setTargetName(poNew.getReportName()); -// loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 152561, "新增报表")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 152561, "新增报表")); -// salaryStatReportLoggerTemplate.write(loggerContext); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(poNew.getId())); + loggerContext.setTargetName(poNew.getReportName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "新增报表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "新增报表")); + loggerContext.setNewValues(poNew); + SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); } return StringUtils.EMPTY; } @@ -233,6 +241,8 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary } SalaryStatisticsReportPO po = getById(param.getId()); + SalaryStatisticsReportPO oldPO = new SalaryStatisticsReportPO(); + BeanUtils.copyProperties(po, oldPO); SalaryAssert.notNull(po, SalaryI18nUtil.getI18nLabel(152563, "报表不存在")); po.setSalaryStartMonth(param.getSalaryStartMonth()); po.setSalaryEndMonth(param.getSalaryEndMonth()); @@ -286,13 +296,16 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary getSalaryStatisticsItemService(user).saveOrUpdateBatch(salaryStatisticsItemList); //记录日志 -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId(String.valueOf(po.getId())); -// loggerContext.setTargetName(po.getReportName()); -// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(// 152565, "更新报表")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(// 152565, "更新报表")); -// salaryStatReportLoggerTemplate.write(loggerContext); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(po.getId())); + loggerContext.setTargetName(po.getReportName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "更新报表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "更新报表")); + loggerContext.setOldValues(oldPO); + loggerContext.setNewValues(po); + SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); return StringUtils.EMPTY; } @@ -311,16 +324,17 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary getSalaryStatisticsReportMapper().deleteByIds(deleteIds); //删除薪资项 getSalaryStatisticsItemService(user).deleteByReportIds(deleteIds); -// list.forEach(e -> { -// // 记录日志 -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId(String.valueOf(e.getId())); -// loggerContext.setTargetName(e.getReportName()); -// loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 153162, "删除报表")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 153162, "删除报表")); -// salaryStatReportLoggerTemplate.write(loggerContext); -// }); + list.forEach(e -> { + // 记录日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(e.getId())); + loggerContext.setTargetName(e.getReportName()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "删除报表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "删除报表") + e.getReportName()); + SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); + }); } Map resultMap = new HashMap<>(2); @@ -366,6 +380,17 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return item; }).collect(Collectors.toList()); getSalaryStatisticsItemService(user).saveOrUpdateBatch(itemList); + + // 记录日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(po.getId())); + loggerContext.setTargetName(po.getReportName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "新增报表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "新增报表")); + loggerContext.setNewValues(po); + SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); } @Override diff --git a/src/com/engine/salary/service/AttendQuoteService.java b/src/com/engine/salary/service/AttendQuoteService.java index 7e06ec6e5..d871b026c 100644 --- a/src/com/engine/salary/service/AttendQuoteService.java +++ b/src/com/engine/salary/service/AttendQuoteService.java @@ -2,6 +2,7 @@ package com.engine.salary.service; import com.engine.salary.entity.datacollection.dto.AttendQuoteListDTO; import com.engine.salary.entity.datacollection.param.AttendQuoteQueryParam; +import com.engine.salary.entity.datacollection.po.AttendQuotePO; import com.engine.salary.util.page.PageInfo; import java.time.YearMonth; @@ -35,4 +36,6 @@ public interface AttendQuoteService { */ Boolean checkOperation(YearMonth salaryYearMonth, Long salarySobId); + AttendQuotePO getById(Long id); + } diff --git a/src/com/engine/salary/service/SalaryItemService.java b/src/com/engine/salary/service/SalaryItemService.java index c42079fa3..ba661cc27 100644 --- a/src/com/engine/salary/service/SalaryItemService.java +++ b/src/com/engine/salary/service/SalaryItemService.java @@ -99,7 +99,7 @@ public interface SalaryItemService { * * @param saveParam 保存参数 */ - void save(SalaryItemSaveParam saveParam); + SalaryItemPO save(SalaryItemSaveParam saveParam); /** * 批量保存 @@ -113,7 +113,7 @@ public interface SalaryItemService { * * @param saveParam 更新参数 */ - void update(SalaryItemSaveParam saveParam); + SalaryItemPO update(SalaryItemSaveParam saveParam); /** * 根据主键id删除薪资项目 diff --git a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java index 4c3eef869..30aad6422 100644 --- a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java @@ -392,7 +392,6 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction apidatas.put("successCount", successCount); apidatas.put("errorCount", errorCount); apidatas.put("errorData", errorData); - } finally { IOUtils.closeQuietly(fileInputStream); } @@ -439,19 +438,31 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction if (CollectionUtils.isNotEmpty(saveList)) { addUpDeductionBiz.batchSave(saveList); } - // 记录操作日志 - saveList.addAll(updateList); - if (CollectionUtils.isNotEmpty(saveList)) { + // 记录操作日志 + // 根据月份、人员id查出保存的数据 + List empIds = saveList.stream().map(AddUpDeduction::getEmployeeId).collect(Collectors.toList()); + List insertList = addUpDeductionBiz.listSome(AddUpDeduction.builder().declareMonth(po.getDeclareMonth()).employeeIds(empIds).build()); + Map insertMap = SalaryEntityUtil.convert2Map(insertList, p -> p.getTaxAgentId() + "-" + SalaryDateUtil.getFormatYearMonth(p.getDeclareMonth()) + "-" + p.getEmployeeId()); + saveList.forEach(save -> { + AddUpDeduction addUpDeduction = insertMap.get(save.getTaxAgentId() + "-" + SalaryDateUtil.getFormatYearMonth(save.getDeclareMonth()) + "-" + save.getEmployeeId()); + if (addUpDeduction != null) { + updateList.add(addUpDeduction); + } + }); + + if (CollectionUtils.isNotEmpty(updateList)) { + String formatYearMonth = SalaryDateUtil.getFormatYearMonth(po.getDeclareMonth()); LoggerContext loggerContext = new LoggerContext(); loggerContext.setUser(user); - loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "新增累计专项附加扣除")); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel( 0, "累计专项附加扣除 ") + formatYearMonth); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增累计专项附加扣除")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增累计专项附加扣除")); - loggerContext.setNewValueList(saveList); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "导入")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "导入累计专项附加扣除 ") + formatYearMonth); + loggerContext.setNewValueList(updateList); SalaryElogConfig.addUpDeductionLoggerTemplate.write(loggerContext); } + } @Override @@ -484,9 +495,24 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction } } ArrayList updateList = new ArrayList<>(); - AddUpDeduction build = AddUpDeduction.builder().id(addUpDeduction.getId()).addUpChildEducation(addUpDeduction.getAddUpChildEducation()).addUpContinuingEducation(addUpDeduction.getAddUpContinuingEducation()).addUpHousingLoanInterest(addUpDeduction.getAddUpHousingLoanInterest()).addUpHousingRent(addUpDeduction.getAddUpHousingRent()).addUpSupportElderly(addUpDeduction.getAddUpSupportElderly()).addUpIllnessMedical(addUpDeduction.getAddUpIllnessMedical()).addUpInfantCare(addUpDeduction.getAddUpInfantCare()).build(); + AddUpDeduction build = AddUpDeduction.builder().id(addUpDeduction.getId()).addUpChildEducation(addUpDeduction.getAddUpChildEducation()).addUpContinuingEducation(addUpDeduction.getAddUpContinuingEducation()).addUpHousingLoanInterest(addUpDeduction.getAddUpHousingLoanInterest()).addUpHousingRent(addUpDeduction.getAddUpHousingRent()).addUpSupportElderly(addUpDeduction.getAddUpSupportElderly()).addUpIllnessMedical(addUpDeduction.getAddUpIllnessMedical()).addUpInfantCare(addUpDeduction.getAddUpInfantCare()).createTime(new Date()).build(); updateList.add(build); addUpDeductionBiz.batchUpdate(updateList); + + // 记录日志 + AddUpDeduction newValue = addUpDeductionBiz.getById(build.getId()); + String name = SalaryI18nUtil.getI18nLabel(0, "编辑"); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(addUpDeduction.getId().toString()); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "累计专项附加扣除") + "-" + addUpDeduction.getId()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(name); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "累计专项附加扣除") + "-" + SalaryI18nUtil + .getI18nLabel(0, "编辑")); + loggerContext.setOldValues(byId); + loggerContext.setNewValues(newValue); + loggerContext.setUser(user); + SalaryElogConfig.addUpDeductionLoggerTemplate.write(loggerContext); } @Override @@ -589,6 +615,19 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction handleImportData(insertData); } + private void addLogger4Insert(Integer currentEmployeeId, AddUpDeduction addUpDeduction, String targetName) { + String name = SalaryI18nUtil.getI18nLabel(0, "新增") + SalaryI18nUtil.getI18nLabel(0, "累计专项附加扣除"); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(addUpDeduction.getId().toString()); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(name); + loggerContext.setOperatedesc(name); + loggerContext.setNewValues(addUpDeduction); + loggerContext.setOperator(currentEmployeeId.toString()); + SalaryElogConfig.addUpDeductionLoggerTemplate.write(loggerContext); + } + @Override public void deleteSelectAddUpDeduction(AddUpDeductionRecordDeleteParam deleteParam) { long currentEmployeeId = user.getUID(); @@ -602,9 +641,11 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction List salaryAcctEmployees = getAccountedEmployeeDataByTaxYearMonth(declareMonthStr); // 判断是否有核算过 List deleteList = new ArrayList<>(); + ArrayList oldAddUpDeductions = new ArrayList<>(); for (int i = 0; i < deleteIds.size(); i++) { Long id = deleteIds.get(i); AddUpDeduction byId = addUpDeductionBiz.getById(id); + if (byId == null) { throw new SalaryRunTimeException("数据不存在或已被删除!"); } @@ -621,8 +662,25 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction } } deleteList.add(byId.getId()); + oldAddUpDeductions.add(byId); } addUpDeductionBiz.batchDeleteByIDS(deleteList); + + //记录日志 + if (CollectionUtils.isNotEmpty(oldAddUpDeductions)) { + oldAddUpDeductions.stream().forEach( e -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(e.getId().toString()); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "累计专项附加扣除") + "-" + e.getId()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "累计专项附加扣除") + "-" + SalaryI18nUtil + .getI18nLabel(0, "删除")); + loggerContext.setOldValues(e); + loggerContext.setUser(user); + SalaryElogConfig.addUpDeductionLoggerTemplate.write(loggerContext); + }); + } } @Override @@ -668,6 +726,20 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction } List deleteIds = list.stream().map(AddUpDeductionDTO::getId).collect(Collectors.toList()); addUpDeductionBiz.batchDeleteByIDS(deleteIds); + + // 记录日志 + Collection finalTaxAgentIds = queryParam.getTaxAgentIds(); + List taxAgentNames = taxAgentList.stream().filter(t -> finalTaxAgentIds.contains(t.getTaxAgentId())) + .map(TaxAgentManageRangeEmployeeDTO::getTaxAgentName).collect(Collectors.toList()); + String name = declareMonthStr + " " + StringUtils.join(taxAgentNames, ","); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetName(name); + loggerContext.setOperateType(OperateTypeEnum.CLEAR.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "一键清空")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "累计专项附加扣除") + "-" + SalaryI18nUtil + .getI18nLabel(0, "一键清空:") + name); + loggerContext.setUser(user); + SalaryElogConfig.addUpDeductionLoggerTemplate.write(loggerContext); } @Override @@ -788,6 +860,31 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction .forEach(l -> getAddUpDeductionMapper().insertData((List) l)); Lists.partition(updateList, 100) .forEach(l -> getAddUpDeductionMapper().updateDataAndDeclareMonth((List) l)); + + // 记录日志 + // 根据月份、人员id查出保存的数据 + List empIds = insertList.stream().map(AddUpDeduction::getEmployeeId).collect(Collectors.toList()); + List insertLogList = getAddUpDeductionMapper().listSome(AddUpDeduction.builder().declareMonth(yearMonth).employeeIds(empIds).build()); + Map insertMap = SalaryEntityUtil.convert2Map(insertLogList, p -> p.getTaxAgentId() + "-" + SalaryDateUtil.getFormatYearMonth(p.getDeclareMonth()) + "-" + p.getEmployeeId()); + insertList.forEach(save -> { + AddUpDeduction addUpDeduction = insertMap.get(save.getTaxAgentId() + "-" + SalaryDateUtil.getFormatYearMonth(save.getDeclareMonth()) + "-" + save.getEmployeeId()); + if (addUpDeduction != null) { + updateList.add(addUpDeduction); + } + }); + + if (CollectionUtils.isNotEmpty(updateList)) { + String yearMonthStr = SalaryDateUtil.getFormatYearMonth(yearMonth); + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "一键累计 "+yearMonthStr)); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "一键累计专项附加扣除")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "一键累计 "+ yearMonthStr +" 专项附加扣除")); + loggerContext.setNewValueList(updateList); + SalaryElogConfig.addUpDeductionLoggerTemplate.write(loggerContext); + } + if (!errorMessages.isEmpty()) { String userNames = getSalaryEmployeeService(user) .getEmployeeByIdsAll(errorMessages) @@ -980,6 +1077,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction //获取操作按钮资源 List> rowList = getExcelRowDetailList(isChief, queryParam); + //获取excel return ExcelUtil.genWorkbook(rowList, "累计专项附加扣除明细"); } @@ -1149,6 +1247,16 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction //获取操作按钮资源 List> rowList = getExcelRowList(isChief, queryParam); + // 记录日志 + String name = SalaryI18nUtil.getI18nLabel(0, "导出"); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "累计专项附加扣除")); + loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); + loggerContext.setOperateTypeName(name); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "累计专项附加扣除") + "-" + name); + loggerContext.setUser(user); + SalaryElogConfig.addUpDeductionLoggerTemplate.write(loggerContext); + //获取excel return ExcelUtil.genWorkbook(rowList, "累计专项附加扣除"); } diff --git a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java index bbeb0506b..43871ca44 100644 --- a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java @@ -259,10 +259,20 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation @Override public XSSFWorkbook export(AddUpSituationQueryParam queryParam) { - //获取操作按钮资源 + // 获取操作按钮资源 List> rowList = getExcelRowList(queryParam); - //获取excel + // 记录日志 + String name = SalaryI18nUtil.getI18nLabel(0, "导出"); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "往期累计情况")); + loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); + loggerContext.setOperateTypeName(name); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "往期累计情况") + "-" + name); + loggerContext.setUser(user); + SalaryElogConfig.addUpSituationLoggerTemplate.write(loggerContext); + + // 获取excel return ExcelUtil.genWorkbook(rowList, "累计情况"); } @@ -870,17 +880,27 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation if (CollectionUtils.isNotEmpty(saveList)) { batchSave(saveList); } -// 记录操作日志 - saveList.addAll(updateList); - if (CollectionUtils.isNotEmpty(saveList)) { + // 记录操作日志 + // 根据月份、人员id查出保存的数据 + List empIds = saveList.stream().map(AddUpSituation::getEmployeeId).collect(Collectors.toList()); + List insertList = biz.listSome(AddUpSituation.builder().taxYearMonth(po.getTaxYearMonth()).employeeIds(empIds).build()); + Map insertMap = SalaryEntityUtil.convert2Map(insertList, p -> p.getTaxAgentId() + "-" + SalaryDateUtil.getFormatYearMonth(p.getTaxYearMonth()) + "-" + p.getEmployeeId()); + saveList.forEach(save -> { + AddUpSituation addUpSituation = insertMap.get(save.getTaxAgentId() + "-" + SalaryDateUtil.getFormatYearMonth(save.getTaxYearMonth()) + "-" + save.getEmployeeId()); + if (addUpSituation != null) { + updateList.add(addUpSituation); + } + }); + + if (CollectionUtils.isNotEmpty(updateList)) { LoggerContext loggerContext = new LoggerContext(); loggerContext.setUser(user); - loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "新增累计专项附加扣除")); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "往期累计情况")); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增累计专项附加扣除")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增累计专项附加扣除")); - loggerContext.setNewValueList(saveList); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "导入")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "导入往期累计情况")); + loggerContext.setNewValueList(updateList); SalaryElogConfig.addUpSituationLoggerTemplate.write(loggerContext); } } @@ -958,6 +978,21 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation .build(); updateList.add(build); biz.batchUpdate(updateList); + + // 记录日志 + AddUpSituation newValue = biz.getById(build.getId()); + String name = SalaryI18nUtil.getI18nLabel(0, "编辑"); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(newValue.getId().toString()); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "往期累计情况") + "-" + newValue.getId()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(name); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "往期累计情况") + "-" + SalaryI18nUtil + .getI18nLabel(0, "编辑")); + loggerContext.setOldValues(byId); + loggerContext.setNewValues(newValue); + loggerContext.setUser(user); + SalaryElogConfig.addUpSituationLoggerTemplate.write(loggerContext); } /** @@ -1112,6 +1147,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation String format = salaryMonthDate.atStartOfDay().format(DateTimeFormatter.ofPattern("yyyy-MM")); List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(format); // 判断是否有核算过 + List deletePOList = new ArrayList<>(); List deleteList = new ArrayList<>(); for (int i = 0; i < deleteIds.size(); i++) { Long id = deleteIds.get(i); @@ -1132,8 +1168,23 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation } } deleteList.add(byId.getId()); + deletePOList.add(byId); } biz.batchDeleteByIDS(deleteList); + + // 记录日志 + deletePOList.stream().forEach(po -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(po.getId().toString()); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "往期累计情况") + "-" + po.getId()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "往期累计情况") + "-" + SalaryI18nUtil + .getI18nLabel(0, "删除")); + loggerContext.setOldValues(po); + loggerContext.setUser(user); + SalaryElogConfig.addUpSituationLoggerTemplate.write(loggerContext); + }); } @Override @@ -1183,6 +1234,20 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation } List deleteIds = list.stream().map(AddUpSituation::getId).collect(Collectors.toList()); biz.batchDeleteByIDS(deleteIds); + + // 记录日志 + Collection finalTaxAgentIds = queryParam.getTaxAgentIds(); + List taxAgentNames = taxAgentList.stream().filter(t -> finalTaxAgentIds.contains(t.getTaxAgentId())) + .map(TaxAgentManageRangeEmployeeDTO::getTaxAgentName).collect(Collectors.toList()); + String name = declareMonthStr + " " + StringUtils.join(taxAgentNames, ","); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetName(name); + loggerContext.setOperateType(OperateTypeEnum.CLEAR.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "一键清空")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "往期累计情况") + "-" + SalaryI18nUtil + .getI18nLabel(0, "一键清空:") + name); + loggerContext.setUser(user); + SalaryElogConfig.addUpSituationLoggerTemplate.write(loggerContext); } @Override diff --git a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java index 8e9f4282a..6f968642e 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java @@ -8,9 +8,14 @@ import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.biz.*; +import com.engine.salary.biz.AttendQuoteBiz; +import com.engine.salary.biz.AttendQuoteDataBiz; +import com.engine.salary.biz.AttendQuoteDataValueBiz; +import com.engine.salary.biz.AttendQuoteFieldBiz; import com.engine.salary.common.LocalDateRange; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.bo.AttendQuoteDataBO; import com.engine.salary.entity.datacollection.dto.*; @@ -24,6 +29,7 @@ import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.param.SalarySobRangeEmpQueryParam; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.salarysob.po.SalarySobRangePO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.datacollection.AttendQuoteSourceTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -34,10 +40,7 @@ import com.engine.salary.mapper.sys.SalarySysConfMapper; import com.engine.salary.remote.attend.entity.Attend4Salary; import com.engine.salary.remote.attend.service.RemoteAttend4SalaryService; import com.engine.salary.remote.attend.service.impl.RemoteAttend4SalaryServiceImpl; -import com.engine.salary.service.AttendQuoteDataService; -import com.engine.salary.service.AttendQuoteFieldSettingService; -import com.engine.salary.service.SalaryEmployeeService; -import com.engine.salary.service.SalarySobService; +import com.engine.salary.service.*; import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.entity.vo.OrderRuleVO; import com.engine.salary.sys.service.SalarySysConfService; @@ -45,6 +48,7 @@ import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.excel.ExcelParseHelper; import com.engine.salary.util.excel.ExcelSupport; @@ -55,7 +59,6 @@ import com.engine.salary.util.valid.ValidUtil; import com.google.common.base.Joiner; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.engine.salary.util.db.IdGenerator; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -104,6 +107,10 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa return ServiceUtil.getService(SalarySobServiceImpl.class, user); } + private AttendQuoteService getAttendQuoteService(User user) { + return ServiceUtil.getService(AttendQuoteServiceImpl.class, user); + } + private AttendQuoteDataMapper getAttendQuoteDataMapper() { return MapperProxyFactory.getProxy(AttendQuoteDataMapper.class); } @@ -265,6 +272,20 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa } rows.add(row); } + + // 记录日志 + AttendQuotePO attendQuotePO = getAttendQuoteService(user).getById(queryParam.getAttendQuoteId()); + SalarySobPO salarySob = getSalarySobService(user).getById(attendQuotePO.getSalarySobId()); + + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(attendQuotePO.getId())); + loggerContext.setTargetName(SalaryDateUtil.getFormatYearMonth(attendQuotePO.getSalaryYearMonth()) + " " + (salarySob != null ? salarySob.getName() : "")); + loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "导出考勤数据")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "考勤数据")); + SalaryElogConfig.attendQuoteLoggerTemplate.write(loggerContext); + return ExcelUtil.genWorkbookV2(rows, sheetName); } @@ -370,15 +391,30 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa // 6.数据落库处理 handleDataToDB(attendQuote.getId(), pos, values); + // 记录日志 + recordLog(attendQuote); } else { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100368, "暂无考勤数据可以同步")); } - - // todo 记录日志 -// recordLog(attendQuote, currentEmployeeId, currentTenantKey, null); return null; } + private void recordLog(AttendQuotePO attendQuote) { + SalarySobPO salarySob = getSalarySobService(user).getById(attendQuote.getSalarySobId()); + String sourceType = AttendQuoteSourceTypeEnum.getDefaultLabelByValue(attendQuote.getSourceType()); + + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(attendQuote.getId())); + loggerContext.setTargetName(SalaryDateUtil.getFormatYearMonth(attendQuote.getSalaryYearMonth()) + " " + (salarySob != null ? salarySob.getName() : "")); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(sourceType + SalaryI18nUtil.getI18nLabel(0, "考勤数据")); + loggerContext.setOperatedesc(sourceType + SalaryI18nUtil.getI18nLabel(0, "考勤数据")); + loggerContext.setNewValues(attendQuote); + SalaryElogConfig.attendQuoteLoggerTemplate.write(loggerContext); + } + + /** * 获取考勤引用 * @@ -769,8 +805,8 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa handleDataToDB(attendQuote.getId(), pos, values); - // todo 记录日志 -// recordLog(attendQuote, message.getUserId(), message.getTenantKey(), message.getClientIp()); + // 记录日志 + recordLog(attendQuote); Map apidatas = new HashMap(); apidatas.put("successCount", successCount); @@ -882,35 +918,6 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa return bigDecimalVal == null ? "" : bigDecimalVal.toString(); } -// /** -// * 记录日志 -// * @param attendQuote -// * @param currentEmployeeId -// * @param currentTenantKey -// * @param clientIp -// */ -// private void recordLog(AttendQuotePO attendQuote, Long currentEmployeeId, String currentTenantKey, String clientIp) { -// List salarySobs = new LambdaQueryChainWrapper<>(getSalarySobMapper()) -// .eq(SalarySobPO::getTenantKey, TenantContext.getCurrentTenantKey()) -// .eq(SalarySobPO::getDeleteType, 0) -// .eq(SalarySobPO::getId, attendQuote.getSalarySobId()) -// .list(); -// String sourceType = AttendQuoteSourceTypeEnum.getDefaultLabelByValue(attendQuote.getSourceType(), currentEmployeeId, currentTenantKey); -// -// LoggerContext loggerContext = new LoggerContext(); -// loggerContext.setTargetId(String.valueOf(attendQuote.getId())); -// loggerContext.setTargetName(SalaryDateUtil.getFormatYearMonth(attendQuote.getSalaryYearMonth())+" "+(CollectionUtils.isNotEmpty(salarySobs)?salarySobs.get(0).getName():"")); -// loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); -// loggerContext.setOperateTypeName(sourceType+SalaryI18nUtil.getI18nLabel(93931, "考勤数据")); -// loggerContext.setOperatedesc(sourceType+SalaryI18nUtil.getI18nLabel( 93931, "考勤数据")); -// loggerContext.setNewValues(attendQuote); -// loggerContext.setTenant_key(currentTenantKey); -// loggerContext.setOperator(currentEmployeeId.toString()); -// if (StringUtils.isNotEmpty(clientIp)) { -// loggerContext.setClientIp(clientIp); -// } -// attendQuoteLoggerTemplate.write(loggerContext); -// } /** * 检查参数 diff --git a/src/com/engine/salary/service/impl/AttendQuoteFieldServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteFieldServiceImpl.java index 3979c3180..37d3ff3f6 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteFieldServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteFieldServiceImpl.java @@ -5,10 +5,13 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.AttendQuoteFieldBiz; import com.engine.salary.component.SalaryWeaTable; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; import com.engine.salary.entity.datacollection.param.AttendQuoteFieldQueryParam; import com.engine.salary.entity.datacollection.param.AttendQuoteFieldSaveParam; import com.engine.salary.entity.datacollection.po.AttendQuoteFieldPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.datacollection.AttendQuoteFieldSourceTypeEnum; import com.engine.salary.enums.datacollection.AttendQuoteFieldTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -16,6 +19,7 @@ import com.engine.salary.mapper.datacollection.AttendQuoteFieldMapper; import com.engine.salary.remote.attend.service.RemoteAttend4SalaryService; import com.engine.salary.remote.attend.service.impl.RemoteAttend4SalaryServiceImpl; import com.engine.salary.service.AttendQuoteFieldService; +import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; @@ -142,6 +146,17 @@ public class AttendQuoteFieldServiceImpl extends Service implements AttendQuoteF // 保存 biz.save(attendQuoteField); + // 记录日志 + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(attendQuoteField.getId())); + loggerContext.setTargetName(attendQuoteField.getFieldName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新建自定义字段")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新建自定义字段")); + loggerContext.setNewValues(attendQuoteField); + SalaryElogConfig.attendQuoteFieldLoggerTemplate.write(loggerContext); + return null; } @@ -222,6 +237,18 @@ public class AttendQuoteFieldServiceImpl extends Service implements AttendQuoteF newAttendQuoteField.setUpdateTime(new Date()); // 更新 biz.update(newAttendQuoteField); + + // 记录日志 + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(attendQuoteField.getId())); + loggerContext.setTargetName(attendQuoteField.getFieldName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "启用/停用自定义字段")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "启用/停用自定义字段")); + loggerContext.setOldValues(attendQuoteField); + loggerContext.setNewValues(newAttendQuoteField); + SalaryElogConfig.attendQuoteFieldLoggerTemplate.write(loggerContext); return null; } diff --git a/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java index 7f4b96a60..9a5878b0b 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java @@ -5,10 +5,12 @@ import com.engine.core.impl.Service; import com.engine.salary.biz.AttendQuoteBiz; import com.engine.salary.biz.AttendQuoteDataBiz; import com.engine.salary.biz.AttendQuoteDataValueBiz; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.entity.datacollection.dto.AttendQuoteListDTO; import com.engine.salary.entity.datacollection.param.AttendQuoteDataQueryParam; import com.engine.salary.entity.datacollection.param.AttendQuoteQueryParam; import com.engine.salary.entity.datacollection.po.AttendQuoteDataPO; +import com.engine.salary.entity.datacollection.po.AttendQuotePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; @@ -20,6 +22,8 @@ import com.engine.salary.service.SalarySobService; import com.engine.salary.service.TaxAgentService; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.SalaryLoggerUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; @@ -130,17 +134,18 @@ public class AttendQuoteServiceImpl extends Service implements AttendQuoteServic dataValueBiz.deleteByAttendQuoteDataIds(attendQuoteDataIds); } - //todo 日志 -// attendQuotes.forEach(e -> { -// SalaryLoggerUtil.recordDeleteSingleLog(attendQuoteLoggerTemplate, -// e.getId(), -// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 85367, "考勤引用"), -// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100412, "删除考勤引用"), -// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100412, "删除考勤引用") + -// ":[" + SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 87614, "薪资所属月") + ":" + e.getSalaryYearMonth() + "," + -// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 87615, "关联账套") + ":" + e.getSalarySobName() + "]", -// e); -// }); + // 记录日志 + attendQuotes.forEach(e -> { + SalaryLoggerUtil.recordDeleteSingleLog(SalaryElogConfig.attendQuoteLoggerTemplate, + e.getId(), + SalaryI18nUtil.getI18nLabel(0, SalaryDateUtil.getFormatYearMonth(e.getSalaryYearMonth()) + " " + e.getSalarySobName()), + SalaryI18nUtil.getI18nLabel(0, "删除考勤引用"), + SalaryI18nUtil.getI18nLabel(0, "删除考勤引用") + + ":[" + SalaryI18nUtil.getI18nLabel(0, "薪资所属月") + ":" + e.getSalaryYearMonth() + "," + + SalaryI18nUtil.getI18nLabel(0, "关联账套") + ":" + e.getSalarySobName() + "]", + e, + user); + }); return null; } @@ -161,5 +166,11 @@ public class AttendQuoteServiceImpl extends Service implements AttendQuoteServic return isEnableOperation.get(); } - + @Override + public AttendQuotePO getById(Long id) { + if (id == null) { + return null; + } + return getAttendQuoteMapper().getById(id); + } } diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index b831a5463..0d8d4669b 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -9,6 +9,7 @@ import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; +import com.engine.salary.entity.datacollection.AddUpDeduction; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.dto.OtherDeductionListDTO; import com.engine.salary.entity.datacollection.dto.OtherDeductionRecordDTO; @@ -361,7 +362,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } //入库 - OtherDeductionBiz.handleImportData(eligibleData); + OtherDeductionBiz.handleImportData(eligibleData, user); apidatas.put("successCount", successCount); apidatas.put("errorCount", errorCount); @@ -418,18 +419,27 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction if (CollectionUtils.isNotEmpty(saveList)) { otherDeductionBiz.batchSave(saveList); } - // 记录操作日志 - saveList.addAll(updateList); + // 记录日志 + // 根据月份、人员id查出保存的数据 + List empIds = saveList.stream().map(OtherDeductionPO::getEmployeeId).collect(Collectors.toList()); + List insertList = otherDeductionBiz.listSome(OtherDeductionPO.builder().declareMonth(po.getDeclareMonth()).employeeIds(empIds).build()); + Map insertMap = SalaryEntityUtil.convert2Map(insertList, p -> p.getTaxAgentId() + "-" + SalaryDateUtil.getFormatYearMonth(p.getDeclareMonth()) + "-" + p.getEmployeeId()); + saveList.forEach(save -> { + OtherDeductionPO otherDeductionPO = insertMap.get(save.getTaxAgentId() + "-" + SalaryDateUtil.getFormatYearMonth(save.getDeclareMonth()) + "-" + save.getEmployeeId()); + if (otherDeductionPO != null) { + updateList.add(otherDeductionPO); + } + }); - if (CollectionUtils.isNotEmpty(saveList)) { - LoggerContext loggerContext = new LoggerContext(); + if (CollectionUtils.isNotEmpty(updateList)) { + LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); - loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel( 0, "新增累计专项附加扣除")); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel( 0, "其他免税扣除")); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "新增计专项附加扣除")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "新增累计专项附加扣除")); - loggerContext.setNewValueList(saveList); - SalaryElogConfig.addUpDeductionLoggerTemplate.write(loggerContext); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "新增")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "新增其他免税扣除")); + loggerContext.setNewValueList(updateList); + SalaryElogConfig.otherDeductionLoggerTemplate.write(loggerContext); } } @@ -461,6 +471,16 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction //获取操作按钮资源 List> rowList = getExcelRowList(param); + // 记录日志 + String name = SalaryI18nUtil.getI18nLabel(0, "导出"); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "其他免税扣除")); + loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); + loggerContext.setOperateTypeName(name); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "其他免税扣除") + "-" + name); + loggerContext.setUser(user); + SalaryElogConfig.otherDeductionLoggerTemplate.write(loggerContext); + //获取excel return ExcelUtil.genWorkbook(rowList, "其他免税扣除"); } @@ -655,6 +675,21 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction .build(); updateList.add(build); OtherDeductionBiz.batchUpdate(updateList); + + // 记录日志 + OtherDeductionPO newValue = OtherDeductionBiz.getById(build.getId()); + String name = SalaryI18nUtil.getI18nLabel(0, "编辑"); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(newValue.getId().toString()); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "其他免税扣除") + "-" + newValue.getId()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(name); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "其他免税扣除") + "-" + SalaryI18nUtil + .getI18nLabel(0, "编辑")); + loggerContext.setOldValues(byId); + loggerContext.setNewValues(newValue); + loggerContext.setUser(user); + SalaryElogConfig.otherDeductionLoggerTemplate.write(loggerContext); } @Override @@ -755,6 +790,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(declareMonthStr); // 判断是否有核算过 List deleteList = new ArrayList<>(); + List resultList = new ArrayList<>(); for (int i = 0; i < deleteIds.size(); i++) { Long id = deleteIds.get(i); OtherDeductionPO byId = otherDeductionBiz.getById(id); @@ -774,8 +810,22 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } } deleteList.add(byId.getId()); + resultList.add(byId); } otherDeductionBiz.batchDeleteByIDS(deleteList); + // 记录日志 + resultList.stream().forEach(r -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(r.getId().toString()); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "其他免税扣除") + "-" + r.getId()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "其他免税扣除") + "-" + SalaryI18nUtil + .getI18nLabel(0, "删除")); + loggerContext.setOldValues(r); + loggerContext.setUser(user); + SalaryElogConfig.otherDeductionLoggerTemplate.write(loggerContext); + }); } @Override @@ -822,6 +872,20 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } List deleteIds = list.stream().map(OtherDeductionPO::getId).collect(Collectors.toList()); otherDeductionBiz.batchDeleteByIDS(deleteIds); + + // 记录日志 + Collection finalTaxAgentIds = queryParam.getTaxAgentIds(); + List taxAgentNames = taxAgentList.stream().filter(t -> finalTaxAgentIds.contains(t.getTaxAgentId())) + .map(TaxAgentManageRangeEmployeeDTO::getTaxAgentName).collect(Collectors.toList()); + String name = declareMonthStr + " " + StringUtils.join(taxAgentNames, ","); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetName(name); + loggerContext.setOperateType(OperateTypeEnum.CLEAR.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "一键清空")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "其他免税扣除") + "-" + SalaryI18nUtil + .getI18nLabel(0, "一键清空:") + name); + loggerContext.setUser(user); + SalaryElogConfig.otherDeductionLoggerTemplate.write(loggerContext); } @Override @@ -906,6 +970,31 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction getOtherDeductionBiz().batchSave(insertInfo); getOtherDeductionBiz().batchUpdate(updatetInfo); + + //记录日志 + // 根据月份、人员id查出保存的数据 + List empIds = insertInfo.stream().map(OtherDeductionPO::getEmployeeId).collect(Collectors.toList()); + List insertList = getOtherDeductionBiz().listSome(OtherDeductionPO.builder().declareMonth(SalaryDateUtil.stringToDate(param.getDeclareMonth())).employeeIds(empIds).build()); + Map insertMap = SalaryEntityUtil.convert2Map(insertList, p -> p.getTaxAgentId() + "-" + SalaryDateUtil.getFormatYearMonth(p.getDeclareMonth()) + "-" + p.getEmployeeId()); + insertList.forEach(save -> { + OtherDeductionPO otherDeductionPO = insertMap.get(save.getTaxAgentId() + "-" + SalaryDateUtil.getFormatYearMonth(save.getDeclareMonth()) + "-" + save.getEmployeeId()); + if (otherDeductionPO != null) { + updatetInfo.add(otherDeductionPO); + } + }); + + if (CollectionUtils.isNotEmpty(updatetInfo)) { + String yearMonthStr = SalaryDateUtil.getFormatYearMonth(lastMonth.toLocalDate()) ; + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "沿用上月 "+yearMonthStr)); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "沿用上月其他免税扣除")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "沿用上月 "+ yearMonthStr +" 其他免税扣除")); + loggerContext.setNewValueList(updatetInfo); + SalaryElogConfig.otherDeductionLoggerTemplate.write(loggerContext); + } + return ""; } diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 964837f26..9a2be0a97 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -41,10 +41,7 @@ import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.enums.OpenEnum; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; -import com.engine.salary.util.JsonUtil; -import com.engine.salary.util.SalaryDateUtil; -import com.engine.salary.util.SalaryEntityUtil; -import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.*; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.excel.ExcelParseHelper; import com.engine.salary.util.excel.ExcelSupport; @@ -64,6 +61,7 @@ import org.apache.commons.lang3.math.NumberUtils; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.BeanUtils; import weaver.file.ImageFileManager; import weaver.hrm.User; @@ -156,6 +154,10 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc public XSSFWorkbook exportSalaryAcctEmployee(SalaryAcctEmployeeQueryParam queryParam) { ValidUtil.doValidator(queryParam); + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId()); + if (salaryAcctRecordPO == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"薪资核算记录不存在或已被删除")); + } // 1.工作簿名称 String sheetName = SalaryI18nUtil.getI18nLabel(85368, "核算人员范围"); // 2.表头 @@ -180,6 +182,18 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // 3.表数据 List> lists = convert2ExcelRow(salaryAcctEmployees); rows.addAll(lists); + + // 记录日志 + SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId()); + String targetName = salarySobPO.getName() + ":" + SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth()); + SalaryLoggerUtil.recordExportSingleLog(SalaryElogConfig.salaryAcctRecordLoggerTemplate, + queryParam.getSalaryAcctRecordId(), + targetName, + SalaryI18nUtil.getI18nLabel(0, "导出薪资核算人员"), + SalaryI18nUtil.getI18nLabel(0, "导出薪资核算人员") + ":" + targetName, + user + ); + // return ExcelUtil.genWorkbookV2(rows, sheetName); return ExcelUtilPlus.genWorkbookV2(rows, sheetName); } @@ -188,6 +202,10 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc @Override public XSSFWorkbook exportReducedEmployee(SalaryAcctEmployeeQueryParam queryParam) { ValidUtil.doValidator(queryParam); + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId()); + if (salaryAcctRecordPO == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "薪资核算记录不存在或已被删除")); + } // 1.工作簿名称 String sheetName = SalaryI18nUtil.getI18nLabel(85368, "环比上月减少人员"); @@ -213,6 +231,18 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // 3.表数据 List> lists = convert2ExcelRow(salaryAcctEmployees); rows.addAll(lists); + + // 记录日志 + SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId()); + String targetName = salarySobPO.getName() + ":" + SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth()); + SalaryLoggerUtil.recordExportSingleLog(SalaryElogConfig.salaryAcctRecordLoggerTemplate, + queryParam.getSalaryAcctRecordId(), + targetName, + SalaryI18nUtil.getI18nLabel(0, "导出环比上月减少人员"), + SalaryI18nUtil.getI18nLabel(0, "导出环比上月减少人员") + ":" + targetName, + user + ); + // return ExcelUtil.genWorkbookV2(rows, sheetName); return ExcelUtilPlus.genWorkbookV2(rows, sheetName); } @@ -384,6 +414,18 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc rows.add(row); } + // 记录日志 + SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId()); + String targetName = salarySobPO.getName() + ":" + SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth()); + SalaryLoggerUtil.recordExportSingleLog(SalaryElogConfig.salaryAcctRecordLoggerTemplate, + queryParam.getSalaryAcctRecordId(), + targetName, + SalaryI18nUtil.getI18nLabel(0, "导出薪资核算结果"), + SalaryI18nUtil.getI18nLabel(0, "导出薪资核算结果") + ":" + targetName, + user + ); + + String sheetName = "薪资核算结果"; // return ExcelUtil.genWorkbookV2(rows, sheetName, total); return ExcelUtilPlus.genWorkbookWithChildTitleColumnWithExcelFormat(rows, sheetName, total); @@ -790,6 +832,17 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc rows.add(row); } + // 记录日志 + SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId()); + String targetName = salarySobPO.getName() + ":" + SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth()); + SalaryLoggerUtil.recordExportSingleLog(SalaryElogConfig.salaryAcctRecordLoggerTemplate, + queryParam.getSalaryAcctRecordId(), + targetName, + SalaryI18nUtil.getI18nLabel(0, "导出线下对比结果"), + SalaryI18nUtil.getI18nLabel(0, "导出线下对比结果") + ":" + targetName, + user + ); + String sheetName = "线下对比结果"; // return ExcelUtil.genWorkbookV2(rows, sheetName); @@ -1287,7 +1340,28 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc if (CollectionUtils.isNotEmpty(salaryAcctResults)) { // 处理导入薪资项的回算值 handleOriginResultValue(deleteResults, salaryAcctResults); + // 备份一份加密前的值 + List list4log = new ArrayList<>(); + salaryAcctResults.stream().forEach(source -> { + SalaryAcctResultPO target = new SalaryAcctResultPO(); + BeanUtils.copyProperties(source,target); + list4log.add(target); + }); getSalaryAcctResultService(user).batchSave(salaryAcctResults); + + // 记录操作日志 TODO 这里的数据没有id,id是自增的重新查数据太多效率太低 + SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId()); + String targetName = salarySobPO.getName() + ":" + SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(param.getSalaryAcctRecordId().toString()); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(OperateTypeEnum.EXCEL_IMPORT.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "导入薪资核算数据")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "导入薪资核算数据 ") + targetName); + loggerContext.setOldValueList(list4log); + SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); + // 存储薪资核算结果数据来源日志 new Thread() { public void run() { diff --git a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java index 001f5ee36..e4cecc326 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java @@ -3,8 +3,10 @@ package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.*; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.constant.SalaryItemConstant; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryarchive.bo.SalaryArchiveExcelBO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveInitImportDTO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; @@ -29,6 +31,7 @@ import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.SalaryLoggerUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.excel.ExcelComment; import com.engine.salary.util.excel.ExcelParseHelper; @@ -823,7 +826,8 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch List taxAgentRanges = importHandleParam.getTaxAgentRanges(); List salaryArchiveSobSaves = importHandleParam.getSalaryArchiveSobSaves(); - + Map empMap = SalaryEntityUtil.convert2Map(importHandleParam.getEmployees(), DataCollectionEmployee::getEmployeeId, DataCollectionEmployee::getUsername); + Map taxAgentMap = SalaryEntityUtil.convert2Map(importHandleParam.getTaxAgentList(), TaxAgentManageRangeEmployeeDTO::getTaxAgentId, TaxAgentManageRangeEmployeeDTO::getTaxAgentName); // 新增薪资档案 if (CollectionUtils.isNotEmpty(salaryArchiveSaves)) { // 去除已经存在的,避免重复 @@ -836,8 +840,24 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch } // 修改薪资档案 if (CollectionUtils.isNotEmpty(salaryArchiveUpdates)) { + // 查询更新前档案信息 + List oldArchive = getSalaryArchiveMapper().listSome(SalaryArchivePO.builder().ids(salaryArchiveUpdates.stream().map(SalaryArchivePO::getId).collect(Collectors.toList())).build()); + Map oldArchiveMap = SalaryEntityUtil.convert2Map(oldArchive, SalaryArchivePO::getId); // 薪资档案 salaryArchiveMapper.batchUpdate(salaryArchiveUpdates); + // 记录日志 + salaryArchiveUpdates.stream().forEach(a -> { + SalaryArchivePO oldPO = oldArchiveMap.getOrDefault(a.getId(), SalaryArchivePO.builder().build()); + String name = taxAgentMap.getOrDefault(a.getTaxAgentId(), StringUtils.EMPTY) + "-" + empMap.getOrDefault(a.getEmployeeId(), StringUtils.EMPTY); + SalaryLoggerUtil.recordUpdateSingleLog(SalaryElogConfig.salaryArchiveLoggerTemplate, + a.getId(), + name, + SalaryI18nUtil.getI18nLabel(0, "薪资档案导入更新"), + SalaryI18nUtil.getI18nLabel(0, "薪资档案导入更新") + name, + oldPO, + a, + user); + }); } // 薪资档案-薪资项目 if (CollectionUtils.isNotEmpty(salaryArchiveItemDelSalaryItemIds)) { @@ -845,7 +865,7 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch } // 薪资档案-薪资项目 if (CollectionUtils.isNotEmpty(salaryArchiveItemSaves)) { - salaryArchiveItemMapper.batchInsert(salaryArchiveItemSaves); + salaryArchiveItemMapper.batchInsert(salaryArchiveItemSaves, user); } // 薪资档案-薪资账套 diff --git a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java index f323b1c9d..19c39e199 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java @@ -5,6 +5,7 @@ import com.engine.core.impl.Service; import com.engine.salary.biz.SalaryArchiveBiz; import com.engine.salary.biz.SalaryArchiveItemBiz; import com.engine.salary.biz.SalaryItemBiz; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryarchive.dto.SalaryItemAdjustRecordListDTO; @@ -25,6 +26,7 @@ import com.engine.salary.service.SalaryEmployeeService; import com.engine.salary.service.TaxAgentService; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.SalaryLoggerUtil; import com.engine.salary.util.excel.ExcelUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.valid.ValidUtil; @@ -247,6 +249,20 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi // 构建更新PO SalaryArchiveItemPO updateSalaryArchiveItemPO = buildUpdateSalaryArchiveItemPO(salaryArchiveItemSaveParam, salaryArchiveItems, salaryItemIds, salaryArchiveItem); salaryArchiveItemMapper.updateIgnoreNull(updateSalaryArchiveItemPO); + + // 查询更新后的po + SalaryArchiveItemPO saiNew = salaryArchiveItemMapper.getById(updateSalaryArchiveItemPO.getId()); + // 记录操作日志 + String name = SalaryI18nUtil.getI18nLabel(0, "编辑调薪记录"); + SalaryLoggerUtil.recordUpdateSingleLog(SalaryElogConfig.salaryArchiveItemAdjustLoggerTemplate, + saiNew.getId(), + name + ":" + saiNew.getId(), + name, + name + ":" + saiNew.getId(), + salaryArchiveItem, + saiNew, + user + ); } return StringUtils.EMPTY; } @@ -447,7 +463,7 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi salaryArchiveItemMapper.deleteBatchIds(effectiveSalaryItemDels); } if (CollectionUtils.isNotEmpty(salaryArchiveItemNews)) { - salaryArchiveItemMapper.batchInsert(salaryArchiveItemNews); + salaryArchiveItemMapper.batchInsert(salaryArchiveItemNews, user); } return StringUtils.EMPTY; @@ -565,6 +581,15 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi salaryArchiveItem.setDeleteType(1); // 删除未生效数据 salaryArchiveItemMapper.updateById(salaryArchiveItem); + // 记录日志 + String operateName = SalaryI18nUtil.getI18nLabel(0, "删除调薪记录"); + SalaryLoggerUtil.recordDeleteSingleLog(SalaryElogConfig.salaryArchiveItemAdjustLoggerTemplate, + salaryArchiveItem.getId(), + operateName + ":" + salaryArchiveItem.getId(), + operateName, + operateName, + salaryArchiveItem, + user); // } else { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98299, "该薪资项目已生效不可删除")); // } diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index e4d2fe9eb..e102293cb 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -5,8 +5,11 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.*; import com.engine.salary.common.LocalDateRange; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.constant.SalaryItemConstant; +import com.engine.salary.elog.entity.dto.LoggerContext; +import com.engine.salary.entity.datacollection.AddUpSituation; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryarchive.bo.SalaryArchiveBO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; @@ -21,6 +24,7 @@ import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeDTO; import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; import com.engine.salary.entity.taxagent.po.TaxAgentEmpChangePO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.datacollection.UseEmployeeTypeEnum; import com.engine.salary.enums.salaryarchive.*; @@ -39,6 +43,7 @@ import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.excel.ExcelParseHelper; import com.engine.salary.util.excel.ExcelSupport; @@ -48,7 +53,6 @@ import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.engine.salary.util.db.IdGenerator; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.time.DateUtils; @@ -321,7 +325,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe } // 落库处理薪资项目 if (CollectionUtils.isNotEmpty(changeData.getSalaryArchiveItemAddTodos())) { - salaryArchiveItemMapper.batchInsert(changeData.getSalaryArchiveItemAddTodos()); + salaryArchiveItemMapper.batchInsert(changeData.getSalaryArchiveItemAddTodos(), user); } // 删除增量数据 if (CollectionUtils.isNotEmpty(changeData.getChangeIds())) { @@ -586,6 +590,17 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe // 3.表数据 // return ExcelUtil.genWorkbookV2(rows, sheetName); + + // 记录日志 + String statusStr = StringUtils.join(queryParam.getRunStatusList().stream().map(status -> SalaryArchiveStatusEnum.parseByValue(status).getDefaultLabel()).collect(Collectors.toList()), ","); + String name = SalaryI18nUtil.getI18nLabel(0, "导出"); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "薪资档案 ") + statusStr); + loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); + loggerContext.setOperateTypeName(name); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "薪资档案") + "-" + name); + loggerContext.setUser(user); + SalaryElogConfig.salaryArchiveLoggerTemplate.write(loggerContext); return ExcelUtilPlus.genWorkbookV2(rows, sheetName); } @@ -685,7 +700,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe }); // 落库处理薪资档案项目数据 if (CollectionUtils.isNotEmpty(salaryArchiveItemAddTodos)) { - salaryArchiveItemMapper.batchInsert(salaryArchiveItemAddTodos); + salaryArchiveItemMapper.batchInsert(salaryArchiveItemAddTodos, user); } if (CollectionUtils.isNotEmpty(salaryArchiveItemDelTodoIds)) { salaryArchiveItemMapper.deleteBatchIds(salaryArchiveItemDelTodoIds); @@ -724,9 +739,49 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe // List salaryArchiveSobSaveList = SalaryArchiveBO.buildSalaryArchiveSob(salaryArchive.getId(), salarySobIds, LocalDateTime.now()); // this.salaryArchiveSobService.saveBatchBySalaryArchiveIdsAndSaves(Collections.singletonList(salaryArchive.getId()), salaryArchiveSobSaveList, currentTenantKey); + // 记录日志 + List newList = Collections.singletonList(this.getById(salaryArchive.getId())); + String operatedesc = SalaryI18nUtil.getI18nLabel(0, "发薪设置"); + recordLog(oldList, newList, operatedesc); + return StringUtils.EMPTY; } + /** + * 记录日志 + * + * @param oldSalaryArchiveList + * @param newSalaryArchiveList + * @param operatedesc + */ + private void recordLog(List oldSalaryArchiveList, List newSalaryArchiveList, String operatedesc) { + if (CollectionUtils.isEmpty(oldSalaryArchiveList) || CollectionUtils.isEmpty(oldSalaryArchiveList)) { + return; + } + List updateEmpIds = newSalaryArchiveList.stream().map(SalaryArchivePO::getEmployeeId).distinct().collect(Collectors.toList()); + List employeeList = getSalaryEmployeeService(user).listByIds(updateEmpIds); + Map empMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId, DataCollectionEmployee::getUsername); + + + // 获取所有个税扣缴义务人 + Collection taxAgents = getTaxAgentService(user).listAll(); + Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getId, TaxAgentPO::getName); + String bar = "-"; + oldSalaryArchiveList.forEach(e -> { + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(e.getId())); + loggerContext.setTargetName(Optional.ofNullable(empMap.get(e.getEmployeeId())).orElse(StringUtils.EMPTY) + bar + Optional.ofNullable(taxAgentMap.get(e.getTaxAgentId())).orElse(StringUtils.EMPTY)); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(operatedesc); + loggerContext.setOperatedesc(operatedesc); + loggerContext.setOldValues(e); + Optional optionalNew = newSalaryArchiveList.stream().filter(n -> n.getId().equals(e.getId())).findFirst(); + loggerContext.setNewValues(optionalNew.orElse(null)); + SalaryElogConfig.salaryArchiveLoggerTemplate.write(loggerContext); + }); + } + @Override public List dimissionSets() { @@ -955,7 +1010,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe this.salaryArchiveMapper.batchInsert(salaryArchiveAddList); } if (CollectionUtils.isNotEmpty(salaryArchiveItemAddList)) { - this.salaryArchiveItemMapper.batchInsert(salaryArchiveItemAddList); + this.salaryArchiveItemMapper.batchInsert(salaryArchiveItemAddList, user); } log.info("处理历史数据结束==============="); } @@ -1076,6 +1131,10 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe } // 从待定薪到停薪 getSalaryArchiveMapper().deletePendingTodo(ids); + // 记录日志 + List newList = getSalaryArchiveMapper().listSome(SalaryArchivePO.builder().ids(ids).build()); + String operatedesc = SalaryI18nUtil.getI18nLabel(0, "删除待办"); + recordLog(oldList, newList, operatedesc); return StringUtils.EMPTY; } @@ -1106,6 +1165,11 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe List> partition = Lists.partition((List) ids, 1000); partition.forEach(getSalaryArchiveMapper()::gotoFixed); + // 记录日志 + List newList = getSalaryArchiveMapper().listSome(SalaryArchivePO.builder().ids(ids).build()); + String operateDesc = SalaryI18nUtil.getI18nLabel(0, "设为发薪员工"); + recordLog(salaryArchiveList, newList, operateDesc); + // 获取所有可被引用的薪资项目 List salaryItemIds = getSalaryArchiveItemService(user).getCanAdjustSalaryItems().stream().map(SalaryItemPO::getId).collect(Collectors.toList()); List currentEffectiveItemList = getSalaryArchiveItemService(user).getCurrentEffectiveItemListIngoreValue(ids, salaryItemIds) @@ -1170,6 +1234,11 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe // 从待停薪到停薪 getSalaryArchiveMapper().gotoStop(ids); + // 记录日志 + List newList = getSalaryArchiveMapper().listSome(SalaryArchivePO.builder().ids(ids).build()); + String operatedesc = SalaryI18nUtil.getI18nLabel(0, "停薪"); + recordLog(oldList, newList, operatedesc); + Map resultMap = new HashMap<>(2); String resultMsg = SalaryI18nUtil.getI18nLabel(94620, "操作成功"); String resultType = "success"; @@ -1241,7 +1310,13 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe } // 删除最后发薪日期,设置状态为发薪 if (CollectionUtils.isNotEmpty(list)) { - getSalaryArchiveMapper().deleteSuspendTodo(list.stream().map(SalaryArchiveListDTO::getId).collect(Collectors.toList())); + List salaryArchiveIds = list.stream().map(SalaryArchiveListDTO::getId).collect(Collectors.toList()); + getSalaryArchiveMapper().deleteSuspendTodo(salaryArchiveIds); + // 记录日志 + List oldList = getSalaryArchiveMapper().listSome(SalaryArchivePO.builder().ids(salaryArchiveIds).build()); + List newList = getSalaryArchiveMapper().listSome(SalaryArchivePO.builder().ids(ids).build()); + String operatedesc = SalaryI18nUtil.getI18nLabel(0, "删除待办"); + recordLog(oldList, newList, operatedesc); } return StringUtils.EMPTY; } @@ -1275,6 +1350,11 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe // 从停薪到定薪 getSalaryArchiveMapper().gotoFixedFromStop(ids); + // 记录日志 + List newList = getSalaryArchiveMapper().listSome(SalaryArchivePO.builder().ids(ids).build()); + String operatedesc = SalaryI18nUtil.getI18nLabel(0, "取消停薪"); + recordLog(oldList, newList, operatedesc); + return StringUtils.EMPTY; } diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index 0cda15391..4789efd76 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -8,7 +8,9 @@ import com.engine.core.impl.Service; import com.engine.salary.biz.SalarySendBiz; import com.engine.salary.biz.SalarySendInfoBiz; import com.engine.salary.cache.SalaryCacheKey; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.HrmSalaryPayrollConf; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.progress.ProgressDTO; import com.engine.salary.entity.salaryBill.bo.SalaryBillBO; @@ -24,6 +26,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.salarybill.*; import com.engine.salary.enums.salarysend.SalarySendGrantTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -758,6 +761,19 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService salarySendNew.setLastSendTime(new Date()); mapper.updateById(salarySendNew); + + // 记录日志 + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setTargetId(String.valueOf(salarySend.getId())); + loggerContext.setTargetName(SalaryDateUtil.getFormatYearMonth(salarySend.getSalaryMonth()) + "-" + (salarySob == null ? "" : salarySob.getName())); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0,"工资单发放")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0,"工资单发放")); + loggerContext.setOldValues(salarySend); + loggerContext.setNewValues(salarySendNew); + loggerContext.setOperator(user.getUID() + StringUtils.EMPTY); + loggerContext.setOperatorName(Objects.isNull(user) ? StringUtils.EMPTY : user.getUsername()); + SalaryElogConfig.salarySendLoggerTemplate.write(loggerContext); } // /** diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index e18e8569a..ca9160cdd 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -191,7 +191,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService // } @Override - public void save(SalaryItemSaveParam saveParam) { + public SalaryItemPO save(SalaryItemSaveParam saveParam) { // 名称不能和已有的自定义薪资项目重名 List salaryItemPOS = listByName(saveParam.getName()); if (CollectionUtils.isNotEmpty(salaryItemPOS)) { @@ -204,16 +204,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService } SalaryItemPO salaryItemPO = SalaryItemBO.convert2SalaryItemPO(saveParam, (long) user.getUID()); salaryItemBiz.insert(salaryItemPO); - // 记录日志 - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId(String.valueOf(salaryItemPO.getId())); - loggerContext.setTargetName(salaryItemPO.getName()); - loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新建薪资项目")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新建薪资项目") + ": " + salaryItemPO.getName()); - loggerContext.setNewValues(salaryItemPO); - SalaryElogConfig.salaryItemLoggerTemplate.write(loggerContext); + return salaryItemPO; } @Override @@ -222,7 +213,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService } @Override - public void update(SalaryItemSaveParam saveParam) { + public SalaryItemPO update(SalaryItemSaveParam saveParam) { // 查询薪资项目,判断薪资项目是否存在 SalaryItemPO salaryItemPO = getById(saveParam.getId()); if (Objects.isNull(salaryItemPO)) { @@ -286,18 +277,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService } } - - // 记录日志 - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId(String.valueOf(newSalaryItemPO.getId())); - loggerContext.setTargetName(newSalaryItemPO.getName()); - loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "编辑薪资项目")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "编辑薪资项目") + ": " + newSalaryItemPO.getName()); - loggerContext.setOldValues(salaryItemPO); - loggerContext.setNewValues(newSalaryItemPO); - SalaryElogConfig.salaryItemLoggerTemplate.write(loggerContext); + return salaryItemPO; } private void changeName(SalaryItemPO salaryItemPO, String oldName, String newName, String itemPrefix, String fieldNamePrefix) { @@ -351,18 +331,36 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService // 删除薪资项目 ids = SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getId); salaryItemBiz.deleteByIds(ids); + Integer useInEmployeeSalary = salaryItemPOS.get(0).getUseInEmployeeSalary(); // 记录删除日志 - salaryItemPOS.forEach(salaryItemPO -> { - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId(String.valueOf(salaryItemPO.getId())); - loggerContext.setTargetName(salaryItemPO.getName()); - loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除薪资项目")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除薪资项目") + ": " + salaryItemPO.getName()); - loggerContext.setOldValues(salaryItemPO); - SalaryElogConfig.salaryItemLoggerTemplate.write(loggerContext); - }); + if (useInEmployeeSalary == 0) { + // 薪资项目 + salaryItemPOS.forEach(salaryItemPO -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(salaryItemPO.getId())); + loggerContext.setTargetName(salaryItemPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除薪资项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除薪资项目") + ": " + salaryItemPO.getName()); + loggerContext.setOldValues(salaryItemPO); + SalaryElogConfig.salaryItemLoggerTemplate.write(loggerContext); + }); + } else { + // 字段管理 + salaryItemPOS.forEach(salaryItemPO -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(salaryItemPO.getId())); + loggerContext.setTargetName(salaryItemPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除字段")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除字段") + ": " + salaryItemPO.getName()); + loggerContext.setOldValues(salaryItemPO); + SalaryElogConfig.salaryArchiveFieldLoggerTemplate.write(loggerContext); + }); + } + } diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 19603ddd4..1189589c8 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -11,10 +11,13 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.SalarySendBiz; import com.engine.salary.biz.SalarySendInfoBiz; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryArchiveConstant; import com.engine.salary.constant.SalaryItemConstant; import com.engine.salary.constant.SalaryTemplateSalaryItemSetGroupConstant; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; +import com.engine.salary.entity.datacollection.AddUpSituation; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryBill.bo.SalaryBillBO; import com.engine.salary.entity.salaryBill.dto.*; @@ -35,6 +38,7 @@ import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveFieldTypeEnum; import com.engine.salary.enums.salarybill.BillConfimStatusEnum; @@ -57,11 +61,11 @@ import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.excel.ExcelUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.Lists; -import com.engine.salary.util.db.IdGenerator; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; @@ -660,6 +664,17 @@ public class SalarySendServiceImpl extends Service implements SalarySendService map.put("showFeedback", "0"); } + + // 记录查看日志 + String targetName = taxAgentPO.getName() + "-" + SalaryDateUtil.getFormatYearMonth(salarySendInfo.getSalaryMonth()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(salarySendInfo.getId())); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(OperateTypeEnum.READ.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "查看工资单") + ": " + targetName + " " + salaryInfoId); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "查看工资单") + ": " + targetName); + SalaryElogConfig.mySalaryBillLoggerTemplate.write(loggerContext); return map; } @@ -1409,14 +1424,20 @@ public class SalarySendServiceImpl extends Service implements SalarySendService salarySendNew.setSendTotal(sendTotal); mapper.updateById(salarySendNew); + SalarySobPO salarySob = getSalarySobService(user).getById(salarySend.getSalarySobId()); // 记录日志 -// SalaryLoggerUtil.recordUpdateSingleLog(salarySendLoggerTemplate, -// salarySend.getId(), -// salarySend.getSalaryMonth() + "-" + (CollectionUtils.isNotEmpty(salarySobs) ? salarySobs.get(0).getName() : ""), -// SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 100521, "撤回工资单发放"), -// SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 100521, "撤回工资单发放"), -// salarySend, -// salarySendNew); + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setTargetId(String.valueOf(salarySend.getId())); + loggerContext.setTargetName(SalaryDateUtil.getFormatYearMonth(salarySend.getSalaryMonth()) + "-" + (salarySob == null ? "" : salarySob.getName())); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "撤回工资单")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "撤回工资单")); + loggerContext.setOldValues(salarySend); + loggerContext.setNewValues(salarySendNew); + loggerContext.setOperator(user.getUID() + StringUtils.EMPTY); + loggerContext.setOperatorName(Objects.isNull(user) ? StringUtils.EMPTY : user.getUsername()); + SalaryElogConfig.salarySendLoggerTemplate.write(loggerContext); + SalarySendGrantParam grantParam = SalarySendGrantParam.builder().ids(param.getIds()).salarySendId(param.getSalarySendId()).build(); @@ -1487,6 +1508,19 @@ public class SalarySendServiceImpl extends Service implements SalarySendService row.add(dto.getSendStatus()); rows.add(row); } + + // 记录操作日志 + SalarySendPO salarySend = mapper.getById(queryParam.getSalarySendId()); + SalarySobPO salarySob = getSalarySobService(user).getById(salarySend.getSalarySobId()); + + String name = SalaryDateUtil.getFormatYearMonth(salarySend.getSalaryMonth()) + "-" + (salarySob == null ? "" : salarySob.getName()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetName(name); + loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); + loggerContext.setOperateTypeName(name); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "工资单发放") + ":" + name + SalaryI18nUtil.getI18nLabel(0, " 导出")); + loggerContext.setUser(user); + SalaryElogConfig.salarySendLoggerTemplate.write(loggerContext); return ExcelUtil.genWorkbookV2(rows, sheetName); } @@ -1551,6 +1585,19 @@ public class SalarySendServiceImpl extends Service implements SalarySendService rows.add(row); } + + // 记录日志 + SalarySobPO salarySob = getSalarySobService(user).getById(salaryAcctRecord.getSalarySobId()); + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setTargetId(String.valueOf(salarySend.getId())); + loggerContext.setTargetName(SalaryDateUtil.getFormatYearMonth(salarySend.getSalaryMonth()) + "-" + (salarySob == null ? "" : salarySob.getName())); + loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0,"导出工资单")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0,"导出工资单")); + loggerContext.setOperator(user.getUID() + StringUtils.EMPTY); + loggerContext.setOperatorName(Objects.isNull(user) ? StringUtils.EMPTY : user.getUsername()); + SalaryElogConfig.salarySendLoggerTemplate.write(loggerContext); + return ExcelUtil.genWorkbookV2(rows, sheetName); } diff --git a/src/com/engine/salary/service/impl/SalarySobAdjustRuleServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobAdjustRuleServiceImpl.java index c068f377d..160151c16 100644 --- a/src/com/engine/salary/service/impl/SalarySobAdjustRuleServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobAdjustRuleServiceImpl.java @@ -79,11 +79,12 @@ public class SalarySobAdjustRuleServiceImpl extends Service implements SalarySob } // 记录日志 LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(salarySobPO.getId())); loggerContext.setTargetName(salarySobPO.getName()); loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98614, "保存调薪计薪规则")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98614, "保存调薪计薪规则")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "保存调薪计薪规则")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "保存调薪计薪规则")); SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); } diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index 722149a40..07dbcfe61 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -3,7 +3,9 @@ package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.*; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryitem.bo.SysSalaryItemBO; @@ -18,6 +20,7 @@ import com.engine.salary.entity.taxagent.param.TaxAgentRangeQueryParam; import com.engine.salary.entity.taxagent.po.TaxAgentAdminPO; import com.engine.salary.entity.taxagent.po.TaxAgentExtRangePO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.SalarySystemTypeEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.enums.salarysob.SalaryEmployeeStatusEnum; @@ -30,13 +33,13 @@ import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.RuntimeTypeEnum; import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.Lists; -import com.engine.salary.util.db.IdGenerator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; @@ -281,15 +284,16 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { SalarySobPO salarySobPO = SalarySobBO.convert2PO(saveParam, (long) user.getUID()); // 保存薪资账套 salarySobMapper.insert(salarySobPO); - //todo 记录日志 -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId(String.valueOf(salarySobPO.getId())); -// loggerContext.setTargetName(salarySobPO.getName()); -// loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98404, "新建薪资账套")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98404, "新建薪资账套") + ": " + salarySobPO.getName()); -// loggerContext.setOldValues(salarySobPO); -// salarySobLoggerTemplate.write(loggerContext); + // 记录日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(salarySobPO.getId())); + loggerContext.setTargetName(salarySobPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新建薪资账套")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新建薪资账套") + ": " + salarySobPO.getName()); + loggerContext.setNewValues(salarySobPO); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); // 新建薪资账套时,保存默认的员工信息字段 saveDefaultEmpField(salarySobPO); // 新建薪资账套时,保存默认的薪资项目 @@ -531,15 +535,16 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { .setUpdateTime(new Date()); salarySobMapper.updateById(newSalarySobPO); // 记录日志 -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId(String.valueOf(newSalarySobPO.getId())); -// loggerContext.setTargetName(newSalarySobPO.getName()); -// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98526, "编辑薪资账套基础设置")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98526, "编辑薪资账套基础设置")); -// loggerContext.setOldValues(salarySobPO); -// loggerContext.setNewValues(newSalarySobPO); -// salarySobLoggerTemplate.write(loggerContext); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(newSalarySobPO.getId())); + loggerContext.setTargetName(newSalarySobPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "编辑薪资账套基础设置")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "编辑薪资账套基础设置")); + loggerContext.setOldValues(salarySobPO); + loggerContext.setNewValues(newSalarySobPO); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); // 返回薪资账套的主键id return salarySobPO.getId(); } @@ -548,6 +553,8 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { public void updateDisable(SalarySobDisableParam disableParam) { // 查询薪资账套 SalarySobPO salarySobPO = getById(disableParam.getId()); + SalarySobPO oldSalarySobPO = new SalarySobPO(); + BeanUtils.copyProperties(salarySobPO, oldSalarySobPO); if (Objects.isNull(salarySobPO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98379, "参数错误,薪资账套不存在或者已被删除")); } @@ -555,16 +562,19 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { salarySobPO.setDisable(disableParam.getDisable()); salarySobPO.setUpdateTime(new Date()); salarySobMapper.updateById(salarySobPO); - // todo 记录日志 -// String operateTypeName = Objects.equals(disableParam.getDisable(), NumberUtils.INTEGER_ONE) ? -// SalaryI18nUtil.getI18nLabel(98591, "禁用薪资账套") : SalaryI18nUtil.getI18nLabel(98592, "启用薪资账套"); -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId("" + salarySobPO.getId()); -// loggerContext.setTargetName(salarySobPO.getName()); -// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); -// loggerContext.setOperateTypeName(operateTypeName); -// loggerContext.setOperatedesc(operateTypeName + ": " + salarySobPO.getName()); -// salarySobLoggerTemplate.write(loggerContext); + // 记录日志 + String operateTypeName = Objects.equals(disableParam.getDisable(), NumberUtils.INTEGER_ONE) ? + SalaryI18nUtil.getI18nLabel(0, "禁用薪资账套") : SalaryI18nUtil.getI18nLabel(0, "启用薪资账套"); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salarySobPO.getId()); + loggerContext.setTargetName(salarySobPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(operateTypeName); + loggerContext.setOperatedesc(operateTypeName + ": " + salarySobPO.getName()); + loggerContext.setOldValues(oldSalarySobPO); + loggerContext.setNewValues(salarySobPO); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); } @Override @@ -619,16 +629,18 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { getSalarySobBackItemService(user).deleteBySalarySobIds(ids); // 删除薪资账套的校验规则 getSalarySobCheckRuleService(user).deleteBySalarySobIds(ids); -// // 记录日志 -// salarySobPOS.forEach(salarySobPO -> { -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId("" + salarySobPO.getId()); -// loggerContext.setTargetName(salarySobPO.getName()); -// loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98535, "删除薪资账套")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98535, "删除薪资账套")); -// salarySobLoggerTemplate.write(loggerContext); -// }); + // 记录日志 + salarySobPOS.forEach(salarySobPO -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salarySobPO.getId()); + loggerContext.setTargetName(salarySobPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除薪资账套")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除薪资账套")); + loggerContext.setOldValues(salarySobPO); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); + }); } @Override @@ -771,14 +783,15 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { if (CollectionUtils.isNotEmpty(result.getSalarySobCheckRules())) { getSalarySobCheckRuleService(user).batchSave(result.getSalarySobCheckRules()); } -// // 记录日志 -// LoggerContext loggerContext = new LoggerContext<>(); -// loggerContext.setTargetId("" + result.getSalarySob().getId()); -// loggerContext.setTargetName(result.getSalarySob().getName()); -// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98570, "复制薪资账套")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98570, "复制薪资账套") + ": " + salarySobPO.getName()); -// salarySobLoggerTemplate.write(loggerContext); + // 记录日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + result.getSalarySob().getId()); + loggerContext.setTargetName(result.getSalarySob().getName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98570, "复制薪资账套")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98570, "复制薪资账套") + ": " + salarySobPO.getName()); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); } @Override diff --git a/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java index dd9d49cd9..c32877e01 100644 --- a/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java @@ -8,6 +8,8 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.SalarySobBiz; import com.engine.salary.biz.SalaryTemplateBiz; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.entity.salaryBill.bo.SalaryTemplateBO; import com.engine.salary.entity.salaryBill.dto.SalaryTemplateListDTO; import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemListDTO; @@ -18,22 +20,26 @@ import com.engine.salary.entity.salaryBill.param.SalaryTemplateQueryParam; import com.engine.salary.entity.salaryBill.param.SalaryTemplateSaveParam; import com.engine.salary.entity.salaryBill.po.SalaryBillItemNamePO; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; -import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemGroupDTO; -import com.engine.salary.entity.salarysob.po.*; +import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO; +import com.engine.salary.entity.salarysob.po.SalarySobItemHidePO; +import com.engine.salary.entity.salarysob.po.SalarySobItemPO; +import com.engine.salary.entity.salarysob.po.SalarySobPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.salarybill.SalaryTemplateWhetherEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salarysob.SalarySobEmpFieldMapper; +import com.engine.salary.report.entity.po.SalaryStatisticsReportPO; import com.engine.salary.service.*; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.mzlion.core.utils.BeanUtils; -import com.engine.salary.util.db.IdGenerator; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; @@ -116,14 +122,14 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate mapper.updateById(salaryTemplateNew); // 记录日志 -// SalaryLoggerUtil.recordUpdateSingleLog(salaryTemplateLoggerTemplate, -// salaryTemplate.getId(), -// salaryTemplateNew.getName(), -// SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 100534, "设为默认使用"), -// SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 100534, "设为默认使用"), -// salaryTemplate, -// salaryTemplateNew); - + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(salaryTemplateNew.getId())); + loggerContext.setTargetName(salaryTemplateNew.getName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "设为默认使用")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "设为默认使用")); + SalaryElogConfig.salaryTemplateLoggerTemplate.write(loggerContext); return ""; } @@ -167,12 +173,15 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate saveParam.getSalaryBillItemNameSetting().stream().forEach(set -> set.setSalaryTemplateId(salaryTemplate.getId())); getSalaryBillItemNameService(user).saveItemShowName(saveParam.getSalaryBillItemNameSetting()); // 记录日志 -// SalaryLoggerUtil.recordAddSingleLog(salaryTemplateLoggerTemplate, -// salaryTemplate.getId(), -// salaryTemplate.getName(), -// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100538, "新增工资单模板"), -// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100538, "新增工资单模板"), -// salaryTemplate); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(salaryTemplate.getId())); + loggerContext.setTargetName(salaryTemplate.getName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "新增工资单模板")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "新增工资单模板")); + loggerContext.setNewValues(salaryTemplate); + SalaryElogConfig.salaryTemplateLoggerTemplate.write(loggerContext); return ""; } @@ -255,13 +264,16 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate getSalaryBillItemNameService(user).deleteByIds(needDeleteIds); // 记录日志 -// SalaryLoggerUtil.recordUpdateSingleLog(salaryTemplateLoggerTemplate, -// salaryTemplate.getId(), -// salaryTemplateNew.getName(), -// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100539, "编辑工资单模板"), -// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100539, "编辑工资单模板"), -// salaryTemplate, -// salaryTemplateNew); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(salaryTemplateNew.getId())); + loggerContext.setTargetName(salaryTemplateNew.getName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "编辑工资单模板")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "编辑工资单模板")); + loggerContext.setOldValues(salaryTemplate); + loggerContext.setNewValues(salaryTemplateNew); + SalaryElogConfig.salaryTemplateLoggerTemplate.write(loggerContext); return ""; } @@ -369,12 +381,15 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate getSalaryBillItemNameService(user).batchInsert(needInsertList); } // 记录日志 -// SalaryLoggerUtil.recordAddSingleLog(salaryTemplateLoggerTemplate, -// salaryTemplateNew.getId(), -// salaryTemplateNew.getName(), -// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100541, "复制工资单模板"), -// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100541, "复制工资单模板"), -// salaryTemplateNew); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(salaryTemplateNew.getId())); + loggerContext.setTargetName(salaryTemplateNew.getName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "复制工资单模板")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "复制工资单模板")); + loggerContext.setNewValues(salaryTemplateNew); + SalaryElogConfig.salaryTemplateLoggerTemplate.write(loggerContext); return ""; } @@ -393,12 +408,16 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate // 删除工资单重命名表 getSalaryBillItemNameService(user).deleteByTemplateIds(ids); // 记录日志 -// salaryTemplates.forEach(e -> SalaryLoggerUtil.recordDeleteSingleLog(salaryTemplateLoggerTemplate, -// e.getId(), -// e.getName(), -// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100542, "删除工资单模板"), -// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100542, "删除工资单模板")+":" + e.getName(), -// e)); + salaryTemplates.stream().forEach(template -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(template.getId())); + loggerContext.setTargetName(template.getName() + ":" + template.getId()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "删除工资单模板")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "删除工资单模板")); + SalaryElogConfig.salaryTemplateLoggerTemplate.write(loggerContext); + }); return ""; } diff --git a/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java b/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java index 3ac80b609..4585b6fb0 100644 --- a/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java @@ -4,7 +4,10 @@ import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.SpecialAddDeductionBiz; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; +import com.engine.salary.entity.datacollection.AddUpDeduction; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.dto.SpecialAddDeductionListDTO; import com.engine.salary.entity.datacollection.dto.SpecialAddDeductionRecordDTO; @@ -16,6 +19,7 @@ import com.engine.salary.entity.datacollection.po.SpecialAddDeductionPO; import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeTaxAgentDTO; import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.datacollection.SpecialAddDeductionMapper; @@ -330,7 +334,7 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd } //入库 - SpecialAddDeductionBiz.handleImportData(eligibleData); + SpecialAddDeductionBiz.handleImportData(eligibleData, user); apidatas.put("successCount", successCount); apidatas.put("errorCount", errorCount); @@ -365,6 +369,16 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd //获取操作按钮资源 List> rowList = getExcelRowList(param, isTemplate); + // 记录操作日志 + String name = SalaryI18nUtil.getI18nLabel(0, "导出"); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "专项附加扣除")); + loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); + loggerContext.setOperateTypeName(name); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "专项附加扣除") + "-" + name); + loggerContext.setUser(user); + SalaryElogConfig.addUpDeductionLoggerTemplate.write(loggerContext); + //获取excel return ExcelUtil.genWorkbook(rowList, "专项附加免税扣除"); } @@ -509,6 +523,21 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd .build(); updateList.add(build); SpecialAddDeductionBiz.batchUpdate(updateList); + + // 记录操作日志 + SpecialAddDeductionPO newValue = SpecialAddDeductionBiz.getById(build.getId()); + String name = SalaryI18nUtil.getI18nLabel(0, "编辑"); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(newValue.getId().toString()); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "专项附加扣除") + "-" + newValue.getId()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(name); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "专项附加扣除") + "-" + SalaryI18nUtil + .getI18nLabel(0, "编辑")); + loggerContext.setOldValues(byId); + loggerContext.setNewValues(newValue); + loggerContext.setUser(user); + SalaryElogConfig.specialAddDeductionLoggerTemplate.write(loggerContext); } @Override @@ -568,7 +597,7 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd //fixme 分权判断 insertData.add(po); //入库 - SpecialAddDeductionBiz.handleImportData(insertData); + SpecialAddDeductionBiz.handleImportData(insertData, user); } @Override @@ -580,6 +609,7 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd SpecialAddDeductionBiz SpecialAddDeductionBiz = new SpecialAddDeductionBiz(); List deleteIds = deleteParam.getIds(); List deleteList = new ArrayList<>(); + List oldSpecialAddDeductionList = new ArrayList<>(); for (Long id : deleteIds) { SpecialAddDeductionPO byId = SpecialAddDeductionBiz.getById(id); if (byId == null) { @@ -595,6 +625,22 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd deleteList.add(byId.getId()); } SpecialAddDeductionBiz.batchDeleteByIds(deleteList); + + // 记录操作日志 + if (CollectionUtils.isNotEmpty(oldSpecialAddDeductionList)) { + oldSpecialAddDeductionList.stream().forEach( e -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(e.getId().toString()); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "专项附加扣除") + "-" + e.getId()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "专项附加扣除") + "-" + SalaryI18nUtil + .getI18nLabel(0, "删除")); + loggerContext.setOldValues(e); + loggerContext.setUser(user); + SalaryElogConfig.addUpDeductionLoggerTemplate.write(loggerContext); + }); + } } @Override @@ -622,6 +668,20 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd List list = specialAddDeductionBiz.listByTaxAgentIds(taxAgentIds); List deleteIds = list.stream().map(SpecialAddDeductionPO::getId).collect(Collectors.toList()); specialAddDeductionBiz.batchDeleteByIds(deleteIds); + + // 记录操作日志 + Collection finalTaxAgentIds =taxAgentIds; + List taxAgentNames = taxAgentList.stream().filter(t -> finalTaxAgentIds.contains(t.getTaxAgentId())) + .map(TaxAgentManageRangeEmployeeDTO::getTaxAgentName).collect(Collectors.toList()); + String name = StringUtils.join(taxAgentNames, ","); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetName(name); + loggerContext.setOperateType(OperateTypeEnum.CLEAR.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "一键清空")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "专项附加扣除") + "-" + SalaryI18nUtil + .getI18nLabel(0, "一键清空:") + name); + loggerContext.setUser(user); + SalaryElogConfig.specialAddDeductionLoggerTemplate.write(loggerContext); } @Override diff --git a/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java index caf96a0f9..b62c49006 100644 --- a/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java @@ -4,6 +4,7 @@ import com.api.formmode.mybatis.util.SqlProxyHandle; import com.cloudstore.dev.api.util.Util_DataCache; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.hrm.DeptInfo; @@ -30,6 +31,8 @@ import com.engine.salary.service.*; import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.SalaryLoggerUtil; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.excel.ExcelParseHelper; import com.engine.salary.util.page.PageInfo; @@ -38,13 +41,13 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.weaver.util.threadPool.ThreadPoolUtil; import com.weaver.util.threadPool.entity.LocalRunnable; -import com.engine.salary.util.db.IdGenerator; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.math.NumberUtils; import org.apache.poi.util.IOUtils; +import org.springframework.beans.BeanUtils; import weaver.file.ImageFileManager; import weaver.general.Util; import weaver.hrm.User; @@ -316,6 +319,12 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM List taxAgentManageAllRanges = listByTaxAgentId(saveParam.getTaxAgentId()); List taxAgentManageRanges = taxAgentManageAllRanges.stream().filter(f -> f.getIncludeType().equals(saveParam.getIncludeType())).collect(Collectors.toList()); + List oldManageList = new ArrayList<>(); + taxAgentManageRanges.stream().forEach(p -> { + TaxAgentManageRangePO target = new TaxAgentManageRangePO(); + BeanUtils.copyProperties(p, target); + oldManageList.add(target); + }); // 处理一下本次的保存参数(如果原来添加过对应的人员(/部门/岗位),那么本次不需要新增,只需要更新) TaxAgentBO.Result result = TaxAgentBO.handleTaxAgentRange(taxAgentManageRanges, saveParam, taxAgent.getId(), (long) user.getUID(), false); @@ -331,10 +340,37 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM /* 检查当前个税扣缴义务人的所有人员范围与所有分管理员的管理范围===========================end */ if (CollectionUtils.isNotEmpty(result.getNeedInsertTaxAgentManageRanges())) { - result.getNeedInsertTaxAgentManageRanges().forEach(range -> getTaxAgentManageRangeMapper().insertIgnoreNull(range)); + result.getNeedInsertTaxAgentManageRanges().forEach(range -> { + getTaxAgentManageRangeMapper().insertIgnoreNull(range); + // 记录操作日志 + String name = taxAgent.getName() + "_" + TargetTypeEnum.parseByValue(range.getTargetType()).getDefaultLabel() + "_" + range.getTaxAgentId(); + SalaryLoggerUtil.recordAddSingleLog(SalaryElogConfig.taxAgentLoggerTemplate, + range.getId(), + name, + SalaryI18nUtil.getI18nLabel(0, "新增人员范围"), + SalaryI18nUtil.getI18nLabel(0, "新增人员范围") + name, + range, + user); + }); + } if (CollectionUtils.isNotEmpty(result.getNeedUpdateTaxAgentManageRanges())) { - result.getNeedUpdateTaxAgentManageRanges().forEach(range -> getTaxAgentManageRangeMapper().updateIgnoreNull(range)); + Map oldMap = SalaryEntityUtil.convert2Map(oldManageList, TaxAgentManageRangePO::getId); + result.getNeedUpdateTaxAgentManageRanges().forEach(range -> { + getTaxAgentManageRangeMapper().updateIgnoreNull(range); + // 记录操作日志 + TaxAgentManageRangePO oldPO = oldMap.getOrDefault(range.getId(), TaxAgentManageRangePO.builder().build()); + String name = taxAgent.getName() + "_" + TargetTypeEnum.parseByValue(range.getTargetType()).getDefaultLabel() + "_" + range.getTaxAgentId(); + SalaryLoggerUtil.recordUpdateSingleLog(SalaryElogConfig.taxAgentLoggerTemplate, + range.getId(), + name, + SalaryI18nUtil.getI18nLabel(0, "更新人员范围"), + SalaryI18nUtil.getI18nLabel(0, "更新人员范围") + name, + oldPO, + range, + user); + }); + } /* 同步本地人员范围的关联人员=========================== */ @@ -527,19 +563,21 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM @Override public void deleteByIds(Collection ids) { // 查询管理范围 - List taxAgentManageRanges = listByIds(ids); - if (CollectionUtils.isEmpty(taxAgentManageRanges)) { + List taxAgentManageRangeList = listByIds(ids); + + if (CollectionUtils.isEmpty(taxAgentManageRangeList)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98604, "数据不存在或已被删除")); } - List taxAgentIds = taxAgentManageRanges.stream().map(TaxAgentManageRangePO::getTaxAgentId).distinct().collect(Collectors.toList()); + List taxAgentIds = taxAgentManageRangeList.stream().map(TaxAgentManageRangePO::getTaxAgentId).distinct().collect(Collectors.toList()); if (taxAgentIds.size() > 1) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(110159, "一次只能删一个个税个税扣缴义务人的范围")); } - taxAgentManageRanges = this.listByTaxAgentIds(taxAgentIds); + List taxAgentManageRanges = this.listByTaxAgentIds(taxAgentIds); List allManageRanges = taxAgentManageRanges.stream().filter(f -> !ids.contains(f.getId())).collect(Collectors.toList()); List allRanges = allManageRanges.stream().filter(f -> f.getRangeType().equals(TaxAgentRangeTypeEnum.TAXAGENT.getValue())).collect(Collectors.toList()); // List allSubAdminRanges = allManageRanges.stream().filter(f -> f.getRangeType().equals(TaxAgentRangeTypeEnum.SUBADMIN.getValue())).collect(Collectors.toList()); Long taxAgentId = taxAgentIds.get(0); + TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(taxAgentId); List salaryEmployees = getSalaryEmployeeService(user).listAll(UseEmployeeTypeEnum.ORG); List allSalaryEmployees = this.getManageRangeSalaryEmployees(taxAgentId, allRanges, salaryEmployees); @@ -554,9 +592,21 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM // 删除管理范围 getTaxAgentManageRangeMapper().deleteByIds(ids); + // 记录操作日志 + taxAgentManageRangeList.stream().forEach(range -> { + String name = taxAgentPO.getName() + "_" + TargetTypeEnum.parseByValue(range.getTargetType()).getDefaultLabel() + "_" + range.getTaxAgentId(); + SalaryLoggerUtil.recordDeleteSingleLog(SalaryElogConfig.taxAgentLoggerTemplate, + range.getId(), + name, + SalaryI18nUtil.getI18nLabel(0, "删除人员范围"), + SalaryI18nUtil.getI18nLabel(0, "删除人员范围") + name, + range, + user); + }); + + /** 同步本地人员范围的关联人员=========================== */ syncLocalEmp(taxAgentId, allSalaryEmployees, false); - // 记录日志 todo } @Override @@ -858,6 +908,13 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM // 查询已有的管理范围 List taxAgentManageAllRanges = listByTaxAgentId(taxAgentId); List taxAgentManageRanges = taxAgentManageAllRanges.stream().filter(f -> f.getIncludeType().equals(taxAgentRangeSaveParam.getIncludeType())).collect(Collectors.toList()); + List oldManageList = new ArrayList<>(); + taxAgentManageRanges.stream().forEach(p -> { + TaxAgentManageRangePO target = new TaxAgentManageRangePO(); + BeanUtils.copyProperties(p, target); + oldManageList.add(target); + }); + // 处理一下本次的保存参数(如果原来添加过对应的人员(/部门/岗位),那么本次不需要新增,只需要更新) TaxAgentBO.Result result = TaxAgentBO.handleTaxAgentRange(taxAgentManageRanges, taxAgentRangeSaveParam, taxAgent.getId(), (long) user.getUID(), true); @@ -873,10 +930,36 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM /* 检查当前个税扣缴义务人的所有人员范围与所有分管理员的管理范围===========================end */ if (CollectionUtils.isNotEmpty(result.getNeedInsertTaxAgentManageRanges())) { - result.getNeedInsertTaxAgentManageRanges().forEach(range -> getTaxAgentManageRangeMapper().insertIgnoreNull(range)); + result.getNeedInsertTaxAgentManageRanges().forEach(range -> { + getTaxAgentManageRangeMapper().insertIgnoreNull(range); + // 记录操作日志 + String name = taxAgent.getName() + "_" + TargetTypeEnum.parseByValue(range.getTargetType()).getDefaultLabel() + "_" + range.getTargetId(); + SalaryLoggerUtil.recordAddSingleLog(SalaryElogConfig.taxAgentLoggerTemplate, + range.getId(), + name, + SalaryI18nUtil.getI18nLabel(0, "新增人员范围"), + SalaryI18nUtil.getI18nLabel(0, "新增人员范围") + name, + range, + user); + }); } if (CollectionUtils.isNotEmpty(result.getNeedUpdateTaxAgentManageRanges())) { - result.getNeedUpdateTaxAgentManageRanges().forEach(range -> getTaxAgentManageRangeMapper().updateIgnoreNull(range)); + Map oldMap = SalaryEntityUtil.convert2Map(oldManageList, TaxAgentManageRangePO::getId); + result.getNeedUpdateTaxAgentManageRanges().forEach(range -> { + getTaxAgentManageRangeMapper().updateIgnoreNull(range); + // 记录操作日志 + TaxAgentManageRangePO oldPO = oldMap.getOrDefault(range.getId(), TaxAgentManageRangePO.builder().build()); + String name = taxAgent.getName() + "_" + TargetTypeEnum.parseByValue(range.getTargetType()).getDefaultLabel() + "_" + range.getTargetId(); + SalaryLoggerUtil.recordUpdateSingleLog(SalaryElogConfig.taxAgentLoggerTemplate, + range.getId(), + name, + SalaryI18nUtil.getI18nLabel(0, "更新人员范围"), + SalaryI18nUtil.getI18nLabel(0, "更新人员范围") + name, + oldPO, + range, + user); + }); + } /* 同步本地人员范围的关联人员=========================== */ diff --git a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java index 63636d810..1ec8469ab 100644 --- a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java @@ -4,7 +4,9 @@ import com.engine.common.service.HrmCommonService; import com.engine.common.service.impl.HrmCommonServiceImpl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryAuthConstant; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.entity.datacollection.AddUpDeduction; import com.engine.salary.entity.datacollection.AddUpSituation; import com.engine.salary.entity.datacollection.DataCollectionEmployee; @@ -24,6 +26,7 @@ import com.engine.salary.entity.taxagent.param.TaxAgentAdminChangeCheckParam; import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam; import com.engine.salary.entity.taxagent.param.TaxAgentSaveParam; import com.engine.salary.entity.taxagent.po.*; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.datacollection.UseEmployeeTypeEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salarysob.SalaryEmployeeStatusEnum; @@ -347,13 +350,15 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { getTaxAgentAdminService(user).batchInsert(taxAgent.getId(), saveParam.getAdminUserIds()); } // 记录日志 -// SalaryLoggerUtil.recordAddSingleLog(taxAgentLoggerTemplate, -// taxAgent.getId(), -// taxAgent.getName(), -// SalaryI18nUtil.getI18nLabel( 93766, "新增个税扣缴义务人"), -// SalaryI18nUtil.getI18nLabel( 93766, "新增个税扣缴义务人"), -// taxAgent); - + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(taxAgent.getId().toString()); + loggerContext.setTargetName(taxAgent.getName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增个税扣缴义务人")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增个税扣缴义务人")); + loggerContext.setNewValues(taxAgent); + SalaryElogConfig.taxAgentLoggerTemplate.write(loggerContext); return StringUtils.EMPTY + taxAgent.getId(); } @@ -402,13 +407,16 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { getTaxAgentAdminService(user).batchInsert(saveParam.getId(), saveParam.getAdminUserIds()); } // 记录日志 -// SalaryLoggerUtil.recordUpdateSingleLog(taxAgentLoggerTemplate, -// taxAgent.getId(), -// taxAgentNew.getName(), -// SalaryI18nUtil.getI18nLabel(93767, "编辑个税扣缴义务人"), -// SalaryI18nUtil.getI18nLabel(93767, "编辑个税扣缴义务人"), -// taxAgent, -// taxAgentNew); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(taxAgentNew.getId().toString()); + loggerContext.setTargetName(taxAgentNew.getName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "编辑个税扣缴义务人")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "编辑个税扣缴义务人")); + loggerContext.setOldValues(taxAgent); + loggerContext.setNewValues(taxAgentNew); + SalaryElogConfig.taxAgentLoggerTemplate.write(loggerContext); return StringUtils.EMPTY; } @@ -460,13 +468,18 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { getTaxAgentMapper().deleteByIds(ids); // 记录日志 -// taxAgents.forEach(e -> SalaryLoggerUtil.recordDeleteSingleLog(taxAgentLoggerTemplate, -// e.getId(), -// e.getName(), -// SalaryI18nUtil.getI18nLabel(100546, "删除个税扣缴义务人"), -// SalaryI18nUtil.getI18nLabel(100546, "删除个税扣缴义务人") + ":" + e.getName(), -// e)); + taxAgents.forEach(e ->{ + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(e.getId().toString()); + loggerContext.setTargetName(e.getName()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除个税扣缴义务人")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除个税扣缴义务人")); + loggerContext.setOldValues(e); + SalaryElogConfig.taxAgentLoggerTemplate.write(loggerContext); + }); return StringUtils.EMPTY; } diff --git a/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java index c9eb8796a..7528418f8 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java @@ -2,17 +2,23 @@ package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationAnnualListDTO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationLaborListDTO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationWageListDTO; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationDetailListQueryParam; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.mapper.taxdeclaration.TaxDeclarationDetailMapper; +import com.engine.salary.service.TaxAgentService; import com.engine.salary.service.TaxDeclarationDetailService; import com.engine.salary.service.TaxDeclarationExcelService; import com.engine.salary.service.TaxDeclarationService; import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.excel.ExcelUtil; @@ -47,6 +53,10 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar return ServiceUtil.getService(TaxDeclarationServiceImpl.class, user); } + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + @Override @@ -128,6 +138,20 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar } } } + + // 查询个税扣缴义务人名称 + String bar = "_"; + TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(taxDeclarationPO.getTaxAgentId()); + String targetName = SalaryDateUtil.getFormatYearMonth(taxDeclarationPO.getSalaryMonth()) + bar + taxAgentPO.getName() + bar + IncomeCategoryEnum.parseByValue(taxDeclarationPO.getIncomeCategory()).getDefaultLabel(); + // 记录日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(taxDeclarationId.toString()); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "导出个税申报表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "导出个税申报表")); + SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); return ExcelUtil.genWorkbookV2(rows, sheetName); } diff --git a/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java index 3835fe2f7..e44a9e345 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java @@ -3,6 +3,8 @@ package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.common.LocalDateRange; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; @@ -12,7 +14,9 @@ import com.engine.salary.entity.taxdeclaration.bo.TaxDeclarationBO; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; +import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.datacollection.AddUpSituationMapper; import com.engine.salary.mapper.salaryacct.SalaryAcctRecordMapper; @@ -259,6 +263,20 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration log.info("salary TaxDeclaration step4 AcctRecordStatus save {}", salaryAcctRecordIds.size()); } getSalaryAcctRecordService(user).updateStatusByIds(salaryAcctRecordIds, SalaryAcctRecordStatusEnum.DECLARED); + + // 记录日志 + result.getNeedInsertTaxDeclarations().stream().forEach(declare -> { + String taxAgentName = taxAgentNameMap.getOrDefault(declare.getTaxAgentId(), ""); + String targetName = SalaryDateUtil.getFormatYearMonth(declare.getSalaryMonth()) + " " + taxAgentName + " " + IncomeCategoryEnum.parseByValue(declare.getIncomeCategory()).getDefaultLabel(); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(declare.getId().toString()); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "生成个税申报表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "生成个税申报表")); + SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); + }); } @Override @@ -334,5 +352,19 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration if(CollectionUtils.isNotEmpty(salaryAcctRecordIds)){ getSalaryAcctRecordService(user).updateStatusByIds(salaryAcctRecordIds,SalaryAcctRecordStatusEnum.ARCHIVED); } + + // 查询个税扣缴义务人名称 + String bar = "_"; + TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(po.getTaxAgentId()); + String targetName = SalaryDateUtil.getFormatYearMonth(po.getSalaryMonth()) + bar + taxAgentPO.getName() + bar + IncomeCategoryEnum.parseByValue(po.getIncomeCategory()).getDefaultLabel(); + // 记录日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(taxDeclarationId.toString()); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "撤回个税申报表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "撤回个税申报表")); + SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); } } diff --git a/src/com/engine/salary/util/SalaryLoggerUtil.java b/src/com/engine/salary/util/SalaryLoggerUtil.java index e6d49943f..6d35bd851 100644 --- a/src/com/engine/salary/util/SalaryLoggerUtil.java +++ b/src/com/engine/salary/util/SalaryLoggerUtil.java @@ -4,6 +4,7 @@ package com.engine.salary.util; import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.elog.util.LoggerTemplate; import com.engine.salary.enums.OperateTypeEnum; +import weaver.hrm.User; /** * 操作日志工具类 @@ -23,9 +24,10 @@ public class SalaryLoggerUtil { * @param operateTypeName * @param operatedesc * @param newValues + * @param user */ - public static void recordAddSingleLog(LoggerTemplate loggerTemplate, Long targetId, String targetName, String operateTypeName, String operatedesc, Object newValues) { - recoreSingleLog(loggerTemplate, targetId, targetName, OperateTypeEnum.ADD.getValue(), operateTypeName, operatedesc, null, newValues); + public static void recordAddSingleLog(LoggerTemplate loggerTemplate, Long targetId, String targetName, String operateTypeName, String operatedesc, Object newValues, User user) { + recoreSingleLog(loggerTemplate, targetId, targetName, OperateTypeEnum.ADD.getValue(), operateTypeName, operatedesc, null, newValues, user); } /** @@ -37,9 +39,10 @@ public class SalaryLoggerUtil { * @param operatedesc * @param oldValues * @param newValues + * @param user */ - public static void recordUpdateSingleLog(LoggerTemplate loggerTemplate, Long targetId, String targetName, String operateTypeName, String operatedesc, Object oldValues, Object newValues) { - recoreSingleLog(loggerTemplate, targetId, targetName, OperateTypeEnum.UPDATE.getValue(), operateTypeName, operatedesc, oldValues, newValues); + public static void recordUpdateSingleLog(LoggerTemplate loggerTemplate, Long targetId, String targetName, String operateTypeName, String operatedesc, Object oldValues, Object newValues, User user) { + recoreSingleLog(loggerTemplate, targetId, targetName, OperateTypeEnum.UPDATE.getValue(), operateTypeName, operatedesc, oldValues, newValues, user); } /** @@ -50,9 +53,23 @@ public class SalaryLoggerUtil { * @param operateTypeName * @param operatedesc * @param oldValues + * @param user */ - public static void recordDeleteSingleLog(LoggerTemplate loggerTemplate, Long targetId, String targetName, String operateTypeName, String operatedesc, Object oldValues) { - recoreSingleLog(loggerTemplate, targetId, targetName, OperateTypeEnum.DELETE.getValue(), operateTypeName, operatedesc, oldValues, null); + public static void recordDeleteSingleLog(LoggerTemplate loggerTemplate, Long targetId, String targetName, String operateTypeName, String operatedesc, Object oldValues, User user) { + recoreSingleLog(loggerTemplate, targetId, targetName, OperateTypeEnum.DELETE.getValue(), operateTypeName, operatedesc, oldValues, null, user); + } + + /** + * 记录单个对象导出操作日志 + * @param loggerTemplate + * @param targetId + * @param targetName + * @param operateTypeName + * @param operatedesc + * @param user + */ + public static void recordExportSingleLog(LoggerTemplate loggerTemplate, Long targetId, String targetName, String operateTypeName, String operatedesc, User user) { + recoreSingleLog(loggerTemplate, targetId, targetName, OperateTypeEnum.EXCEL_EXPORT.getValue(), operateTypeName, operatedesc, null, null, user); } /** @@ -66,8 +83,9 @@ public class SalaryLoggerUtil { * @param oldValues * @param newValues */ - private static void recoreSingleLog(LoggerTemplate loggerTemplate, Long targetId, String targetName, String operateType, String operateTypeName, String operatedesc, Object oldValues, Object newValues) { + private static void recoreSingleLog(LoggerTemplate loggerTemplate, Long targetId, String targetName, String operateType, String operateTypeName, String operatedesc, Object oldValues, Object newValues, User user) { LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(targetId)); loggerContext.setTargetName(targetName); loggerContext.setOperateType(operateType); diff --git a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java index 42faf9c9b..8b1ff0f6e 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java @@ -2,6 +2,8 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveItemFormDTO; import com.engine.salary.entity.salaryarchive.dto.SalaryItemAdjustRecordListDTO; @@ -14,6 +16,7 @@ import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.datacollection.UseEmployeeTypeEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveItemAdjustReasonEnum; @@ -318,6 +321,16 @@ public class SalaryArchiveItemWrapper extends Service implements SalaryArchiveIt m.setAdjustReason(SalaryArchiveItemAdjustReasonEnum.getDefaultLabelByValue(m.getAdjustReason())); }); + // 记录查看日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + // TODO 我的调薪记录setTargetId + // loggerContext.setTargetId(); + loggerContext.setTargetName("我的调薪记录"); + loggerContext.setOperateType(OperateTypeEnum.READ.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "查看调薪记录")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "查看调薪记录")); + SalaryElogConfig.myAdjustRecordLoggerTemplate.write(loggerContext); return list; } diff --git a/src/com/engine/salary/wrapper/SalaryFieldWrapper.java b/src/com/engine/salary/wrapper/SalaryFieldWrapper.java index 38f53c4fb..5edef7f36 100644 --- a/src/com/engine/salary/wrapper/SalaryFieldWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryFieldWrapper.java @@ -2,6 +2,8 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; import com.engine.salary.entity.salaryitem.dto.SalaryFieldListDTO; @@ -11,10 +13,7 @@ import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO; -import com.engine.salary.enums.SalaryOnOffEnum; -import com.engine.salary.enums.SalaryRoundingModeEnum; -import com.engine.salary.enums.SalarySystemTypeEnum; -import com.engine.salary.enums.SalaryValueTypeEnum; +import com.engine.salary.enums.*; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.SalaryFormulaService; @@ -173,7 +172,17 @@ public class SalaryFieldWrapper extends Service { ValidUtil.doValidator(saveParam); validParam(saveParam); - getSalaryItemService(user).save(saveParam); + SalaryItemPO salaryItemPO = getSalaryItemService(user).save(saveParam); + // 记录日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(salaryItemPO.getId())); + loggerContext.setTargetName(salaryItemPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新建字段")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新建字段") + ": " + salaryItemPO.getName()); + loggerContext.setNewValues(salaryItemPO); + SalaryElogConfig.salaryArchiveFieldLoggerTemplate.write(loggerContext); } private void validParam(SalaryItemSaveParam saveParam) { @@ -205,7 +214,20 @@ public class SalaryFieldWrapper extends Service { ValidUtil.doValidator(saveParam, RuntimeTypeEnum.UPDATE); validParam(saveParam); - getSalaryItemService(user).update(saveParam); + SalaryItemPO salaryItemPO = getSalaryItemService(user).update(saveParam); + + // 记录日志 + SalaryItemPO newSalaryItemPO = getSalaryItemService(user).getById(salaryItemPO.getId()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(newSalaryItemPO.getId())); + loggerContext.setTargetName(newSalaryItemPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "编辑字段")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "编辑字段") + ": " + newSalaryItemPO.getName()); + loggerContext.setOldValues(salaryItemPO); + loggerContext.setNewValues(newSalaryItemPO); + SalaryElogConfig.salaryArchiveFieldLoggerTemplate.write(loggerContext); } /** diff --git a/src/com/engine/salary/wrapper/SalaryItemWrapper.java b/src/com/engine/salary/wrapper/SalaryItemWrapper.java index 1cf40c5da..12e333331 100644 --- a/src/com/engine/salary/wrapper/SalaryItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryItemWrapper.java @@ -3,6 +3,8 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.component.WeaFormOption; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; import com.engine.salary.entity.salaryitem.bo.SysSalaryItemBO; @@ -221,7 +223,17 @@ public class SalaryItemWrapper extends Service { ValidUtil.doValidator(saveParam); validParam(saveParam); - getSalaryItemService(user).save(saveParam); + SalaryItemPO salaryItemPO = getSalaryItemService(user).save(saveParam); + // 记录日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(salaryItemPO.getId())); + loggerContext.setTargetName(salaryItemPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新建薪资项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新建薪资项目") + ": " + salaryItemPO.getName()); + loggerContext.setNewValues(salaryItemPO); + SalaryElogConfig.salaryItemLoggerTemplate.write(loggerContext); } private void validParam(SalaryItemSaveParam saveParam) { @@ -250,7 +262,20 @@ public class SalaryItemWrapper extends Service { public void update(SalaryItemSaveParam saveParam) { ValidUtil.doValidator(saveParam, RuntimeTypeEnum.UPDATE); validParam(saveParam); - getSalaryItemService(user).update(saveParam); + SalaryItemPO salaryItemPO = getSalaryItemService(user).update(saveParam); + + // 记录日志 + SalaryItemPO newSalaryItemPO = getSalaryItemService(user).getById(salaryItemPO.getId()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(newSalaryItemPO.getId())); + loggerContext.setTargetName(newSalaryItemPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "编辑字段")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "编辑字段") + ": " + newSalaryItemPO.getName()); + loggerContext.setOldValues(salaryItemPO); + loggerContext.setNewValues(newSalaryItemPO); + SalaryElogConfig.salaryItemLoggerTemplate.write(loggerContext); } /** From 75dd4235afe6d2558b9f821d6ecebdac61c02e27 Mon Sep 17 00:00:00 2001 From: sy Date: Thu, 22 Feb 2024 09:33:35 +0800 Subject: [PATCH 34/64] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E5=8F=B0=E8=B4=A6=EF=BC=8C=E8=A1=A5=E7=BC=B4?= =?UTF-8?q?=E3=80=81=E8=A1=A5=E5=B7=AE=E3=80=81=E9=80=80=E5=B7=AE=E9=A1=B5?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD=E6=93=8D=E4=BD=9C=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/SIAccountService.java | 4 +- .../service/impl/SIAccountServiceImpl.java | 152 ++++++++++++------ .../service/impl/SIArchivesServiceImpl.java | 12 ++ .../service/impl/SIBalanceServiceImpl.java | 43 ++++- .../impl/SICompensationServiceImpl.java | 8 +- .../service/impl/SIExportServiceImpl.java | 22 ++- .../service/impl/SIRecessionServiceImpl.java | 36 ++++- .../service/impl/SISchemeServiceImpl.java | 6 +- .../salary/web/SIAccountController.java | 4 +- 9 files changed, 220 insertions(+), 67 deletions(-) diff --git a/src/com/engine/salary/service/SIAccountService.java b/src/com/engine/salary/service/SIAccountService.java index 6a496845b..2dcb63401 100644 --- a/src/com/engine/salary/service/SIAccountService.java +++ b/src/com/engine/salary/service/SIAccountService.java @@ -123,9 +123,9 @@ public interface SIAccountService { /** * 删除补缴人员 - * @param supplementAccountBaseParams + * @param param */ - void deleteSummplementaryAccount(List supplementAccountBaseParams); + void deleteSupplementaryAccount(SaveCommonAccountParam param); /** * 台账归档 diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index a112960ab..9fb0a7314 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -670,11 +670,11 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } @Override - public void deleteSummplementaryAccount(List supplementAccountBaseParams) { + public void deleteSupplementaryAccount(SaveCommonAccountParam param) { // Long employeeId = (long) user.getUID(); // String currentUserName = user.getLastname(); // getSiAccountBiz(user).deleteSupplementaryAccount(supplementAccountBaseParams, employeeId, currentUserName); - siDeleteSupplementaryAccount(supplementAccountBaseParams); + siDeleteSupplementaryAccount(param); } @Override @@ -1854,6 +1854,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (updateInsuranceAccountDetailList.size() > 0) { refreshBillBatch(updateInsuranceAccountDetailList.get(0).getPaymentOrganization(), updateInsuranceAccountDetailList.get(0).getBillMonth()); //记录操作日志 + PaymentStatusEnum targetEnum = SalaryEnumUtil.enumMatchByValue(updateInsuranceAccountDetailList.get(0).getPaymentStatus(), PaymentStatusEnum.values(), PaymentStatusEnum.class); encryptUtil.decryptList(updateInsuranceAccountDetailList, InsuranceAccountDetailPO.class); InsuranceAccountBatchPO targetPO = getInsuranceAccountBatchMapper().getByBillMonth(updateInsuranceAccountDetailList.get(0).getBillMonth(), updateInsuranceAccountDetailList.get(0).getPaymentOrganization()); TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); @@ -1862,8 +1863,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { loggerContext.setTargetId(String.valueOf(targetPO.getId())); loggerContext.setTargetName(taxAgentInfo.getName() + "-" + targetPO.getBillMonth()); loggerContext.setOperateType(OperateTypeEnum.EXCEL_IMPORT.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-导入")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-导入") + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-导入") + + SalaryI18nUtil.getI18nLabel(targetEnum.getLabelId(), targetEnum.getDefaultLabel())); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-导入" + + SalaryI18nUtil.getI18nLabel(targetEnum.getLabelId(), targetEnum.getDefaultLabel())) + ":" + taxAgentInfo.getName() + "-" + targetPO.getBillMonth()); updateInsuranceAccountDetailList.forEach(loggerContext::setNewValues); SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); @@ -3315,6 +3318,9 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } encryptUtil.decrypt(insuranceAccountDetailPO, InsuranceAccountDetailPO.class); + InsuranceAccountDetailPO oldTargetPO = new InsuranceAccountDetailPO(); + BeanUtils.copyProperties(insuranceAccountDetailPO, oldTargetPO); + accountSocialByData(insuranceAccountDetailPO, param); accountFundByData(insuranceAccountDetailPO, param); accountOtherByData(insuranceAccountDetailPO, param); @@ -3326,6 +3332,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //刷新_bill_batch表中的统计信息 refreshBillBatch(insuranceAccountDetailPO.getPaymentOrganization(), insuranceAccountDetailPO.getBillMonth()); //记录操作日志 + PaymentStatusEnum targetEnum = SalaryEnumUtil.enumMatchByValue(insuranceAccountDetailPO.getPaymentStatus(), PaymentStatusEnum.values(), PaymentStatusEnum.class); encryptUtil.decrypt(insuranceAccountDetailPO, InsuranceAccountDetailPO.class); InsuranceAccountBatchPO targetPO = getInsuranceAccountBatchMapper().getByBillMonth(insuranceAccountDetailPO.getBillMonth(), insuranceAccountDetailPO.getPaymentOrganization()); TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); @@ -3334,10 +3341,13 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(targetPO.getId())); loggerContext.setTargetName(taxAgentInfo.getName() + "-" + targetPO.getBillMonth() + "-" + empInfo.getUsername()); - loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-编辑")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-编辑") + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-编辑") + + SalaryI18nUtil.getI18nLabel(targetEnum.getLabelId(), targetEnum.getDefaultLabel())); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-编辑" + + SalaryI18nUtil.getI18nLabel(targetEnum.getLabelId(), targetEnum.getDefaultLabel())) + ":" + taxAgentInfo.getName() + "-" + targetPO.getBillMonth() + "-" + empInfo.getUsername()); + loggerContext.setOldValues(oldTargetPO); loggerContext.setNewValues(insuranceAccountDetailPO); SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); } @@ -3747,6 +3757,20 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // getSiAccountBiz(user).updateByEmployeeIdAndBillMonth(po); updateByEmployeeIdAndBillMonth(po); } + //记录操作日志 + encryptUtil.decryptList(updateInsuranceAccountDetailList, InsuranceAccountDetailPO.class); + InsuranceAccountBatchPO targetPO = getInsuranceAccountBatchMapper().getByBillMonth(billMonth, paymentOrganization); + TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + targetPO.getBillMonth()); + loggerContext.setOperateType(OperateTypeEnum.EXCEL_IMPORT.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-补差导入更新")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-补差导入更新") + + ":" + taxAgentInfo.getName() + "-" + targetPO.getBillMonth()); + updateInsuranceAccountDetailList.forEach(loggerContext::setNewValues); + SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); } if (createInsuranceAccountDetailList.size() > 0) { paymentOrganization = createInsuranceAccountDetailList.get(0).getPaymentOrganization(); @@ -3759,6 +3783,20 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //新增 List> createPartition = Lists.partition((List) createInsuranceAccountDetailList, 20); createPartition.forEach(getInsuranceAccountDetailMapper()::batchSaveAccountDetails); + //记录操作日志 + encryptUtil.decryptList(createInsuranceAccountDetailList, InsuranceAccountDetailPO.class); + InsuranceAccountBatchPO targetPO = getInsuranceAccountBatchMapper().getByBillMonth(billMonth, paymentOrganization); + TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + targetPO.getBillMonth()); + loggerContext.setOperateType(OperateTypeEnum.EXCEL_IMPORT.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-补差导入新增")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-补差导入新增") + + ":" + taxAgentInfo.getName() + "-" + targetPO.getBillMonth()); + createInsuranceAccountDetailList.forEach(loggerContext::setNewValues); + SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); } //刷新bill_batch表中统计信息 @@ -5414,19 +5452,19 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { insuranceAccountBatchPO.setOtherPay(otherSum.toPlainString()); encryptUtil.encrypt(insuranceAccountBatchPO, InsuranceAccountBatchPO.class); getInsuranceAccountBatchMapper().updateById(insuranceAccountBatchPO); - //记录操作日志 - encryptUtil.decrypt(insuranceAccountBatchPO, InsuranceAccountBatchPO.class); - TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(insuranceAccountBatchPO.getPaymentOrganization()); - LoggerContext loggerContext = new LoggerContext(); - loggerContext.setUser(user); - loggerContext.setTargetId(String.valueOf(insuranceAccountBatchPO.getId())); - loggerContext.setTargetName(taxAgentInfo.getName() + "-" + insuranceAccountBatchPO.getBillMonth()); - loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "更新福利台账")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "更新福利台账") - + ":" + taxAgentInfo.getName() + "-" + insuranceAccountBatchPO.getBillMonth()); - loggerContext.setNewValues(insuranceAccountBatchPO); - SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); +// //记录操作日志 +// encryptUtil.decrypt(insuranceAccountBatchPO, InsuranceAccountBatchPO.class); +// TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(insuranceAccountBatchPO.getPaymentOrganization()); +// LoggerContext loggerContext = new LoggerContext(); +// loggerContext.setUser(user); +// loggerContext.setTargetId(String.valueOf(insuranceAccountBatchPO.getId())); +// loggerContext.setTargetName(taxAgentInfo.getName() + "-" + insuranceAccountBatchPO.getBillMonth()); +// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); +// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "更新福利台账")); +// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "更新福利台账") +// + ":" + taxAgentInfo.getName() + "-" + insuranceAccountBatchPO.getBillMonth()); +// loggerContext.setNewValues(insuranceAccountBatchPO); +// SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); } public void siFile(String billMonth, Long paymentOrganization) { @@ -6035,48 +6073,66 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // insuranceSchemeContext.setNewValues(item); // siAccountLoggerTemplate.write(insuranceSchemeContext); // }); + //记录操作日志 + encryptUtil.decryptList(pos, InsuranceAccountDetailPO.class); + InsuranceAccountBatchPO targetPO = getInsuranceAccountBatchMapper().getByBillMonth(pos.get(0).getBillMonth(), pos.get(0).getPaymentOrganization()); + TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); + pos.forEach(targetDetailPO -> { + DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetDetailPO.getEmployeeId()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + targetPO.getId()); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + targetPO.getBillMonth() + "-" + empInfo.getUsername()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-新增补缴")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-新增补缴") + + ": " + taxAgentInfo.getName() + "-" + targetPO.getBillMonth() + "-" + empInfo.getUsername()); + loggerContext.setNewValues(targetDetailPO); + SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); + }); } public void siDeleteCommonAccount(SaveCommonAccountParam param) { ValidUtil.doValidator(param); - SalaryAssert.notEmpty(param.getIncludes(), SalaryI18nUtil.getI18nLabel(0, "参数错误")); //根据id批量删除 if (param.getIds().size() > 0) { getInsuranceAccountDetailMapper().batchDelAccountDetailsByIds(param.getIds()); } else { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "请勾选需要删除的数据项!")); } - //记录日志 -// LoggerContext insuranceSchemeContext = new LoggerContext(); -// insuranceSchemeContext.setTargetId(String.join(",", param.getIncludes().stream().map(item -> String.valueOf(item)).collect(Collectors.toList()))); -// insuranceSchemeContext.setTargetName(param.getBillMonth()); -// insuranceSchemeContext.setOperateType(OperateTypeEnum.ADD.getValue()); -// insuranceSchemeContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100462, "新增台账")); -// insuranceSchemeContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100462, "新增台账")); -// insuranceSchemeContext.setNewValues(param); -// siAccountLoggerTemplate.write(insuranceSchemeContext); + //记录操作日志 + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetId(param.getIds().stream().map(String::valueOf).collect(Collectors.joining(","))); + loggerContext.setTargetName(param.getIds().stream().map(String::valueOf).collect(Collectors.joining(","))); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-删除正常缴纳核算记录")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-删除正常缴纳核算记录")); + SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); + updateBatchAccount(AccountParam.builder().billMonth(param.getBillMonth()).paymentOrganization(param.getPaymentOrganization()).build()); } - public void siDeleteSupplementaryAccount(List param) { - SalaryAssert.notEmpty(param, SalaryI18nUtil.getI18nLabel(0, "参数错误")); - boolean valid = param.stream().anyMatch(item -> item.getEmployeeId() == null - || StringUtils.isBlank(item.getSupplementaryMonth()) - || StringUtils.isBlank(item.getBillMonth())); - if (valid) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "参数错误")); + public void siDeleteSupplementaryAccount(SaveCommonAccountParam param) { + ValidUtil.doValidator(param); + //根据id批量删除 + if (param.getIds().size() > 0) { + getInsuranceAccountDetailMapper().batchDelAccountDetailsByIds(param.getIds()); + } else { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "请勾选需要删除的数据项!")); } - getInsuranceAccountDetailMapper().batchDelSupplementDetailsByIds(param); -// param.stream().forEach(item -> { -// LoggerContext insuranceSchemeContext = new LoggerContext(); -// insuranceSchemeContext.setTargetName(item.getBillMonth()); -// insuranceSchemeContext.setOperateType(OperateTypeEnum.DELETE.getValue()); -// insuranceSchemeContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100490, "删除补缴核算记录")); -// insuranceSchemeContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100490, "删除补缴核算记录")); -// insuranceSchemeContext.setNewValues(item); -// siAccountLoggerTemplate.write(insuranceSchemeContext); -// }); - updateBatchAccount(AccountParam.builder().billMonth(param.get(0).getBillMonth()).paymentOrganization(param.get(0).getPaymentOrganization()).build()); + getInsuranceAccountDetailMapper().batchDelAccountDetailsByIds(param.getIds()); + //记录操作日志 + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetId(param.getIds().stream().map(String::valueOf).collect(Collectors.joining(","))); + loggerContext.setTargetName(param.getIds().stream().map(String::valueOf).collect(Collectors.joining(","))); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-删除补缴核算记录")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-删除补缴核算记录")); + SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); + + updateBatchAccount(AccountParam.builder().billMonth(param.getBillMonth()).paymentOrganization(param.getPaymentOrganization()).build()); } public void accountInspect(Collection ids, String billMonth, Long paymentOrganization) { diff --git a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java index a8aaa54c5..ec14fa7f9 100644 --- a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java @@ -2870,6 +2870,7 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService .otherEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherEndTime()) ? param.getOtherEndTime() : null) .employeeId(param.getEmployeeId()) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .createTime(oldOtherInfo.getCreateTime()) .updateTime(new Date()) .nonPayment(param.getNonPayment()) .creator(employeeId) @@ -2969,6 +2970,9 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案-其他福利明细保存")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利档案-其他福利明细保存") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); + if (oldOtherInfoList.size() == 1) { + loggerContext.setOldValues(oldOtherInfoList.get(0)); + } loggerContext.setNewValues(targetDetailPO); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); //生成福利档案基数调整记录数据 @@ -3032,6 +3036,7 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .underTake(param.getUnderTake()) .paymentOrganization(param.getPaymentOrganization()) + .createTime(oldFundInfo.getCreateTime()) .updateTime(new Date()) .welfareType(paramReq.getWelfareType().getValue()) .employeeId(param.getEmployeeId()) @@ -3131,6 +3136,9 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案-公积金明细保存")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利档案-公积金明细保存") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); + if (oldFundInfoList.size() == 1) { + loggerContext.setOldValues(oldFundInfoList.get(0)); + } loggerContext.setNewValues(targetDetailPO); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); //生成福利档案基数调整记录数据 @@ -3197,6 +3205,7 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService .nonPayment(param.getNonPayment()) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .employeeId(param.getEmployeeId()) + .createTime(oldSocialInfo.getCreateTime()) .updateTime(new Date()) .underTake(param.getUnderTake()) .socialAccount(param.getSchemeAccount()) @@ -3297,6 +3306,9 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案-社保明细保存")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利档案-社保明细保存") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); + if (oldSocialInfoList.size() == 1) { + loggerContext.setOldValues(oldSocialInfoList.get(0)); + } loggerContext.setNewValues(targetDetailPO); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); //生成福利档案基数调整记录数据 diff --git a/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java b/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java index 28387d55c..6e746c358 100644 --- a/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java @@ -4,15 +4,20 @@ import com.alibaba.fastjson.JSON; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.siaccount.param.BalanceAccountBaseParam; import com.engine.salary.entity.siaccount.param.EditAccountDetailParam; import com.engine.salary.entity.siaccount.param.InspectAccountParam; +import com.engine.salary.entity.siaccount.po.InsuranceAccountBatchPO; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; import com.engine.salary.entity.siarchives.po.*; import com.engine.salary.entity.sicategory.po.ICategoryPO; import com.engine.salary.entity.sischeme.po.InsuranceSchemeDetailPO; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.siaccount.BillStatusEnum; import com.engine.salary.enums.siaccount.PaymentStatusEnum; import com.engine.salary.enums.siaccount.ResourceFromEnum; @@ -21,6 +26,7 @@ import com.engine.salary.enums.sicategory.IsPaymentEnum; import com.engine.salary.enums.sicategory.PaymentScopeEnum; import com.engine.salary.enums.sicategory.WelfareTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.siaccount.InsuranceAccountBatchMapper; import com.engine.salary.mapper.siaccount.InsuranceAccountDetailMapper; import com.engine.salary.mapper.siarchives.FundSchemeMapper; import com.engine.salary.mapper.siarchives.InsuranceBaseInfoMapper; @@ -28,6 +34,7 @@ import com.engine.salary.mapper.siarchives.OtherSchemeMapper; import com.engine.salary.mapper.siarchives.SocialSchemeMapper; import com.engine.salary.mapper.sicategory.ICategoryMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeDetailMapper; +import com.engine.salary.mapper.taxagent.TaxAgentMapper; import com.engine.salary.service.SIAccountService; import com.engine.salary.service.SIBalanceService; import com.engine.salary.util.SalaryEntityUtil; @@ -87,6 +94,14 @@ public class SIBalanceServiceImpl extends Service implements SIBalanceService { private EncryptUtil encryptUtil = new EncryptUtil(); + private InsuranceAccountBatchMapper getInsuranceAccountBatchMapper() { + return MapperProxyFactory.getProxy(InsuranceAccountBatchMapper.class); + } + + private TaxAgentMapper getTaxAgentMapper() { + return MapperProxyFactory.getProxy(TaxAgentMapper.class); + } + @Override public void del(InspectAccountParam param, Long employeeId) { @@ -98,7 +113,15 @@ public class SIBalanceServiceImpl extends Service implements SIBalanceService { //根据id删除 List> partition = Lists.partition((List) param.getIds(), 100); partition.forEach(getInsuranceAccountDetailMapper()::batchDelAccountDetailsByIds); - + //记录操作日志 + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetId(param.getIds().stream().map(String::valueOf).collect(Collectors.joining(","))); + loggerContext.setTargetName(param.getIds().stream().map(String::valueOf).collect(Collectors.joining(","))); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-删除补差核算记录")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-删除补差核算记录")); + SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); //刷新bill_batch表中统计信息 getSIAccountService(user).refreshBillBatch(param.getPaymentOrganization(), param.getBillMonth()); } @@ -260,14 +283,14 @@ public class SIBalanceServiceImpl extends Service implements SIBalanceService { Long creator = (long) user.getUID(); Long paymentOrganization = param.getPaymentOrganization(); - InsuranceAccountDetailPO banlanceAccountPO = getInsuranceAccountDetailMapper().getOneByBpep(InsuranceAccountDetailPO.builder() + InsuranceAccountDetailPO balanceAccountPO = getInsuranceAccountDetailMapper().getOneByBpep(InsuranceAccountDetailPO.builder() .billMonth(billMonth) .paymentStatus(PaymentStatusEnum.BALANCE.getValue()) .employeeId(employeeId) .paymentOrganization(paymentOrganization) .build()); - if (banlanceAccountPO != null) { + if (balanceAccountPO != null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "补差数据已存在,不可重复新增!")); } @@ -324,6 +347,20 @@ public class SIBalanceServiceImpl extends Service implements SIBalanceService { //刷新bill_batch表中统计信息 getSIAccountService(user).refreshBillBatch(paymentOrganization, billMonth); + //记录操作日志 + encryptUtil.decrypt(insuranceAccountDetailPO, InsuranceAccountDetailPO.class); + InsuranceAccountBatchPO targetPO = getInsuranceAccountBatchMapper().getByBillMonth(billMonth, paymentOrganization); + TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + targetPO.getBillMonth()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-新增补差")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-新增补差") + + ":" + taxAgentInfo.getName() + "-" + targetPO.getBillMonth()); + loggerContext.setNewValues(insuranceAccountDetailPO); + SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); } else { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "补差数据中存在福利档案中未设置的福利项缴纳数值,请检查补差缴纳信息!")); } diff --git a/src/com/engine/salary/service/impl/SICompensationServiceImpl.java b/src/com/engine/salary/service/impl/SICompensationServiceImpl.java index b7521eb82..b83448c67 100644 --- a/src/com/engine/salary/service/impl/SICompensationServiceImpl.java +++ b/src/com/engine/salary/service/impl/SICompensationServiceImpl.java @@ -476,8 +476,8 @@ public class SICompensationServiceImpl extends Service implements SICompensation loggerContext.setTargetId(String.valueOf(targetPO.getId())); loggerContext.setTargetName(taxAgentInfo.getName() + "-" + insuranceAccountDetailPO.getBillMonth() + "-" + empInfo.getUsername()); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账-新增调差")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账-新增调差") + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-新增调差")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-新增调差") + ":" + taxAgentInfo.getName() + "-" + insuranceAccountDetailPO.getBillMonth() + "-" + empInfo.getUsername()); loggerContext.setNewValues(insuranceCompensationPO); SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); @@ -530,8 +530,8 @@ public class SICompensationServiceImpl extends Service implements SICompensation loggerContext.setTargetId(String.valueOf(param.get(0).getPaymentOrganization())); loggerContext.setTargetName(taxAgentInfo.getName()); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账-保存社保调差默认配置")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账-保存社保调差默认配置") + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-保存社保调差默认配置")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-保存社保调差默认配置") + ":" + taxAgentInfo.getName()); configList.forEach(loggerContext::setNewValues); SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); diff --git a/src/com/engine/salary/service/impl/SIExportServiceImpl.java b/src/com/engine/salary/service/impl/SIExportServiceImpl.java index f3432aa33..3ec48edbb 100644 --- a/src/com/engine/salary/service/impl/SIExportServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIExportServiceImpl.java @@ -5,6 +5,8 @@ import com.alibaba.fastjson.TypeReference; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.siaccount.dto.InsuranceAccountViewListDTO; import com.engine.salary.entity.siaccount.param.InsuranceAccountDetailParam; @@ -13,6 +15,7 @@ import com.engine.salary.entity.sicategory.po.ICategoryPO; import com.engine.salary.entity.siexport.param.InsuranceExportParam; import com.engine.salary.entity.siexport.po.AccountExportPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.siaccount.BillStatusEnum; import com.engine.salary.enums.siaccount.PaymentStatusEnum; import com.engine.salary.enums.siaccount.ResourceFromEnum; @@ -149,8 +152,13 @@ public class SIExportServiceImpl extends Service implements SIExportService { rows.add(row); } excelSheetData.addAll(rows); - - + //记录操作日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账-导出总览")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账-导出总览")); + SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); return ExcelUtil.genWorkbookV2(excelSheetData, sheetName); } @@ -248,6 +256,16 @@ public class SIExportServiceImpl extends Service implements SIExportService { } excelSheetData.addAll(rows); + //记录操作日志 + PaymentStatusEnum targetEnum = SalaryEnumUtil.enumMatchByValue(paymentStatus, PaymentStatusEnum.values(), PaymentStatusEnum.class); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-导出") + + SalaryI18nUtil.getI18nLabel(targetEnum.getLabelId(), targetEnum.getDefaultLabel())); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-导出") + + SalaryI18nUtil.getI18nLabel(targetEnum.getLabelId(), targetEnum.getDefaultLabel())); + SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); return ExcelUtilPlus.genWorkbookV2(excelSheetData, sheetName, total); } diff --git a/src/com/engine/salary/service/impl/SIRecessionServiceImpl.java b/src/com/engine/salary/service/impl/SIRecessionServiceImpl.java index e9a446dac..494838d25 100644 --- a/src/com/engine/salary/service/impl/SIRecessionServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIRecessionServiceImpl.java @@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSON; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.config.SalaryElogConfig; +import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.hrm.dto.HrmInfoDTO; import com.engine.salary.entity.hrm.param.HrmQueryParam; @@ -12,6 +14,8 @@ import com.engine.salary.entity.siaccount.param.RecessionParam; import com.engine.salary.entity.siaccount.po.InsuranceAccountBatchPO; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeDTO; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.siaccount.BillStatusEnum; import com.engine.salary.enums.siaccount.PaymentStatusEnum; import com.engine.salary.enums.siaccount.ProjectTypeEnum; @@ -20,6 +24,7 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.datacollection.EmployMapper; import com.engine.salary.mapper.siaccount.InsuranceAccountBatchMapper; import com.engine.salary.mapper.siaccount.InsuranceAccountDetailMapper; +import com.engine.salary.mapper.taxagent.TaxAgentMapper; import com.engine.salary.service.SIAccountService; import com.engine.salary.service.SIRecessionService; import com.engine.salary.service.TaxAgentService; @@ -65,6 +70,11 @@ public class SIRecessionServiceImpl extends Service implements SIRecessionServic private InsuranceAccountBatchMapper getInsuranceAccountBatchMapper() { return MapperProxyFactory.getProxy(InsuranceAccountBatchMapper.class); } + + private TaxAgentMapper getTaxAgentMapper() { + return MapperProxyFactory.getProxy(TaxAgentMapper.class); + } + @Override public void save(RecessionParam param, Long employeeId) { @@ -112,13 +122,25 @@ public class SIRecessionServiceImpl extends Service implements SIRecessionServic //删除已有退差记录 finalRecessionDetails.forEach(getInsuranceAccountDetailMapper()::deleteRecessionData); - //入库新数据 List> partition = Lists.partition((List) finalRecessionDetails, 20); partition.forEach(getInsuranceAccountDetailMapper()::batchSaveAccountDetails); - //刷新bill_batch表中统计信息 getSIAccountService(user).refreshBillBatch(Long.valueOf(param.getPaymentOrganization()), param.getBillMonth()); + //记录操作日志 + encryptUtil.decryptList(finalRecessionDetails, InsuranceAccountDetailPO.class); + InsuranceAccountBatchPO targetPO = getInsuranceAccountBatchMapper().getByBillMonth(param.getBillMonth(), Long.valueOf(param.getPaymentOrganization())); + TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(targetPO.getId())); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + targetPO.getBillMonth()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-新增退差")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-新增退差") + + ":" + taxAgentInfo.getName() + "-" + targetPO.getBillMonth()); + finalRecessionDetails.forEach(loggerContext::setNewValues); + SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); } } @@ -137,7 +159,15 @@ public class SIRecessionServiceImpl extends Service implements SIRecessionServic //根据id删除 List> partition = Lists.partition((List) ids, 100); partition.forEach(getInsuranceAccountDetailMapper()::batchDelAccountDetailsByIds); - + //记录操作日志 + LoggerContext loggerContext = new LoggerContext(); + loggerContext.setUser(user); + loggerContext.setTargetId(ids.stream().map(String::valueOf).collect(Collectors.joining(","))); + loggerContext.setTargetName(ids.stream().map(String::valueOf).collect(Collectors.joining(","))); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-删除退差核算记录")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账明细表-删除退差核算记录")); + SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); //刷新bill_batch表中统计信息 getSIAccountService(user).refreshBillBatch(refreshTargetPO.getPaymentOrganization(), refreshTargetPO.getBillMonth()); } diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 491850815..5f921e0ba 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -632,7 +632,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { rows.add(row); } //记录操作日志 - LoggerContext loggerContext = new LoggerContext<>(); + LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案导出")); @@ -2511,7 +2511,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { getInsuranceSchemeMapper().update(insuranceSchemePO1); //记录主表操作日志 loggerContext.setNewValues(insuranceSchemePO1); - SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); + SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); //更新福利方案明细表 先删后插 getInsuranceSchemeDetailMapper().batchDeleteByPrimaryIds(Collections.singleton(updateParam.getInsuranceScheme().getId())); //更新明细表 @@ -2527,7 +2527,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { insuranceSchemeDetailContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "修改福利方案明细表")); insuranceSchemeDetailContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案明细")); insuranceSchemeDetailPOS.forEach(insuranceSchemeDetailContext::setNewValues); - SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(insuranceSchemeDetailContext); + SalaryElogConfig.siSchemeLoggerTemplate.write(insuranceSchemeDetailContext); } diff --git a/src/com/engine/salary/web/SIAccountController.java b/src/com/engine/salary/web/SIAccountController.java index ab9a41c9c..4e49abfa9 100644 --- a/src/com/engine/salary/web/SIAccountController.java +++ b/src/com/engine/salary/web/SIAccountController.java @@ -315,9 +315,9 @@ public class SIAccountController { @Path("/supplementary/delete") @Produces(MediaType.APPLICATION_JSON) public String deleteSummplementaryAccount(@Context HttpServletRequest request, @Context HttpServletResponse response, - @RequestBody List param) { + @RequestBody SaveCommonAccountParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult, String>(user).run(getService(user)::deleteSummplementaryAccount, param); + return new ResponseResult(user).run(getService(user)::deleteSupplementaryAccount, param); } From f591074fc15c7b66e2f9b21608665dc0fe3c1fb1 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 22 Feb 2024 09:43:47 +0800 Subject: [PATCH 35/64] =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salarysob/po/SalarySobItemPO.java | 2 ++ .../entity/salarysob/po/SalarySobPO.java | 34 +++++++++++++++++++ .../impl/SalarySobItemServiceImpl.java | 2 +- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java index e3167bc23..47d8938ef 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.salarysob.po; +import com.engine.salary.elog.annotation.ElogTransform; import com.engine.salary.enums.SalaryRoundingModeEnum; import com.engine.salary.enums.SalaryValueTypeEnum; import lombok.AllArgsConstructor; @@ -23,6 +24,7 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor //hrsa_salary_sob_item +@ElogTransform( name="薪资账套薪资项目" ) public class SalarySobItemPO { /** diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java index 921fad01c..68712f06c 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.salarysob.po; +import com.engine.salary.elog.annotation.ElogTransform; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -17,77 +18,110 @@ import java.util.Date; @Accessors(chain = true) @NoArgsConstructor @AllArgsConstructor +@ElogTransform( name="薪资账套" ) //hrsa_salary_sob public class SalarySobPO { + /** * 主键id */ + @ElogTransform( name="主键" ) private Long id; + /** * 名称 */ + @ElogTransform( name="名称" ) private String name; /** * 个税扣缴义务人的主键id */ + @ElogTransform( name="个税扣缴义务人id" ) private Long taxAgentId; /** * 应税项目。1:正常工资薪金所得 */ + @ElogTransform( name="薪资类型" ) private Integer incomeCategory; + /** * 薪资周期。1:上上月、2:上月、3:本月、4:下月 */ + @ElogTransform( name="薪资周期" ) private Integer salaryCycleType; + /** * 薪资周期的起始日期 */ + @ElogTransform( name="薪资周期起始日期" ) private Integer salaryCycleFromDay; + /** * 税款所属期。1:上上月、2:上月、3:本月、4:下月 */ + @ElogTransform( name="税款所属期" ) private Integer taxCycleType; + /** * 考勤周期。1:上上月、2:上月、3:本月、4:下月 */ + @ElogTransform( name="考勤周期" ) private Integer attendCycleType; + /** * 考勤周期的起始日期 */ + @ElogTransform( name="考勤周期起始日期" ) private Integer attendCycleFromDay; + /** * 社保福利所属期。1:上上月、2:上月、3:本月、4:下月 */ + @ElogTransform( name="社保福利所属期" ) private Integer socialSecurityCycleType; + /** * 是否禁用。0:正常使用、1:禁用 */ + @ElogTransform( name="是否禁用" ) private Integer disable; + /** * 描述 */ + @ElogTransform( name="描述" ) private String description; + /** * 创建人 */ + @ElogTransform( name="创建人" ) private Long creator; + /** * 创建时间 */ + @ElogTransform( name="创建时间" ) private Date createTime; + /** * 更新时间 */ + @ElogTransform( name="更新时间" ) private Date updateTime; + /** * 是否已删除。0:未删除、1:已删除 */ + @ElogTransform( name="是否已删除" ) private Integer deleteType; + /** * 租户ID */ + @ElogTransform( name="租户" ) private String tenantKey; Collection ids; diff --git a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java index 8a90a0049..93de141bc 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -269,7 +269,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe loggerContext.setUser(user); loggerContext.setTargetId("" + salarySob.getId()); loggerContext.setTargetName(salarySob.getName()); - loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "编辑薪资账套薪资项目")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "编辑薪资账套薪资项目")); SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); From 1654e041b94797594b30c0733f6d043c28e694a4 Mon Sep 17 00:00:00 2001 From: sy Date: Thu, 22 Feb 2024 15:23:59 +0800 Subject: [PATCH 36/64] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88=EF=BC=8C=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SIArchivesServiceImpl.java | 4 ++-- .../engine/salary/service/impl/SISchemeServiceImpl.java | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java index ec14fa7f9..d0e099fdc 100644 --- a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java @@ -200,7 +200,7 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService + ": " + "人员id" + "-" + employeeId + "," + "个税扣缴义务人id" + "-" +paymentOrganization + "," + (welfareTypeEnum == null ? SalaryI18nUtil.getI18nLabel(0, "员工基本信息") : SalaryI18nUtil.getI18nLabel(welfareTypeEnum.getLabelId(), welfareTypeEnum.getDefaultLabel()))); - SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); + SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); return apidatas; } @@ -227,7 +227,7 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "查看缴纳基数明细") + ": " + "人员id" + "-" + employeeId + "," + "个税扣缴义务人id" + "-" +paymentOrganization + "," + SalaryI18nUtil.getI18nLabel(welfareTypeEnum.getLabelId(), welfareTypeEnum.getDefaultLabel())); - SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); + SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); return apidatas; } diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 5f921e0ba..1f1b16230 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -2456,7 +2456,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { if (insuranceSchemeDetailPOS.size() > 0) { encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); - LoggerContext> loggerContext = new LoggerContext<>(); + LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(targetPO.getId())); loggerContext.setTargetName(targetPO.getSchemeName()); @@ -2520,7 +2520,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { insuranceSchemeDetailPOS.forEach(getInsuranceSchemeDetailMapper()::insert); //记录明细表操作日志 encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); - LoggerContext> insuranceSchemeDetailContext = new LoggerContext<>(); + LoggerContext insuranceSchemeDetailContext = new LoggerContext<>(); insuranceSchemeDetailContext.setTargetId(String.valueOf(insuranceSchemePO.getId())); insuranceSchemeDetailContext.setTargetName(insuranceSchemePO.getSchemeName()); insuranceSchemeDetailContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); @@ -2572,8 +2572,9 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); //记录明细表操作日志 List targetDetails = targetDetailMap.get(targetPO.getId()); + encryptUtil.decryptList(targetDetails, InsuranceSchemeDetailPO.class); if (targetDetails != null && targetDetails.size() > 0) { - LoggerContext> detailLoggerContext = new LoggerContext<>(); + LoggerContext detailLoggerContext = new LoggerContext<>(); detailLoggerContext.setUser(user); detailLoggerContext.setTargetId(String.valueOf(targetPO.getId())); detailLoggerContext.setTargetName(targetPO.getSchemeName()); @@ -2673,7 +2674,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { if (detailPOS.size() > 0) { encryptUtil.decryptList(detailPOS, InsuranceSchemeDetailPO.class); - LoggerContext> loggerContext = new LoggerContext<>(); + LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(targetPO.getId())); loggerContext.setTargetName(targetPO.getSchemeName()); From a39806bb923db1029cbb1b1b8fb700dc183dfca8 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 23 Feb 2024 11:04:14 +0800 Subject: [PATCH 37/64] =?UTF-8?q?=E6=88=91=E7=9A=84=E8=96=AA=E8=B5=84?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=98=BE=E7=A4=BA=E9=A1=B5=E7=AD=BE=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/web/MySalaryShowSetController.java | 13 ++++++ .../salaryBill/dto/MySalaryShowSetDTO.java | 40 +++++++++++++++++ .../service/MySalaryShowSetService.java | 19 ++++++++ .../impl/MySalaryShowSetServiceImpl.java | 44 ++++++++++++++++++ .../sys/constant/SalarySysConstant.java | 15 +++++++ .../salary/web/MySalaryShowSetController.java | 45 +++++++++++++++++++ .../wrapper/MySalaryShowSetWrapper.java | 32 +++++++++++++ .../salary/wrapper/SalarySendWrapper.java | 5 ++- 8 files changed, 212 insertions(+), 1 deletion(-) create mode 100644 src/com/api/salary/web/MySalaryShowSetController.java create mode 100644 src/com/engine/salary/entity/salaryBill/dto/MySalaryShowSetDTO.java create mode 100644 src/com/engine/salary/service/MySalaryShowSetService.java create mode 100644 src/com/engine/salary/service/impl/MySalaryShowSetServiceImpl.java create mode 100644 src/com/engine/salary/web/MySalaryShowSetController.java create mode 100644 src/com/engine/salary/wrapper/MySalaryShowSetWrapper.java diff --git a/src/com/api/salary/web/MySalaryShowSetController.java b/src/com/api/salary/web/MySalaryShowSetController.java new file mode 100644 index 000000000..0be912245 --- /dev/null +++ b/src/com/api/salary/web/MySalaryShowSetController.java @@ -0,0 +1,13 @@ +package com.api.salary.web; + +import javax.ws.rs.Path; + +/** + * @Description: 我的薪资福利显示设置 + * @Author: wangxiangzhong + * @Date: 2021-12-08 14:44 + */ +@Path("/bs/hrmsalary/mySalaryShowSet") +public class MySalaryShowSetController extends com.engine.salary.web.MySalaryShowSetController { + +} diff --git a/src/com/engine/salary/entity/salaryBill/dto/MySalaryShowSetDTO.java b/src/com/engine/salary/entity/salaryBill/dto/MySalaryShowSetDTO.java new file mode 100644 index 000000000..7ca948821 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/dto/MySalaryShowSetDTO.java @@ -0,0 +1,40 @@ +package com.engine.salary.entity.salaryBill.dto; + +import io.swagger.annotations.ApiModel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Description: 我的薪资福利显示设置 + * @Author: wangxiangzhong + * @Date: 2023/8/7 13:05 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel("工资单确认和反馈") +public class MySalaryShowSetDTO { + + /** + * 是否显示工资单列表 + */ + private Boolean salaryShowStatus; + + /** + * 是否显示社保福利列表 + */ + // private Boolean welfareShowStatus; + + /** + * 是否显示调薪记录列表 + */ + private Boolean adjustShowStatus; + + /** + * 是否显示个税扣缴义务人列 + */ + private Boolean taxAgentShowStatus; +} diff --git a/src/com/engine/salary/service/MySalaryShowSetService.java b/src/com/engine/salary/service/MySalaryShowSetService.java new file mode 100644 index 000000000..3bfea6d7b --- /dev/null +++ b/src/com/engine/salary/service/MySalaryShowSetService.java @@ -0,0 +1,19 @@ +package com.engine.salary.service; + + +import com.engine.salary.entity.salaryBill.dto.MySalaryShowSetDTO; + +/** + * @Description: 我的薪资福利显示设置 + * @Author: wangxiangzhong + * @Date: 2023/8/7 11:15 + */ +public interface MySalaryShowSetService { + + /** + * 获取显示设置 + * + * @return + */ + MySalaryShowSetDTO get(); +} diff --git a/src/com/engine/salary/service/impl/MySalaryShowSetServiceImpl.java b/src/com/engine/salary/service/impl/MySalaryShowSetServiceImpl.java new file mode 100644 index 000000000..57ec01bda --- /dev/null +++ b/src/com/engine/salary/service/impl/MySalaryShowSetServiceImpl.java @@ -0,0 +1,44 @@ +package com.engine.salary.service.impl; + + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.salaryBill.dto.MySalaryShowSetDTO; +import com.engine.salary.service.MySalaryShowSetService; +import com.engine.salary.sys.constant.SalarySysConstant; +import com.engine.salary.sys.entity.po.SalarySysConfPO; +import com.engine.salary.sys.service.SalarySysConfService; +import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.math.NumberUtils; +import weaver.hrm.User; + +/** + * @Description: 我的薪资福利显示设置 + * @Author: wangxiangzhong + * @Date: 2023/8/7 11:16 + */ +@Slf4j +public class MySalaryShowSetServiceImpl extends Service implements MySalaryShowSetService { + + private SalarySysConfService getSalarySysConfService(User user) { + return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); + } + + /** + * 获取显示设置 + * + * @return + */ + @Override + public MySalaryShowSetDTO get() { + SalarySysConfPO salaryShowStatus = getSalarySysConfService(user).getOneByCode(SalarySysConstant.SALARY_SHOW_STATUS); + SalarySysConfPO adjustShowStatus = getSalarySysConfService(user).getOneByCode(SalarySysConstant.ADJUST_SHOW_STATUS); + + return MySalaryShowSetDTO.builder() + .salaryShowStatus(salaryShowStatus == null ? true : NumberUtils.INTEGER_ONE.equals(salaryShowStatus.getConfValue())) + .adjustShowStatus(adjustShowStatus == null ? true : NumberUtils.INTEGER_ONE.equals(adjustShowStatus.getConfValue())) + .build(); + } + +} diff --git a/src/com/engine/salary/sys/constant/SalarySysConstant.java b/src/com/engine/salary/sys/constant/SalarySysConstant.java index afe54d3c0..34a6b29ec 100644 --- a/src/com/engine/salary/sys/constant/SalarySysConstant.java +++ b/src/com/engine/salary/sys/constant/SalarySysConstant.java @@ -115,4 +115,19 @@ public class SalarySysConstant { * 应用设置是否福利档案导入时,不符合上下限的基数调整为上限 /下限 */ public static final String WEL_BASE_AUTO_ADJUST = "welBaseAutoAdjust"; + + /** + * 我的薪资福利工资单显示状态 + */ + public static final String SALARY_SHOW_STATUS = "salaryShowStatus"; + + /** + * 我的薪资福利调薪记录显示状态 + */ + public static final String ADJUST_SHOW_STATUS = "adjustShowStatus"; + + /** + * 我的薪资福利工资单个税扣缴义务人显示状态 + */ + public static final String TAX_AGENT_SHOW_STATUS = "taxAgentShowStatus"; } diff --git a/src/com/engine/salary/web/MySalaryShowSetController.java b/src/com/engine/salary/web/MySalaryShowSetController.java new file mode 100644 index 000000000..538d951ae --- /dev/null +++ b/src/com/engine/salary/web/MySalaryShowSetController.java @@ -0,0 +1,45 @@ +package com.engine.salary.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.salary.entity.salaryBill.dto.MySalaryShowSetDTO; +import com.engine.salary.util.ResponseResult; +import com.engine.salary.wrapper.MySalaryShowSetWrapper; +import lombok.extern.slf4j.Slf4j; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; + +/** + * @Description: 我的薪资福利显示设置 + * @Author: wangxiangzhong + * @Date: 2021-12-08 14:44 + */ +@Slf4j +public class MySalaryShowSetController { + + private MySalaryShowSetWrapper getMySalaryShowSetWrapper(User user) { + return ServiceUtil.getService(MySalaryShowSetWrapper.class, user); + } + + /** + * 我的薪资福利页签显隐控制 + * + * @return + */ + @GET + @Path("/get") + @Produces(MediaType.APPLICATION_JSON) + public String mySalaryShowSet(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getMySalaryShowSetWrapper(user)::mySalaryShowSet); + } + + /******** 工资单 end ***********************************************************************************************/ +} diff --git a/src/com/engine/salary/wrapper/MySalaryShowSetWrapper.java b/src/com/engine/salary/wrapper/MySalaryShowSetWrapper.java new file mode 100644 index 000000000..4efbd70cb --- /dev/null +++ b/src/com/engine/salary/wrapper/MySalaryShowSetWrapper.java @@ -0,0 +1,32 @@ +package com.engine.salary.wrapper; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.salaryBill.dto.MySalaryShowSetDTO; +import com.engine.salary.service.MySalaryShowSetService; +import com.engine.salary.service.impl.MySalaryShowSetServiceImpl; +import org.springframework.stereotype.Component; +import weaver.hrm.User; + +; + +/** + * @Description: 我的薪资福利显示设置 + * @Author: wangxiangzhong + * @Date: 2023/8/7 11:24 + */ +@Component +public class MySalaryShowSetWrapper extends Service { + private MySalaryShowSetService getMySalaryShowSetService(User user) { + return ServiceUtil.getService(MySalaryShowSetServiceImpl.class, user); + } + + /** + * 获取我的薪资福利显示设置 + * + * @return + */ + public MySalaryShowSetDTO mySalaryShowSet() { + return getMySalaryShowSetService(user).get(); + } +} diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 75c83f012..4f57185f8 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -620,11 +620,14 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy } private List buildMySalaryBillListColumns() { + SalarySysConfPO taxAgentShowStatusPO = getSalarySysConfService(user).getOneByCode(SalarySysConstant.TAX_AGENT_SHOW_STATUS); List list = new ArrayList<>(); WeaTableColumn idColumn = new WeaTableColumn("0px", "id", "id"); idColumn.setDisplay(WeaBoolAttr.TRUE); list.add(new WeaTableColumn("20%", "薪资所属月", "salaryYearMonth")); - list.add(new WeaTableColumn("40%", "个税扣缴义务人", "taxAgent")); + if (taxAgentShowStatusPO == null || taxAgentShowStatusPO.getConfValue().equals("1")) { + list.add(new WeaTableColumn("40%", "个税扣缴义务人", "taxAgent")); + } list.add(new WeaTableColumn("40%", "发放时间", "sendTime")); return list; } From 093cb34f779aeecdaefbd754f1414c573984595e Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 23 Feb 2024 15:11:56 +0800 Subject: [PATCH 38/64] =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97fix?= =?UTF-8?q?=20some=20bugs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/biz/AttendQuoteDataValueBiz.java | 2 +- .../salary/biz/SpecialAddDeductionBiz.java | 3 +++ .../po/SpecialAddDeductionPO.java | 23 +++++++++++++++++-- .../salaryacct/po/SalaryAcctRecordPO.java | 15 ++++++++++++ .../datacollection/OtherDeductionMapper.xml | 7 ++++++ .../SpecialAddDeductionMapper.xml | 4 ++-- .../SalaryStatisticsReportWrapper.java | 14 +++++++++++ .../impl/AddUpSituationServiceImpl.java | 3 +++ .../service/impl/AttendQuoteServiceImpl.java | 13 +++++------ .../impl/OtherDeductionServiceImpl.java | 4 ++++ .../impl/SalaryArchiveServiceImpl.java | 5 ++-- .../service/impl/SalarySobServiceImpl.java | 21 +++++++++-------- .../impl/TaxAgentManageRangeServiceImpl.java | 4 ++-- .../impl/TaxDeclarationServiceImpl.java | 1 + 14 files changed, 93 insertions(+), 26 deletions(-) diff --git a/src/com/engine/salary/biz/AttendQuoteDataValueBiz.java b/src/com/engine/salary/biz/AttendQuoteDataValueBiz.java index 5082f23d0..f80b1aa36 100644 --- a/src/com/engine/salary/biz/AttendQuoteDataValueBiz.java +++ b/src/com/engine/salary/biz/AttendQuoteDataValueBiz.java @@ -67,7 +67,7 @@ public class AttendQuoteDataValueBiz { } } - public void deleteByAttendQuoteIds(ArrayList quoteIds) { + public void deleteByAttendQuoteIds(List quoteIds) { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { AttendQuoteDataValueMapper mapper = sqlSession.getMapper(AttendQuoteDataValueMapper.class); diff --git a/src/com/engine/salary/biz/SpecialAddDeductionBiz.java b/src/com/engine/salary/biz/SpecialAddDeductionBiz.java index ad02398de..bf6f87f0a 100644 --- a/src/com/engine/salary/biz/SpecialAddDeductionBiz.java +++ b/src/com/engine/salary/biz/SpecialAddDeductionBiz.java @@ -179,6 +179,9 @@ public class SpecialAddDeductionBiz extends BaseBean { if (CollectionUtils.isNotEmpty(updateList)) { LoggerContext loggerContext = new LoggerContext(); loggerContext.setUser(user); + if(updateList.size() == 1) { + loggerContext.setTargetId(updateList.get(0).getId().toString()); + } loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel( 0, "专项附加扣除 ")); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "导入")); diff --git a/src/com/engine/salary/entity/datacollection/po/SpecialAddDeductionPO.java b/src/com/engine/salary/entity/datacollection/po/SpecialAddDeductionPO.java index 75c896062..afa5ea4e9 100644 --- a/src/com/engine/salary/entity/datacollection/po/SpecialAddDeductionPO.java +++ b/src/com/engine/salary/entity/datacollection/po/SpecialAddDeductionPO.java @@ -1,14 +1,15 @@ package com.engine.salary.entity.datacollection.po; import com.engine.salary.annotation.Encrypt; +import com.engine.salary.elog.annotation.ElogTransform; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import java.util.Collection; import java.util.Date; -import java.util.List; /** * 数据采集-专项附加扣除表 @@ -18,85 +19,103 @@ import java.util.List; @AllArgsConstructor @NoArgsConstructor @Accessors(chain = true) +@ElogTransform( name = "专项附加扣除" ) public class SpecialAddDeductionPO { + @ElogTransform( name="主键" ) private Long id; /** * 人员信息表的主键id */ + @ElogTransform( name="人员id" ) private Long employeeId; /** * 个税扣缴义务人的主键id */ + @ElogTransform( name="个税扣缴义务人id" ) private Long taxAgentId; /** * 子女教育 */ + @ElogTransform( name="子女教育" ) @Encrypt private String childrenEducation; /** * 继续教育 */ + @ElogTransform( name="继续教育" ) @Encrypt private String continuingEducation; /** * 住房贷款利息 */ + @ElogTransform( name="住房贷款利息" ) @Encrypt private String housingLoanInterest; /** * 住房租金 */ + @ElogTransform( name="住房租金" ) @Encrypt private String housingRent; /** * 赡养老人 */ + @ElogTransform( name="赡养老人" ) @Encrypt private String supportingElder; /** * 大病医疗 */ + @ElogTransform( name="大病医疗" ) @Encrypt private String seriousIllnessTreatment; /** * 婴幼儿照护 */ + @ElogTransform( name="婴幼儿照护" ) @Encrypt private String infantCare; /** * 创建时间 */ + @ElogTransform( name="创建时间" ) private Date createTime; /** * 更新时间 */ + @ElogTransform( name="更新时间" ) private Date updateTime; /** * 创建人 */ + @ElogTransform( name="创建人" ) private Long creator; /** * 是否已删除。0:未删除、1:已删除 */ + @ElogTransform( name="是否已删除" ) private Integer deleteType; /** * 租户ID */ + @ElogTransform( name="租户" ) private String tenantKey; - private List employeeIds; + private Collection employeeIds; + + private Collection ids; } \ No newline at end of file diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java index 9587048ee..3af046bdb 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.salaryacct.po; import com.engine.salary.common.LocalDateRange; +import com.engine.salary.elog.annotation.ElogTransform; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import lombok.AllArgsConstructor; import lombok.Builder; @@ -25,43 +26,51 @@ import java.util.List; @NoArgsConstructor @AllArgsConstructor @Builder +@ElogTransform( name = "薪资核算记录" ) //hrsa_salary_acct_record public class SalaryAcctRecordPO { /** * 主键id */ + @ElogTransform( name = "主键id" ) private Long id; /** * 薪资所属月 */ + @ElogTransform( name = "薪资所属月" ) private Date salaryMonth; /** * 税款所属期 */ + @ElogTransform( name = "税款所属期" ) private Date taxCycle; /** * 薪资账套id */ + @ElogTransform( name = "薪资账套id" ) private Long salarySobId; /** * 核算状态 * @see SalaryAcctRecordStatusEnum */ + @ElogTransform( name = "核算状态" ) private Integer status; /** * 本次核算是账套(salarySobId)在本月(salaryMonth)的第几次核算 */ + @ElogTransform( name = "核算次数" ) private Integer acctTimes; /** * 是否是回算 0:不是回算、1:是回算 */ + @ElogTransform( name = "是否是回算" ) private Integer backCalcStatus; /** @@ -81,31 +90,37 @@ public class SalaryAcctRecordPO { /** * 备注 */ + @ElogTransform( name = "备注" ) private String description; /** * 租户key */ + @ElogTransform( name = "租户key" ) private String tenantKey; /** * 创建人id */ + @ElogTransform( name = "创建人id" ) private Long creator; /** * 是否删除 */ + @ElogTransform( name = "是否删除" ) private Integer deleteType; /** * 创建时间 */ + @ElogTransform( name = "创建时间" ) private Date createTime; /** * 更新时间 */ + @ElogTransform( name = "更新时间" ) private Date updateTime; /** diff --git a/src/com/engine/salary/mapper/datacollection/OtherDeductionMapper.xml b/src/com/engine/salary/mapper/datacollection/OtherDeductionMapper.xml index 2d377e0ea..0afae02a2 100644 --- a/src/com/engine/salary/mapper/datacollection/OtherDeductionMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/OtherDeductionMapper.xml @@ -464,6 +464,13 @@ + + + + when id=#{item.id} then #{item.updateTime} + + + where id in diff --git a/src/com/engine/salary/mapper/datacollection/SpecialAddDeductionMapper.xml b/src/com/engine/salary/mapper/datacollection/SpecialAddDeductionMapper.xml index 2d32ec009..ce701f1d9 100644 --- a/src/com/engine/salary/mapper/datacollection/SpecialAddDeductionMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/SpecialAddDeductionMapper.xml @@ -694,7 +694,7 @@