feat:qms阶段性提交

This commit is contained in:
FCL
2026-01-09 11:26:52 +08:00
parent 10716a0ec5
commit 7e7295cb74
38 changed files with 865 additions and 349 deletions

View File

@@ -0,0 +1,10 @@
package com.zt.plat.module.qms.enums;
public interface QmsSupplierConstant {
String OPERATING_ITEMS_KEY = "operatingItems";
// 供应商属性资质key
String CERTIFICATION_KEY = "certification";
// 评价流程key
String EVALUATION_FLOW_KEY= "OFFICE_SUPPLIER_EVALUATION";
}

View File

@@ -321,6 +321,8 @@ public class BusinessSubSampleServiceImpl implements BusinessSubSampleService {
* */ * */
BusinessSubSampleExtendRespVO respVO = BeanUtils.toBean(businessSubSampleDO, BusinessSubSampleExtendRespVO.class); BusinessSubSampleExtendRespVO respVO = BeanUtils.toBean(businessSubSampleDO, BusinessSubSampleExtendRespVO.class);
respVO.setIsPrint(printFlag); respVO.setIsPrint(printFlag);
respVO.setWarehouseName(warehouseDO.getName());
respVO.setWarehouseLocationCode(locationDO.getCode());
return respVO; return respVO;
} }

View File

@@ -861,7 +861,7 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic
// 查找匹配的允差区间 // 查找匹配的允差区间
private ConfigAssayMethodProjectAssessmentDO findMatchingRule(List<ConfigAssayMethodProjectAssessmentDO> rules, BigDecimal value) { private ConfigAssayMethodProjectAssessmentDO findMatchingRule(List<ConfigAssayMethodProjectAssessmentDO> rules, BigDecimal value) {
if (rules == null || rules.isEmpty()) return null; if (rules == null || rules.isEmpty()) return null;
// 特殊处理 level=0 和 level=4 // 特殊处理 level=0 和 level=4
for (ConfigAssayMethodProjectAssessmentDO rule : rules) { for (ConfigAssayMethodProjectAssessmentDO rule : rules) {
if (rule.getAssessmentLevel() == 0) { if (rule.getAssessmentLevel() == 0) {
@@ -869,19 +869,17 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic
.filter(r -> r.getAssessmentLevel() == 1) .filter(r -> r.getAssessmentLevel() == 1)
.findFirst() .findFirst()
.orElse(rule); .orElse(rule);
// if (value.compareTo(new BigDecimal(next.getMinimumValue())) >= 0 && value.compareTo(new BigDecimal(next.getMaximumValue())) <= 0) { if (value.compareTo(new BigDecimal(rule.getMinimumValue())) >= 0 && value.compareTo(new BigDecimal(rule.getMaximumValue())) <= 0) {
// return next; return next;
// } }
return next;
} else if (rule.getAssessmentLevel() == 4) { } else if (rule.getAssessmentLevel() == 4) {
ConfigAssayMethodProjectAssessmentDO prev = rules.stream() ConfigAssayMethodProjectAssessmentDO prev = rules.stream()
.filter(r -> r.getAssessmentLevel() == 3) .filter(r -> r.getAssessmentLevel() == 3)
.findFirst() .findFirst()
.orElse(rule); .orElse(rule);
// if (value.compareTo(new BigDecimal(prev.getMinimumValue())) >= 0 && value.compareTo(new BigDecimal(prev.getMaximumValue())) <= 0) { if (value.compareTo(new BigDecimal(rule.getMinimumValue())) >= 0 && value.compareTo(new BigDecimal(rule.getMaximumValue())) <= 0) {
// return prev; return prev;
// } }
return prev;
} else { } else {
if (value.compareTo(new BigDecimal(rule.getMinimumValue())) >= 0 && value.compareTo(new BigDecimal(rule.getMaximumValue())) <= 0) { if (value.compareTo(new BigDecimal(rule.getMinimumValue())) >= 0 && value.compareTo(new BigDecimal(rule.getMaximumValue())) <= 0) {
return rule; return rule;

View File

@@ -1,6 +1,8 @@
package com.zt.plat.module.qms.common.dic.dal.mapper; package com.zt.plat.module.qms.common.dic.dal.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.datapermission.core.annotation.DeptDataPermissionIgnore;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX; import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX;
@@ -21,6 +23,12 @@ import java.util.List;
@Mapper @Mapper
public interface DictionaryBusinessMapper extends BaseMapperX<DictionaryBusinessDO> { public interface DictionaryBusinessMapper extends BaseMapperX<DictionaryBusinessDO> {
@DeptDataPermissionIgnore(enable = "true")
default List<DictionaryBusinessDO> selectListWithoutPermissionCheck(Wrapper<DictionaryBusinessDO> queryWrapper){
return selectList(queryWrapper);
}
@DeptDataPermissionIgnore(enable = "true")
default PageResult<DictionaryBusinessDO> selectPage(DictionaryBusinessPageReqVO reqVO) { default PageResult<DictionaryBusinessDO> selectPage(DictionaryBusinessPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<DictionaryBusinessDO>() return selectPage(reqVO, new LambdaQueryWrapperX<DictionaryBusinessDO>()
.eqIfPresent(DictionaryBusinessDO::getIdPath, reqVO.getIdPath()) .eqIfPresent(DictionaryBusinessDO::getIdPath, reqVO.getIdPath())
@@ -36,7 +44,8 @@ public interface DictionaryBusinessMapper extends BaseMapperX<DictionaryBusiness
.eqIfPresent(DictionaryBusinessDO::getRemark, reqVO.getRemark()) .eqIfPresent(DictionaryBusinessDO::getRemark, reqVO.getRemark())
.orderByAsc(DictionaryBusinessDO::getSortNo)); .orderByAsc(DictionaryBusinessDO::getSortNo));
} }
@DeptDataPermissionIgnore(enable = "true")
default List<DictionaryBusinessExtendRespVO> selectItemByCategoryKeys(List<String> keys) { default List<DictionaryBusinessExtendRespVO> selectItemByCategoryKeys(List<String> keys) {
return selectJoinList(DictionaryBusinessExtendRespVO.class, new MPJLambdaWrapperX<DictionaryBusinessDO>() return selectJoinList(DictionaryBusinessExtendRespVO.class, new MPJLambdaWrapperX<DictionaryBusinessDO>()
.leftJoin(DictionaryBusinessDO.class, "dbd", DictionaryBusinessDO::getId, DictionaryBusinessDO::getParentId) .leftJoin(DictionaryBusinessDO.class, "dbd", DictionaryBusinessDO::getId, DictionaryBusinessDO::getParentId)
@@ -56,6 +65,7 @@ public interface DictionaryBusinessMapper extends BaseMapperX<DictionaryBusiness
* @param filterSql 条件sql * @param filterSql 条件sql
* @param keys 存储字段值 作为查询条件in * @param keys 存储字段值 作为查询条件in
*/ */
@DeptDataPermissionIgnore(enable = "true")
List<DictModel> queryTableDictCustom(@Param("table") String table, @Param("text") String text, @Param("code") String code, @Param("filterSql") String filterSql, List<DictModel> queryTableDictCustom(@Param("table") String table, @Param("text") String text, @Param("code") String code, @Param("filterSql") String filterSql,
@Param("keys") List<String> keys); @Param("keys") List<String> keys);
@@ -64,7 +74,10 @@ public interface DictionaryBusinessMapper extends BaseMapperX<DictionaryBusiness
* @param code * @param code
* @param key * @param key
*/ */
@DeptDataPermissionIgnore(enable = "true")
String queryDictTextByKey(@Param("code") String code, @Param("key") String key); String queryDictTextByKey(@Param("code") String code, @Param("key") String key);
@DeptDataPermissionIgnore(enable = "true")
String queryDictTextByID(@Param("code") String code, @Param("id") String id); String queryDictTextByID(@Param("code") String code, @Param("id") String id);
} }

View File

@@ -145,7 +145,7 @@ public class DictionaryBusinessServiceImpl implements DictionaryBusinessService
query.in(DictionaryBusinessDO::getKey, dictCodeList); query.in(DictionaryBusinessDO::getKey, dictCodeList);
query.eq(DictionaryBusinessDO::getNodeType, DataTypeConstant.DATA_TYPE_CATEGORY); query.eq(DictionaryBusinessDO::getNodeType, DataTypeConstant.DATA_TYPE_CATEGORY);
// query.eq(DictionaryBusinessDO::getDeleted, 0); // query.eq(DictionaryBusinessDO::getDeleted, 0);
List<DictionaryBusinessDO> parList = dictionaryBusinessMapper.selectList(query); List<DictionaryBusinessDO> parList = dictionaryBusinessMapper.selectListWithoutPermissionCheck(query);
if(parList.isEmpty()) if(parList.isEmpty())
return dictMap; return dictMap;
List<Long> parIds = parList.stream().map(DictionaryBusinessDO::getId).toList(); List<Long> parIds = parList.stream().map(DictionaryBusinessDO::getId).toList();
@@ -159,7 +159,7 @@ public class DictionaryBusinessServiceImpl implements DictionaryBusinessService
query.in(DictionaryBusinessDO::getKey, itemKeys); query.in(DictionaryBusinessDO::getKey, itemKeys);
else else
query.in(DictionaryBusinessDO::getId, itemKeys); query.in(DictionaryBusinessDO::getId, itemKeys);
List<DictionaryBusinessDO> itemList = dictionaryBusinessMapper.selectList(query); List<DictionaryBusinessDO> itemList = dictionaryBusinessMapper.selectListWithoutPermissionCheck(query);
List<DictModelMany> modelItemList = new ArrayList<>(); List<DictModelMany> modelItemList = new ArrayList<>();
for(DictionaryBusinessDO item: itemList){ for(DictionaryBusinessDO item: itemList){
Long parId = item.getParentId(); Long parId = item.getParentId();
@@ -185,7 +185,7 @@ public class DictionaryBusinessServiceImpl implements DictionaryBusinessService
// query.in(DictionaryBusinessDO::getKey, dictCodeList); // query.in(DictionaryBusinessDO::getKey, dictCodeList);
// query.eq(DictionaryBusinessDO::getNodeType, DataTypeConstant.DATA_TYPE_CATEGORY); // query.eq(DictionaryBusinessDO::getNodeType, DataTypeConstant.DATA_TYPE_CATEGORY);
//// query.eq(DictionaryBusinessDO::getDeleted, 0); //// query.eq(DictionaryBusinessDO::getDeleted, 0);
// List<DictionaryBusinessDO> parList = dictionaryBusinessMapper.selectList(query); // List<DictionaryBusinessDO> parList = dictionaryBusinessMapper.selectListWithoutPermissionCheck(query);
// if(parList.isEmpty()) // if(parList.isEmpty())
// return dictMap; // return dictMap;
// List<Long> parIds = parList.stream().map(DictionaryBusinessDO::getId).toList(); // List<Long> parIds = parList.stream().map(DictionaryBusinessDO::getId).toList();
@@ -193,7 +193,7 @@ public class DictionaryBusinessServiceImpl implements DictionaryBusinessService
// query.in(DictionaryBusinessDO::getParentId, parIds); // query.in(DictionaryBusinessDO::getParentId, parIds);
// query.eq(DictionaryBusinessDO::getNodeType, DataTypeConstant.DATA_TYPE_DATA); // query.eq(DictionaryBusinessDO::getNodeType, DataTypeConstant.DATA_TYPE_DATA);
// query.in(DictionaryBusinessDO::getId, ids); // query.in(DictionaryBusinessDO::getId, ids);
// List<DictionaryBusinessDO> itemList = dictionaryBusinessMapper.selectList(query); // List<DictionaryBusinessDO> itemList = dictionaryBusinessMapper.selectListWithoutPermissionCheck(query);
// List<DictModelMany> modelItemList = new ArrayList<>(); // List<DictModelMany> modelItemList = new ArrayList<>();
// for(DictionaryBusinessDO item: itemList){ // for(DictionaryBusinessDO item: itemList){
// Long parId = item.getParentId(); // Long parId = item.getParentId();
@@ -216,7 +216,7 @@ public class DictionaryBusinessServiceImpl implements DictionaryBusinessService
LambdaQueryWrapper<DictionaryBusinessDO> query = new LambdaQueryWrapper<>(); LambdaQueryWrapper<DictionaryBusinessDO> query = new LambdaQueryWrapper<>();
query.eq(DictionaryBusinessDO::getKey, key); query.eq(DictionaryBusinessDO::getKey, key);
query.eq(DictionaryBusinessDO::getNodeType, DataTypeConstant.DATA_TYPE_CATEGORY); query.eq(DictionaryBusinessDO::getNodeType, DataTypeConstant.DATA_TYPE_CATEGORY);
List<DictionaryBusinessDO> list = dictionaryBusinessMapper.selectList(query); List<DictionaryBusinessDO> list = dictionaryBusinessMapper.selectListWithoutPermissionCheck(query);
if(list.isEmpty()) if(list.isEmpty())
throw exception(DICTIONARY_BUSINESS_NOT_EXISTS); throw exception(DICTIONARY_BUSINESS_NOT_EXISTS);
if(list.size() > 1) if(list.size() > 1)
@@ -234,7 +234,7 @@ public class DictionaryBusinessServiceImpl implements DictionaryBusinessService
LambdaQueryWrapper<DictionaryBusinessDO> query = new LambdaQueryWrapper<>(); LambdaQueryWrapper<DictionaryBusinessDO> query = new LambdaQueryWrapper<>();
query.eq(DictionaryBusinessDO::getKey, key); query.eq(DictionaryBusinessDO::getKey, key);
query.eq(DictionaryBusinessDO::getNodeType, DataTypeConstant.DATA_TYPE_DATA); query.eq(DictionaryBusinessDO::getNodeType, DataTypeConstant.DATA_TYPE_DATA);
List<DictionaryBusinessDO> list = dictionaryBusinessMapper.selectList(query); List<DictionaryBusinessDO> list = dictionaryBusinessMapper.selectListWithoutPermissionCheck(query);
if(list.isEmpty()) if(list.isEmpty())
return CommonResult.error(DICTIONARY_BUSINESS_NOT_EXISTS); return CommonResult.error(DICTIONARY_BUSINESS_NOT_EXISTS);
if(list.size() > 1) if(list.size() > 1)
@@ -325,7 +325,7 @@ public class DictionaryBusinessServiceImpl implements DictionaryBusinessService
LambdaQueryWrapper<DictionaryBusinessDO> query = new LambdaQueryWrapper<>(); LambdaQueryWrapper<DictionaryBusinessDO> query = new LambdaQueryWrapper<>();
query.eq(DictionaryBusinessDO::getNodeType, DataTypeConstant.DATA_TYPE_CATEGORY); query.eq(DictionaryBusinessDO::getNodeType, DataTypeConstant.DATA_TYPE_CATEGORY);
query.orderByAsc(DictionaryBusinessDO::getSortNo); query.orderByAsc(DictionaryBusinessDO::getSortNo);
return dictionaryBusinessMapper.selectList(query); return dictionaryBusinessMapper.selectListWithoutPermissionCheck(query);
} }
@Override @Override
@@ -335,7 +335,7 @@ public class DictionaryBusinessServiceImpl implements DictionaryBusinessService
if(!ObjectUtils.isEmpty(nodeType)) if(!ObjectUtils.isEmpty(nodeType))
query.eq(DictionaryBusinessDO::getNodeType, nodeType); query.eq(DictionaryBusinessDO::getNodeType, nodeType);
query.orderByAsc(DictionaryBusinessDO::getSortNo); query.orderByAsc(DictionaryBusinessDO::getSortNo);
return dictionaryBusinessMapper.selectList(query); return dictionaryBusinessMapper.selectListWithoutPermissionCheck(query);
} }
@Override @Override

View File

@@ -0,0 +1,78 @@
package com.zt.plat.module.qms.core.aspect;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.security.core.LoginUser;
import com.zt.plat.module.qms.core.aspect.annotation.Dict;
import com.zt.plat.module.qms.core.aspect.annotation.QmsPermission;
import com.zt.plat.module.qms.core.constant.CommonConstant;
import com.zt.plat.module.qms.core.legend.LegendApi;
import com.zt.plat.module.qms.core.legend.LegendConvertUtils;
import com.zt.plat.module.qms.core.legend.vo.DictModel;
import com.zt.plat.module.qms.framework.datapermission.QMSPermissionContextHolder;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
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.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static com.zt.plat.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
import static com.zt.plat.module.qms.core.constant.CacheConstant.QMS_DICT_BIZ_CACHE;
import static com.zt.plat.module.qms.core.constant.CacheConstant.QMS_DICT_TABLE_CACHE;
import static com.zt.plat.module.qms.core.constant.DataTypeConstant.DICT_ANNOTATION_SPLIT;
@Aspect
@Component
@Slf4j
public class QmsPermissionAspect {
/**
* 定义切点Pointcut
*/
@Pointcut("@annotation(com.zt.plat.module.qms.core.aspect.annotation.QmsPermission)")
public void executeService() {
}
@Before("executeService()")
public void doBefore(JoinPoint point) throws Throwable {
handleDataScope(point);
}
private void handleDataScope(JoinPoint joinPoint){
QmsPermission annotation = getAnnotationByJoinPoint(joinPoint);
if(annotation == null)
return;
QMSPermissionContextHolder.setContext(true, annotation.deptDataRoleCodes(), annotation.moduleDataRoleCodes(), annotation.deptIdColumn(), annotation.userIdColumn(), annotation.custom());
}
private QmsPermission getAnnotationByJoinPoint(JoinPoint joinPoint) {
Signature signature = joinPoint.getSignature();
MethodSignature methodSignature = (MethodSignature) signature;
Method method = methodSignature.getMethod();
if (method != null) {
return method.getAnnotation(QmsPermission.class);
}
return null;
}
}

View File

@@ -12,13 +12,16 @@ public @interface QmsPermission {
boolean enable() default true; //默认开启 boolean enable() default true; //默认开启
//部门数据查看权限 //部门数据查看权限
String deptLeaderRoleCode() default "ytjyDeptAndSub"; String deptDataRoleCodes() default ""; //指定部门数据查看角色,多值半角逗号分隔
//模块数据权限-具有此角色可查看本模块所有数据 //模块数据权限-具有此角色可查看本模块所有数据
String moduleDataRoleCode() default ""; String moduleDataRoleCodes() default "ytjyAdmin"; //指定所有数据查看角色,多值半角逗号分隔
String deptColumn() default "DEPT_ID"; String deptIdColumn() default "DEPT_ID"; //部门id列
String userColumn() default "CREATOR"; String userIdColumn() default "CREATOR"; //人员id列
//todo 考虑支持模块自定义扩展。参数传入表达式,通过表达式计算权限
String custom() default "";
} }

View File

@@ -1,219 +1,227 @@
//package com.zt.plat.module.qms.framework.datapermission; package com.zt.plat.module.qms.framework.datapermission;
//
//import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
//import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
//import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
//import com.baomidou.mybatisplus.extension.plugins.handler.MultiDataPermissionHandler; import com.baomidou.mybatisplus.extension.plugins.handler.MultiDataPermissionHandler;
//import com.zt.plat.framework.common.biz.system.permission.PermissionCommonApi; import com.zt.plat.framework.common.biz.system.permission.PermissionCommonApi;
//import com.zt.plat.framework.common.biz.system.permission.dto.DeptDataPermissionRespDTO; import com.zt.plat.framework.common.biz.system.permission.dto.DeptDataPermissionRespDTO;
//import com.zt.plat.framework.common.enums.UserTypeEnum; import com.zt.plat.framework.common.enums.UserTypeEnum;
//import com.zt.plat.framework.common.util.collection.CollectionUtils; import com.zt.plat.framework.common.util.collection.CollectionUtils;
//import com.zt.plat.framework.common.util.json.JsonUtils; import com.zt.plat.framework.common.util.json.JsonUtils;
//import com.zt.plat.framework.mybatis.core.util.MyBatisUtils; import com.zt.plat.framework.mybatis.core.util.MyBatisUtils;
//import com.zt.plat.framework.security.core.LoginUser; import com.zt.plat.framework.security.core.LoginUser;
//import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils;
//import com.zt.plat.framework.tenant.core.context.DeptContextHolder;
//import com.zt.plat.module.qms.core.aspect.annotation.QmsPermission; //import com.zt.plat.module.qms.core.aspect.annotation.QmsPermission;
//import lombok.extern.slf4j.Slf4j; import com.zt.plat.framework.tenant.core.context.DeptContextHolder;
//import net.sf.jsqlparser.expression.Alias; import lombok.extern.slf4j.Slf4j;
//import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.Alias;
//import net.sf.jsqlparser.expression.LongValue; import net.sf.jsqlparser.expression.Expression;
//import net.sf.jsqlparser.expression.NullValue; import net.sf.jsqlparser.expression.LongValue;
//import net.sf.jsqlparser.expression.operators.conditional.AndExpression; import net.sf.jsqlparser.expression.NullValue;
//import net.sf.jsqlparser.expression.operators.conditional.OrExpression; import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
//import net.sf.jsqlparser.expression.operators.relational.*; import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
//import net.sf.jsqlparser.schema.Column; import net.sf.jsqlparser.expression.operators.relational.*;
//import net.sf.jsqlparser.schema.Table; import net.sf.jsqlparser.schema.Column;
//import net.sf.jsqlparser.statement.select.ParenthesedSelect; import net.sf.jsqlparser.schema.Table;
//import net.sf.jsqlparser.statement.select.PlainSelect; import net.sf.jsqlparser.statement.select.ParenthesedSelect;
//import net.sf.jsqlparser.statement.select.SelectItem; import net.sf.jsqlparser.statement.select.PlainSelect;
//import org.springframework.beans.factory.annotation.Autowired; import net.sf.jsqlparser.statement.select.SelectItem;
//import org.springframework.stereotype.Component; import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.stereotype.Component;
//import java.lang.reflect.Method;
//import java.util.Map; import java.util.ArrayList;
//import java.util.Set; import java.util.Arrays;
//import java.util.concurrent.ConcurrentHashMap; import java.util.List;
// import java.util.Set;
//import static java.util.Collections.singletonList;
// import static java.util.Collections.singletonList;
//
///*
//* QMS权限处理 /*
//* 1、只能查看自己创建的数据 * QMS权限处理
//* 2、部门领导可查看本部门数据 * 1、只能查看自己创建的数据
//* 3、模块管理员可查看本模块数据 * 2、部门领导可查看本部门数据
//* * 3、模块管理员可查看本模块数据
//* */ *
//@Component * */
//@Slf4j @Component
//public class QMSMultiDataPermissionHandler implements MultiDataPermissionHandler { @Slf4j
// public class QMSMultiDataPermissionHandler implements MultiDataPermissionHandler {
// @Autowired private PermissionCommonApi permissionApi;
// /** @Autowired private PermissionCommonApi permissionApi;
// * LoginUser 的 Context 缓存 Key /**
// */ * LoginUser 的 Context 缓存 Key
// protected static final String QMS_PERMISSION_CONTEXT_KEY = "QMS_DATA_PERMISSION_KEY"; */
// static final Expression EXPRESSION_NULL = new NullValue(); protected static final String QMS_PERMISSION_CONTEXT_KEY = "QMS_DATA_PERMISSION";
// public static final String SYSTEM_USERS = "system_users"; static final Expression EXPRESSION_NULL = new NullValue();
// public static final String SYSTEM_USERS = "system_users";
// @Override private static final String SYSTEM_USER_DEPT = "system_user_dept";
// public Expression getSqlSegment(Table table, Expression where, String mappedStatementId) { private static final String DEPT_COLUMN_NAME = "dept_id";
// log.error("QMSMultiDataPermissionHandler Expression={}", where); private static final String USER_COLUMN_NAME = "user_id";
//
// //获取注解 @Override
// QmsPermission permissionAnnotation = getQmsPermission(mappedStatementId); public Expression getSqlSegment(Table table, Expression where, String mappedStatementId) {
// if (permissionAnnotation == null || !permissionAnnotation.enable()) return null; log.error("QMSMultiDataPermissionHandler Expression={}", where);
//
// return buildExpression(permissionAnnotation, table, where); //获取注解
// } if(!QMSPermissionContextHolder.shouldExecute())
// return null;
// /* try{
// * 构建权限sql*/ Expression expression = buildExpression(table, where);
// private Expression buildExpression(QmsPermission permissionAnnotation, Table table, Expression where) { return expression;
// LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); }catch (Exception e){
// if (loginUser == null) { log.error("QMSMultiDataPermissionHandler Expression={}", where);
// return null; }finally {
// } QMSPermissionContextHolder.clear();
// //管理员用户,不进行权限处理 }
// if (ObjectUtil.notEqual(loginUser.getUserType(), UserTypeEnum.ADMIN.getValue())) { return EXPRESSION_NULL;
// return null; }
// }
// String deptCol = permissionAnnotation.deptColumn(); /*
// String userCol = permissionAnnotation.userColumn(); * 构建权限sql*/
// String tableName = MyBatisUtils.getTableName(table); private Expression buildExpression(Table table, Expression where) {
// Alias tableAlias = table.getAlias(); LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
// DeptDataPermissionRespDTO qmsDataPermission = loginUser.getContext(QMS_PERMISSION_CONTEXT_KEY, DeptDataPermissionRespDTO.class); if (loginUser == null) {
// if(qmsDataPermission == null){ return EXPRESSION_NULL;
// qmsDataPermission = permissionApi.getDeptDataPermission(loginUser.getId()).getCheckedData(); }
// if (qmsDataPermission == null) { //管理员用户,不进行权限处理
// log.error("[getExpression][LoginUser({}) 获取数据权限为 null]", JsonUtils.toJsonString(loginUser)); if (ObjectUtil.notEqual(loginUser.getUserType(), UserTypeEnum.ADMIN.getValue())) {
// throw new NullPointerException(String.format("LoginUser(%d) Table(%s/%s) 未返回数据权限", loginUser.getId(), tableName, tableAlias.getName())); return null;
// } }
// // 添加到上下文中,避免重复计算 String deptIdCol = QMSPermissionContextHolder.getDeptIdColumn(); //部门id列
// loginUser.setContext(QMS_PERMISSION_CONTEXT_KEY, qmsDataPermission); String userIdCol = QMSPermissionContextHolder.getUserIdColumn(); //人员id列
// } String deptDataRoleCodes = QMSPermissionContextHolder.getDeptDataRoleCode(); //部门数据权限角色。具有该角色,然后按角色的权限属性判断。从而获得人员允许查看的部门数据
// String moduleDataRoleCodes = QMSPermissionContextHolder.getModuleDataRoleCodes(); //模块数据权限角色。
// // 计算有效的部门与自查标记:当存在上下文部门且未被忽略时,强制仅使用该部门,以避免默认全量或空权限分支 String custom = QMSPermissionContextHolder.getCustom(); //todo 自定义权限
// Long ctxDeptId = QMSPermissionContextHolder.getDeptId();
// Set<Long> effectiveDeptIds = qmsDataPermission.getDeptIds(); List<String> allRoleCode = new ArrayList<>();
// Boolean effectiveSelf = qmsDataPermission.getSelf(); if(!ObjectUtil.isEmpty(deptDataRoleCodes)){
// if (!QMSPermissionContextHolder.shouldIgnore() && ctxDeptId != null && ctxDeptId > 0L) { allRoleCode.addAll(Arrays.asList(deptDataRoleCodes.split( ",")));
// effectiveDeptIds = CollUtil.newHashSet(ctxDeptId); }
// } if(!ObjectUtil.isEmpty(moduleDataRoleCodes)){
// allRoleCode.addAll(Arrays.asList(moduleDataRoleCodes.split( ",")));
// // 情况一:仅当不存在上下文部门时,且 ALL 可查看全部,才无需拼接条件;若存在上下文部门则仍需基于该部门过滤 }
// if (ctxDeptId == null && qmsDataPermission.getAll()) { //查询角色
// return null;
// } String tableName = MyBatisUtils.getTableName(table);
// Alias tableAlias = table.getAlias();
// // 情况二:仅在有效部门集合为空且不可查看自己时,才认为无权限;若上下文提供部门,则跳过该兜底 DeptDataPermissionRespDTO qmsDataPermission = loginUser.getContext(QMS_PERMISSION_CONTEXT_KEY, DeptDataPermissionRespDTO.class);
// if (CollUtil.isEmpty(effectiveDeptIds) if(qmsDataPermission == null){
// && Boolean.FALSE.equals(effectiveSelf)) { try{
// return new EqualsTo(null, null); // WHERE null = null可以保证返回的数据为空 // DeptContextHolder.setRoleCodeList(allRoleCode);
// } qmsDataPermission = permissionApi.getDeptDataPermission(loginUser.getId()).getCheckedData();
// }catch (Exception e){
// // 情况三,拼接 Dept 和 Company User 的条件,最后组合 log.error("[getExpression][LoginUser({}) 获取角色权限为 null]", JsonUtils.toJsonString(loginUser));
// Expression deptExpression = buildDeptExpression(tableName, tableAlias, effectiveDeptIds); log.error("", e);
//// Expression deptExpression = buildDeptExpression(tableName, tableAlias, deptDataPermission.getDeptIds()); }finally {
// Expression userExpression = buildUserExpression(tableName, tableAlias, effectiveSelf, loginUser.getId()); // DeptContextHolder.clearRoleCodeList();
// if (deptExpression == null && userExpression == null) { }
// // TODO ZT获得不到条件的时候暂时不抛出异常而是不返回数据
// log.warn("[getExpression][LoginUser({}) Table({}/{}) DeptDataPermission({}) 构建的条件为空]", if (qmsDataPermission == null) {
// JsonUtils.toJsonString(loginUser), tableName, tableAlias, JsonUtils.toJsonString(qmsDataPermission)); log.error("[getExpression][LoginUser({}) 获取数据权限为 null]", JsonUtils.toJsonString(loginUser));
//// throw new NullPointerException(String.format("LoginUser(%d) Table(%s/%s) 构建的条件为空", throw new NullPointerException(String.format("LoginUser(%d) Table(%s/%s) 未返回数据权限", loginUser.getId(), tableName, tableAlias.getName()));
//// loginUser.getId(), tableName, tableAlias.getName())); }
// return EXPRESSION_NULL; // 添加到上下文中,避免重复计算
// } loginUser.setContext(QMS_PERMISSION_CONTEXT_KEY, qmsDataPermission);
// if (deptExpression == null) { }
// return userExpression; Long ctxDeptId = DeptContextHolder.getDeptId();
// } // 计算有效的部门与自查标记:当存在上下文部门且未被忽略时,强制仅使用该部门,以避免默认全量或空权限分支
// if (userExpression == null) { Set<Long> effectiveDeptIds = qmsDataPermission.getDeptIds();
// return deptExpression; Boolean effectiveSelf = qmsDataPermission.getSelf();
// } if (!DeptContextHolder.shouldIgnore() && ctxDeptId != null && ctxDeptId > 0L) {
// // 目前,如果有指定部门 + 可查看自己,采用 OR 条件。即WHERE (dept_id IN ? OR user_id = ?) effectiveDeptIds = CollUtil.newHashSet(ctxDeptId);
// return new ParenthesedExpressionList(new OrExpression(deptExpression, userExpression)); }
// // 情况一:仅当不存在上下文部门时,且 ALL 可查看全部,才无需拼接条件;若存在上下文部门则仍需基于该部门过滤
// return null; if (ctxDeptId == null && qmsDataPermission.getAll()) {
// } return null;
// }
// private Expression buildDeptExpression(String tableName, Alias tableAlias, Set<Long> deptIds) {
// // 如果不存在配置,则无需作为条件 // 情况二:仅在有效部门集合为空且不可查看自己时,才认为无权限;若上下文提供部门,则跳过该兜底
// String columnName = deptColumns.get(tableName); if (CollUtil.isEmpty(effectiveDeptIds) && Boolean.FALSE.equals(effectiveSelf)) {
// // 特殊处理system_users 表没有 dept_id 字段,已经迁移到了 user_dept 表 return new EqualsTo(null, null); // WHERE null = null可以保证返回的数据为空
// if (SYSTEM_USERS.equals(tableName)) { }
// // system_users 走 exists 子查询 user_dept
// if (CollUtil.isEmpty(deptIds)) { // 情况三,拼接 Dept 和 Company User 的条件,最后组合
// return null; Expression deptExpression = buildDeptExpression(tableName, deptIdCol, tableAlias, effectiveDeptIds);
// } Expression userExpression = buildUserExpression(tableName, userIdCol, tableAlias, effectiveSelf, loginUser.getId());
// // 构造 exists (select 1 from user_dept where user_dept.user_id = system_users.id and user_dept.dept_id in (...)) if (deptExpression == null && userExpression == null) {
// PlainSelect plainSelect = new PlainSelect(); // TODO获得不到条件的时候暂时不抛出异常而是不返回数据
// plainSelect.setSelectItems(singletonList(new SelectItem<>(new LongValue(1)))); log.warn("[getExpression][LoginUser({}) Table({}/{}) DeptDataPermission({}) 构建的条件为空]",
// Table userDept = new Table(SYSTEM_USER_DEPT); JsonUtils.toJsonString(loginUser), tableName, tableAlias, JsonUtils.toJsonString(qmsDataPermission));
// // 使用 user 表别名避免语法错误 // throw new NullPointerException(String.format("LoginUser(%d) Table(%s/%s) 构建的条件为空",
// Table user = new Table(tableAlias == null ? tableName : tableAlias.getName()); // loginUser.getId(), tableName, tableAlias.getName()));
// plainSelect.setFromItem(userDept); return null;
// // where user_dept.user_id = system_users.id and user_dept.dept_id in (...) }
// Column userDeptUserIdCol = new Column(userDept, USER_COLUMN_NAME); if (deptExpression == null) {
// Column systemUsersIdCol = new Column(user, "id"); return userExpression;
// EqualsTo userIdEquals = new EqualsTo(userDeptUserIdCol, systemUsersIdCol); }
// Column userDeptDeptIdCol = new Column(userDept, DEPT_COLUMN_NAME); if (userExpression == null) {
// InExpression deptIn = new InExpression(userDeptDeptIdCol, new ParenthesedExpressionList<>(new ExpressionList<>(CollectionUtils.convertList(deptIds, LongValue::new)))); return deptExpression;
// Expression whereExp = new AndExpression(userIdEquals, deptIn); }
// plainSelect.setWhere(whereExp); // 目前,如果有指定部门 + 可查看自己,采用 OR 条件。即WHERE (dept_id IN ? OR user_id = ?)
// // return new ParenthesedExpressionList(new OrExpression(deptExpression, userExpression));
// ParenthesedSelect parenthesedSelect = new ParenthesedSelect(); }
// parenthesedSelect.setSelect(plainSelect);
// // 构建 exists 表达式 private Expression buildDeptExpression(String tableName, String columnName, Alias tableAlias, Set<Long> deptIds) {
// ExistsExpression existsExpr = new ExistsExpression(); // 特殊处理system_users 表没有 dept_id 字段,已经迁移到了 user_dept 表
// existsExpr.setRightExpression(parenthesedSelect); if (SYSTEM_USERS.equals(tableName)) {
// return existsExpr; // system_users 走 exists 子查询 user_dept
// } if (CollUtil.isEmpty(deptIds)) {
// if (StrUtil.isEmpty(columnName)) { return null;
// return null; }
// } // 构造 exists (select 1 from user_dept where user_dept.user_id = system_users.id and user_dept.dept_id in (...))
// // 如果为空,则无条件 PlainSelect plainSelect = new PlainSelect();
// if (CollUtil.isEmpty(deptIds)) { plainSelect.setSelectItems(singletonList(new SelectItem<>(new LongValue(1))));
// return null; Table userDept = new Table(SYSTEM_USER_DEPT);
// } // 使用 user 表别名避免语法错误
// // 拼接条件 Table user = new Table(tableAlias == null ? tableName : tableAlias.getName());
// return new InExpression(MyBatisUtils.buildColumn(tableName, tableAlias, columnName), plainSelect.setFromItem(userDept);
// // Parenthesis 的目的,是提供 (1,2,3) 的 () 左右括号 // where user_dept.user_id = system_users.id and user_dept.dept_id in (...)
// new ParenthesedExpressionList(new ExpressionList<LongValue>(CollectionUtils.convertList(deptIds, LongValue::new)))); Column userDeptUserIdCol = new Column(userDept, USER_COLUMN_NAME);
// } Column systemUsersIdCol = new Column(user, "id");
// EqualsTo userIdEquals = new EqualsTo(userDeptUserIdCol, systemUsersIdCol);
// private Expression buildUserExpression(String tableName, Alias tableAlias, Boolean self, Long userId) { Column userDeptDeptIdCol = new Column(userDept, DEPT_COLUMN_NAME);
// // 如果不查看自己,则无需作为条件 InExpression deptIn = new InExpression(userDeptDeptIdCol, new ParenthesedExpressionList<>(new ExpressionList<>(CollectionUtils.convertList(deptIds, LongValue::new))));
// if (Boolean.FALSE.equals(self)) { Expression whereExp = new AndExpression(userIdEquals, deptIn);
// return null; plainSelect.setWhere(whereExp);
// } //
// String columnName = userColumns.get(tableName); ParenthesedSelect parenthesedSelect = new ParenthesedSelect();
// if (StrUtil.isEmpty(columnName)) { parenthesedSelect.setSelect(plainSelect);
// return null; // 构建 exists 表达式
// } ExistsExpression existsExpr = new ExistsExpression();
// // 拼接条件 existsExpr.setRightExpression(parenthesedSelect);
// return new EqualsTo(MyBatisUtils.buildColumn(tableName, tableAlias, columnName), new LongValue(userId)); return existsExpr;
// } }
// if (StrUtil.isEmpty(columnName)) {
// private static final Map<String, QmsPermission> CACHE = new ConcurrentHashMap<>(); return null;
// }
// private QmsPermission getQmsPermission(String mappedStatementId) { // 如果为空,则无条件
// try { if (CollUtil.isEmpty(deptIds)) {
// int idx = mappedStatementId.lastIndexOf("."); return null;
// String className = mappedStatementId.substring(0, idx); }
// String methodName = mappedStatementId.substring(idx + 1); // 拼接条件
// return new InExpression(MyBatisUtils.buildColumn(tableName, tableAlias, columnName),
// Class<?> mapperClass = Class.forName(className); // Parenthesis 的目的,是提供 (1,2,3) 的 () 左右括号
// new ParenthesedExpressionList(new ExpressionList<LongValue>(CollectionUtils.convertList(deptIds, LongValue::new))));
// for (Method method : mapperClass.getMethods()) { }
// if (method.getName().equals(methodName) && method.isAnnotationPresent(QmsPermission.class)) {
// return method.getAnnotation(QmsPermission.class); private Expression buildUserExpression(String tableName, String columnName, Alias tableAlias, Boolean self, Long userId) {
// } // 如果不查看自己,则无需作为条件
// } if (Boolean.FALSE.equals(self)) {
// } catch (Exception e) { return null;
// log.error("解析 QmsPermission 失败: {}", mappedStatementId, e); }
// } if (StrUtil.isEmpty(columnName)) {
// return null; return null;
// } }
// // 拼接条件
//} return new EqualsTo(MyBatisUtils.buildColumn(tableName, tableAlias, columnName), new LongValue(userId));
}
/*
* */
private DeptDataPermissionRespDTO getQmsDataPermission(){
return null;
}
}

View File

@@ -2,54 +2,80 @@ package com.zt.plat.module.qms.framework.datapermission;
import com.alibaba.ttl.TransmittableThreadLocal; import com.alibaba.ttl.TransmittableThreadLocal;
public class QMSPermissionContextHolder { public class QMSPermissionContextHolder {
/** 当前部门编号 */ // 是否启用
private static final ThreadLocal<Long> DEPT_ID = new TransmittableThreadLocal<>(); private static final ThreadLocal<Boolean> enable = new TransmittableThreadLocal<>();
/** 当前部门所属公司编号(用于一致性校验) */
private static final ThreadLocal<Long> COMPANY_ID = new TransmittableThreadLocal<>();
/** 是否忽略部门数据权限 */
private static final ThreadLocal<Boolean> IGNORE = new TransmittableThreadLocal<>();
public static Long getDeptId() { private static final ThreadLocal<String> deptDataRoleCodes = new TransmittableThreadLocal<>(); //部门数据查看权限
return DEPT_ID.get(); private static final ThreadLocal<String> moduleDataRoleCodes = new TransmittableThreadLocal<>(); //模块数据权限
private static final ThreadLocal<String> deptIdColumn = new TransmittableThreadLocal<>(); //部门id列
private static final ThreadLocal<String> userIdColumn = new TransmittableThreadLocal<>(); //人员id列
private static final ThreadLocal<String> custom = new TransmittableThreadLocal<>(); //人员id列
public static void setEnable(Boolean ignore) {
enable.set(ignore);
} }
public static Long getCompanyId() { public static boolean shouldExecute() {
return COMPANY_ID.get(); return Boolean.TRUE.equals(enable.get());
} }
/** public static void setContext(boolean enable, String deptDataRoleCode, String moduleDataRoleCode, String deptIdColumn, String userIdColumn, String custom){
* 设置部门与所属公司编号。 QMSPermissionContextHolder.setEnable(enable);
*/ QMSPermissionContextHolder.deptDataRoleCodes.set(deptDataRoleCode);
public static void setContext(Long deptId, Long companyId) { QMSPermissionContextHolder.moduleDataRoleCodes.set(moduleDataRoleCode);
DEPT_ID.set(deptId); QMSPermissionContextHolder.deptIdColumn.set(deptIdColumn);
COMPANY_ID.set(companyId); QMSPermissionContextHolder.userIdColumn.set(userIdColumn);
QMSPermissionContextHolder.custom.set(custom);
} }
public static void setDeptId(Long deptId) { public static void setDeptDataRoleCode(String deptDataRoleCode) {
DEPT_ID.set(deptId); QMSPermissionContextHolder.deptDataRoleCodes.set(deptDataRoleCode);
}
public static String getDeptDataRoleCode() {
return deptDataRoleCodes.get();
} }
public static void setCompanyId(Long companyId) { public static void setModuleDataRoleCodes(String moduleDataRoleCodes) {
COMPANY_ID.set(companyId); QMSPermissionContextHolder.moduleDataRoleCodes.set(moduleDataRoleCodes);
}
public static String getModuleDataRoleCodes() {
return moduleDataRoleCodes.get();
} }
public static boolean hasDeptId() { public static void setDeptIdColumn(String deptIdColumn) {
Long deptId = DEPT_ID.get(); QMSPermissionContextHolder.deptIdColumn.set(deptIdColumn);
return deptId != null && deptId > 0L; }
public static String getDeptIdColumn() {
if(deptIdColumn.get() == null || deptIdColumn.get().length() == 0)
return "DEPT_ID";
return deptIdColumn.get();
} }
public static void setIgnore(Boolean ignore) { public static void setUserIdColumn(String userIdColumn) {
IGNORE.set(ignore); QMSPermissionContextHolder.userIdColumn.set(userIdColumn);
}
public static String getUserIdColumn() {
if(userIdColumn.get() == null || userIdColumn.get().length() == 0)
return "CREATOR";
return userIdColumn.get();
} }
public static boolean shouldIgnore() { public static void setCustom(String custom) {
return Boolean.TRUE.equals(IGNORE.get()); QMSPermissionContextHolder.custom.set(custom);
}
public static String getCustom() {
return custom.get();
} }
public static void clear() { public static void clear() {
DEPT_ID.remove(); enable.remove();
COMPANY_ID.remove(); deptDataRoleCodes.remove();
IGNORE.remove(); moduleDataRoleCodes.remove();
deptIdColumn.remove();
userIdColumn.remove();
custom.remove();
} }
} }

View File

@@ -1,42 +1,42 @@
//package com.zt.plat.module.qms.framework.mybatis; package com.zt.plat.module.qms.framework.mybatis;
//
//
//import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
//import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor;
//import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
//import com.zt.plat.module.qms.framework.datapermission.QMSMultiDataPermissionHandler; import com.zt.plat.module.qms.framework.datapermission.QMSMultiDataPermissionHandler;
//import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
//import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.After;
//import org.springframework.beans.factory.SmartInitializingSingleton; import org.springframework.beans.factory.SmartInitializingSingleton;
//import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
//
//import java.util.List; import java.util.List;
//
//@Configuration //@Configuration
//public class QMSDataPermissionConfig implements SmartInitializingSingleton { public class QMSDataPermissionConfig implements SmartInitializingSingleton {
// @Autowired @Autowired
// private MybatisPlusInterceptor mybatisPlusInterceptor; private MybatisPlusInterceptor mybatisPlusInterceptor;
@Autowired
private QMSMultiDataPermissionHandler qmsMultiDataPermissionHandler;
@Override
public void afterSingletonsInstantiated() {
List<InnerInterceptor> interceptors = mybatisPlusInterceptor.getInterceptors();
// 避免重复注册
boolean exists = interceptors.stream()
.filter(i -> i instanceof DataPermissionInterceptor)
.map(i -> (DataPermissionInterceptor) i)
.anyMatch(i -> i.getDataPermissionHandler() == qmsMultiDataPermissionHandler);
if (!exists) {
mybatisPlusInterceptor.addInnerInterceptor(new DataPermissionInterceptor(qmsMultiDataPermissionHandler));
}
}
// @PostConstruct
// public void addDataPermissionInterceptor() {
// //
// @Autowired
// private QMSMultiDataPermissionHandler qmsMultiDataPermissionHandler;
//
// @Override
// public void afterSingletonsInstantiated() {
// List<InnerInterceptor> interceptors = mybatisPlusInterceptor.getInterceptors();
// // 避免重复注册
// boolean exists = interceptors.stream()
// .filter(i -> i instanceof DataPermissionInterceptor)
// .map(i -> (DataPermissionInterceptor) i)
// .anyMatch(i -> i.getDataPermissionHandler() == qmsMultiDataPermissionHandler);
// if (!exists) {
// mybatisPlusInterceptor.addInnerInterceptor(new DataPermissionInterceptor(qmsMultiDataPermissionHandler));
// }
// } // }
//
//// @PostConstruct }
//// public void addDataPermissionInterceptor() {
////
//// }
//
//}

View File

@@ -93,9 +93,9 @@ public class SupplierController extends AbstractFileUploadController implements
@Operation(summary = "获得供应商") @Operation(summary = "获得供应商")
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('qms:supplier:query')") @PreAuthorize("@ss.hasPermission('qms:supplier:query')")
public CommonResult<SupplierRespVO> getSupplier(@RequestParam("id") Long id) { public CommonResult<SupplierExtendRespVO> getSupplier(@RequestParam("id") Long id) {
SupplierDO supplier = supplierService.getSupplier(id); SupplierExtendRespVO supplier = supplierService.getSupplier(id);
return success(BeanUtils.toBean(supplier, SupplierRespVO.class)); return success(supplier);
} }
@GetMapping("/page") @GetMapping("/page")

View File

@@ -1,5 +1,7 @@
package com.zt.plat.module.qms.office.supplier.controller.admin; package com.zt.plat.module.qms.office.supplier.controller.admin;
import com.zt.plat.module.qms.business.reportdoc.controller.vo.ReportDocumentMainRespVO;
import com.zt.plat.module.qms.business.reportdoc.controller.vo.ReportDocumentMainSaveReqVO;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationPageReqVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationPageReqVO;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationRespVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationRespVO;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationSaveReqVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationSaveReqVO;
@@ -57,14 +59,14 @@ public class SupplierEvaluationController extends AbstractFileUploadController i
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建供应商评价") @Operation(summary = "创建供应商评价")
@PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:create')") // @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:create')")
public CommonResult<SupplierEvaluationRespVO> createSupplierEvaluation(@Valid @RequestBody SupplierEvaluationSaveReqVO createReqVO) { public CommonResult<SupplierEvaluationRespVO> createSupplierEvaluation(@Valid @RequestBody SupplierEvaluationSaveReqVO createReqVO) {
return success(supplierEvaluationService.createSupplierEvaluation(createReqVO)); return success(supplierEvaluationService.createSupplierEvaluation(createReqVO));
} }
@PutMapping("/update") @PutMapping("/update")
@Operation(summary = "更新供应商评价") @Operation(summary = "更新供应商评价")
@PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:update')") // @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:update')")
public CommonResult<Boolean> updateSupplierEvaluation(@Valid @RequestBody SupplierEvaluationSaveReqVO updateReqVO) { public CommonResult<Boolean> updateSupplierEvaluation(@Valid @RequestBody SupplierEvaluationSaveReqVO updateReqVO) {
supplierEvaluationService.updateSupplierEvaluation(updateReqVO); supplierEvaluationService.updateSupplierEvaluation(updateReqVO);
return success(true); return success(true);
@@ -73,7 +75,7 @@ public class SupplierEvaluationController extends AbstractFileUploadController i
@DeleteMapping("/delete") @DeleteMapping("/delete")
@Operation(summary = "删除供应商评价") @Operation(summary = "删除供应商评价")
@Parameter(name = "id", description = "编号", required = true) @Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:delete')") // @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:delete')")
public CommonResult<Boolean> deleteSupplierEvaluation(@RequestParam("id") Long id) { public CommonResult<Boolean> deleteSupplierEvaluation(@RequestParam("id") Long id) {
supplierEvaluationService.deleteSupplierEvaluation(id); supplierEvaluationService.deleteSupplierEvaluation(id);
return success(true); return success(true);
@@ -82,7 +84,7 @@ public class SupplierEvaluationController extends AbstractFileUploadController i
@DeleteMapping("/delete-list") @DeleteMapping("/delete-list")
@Parameter(name = "ids", description = "编号", required = true) @Parameter(name = "ids", description = "编号", required = true)
@Operation(summary = "批量删除供应商评价") @Operation(summary = "批量删除供应商评价")
@PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:delete')") // @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:delete')")
public CommonResult<Boolean> deleteSupplierEvaluationList(@RequestBody BatchDeleteReqVO req) { public CommonResult<Boolean> deleteSupplierEvaluationList(@RequestBody BatchDeleteReqVO req) {
supplierEvaluationService.deleteSupplierEvaluationListByIds(req.getIds()); supplierEvaluationService.deleteSupplierEvaluationListByIds(req.getIds());
return success(true); return success(true);
@@ -91,7 +93,7 @@ public class SupplierEvaluationController extends AbstractFileUploadController i
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得供应商评价") @Operation(summary = "获得供应商评价")
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:query')") // @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:query')")
public CommonResult<SupplierEvaluationRespVO> getSupplierEvaluation(@RequestParam("id") Long id) { public CommonResult<SupplierEvaluationRespVO> getSupplierEvaluation(@RequestParam("id") Long id) {
SupplierEvaluationDO supplierEvaluation = supplierEvaluationService.getSupplierEvaluation(id); SupplierEvaluationDO supplierEvaluation = supplierEvaluationService.getSupplierEvaluation(id);
return success(BeanUtils.toBean(supplierEvaluation, SupplierEvaluationRespVO.class)); return success(BeanUtils.toBean(supplierEvaluation, SupplierEvaluationRespVO.class));
@@ -99,10 +101,16 @@ public class SupplierEvaluationController extends AbstractFileUploadController i
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "获得供应商评价分页") @Operation(summary = "获得供应商评价分页")
@PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:query')") // @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:query')")
public CommonResult<PageResult<SupplierEvaluationRespVO>> getSupplierEvaluationPage(@Valid SupplierEvaluationPageReqVO pageReqVO) { public CommonResult<PageResult<SupplierEvaluationRespVO>> getSupplierEvaluationPage(@Valid SupplierEvaluationPageReqVO pageReqVO) {
PageResult<SupplierEvaluationDO> pageResult = supplierEvaluationService.getSupplierEvaluationPage(pageReqVO); PageResult<SupplierEvaluationRespVO> pageResult = supplierEvaluationService.getSupplierEvaluationPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, SupplierEvaluationRespVO.class)); return success(pageResult);
}
@PostMapping("/createProcessInstance")
@Operation(summary = "发起流程")
public CommonResult<SupplierEvaluationRespVO> createProcessInstance(@Valid @RequestBody SupplierEvaluationSaveReqVO createReqVO) {
return supplierEvaluationService.createProcessInstance(createReqVO);
} }
@GetMapping("/export-excel") @GetMapping("/export-excel")
@@ -112,7 +120,7 @@ public class SupplierEvaluationController extends AbstractFileUploadController i
public void exportSupplierEvaluationExcel(@Valid SupplierEvaluationPageReqVO pageReqVO, public void exportSupplierEvaluationExcel(@Valid SupplierEvaluationPageReqVO pageReqVO,
HttpServletResponse response) throws IOException { HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<SupplierEvaluationDO> list = supplierEvaluationService.getSupplierEvaluationPage(pageReqVO).getList(); List<SupplierEvaluationRespVO> list = supplierEvaluationService.getSupplierEvaluationPage(pageReqVO).getList();
// 导出 Excel // 导出 Excel
ExcelUtils.write(response, "供应商评价.xls", "数据", SupplierEvaluationRespVO.class, ExcelUtils.write(response, "供应商评价.xls", "数据", SupplierEvaluationRespVO.class,
BeanUtils.toBean(list, SupplierEvaluationRespVO.class)); BeanUtils.toBean(list, SupplierEvaluationRespVO.class));

View File

@@ -57,14 +57,14 @@ public class SupplierPropertiesController extends AbstractFileUploadController i
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建供应商属性") @Operation(summary = "创建供应商属性")
@PreAuthorize("@ss.hasPermission('qms:supplier-properties:create')") // @PreAuthorize("@ss.hasPermission('qms:supplier-properties:create')")
public CommonResult<SupplierPropertiesRespVO> createSupplierProperties(@Valid @RequestBody SupplierPropertiesSaveReqVO createReqVO) { public CommonResult<SupplierPropertiesRespVO> createSupplierProperties(@Valid @RequestBody SupplierPropertiesSaveReqVO createReqVO) {
return success(supplierPropertiesService.createSupplierProperties(createReqVO)); return success(supplierPropertiesService.createSupplierProperties(createReqVO));
} }
@PutMapping("/update") @PutMapping("/update")
@Operation(summary = "更新供应商属性") @Operation(summary = "更新供应商属性")
@PreAuthorize("@ss.hasPermission('qms:supplier-properties:update')") // @PreAuthorize("@ss.hasPermission('qms:supplier-properties:update')")
public CommonResult<Boolean> updateSupplierProperties(@Valid @RequestBody SupplierPropertiesSaveReqVO updateReqVO) { public CommonResult<Boolean> updateSupplierProperties(@Valid @RequestBody SupplierPropertiesSaveReqVO updateReqVO) {
supplierPropertiesService.updateSupplierProperties(updateReqVO); supplierPropertiesService.updateSupplierProperties(updateReqVO);
return success(true); return success(true);
@@ -73,7 +73,7 @@ public class SupplierPropertiesController extends AbstractFileUploadController i
@DeleteMapping("/delete") @DeleteMapping("/delete")
@Operation(summary = "删除供应商属性") @Operation(summary = "删除供应商属性")
@Parameter(name = "id", description = "编号", required = true) @Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('qms:supplier-properties:delete')") // @PreAuthorize("@ss.hasPermission('qms:supplier-properties:delete')")
public CommonResult<Boolean> deleteSupplierProperties(@RequestParam("id") Long id) { public CommonResult<Boolean> deleteSupplierProperties(@RequestParam("id") Long id) {
supplierPropertiesService.deleteSupplierProperties(id); supplierPropertiesService.deleteSupplierProperties(id);
return success(true); return success(true);
@@ -91,7 +91,7 @@ public class SupplierPropertiesController extends AbstractFileUploadController i
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得供应商属性") @Operation(summary = "获得供应商属性")
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('qms:supplier-properties:query')") // @PreAuthorize("@ss.hasPermission('qms:supplier-properties:query')")
public CommonResult<SupplierPropertiesRespVO> getSupplierProperties(@RequestParam("id") Long id) { public CommonResult<SupplierPropertiesRespVO> getSupplierProperties(@RequestParam("id") Long id) {
SupplierPropertiesDO supplierProperties = supplierPropertiesService.getSupplierProperties(id); SupplierPropertiesDO supplierProperties = supplierPropertiesService.getSupplierProperties(id);
return success(BeanUtils.toBean(supplierProperties, SupplierPropertiesRespVO.class)); return success(BeanUtils.toBean(supplierProperties, SupplierPropertiesRespVO.class));
@@ -99,7 +99,7 @@ public class SupplierPropertiesController extends AbstractFileUploadController i
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "获得供应商属性分页") @Operation(summary = "获得供应商属性分页")
@PreAuthorize("@ss.hasPermission('qms:supplier-properties:query')") // @PreAuthorize("@ss.hasPermission('qms:supplier-properties:query')")
public CommonResult<PageResult<SupplierPropertiesRespVO>> getSupplierPropertiesPage(@Valid SupplierPropertiesPageReqVO pageReqVO) { public CommonResult<PageResult<SupplierPropertiesRespVO>> getSupplierPropertiesPage(@Valid SupplierPropertiesPageReqVO pageReqVO) {
PageResult<SupplierPropertiesDO> pageResult = supplierPropertiesService.getSupplierPropertiesPage(pageReqVO); PageResult<SupplierPropertiesDO> pageResult = supplierPropertiesService.getSupplierPropertiesPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, SupplierPropertiesRespVO.class)); return success(BeanUtils.toBean(pageResult, SupplierPropertiesRespVO.class));

View File

@@ -1,5 +1,6 @@
package com.zt.plat.module.qms.office.supplier.controller.vo; package com.zt.plat.module.qms.office.supplier.controller.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.*; import lombok.*;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import com.zt.plat.framework.common.pojo.PageParam; import com.zt.plat.framework.common.pojo.PageParam;
@@ -50,4 +51,12 @@ public class SupplierEvaluationPageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime; private LocalDateTime[] createTime;
//==============扩展字段===============
@Schema(description = "供应商名称")
private String supplierName;
@Schema(description = "审批签名")
private String signatureInfo;
} }

View File

@@ -1,5 +1,6 @@
package com.zt.plat.module.qms.office.supplier.controller.vo; package com.zt.plat.module.qms.office.supplier.controller.vo;
import com.zt.plat.module.qms.core.aspect.annotation.Dict;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
@@ -45,6 +46,7 @@ public class SupplierEvaluationRespVO {
@Schema(description = "流程审批状态", example = "2") @Schema(description = "流程审批状态", example = "2")
@ExcelProperty("流程审批状态") @ExcelProperty("流程审批状态")
@Dict(dicCode = "flow_status")
private String flowStatus; private String flowStatus;
@Schema(description = "流程实例id", example = "24931") @Schema(description = "流程实例id", example = "24931")
@@ -63,4 +65,13 @@ public class SupplierEvaluationRespVO {
@ExcelProperty("创建时间") @ExcelProperty("创建时间")
private LocalDateTime createTime; private LocalDateTime createTime;
//==============扩展字段===============
@Schema(description = "供应商名称")
private String supplierName;
@Schema(description = "审批签名")
@ExcelProperty("审批签名")
private String signatureInfo;
} }

View File

@@ -1,5 +1,6 @@
package com.zt.plat.module.qms.office.supplier.controller.vo; package com.zt.plat.module.qms.office.supplier.controller.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
@@ -45,4 +46,7 @@ public class SupplierEvaluationSaveReqVO {
@Schema(description = "备注") @Schema(description = "备注")
private String remark; private String remark;
@Schema(description = "审批签名")
private String signatureInfo;
} }

View File

@@ -0,0 +1,26 @@
package com.zt.plat.module.qms.office.supplier.controller.vo;
import cn.hutool.core.collection.CollUtil;
import com.zt.plat.module.qms.office.supplier.dal.dataobject.SupplierPropertiesDO;
import lombok.Data;
import java.util.List;
import java.util.stream.Collectors;
@Data
public class SupplierExtendRespVO extends SupplierRespVO {
private String certification;
public String getCertification() {
if (CollUtil.isNotEmpty(this.supplierPropertiesList)) {
return this.supplierPropertiesList.stream().map(m -> m.getSubitemCode()).collect(Collectors.joining(""));
}
return null;
}
private List<SupplierPropertiesDO> supplierPropertiesList;
}

View File

@@ -21,6 +21,12 @@ public class SupplierPageReqVO extends PageParam {
@Schema(description = "类型", example = "1") @Schema(description = "类型", example = "1")
private String type; private String type;
@Schema(description = "统一社会信用代码")
private String creditCode;
@Schema(description = "注册日期")
private LocalDateTime registerDate;
@Schema(description = "地址") @Schema(description = "地址")
private String address; private String address;

View File

@@ -29,6 +29,9 @@ public class SupplierPropertiesPageReqVO extends PageParam {
@Schema(description = "名称", example = "王五") @Schema(description = "名称", example = "王五")
private String name; private String name;
@Schema(description = "说明")
private String content;
@Schema(description = "有效期开始") @Schema(description = "有效期开始")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] startDate; private LocalDateTime[] startDate;

View File

@@ -1,5 +1,6 @@
package com.zt.plat.module.qms.office.supplier.controller.vo; package com.zt.plat.module.qms.office.supplier.controller.vo;
import com.zt.plat.module.qms.core.aspect.annotation.Dict;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
@@ -30,12 +31,17 @@ public class SupplierPropertiesRespVO {
@Schema(description = "子业务编码") @Schema(description = "子业务编码")
@ExcelProperty("子业务编码") @ExcelProperty("子业务编码")
@Dict(dicCode = "")
private String subitemCode; private String subitemCode;
@Schema(description = "名称", example = "王五") @Schema(description = "名称", example = "王五")
@ExcelProperty("名称") @ExcelProperty("名称")
private String name; private String name;
@Schema(description = "说明")
@ExcelProperty("说明")
private String content;
@Schema(description = "有效期开始") @Schema(description = "有效期开始")
@ExcelProperty("有效期开始") @ExcelProperty("有效期开始")
private LocalDateTime startDate; private LocalDateTime startDate;

View File

@@ -28,6 +28,9 @@ public class SupplierPropertiesSaveReqVO {
@Schema(description = "名称", example = "王五") @Schema(description = "名称", example = "王五")
private String name; private String name;
@Schema(description = "说明")
private String content;
@Schema(description = "有效期开始") @Schema(description = "有效期开始")
private LocalDateTime startDate; private LocalDateTime startDate;

View File

@@ -27,6 +27,14 @@ public class SupplierRespVO {
@ExcelProperty("类型") @ExcelProperty("类型")
private String type; private String type;
@Schema(description = "统一社会信用代码")
@ExcelProperty("统一社会信用代码")
private String creditCode;
@Schema(description = "注册日期")
@ExcelProperty("注册日期")
private LocalDateTime registerDate;
@Schema(description = "地址") @Schema(description = "地址")
@ExcelProperty("地址") @ExcelProperty("地址")
private String address; private String address;
@@ -58,5 +66,4 @@ public class SupplierRespVO {
@Schema(description = "创建时间") @Schema(description = "创建时间")
@ExcelProperty("创建时间") @ExcelProperty("创建时间")
private LocalDateTime createTime; private LocalDateTime createTime;
} }

View File

@@ -1,8 +1,11 @@
package com.zt.plat.module.qms.office.supplier.controller.vo; package com.zt.plat.module.qms.office.supplier.controller.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 供应商新增/修改 Request VO") @Schema(description = "管理后台 - 供应商新增/修改 Request VO")
@Data @Data
public class SupplierSaveReqVO { public class SupplierSaveReqVO {
@@ -19,6 +22,12 @@ public class SupplierSaveReqVO {
@Schema(description = "类型", example = "1") @Schema(description = "类型", example = "1")
private String type; private String type;
@Schema(description = "统一社会信用代码")
private String creditCode;
@Schema(description = "注册日期")
private LocalDateTime registerDate;
@Schema(description = "地址") @Schema(description = "地址")
private String address; private String address;

View File

@@ -3,6 +3,9 @@ package com.zt.plat.module.qms.office.supplier.dal.dataobject;
import lombok.*; import lombok.*;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO; import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO;
import java.time.LocalDateTime;
/** /**
* 供应商 DO * 供应商 DO
* *
@@ -44,6 +47,16 @@ public class SupplierDO extends BusinessBaseDO {
@TableField("TP") @TableField("TP")
private String type; private String type;
/** /**
* 统一社会信用代码
*/
@TableField("CRDT_CD")
private String creditCode;
/**
* 注册日期
*/
@TableField("REG_DT")
private LocalDateTime registerDate;
/**
* 地址 * 地址
*/ */
@TableField("ADR") @TableField("ADR")

View File

@@ -77,6 +77,11 @@ public class SupplierEvaluationDO extends BusinessBaseDO {
@TableField("FLW_INSC_ID") @TableField("FLW_INSC_ID")
private String flowInstanceId; private String flowInstanceId;
/** /**
* 签名信息
*/
@TableField("SIG_INF")
private String signatureInfo;
/**
* 所属部门 * 所属部门
*/ */
@TableField("SYS_DEPT_CD") @TableField("SYS_DEPT_CD")

View File

@@ -57,6 +57,11 @@ public class SupplierPropertiesDO extends BusinessBaseDO {
*/ */
@TableField("NAME") @TableField("NAME")
private String name; private String name;
/**
* 说明
*/
@TableField("CNTT")
private String content;
/** /**
* 有效期开始 * 有效期开始
*/ */

View File

@@ -3,6 +3,9 @@ package com.zt.plat.module.qms.office.supplier.dal.mapper;
import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationRespVO;
import com.zt.plat.module.qms.office.supplier.dal.dataobject.SupplierDO;
import com.zt.plat.module.qms.office.supplier.dal.dataobject.SupplierEvaluationDO; import com.zt.plat.module.qms.office.supplier.dal.dataobject.SupplierEvaluationDO;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationPageReqVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationPageReqVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@@ -15,8 +18,11 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface SupplierEvaluationMapper extends BaseMapperX<SupplierEvaluationDO> { public interface SupplierEvaluationMapper extends BaseMapperX<SupplierEvaluationDO> {
default PageResult<SupplierEvaluationDO> selectPage(SupplierEvaluationPageReqVO reqVO) { default PageResult<SupplierEvaluationRespVO> selectPage(SupplierEvaluationPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<SupplierEvaluationDO>() return selectJoinPage(reqVO,SupplierEvaluationRespVO.class, new MPJLambdaWrapperX<SupplierEvaluationDO>()
.leftJoin(SupplierDO.class,SupplierDO::getId, SupplierEvaluationDO::getSupplierId)
.selectAll(SupplierEvaluationDO.class)
.selectAs(SupplierDO::getName, SupplierEvaluationRespVO::getSupplierName)
.eqIfPresent(SupplierEvaluationDO::getSupplierId, reqVO.getSupplierId()) .eqIfPresent(SupplierEvaluationDO::getSupplierId, reqVO.getSupplierId())
.eqIfPresent(SupplierEvaluationDO::getFormId, reqVO.getFormId()) .eqIfPresent(SupplierEvaluationDO::getFormId, reqVO.getFormId())
.eqIfPresent(SupplierEvaluationDO::getContent, reqVO.getContent()) .eqIfPresent(SupplierEvaluationDO::getContent, reqVO.getContent())
@@ -29,7 +35,10 @@ public interface SupplierEvaluationMapper extends BaseMapperX<SupplierEvaluation
.eqIfPresent(SupplierEvaluationDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode()) .eqIfPresent(SupplierEvaluationDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
.eqIfPresent(SupplierEvaluationDO::getRemark, reqVO.getRemark()) .eqIfPresent(SupplierEvaluationDO::getRemark, reqVO.getRemark())
.betweenIfPresent(SupplierEvaluationDO::getCreateTime, reqVO.getCreateTime()) .betweenIfPresent(SupplierEvaluationDO::getCreateTime, reqVO.getCreateTime())
.likeIfPresent(SupplierDO::getName, reqVO.getSupplierName())
.orderByDesc(SupplierEvaluationDO::getId)); .orderByDesc(SupplierEvaluationDO::getId));
} }
}
}

View File

@@ -3,10 +3,16 @@ package com.zt.plat.module.qms.office.supplier.dal.mapper;
import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.zt.plat.module.qms.enums.QmsSupplierConstant;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierExtendRespVO;
import com.zt.plat.module.qms.office.supplier.dal.dataobject.SupplierDO; import com.zt.plat.module.qms.office.supplier.dal.dataobject.SupplierDO;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierPageReqVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierPageReqVO;
import com.zt.plat.module.qms.office.supplier.dal.dataobject.SupplierPropertiesDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/** /**
* 供应商 Mapper * 供应商 Mapper
* *
@@ -21,6 +27,8 @@ public interface SupplierMapper extends BaseMapperX<SupplierDO> {
.eqIfPresent(SupplierDO::getCode, reqVO.getCode()) .eqIfPresent(SupplierDO::getCode, reqVO.getCode())
.eqIfPresent(SupplierDO::getType, reqVO.getType()) .eqIfPresent(SupplierDO::getType, reqVO.getType())
.eqIfPresent(SupplierDO::getAddress, reqVO.getAddress()) .eqIfPresent(SupplierDO::getAddress, reqVO.getAddress())
.eqIfPresent(SupplierDO::getCreditCode, reqVO.getCreditCode())
.eqIfPresent(SupplierDO::getRegisterDate, reqVO.getRegisterDate())
.eqIfPresent(SupplierDO::getContact, reqVO.getContact()) .eqIfPresent(SupplierDO::getContact, reqVO.getContact())
.eqIfPresent(SupplierDO::getMobile, reqVO.getMobile()) .eqIfPresent(SupplierDO::getMobile, reqVO.getMobile())
.eqIfPresent(SupplierDO::getBusinessScope, reqVO.getBusinessScope()) .eqIfPresent(SupplierDO::getBusinessScope, reqVO.getBusinessScope())
@@ -30,4 +38,16 @@ public interface SupplierMapper extends BaseMapperX<SupplierDO> {
.orderByDesc(SupplierDO::getId)); .orderByDesc(SupplierDO::getId));
} }
default SupplierExtendRespVO selectOneWithCertifications(Long id) {
return selectJoinOne(SupplierExtendRespVO.class,
new MPJLambdaWrapperX<SupplierDO>()
.selectAll(SupplierDO.class)
.selectCollection(SupplierPropertiesDO.class, SupplierExtendRespVO::getSupplierPropertiesList)
.leftJoin(SupplierPropertiesDO.class, SupplierPropertiesDO::getSupplierId, SupplierDO::getId)
.eq(SupplierDO::getId, id)
.eq(SupplierPropertiesDO::getBusinessType, QmsSupplierConstant.CERTIFICATION_KEY)
);
}
} }

View File

@@ -1,5 +1,6 @@
package com.zt.plat.module.qms.office.supplier.dal.mapper; package com.zt.plat.module.qms.office.supplier.dal.mapper;
import java.util.*;
import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
@@ -22,6 +23,7 @@ public interface SupplierPropertiesMapper extends BaseMapperX<SupplierProperties
.eqIfPresent(SupplierPropertiesDO::getBusinessCode, reqVO.getBusinessCode()) .eqIfPresent(SupplierPropertiesDO::getBusinessCode, reqVO.getBusinessCode())
.eqIfPresent(SupplierPropertiesDO::getSubitemCode, reqVO.getSubitemCode()) .eqIfPresent(SupplierPropertiesDO::getSubitemCode, reqVO.getSubitemCode())
.likeIfPresent(SupplierPropertiesDO::getName, reqVO.getName()) .likeIfPresent(SupplierPropertiesDO::getName, reqVO.getName())
.eqIfPresent(SupplierPropertiesDO::getContent, reqVO.getContent())
.betweenIfPresent(SupplierPropertiesDO::getStartDate, reqVO.getStartDate()) .betweenIfPresent(SupplierPropertiesDO::getStartDate, reqVO.getStartDate())
.betweenIfPresent(SupplierPropertiesDO::getEndDate, reqVO.getEndDate()) .betweenIfPresent(SupplierPropertiesDO::getEndDate, reqVO.getEndDate())
.eqIfPresent(SupplierPropertiesDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode()) .eqIfPresent(SupplierPropertiesDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
@@ -29,5 +31,13 @@ public interface SupplierPropertiesMapper extends BaseMapperX<SupplierProperties
.betweenIfPresent(SupplierPropertiesDO::getCreateTime, reqVO.getCreateTime()) .betweenIfPresent(SupplierPropertiesDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(SupplierPropertiesDO::getId)); .orderByDesc(SupplierPropertiesDO::getId));
} }
default List<SupplierPropertiesDO> selectList(SupplierPropertiesPageReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<SupplierPropertiesDO>()
.eqIfPresent(SupplierPropertiesDO::getSupplierId, reqVO.getSupplierId())
.eqIfPresent(SupplierPropertiesDO::getBusinessType, reqVO.getBusinessType())
.eqIfPresent(SupplierPropertiesDO::getBusinessCode, reqVO.getBusinessCode())
.eqIfPresent(SupplierPropertiesDO::getSubitemCode, reqVO.getSubitemCode())
.orderByDesc(SupplierPropertiesDO::getId));
}
} }

View File

@@ -2,6 +2,9 @@ package com.zt.plat.module.qms.office.supplier.service;
import java.util.*; import java.util.*;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.module.qms.business.reportdoc.controller.vo.ReportDocumentMainRespVO;
import com.zt.plat.module.qms.business.reportdoc.controller.vo.ReportDocumentMainSaveReqVO;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationPageReqVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationPageReqVO;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationRespVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationRespVO;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationSaveReqVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationSaveReqVO;
@@ -59,6 +62,9 @@ public interface SupplierEvaluationService {
* @param pageReqVO 分页查询 * @param pageReqVO 分页查询
* @return 供应商评价分页 * @return 供应商评价分页
*/ */
PageResult<SupplierEvaluationDO> getSupplierEvaluationPage(SupplierEvaluationPageReqVO pageReqVO); PageResult<SupplierEvaluationRespVO> getSupplierEvaluationPage(SupplierEvaluationPageReqVO pageReqVO);
//发起流程
CommonResult<SupplierEvaluationRespVO> createProcessInstance(SupplierEvaluationSaveReqVO entity);
} }

View File

@@ -1,13 +1,37 @@
package com.zt.plat.module.qms.office.supplier.service; package com.zt.plat.module.qms.office.supplier.service;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.security.core.LoginUser;
import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils;
import com.zt.plat.module.bpm.api.task.BpmProcessInstanceApi;
import com.zt.plat.module.bpm.api.task.BpmTaskApi;
import com.zt.plat.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import com.zt.plat.module.bpm.api.task.dto.BpmTaskApproveReqDTO;
import com.zt.plat.module.bpm.api.task.dto.BpmTaskRespDTO;
import com.zt.plat.module.qms.api.task.BMPCallbackInterface;
import com.zt.plat.module.qms.api.task.dto.QmsBpmDTO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigUserSignatureDO;
import com.zt.plat.module.qms.business.config.service.ConfigUserSignatureService;
import com.zt.plat.module.qms.business.reportdoc.controller.vo.ReportDocumentMainRespVO;
import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.ReportDocumentMainDO;
import com.zt.plat.module.qms.common.data.service.DataKeyCheckService;
import com.zt.plat.module.qms.enums.QmsBpmConstant;
import com.zt.plat.module.qms.enums.QmsCommonConstant;
import com.zt.plat.module.qms.enums.QmsSupplierConstant;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationPageReqVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationPageReqVO;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationRespVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationRespVO;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationSaveReqVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationSaveReqVO;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.util.ObjectUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import com.zt.plat.module.qms.office.supplier.dal.dataobject.SupplierEvaluationDO; import com.zt.plat.module.qms.office.supplier.dal.dataobject.SupplierEvaluationDO;
@@ -17,25 +41,32 @@ import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.module.qms.office.supplier.dal.mapper.SupplierEvaluationMapper; import com.zt.plat.module.qms.office.supplier.dal.mapper.SupplierEvaluationMapper;
import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception0;
import static com.zt.plat.framework.common.util.collection.CollectionUtils.convertList; import static com.zt.plat.framework.common.util.collection.CollectionUtils.convertList;
import static com.zt.plat.module.qms.enums.ErrorCodeConstants.*; import static com.zt.plat.module.qms.enums.ErrorCodeConstants.*;
import static com.zt.plat.module.qms.enums.QmsBpmConstant.BPM_CALLBACK_BEAN_NAME;
/** /**
* 供应商评价 Service 实现类 * 供应商评价 Service 实现类
* *
* @author 后台管理 * @author 后台管理
*/ */
@Service @Service("supplierEvaluationService")
@Validated @Validated
public class SupplierEvaluationServiceImpl implements SupplierEvaluationService { public class SupplierEvaluationServiceImpl implements SupplierEvaluationService, BMPCallbackInterface {
@Resource @Resource private SupplierEvaluationMapper supplierEvaluationMapper;
private SupplierEvaluationMapper supplierEvaluationMapper; @Resource private BpmProcessInstanceApi bpmProcessInstanceApi;
@Resource private BpmTaskApi bpmTaskApi;
@Resource private ConfigUserSignatureService configUserSignatureService;
@Resource private DataKeyCheckService dataKeyCheckService;
@Override @Override
public SupplierEvaluationRespVO createSupplierEvaluation(SupplierEvaluationSaveReqVO createReqVO) { public SupplierEvaluationRespVO createSupplierEvaluation(SupplierEvaluationSaveReqVO createReqVO) {
// 插入 // 插入
SupplierEvaluationDO supplierEvaluation = BeanUtils.toBean(createReqVO, SupplierEvaluationDO.class); SupplierEvaluationDO supplierEvaluation = BeanUtils.toBean(createReqVO, SupplierEvaluationDO.class);
supplierEvaluation.setFlowStatus(QmsCommonConstant.NOT_START);
supplierEvaluationMapper.insert(supplierEvaluation); supplierEvaluationMapper.insert(supplierEvaluation);
// 返回 // 返回
return BeanUtils.toBean(supplierEvaluation, SupplierEvaluationRespVO.class); return BeanUtils.toBean(supplierEvaluation, SupplierEvaluationRespVO.class);
@@ -85,8 +116,166 @@ public class SupplierEvaluationServiceImpl implements SupplierEvaluationService
} }
@Override @Override
public PageResult<SupplierEvaluationDO> getSupplierEvaluationPage(SupplierEvaluationPageReqVO pageReqVO) { public PageResult<SupplierEvaluationRespVO> getSupplierEvaluationPage(SupplierEvaluationPageReqVO pageReqVO) {
return supplierEvaluationMapper.selectPage(pageReqVO); return supplierEvaluationMapper.selectPage(pageReqVO);
} }
@Override
public CommonResult<SupplierEvaluationRespVO> createProcessInstance(SupplierEvaluationSaveReqVO param) {
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
//当前登录用户昵称
String nickName = SecurityFrameworkUtils.getLoginUserNickname();
Long id = param.getId();
SupplierEvaluationDO entity = getSupplierEvaluation(id);
String flowInsId = entity.getFlowInstanceId();
if(!ObjectUtils.isEmpty(flowInsId)){
CommonResult<List<BpmTaskRespDTO>> taskRet = bpmTaskApi.getTaskListByProcessInstanceId(flowInsId);
List<BpmTaskRespDTO> taskList = taskRet.getData();
if(taskList.isEmpty())
throw exception0(ERROR_CODE_MODULE_COMMON, "流程任务查询失败,请联系管理员处理");
String taskId = taskList.get(taskList.size() - 1).getId();
//驳回后重新提交
BpmTaskApproveReqDTO reqVO = new BpmTaskApproveReqDTO();
reqVO.setId(taskId);
CommonResult<Boolean> result = bpmProcessInstanceApi.approveTask(reqVO);
if(!result.isSuccess()){
throw exception0(ERROR_CODE_MODULE_COMMON, result.getMsg());
}
entity.setFlowStatus(QmsCommonConstant.IN_PROGRESS);
//todo 生成报告编号 documentCode
supplierEvaluationMapper.updateById(entity);
SupplierEvaluationRespVO respVO = BeanUtils.toBean(entity, SupplierEvaluationRespVO.class);
return CommonResult.success(respVO);
}
JSONObject formData = new JSONObject();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
formData.put("mainId", id);
formData.put("applyUser", nickName);
formData.put("applyUserId", loginUser.getId());
formData.put("applyDepartment", loginUser.getVisitDeptName());
formData.put("applyDepartmentId", loginUser.getVisitDeptId());
formData.put("applyTime", sdf.format(new Date()));
Map<String, Object> variables = formData.toJavaObject(Map.class);
variables.put(BPM_CALLBACK_BEAN_NAME, "supplierEvaluationService"); //流程回调时使用的service
BpmProcessInstanceCreateReqDTO reqDTO = new BpmProcessInstanceCreateReqDTO();
reqDTO.setBusinessKey(String.valueOf(id));
reqDTO.setProcessDefinitionKey(QmsSupplierConstant.EVALUATION_FLOW_KEY);
reqDTO.setVariables(variables);
CommonResult<String> result = bpmProcessInstanceApi.createProcessInstance(loginUser.getId(), reqDTO);
if(!result.isSuccess()){
throw exception0(ERROR_CODE_MODULE_COMMON, result.getMsg());
}
String wfInsId = result.getData();
entity.setFlowInstanceId(wfInsId);
entity.setFlowStatus(QmsCommonConstant.IN_PROGRESS);
entity.setEvaluationDate(LocalDateTime.now());
entity.setEvaluator(nickName);
supplierEvaluationMapper.updateById(entity);
SupplierEvaluationRespVO respVO = BeanUtils.toBean(entity, SupplierEvaluationRespVO.class);
return CommonResult.success(respVO);
}
@Override
public CommonResult<JSONObject> callback(QmsBpmDTO reqDTO) {
JSONObject variables = reqDTO.getVariables();
String processInsId = variables.getString(QmsBpmConstant.BPM_PROCESS_INS_ID);
String currentActivityInsId = variables.getString(QmsBpmConstant.BPM_CUR_ACTIVITY_INS_ID);
String returnFlag = variables.getString(QmsBpmConstant.BPM_REJECT_TO_FIRST_FLAG); //退回标识。在任务监听中设置
//同一个节点实例只触发一次
String checkKey = currentActivityInsId;
if(ObjectUtils.isEmpty(currentActivityInsId))
checkKey = processInsId + "-create";
if("1".equals(returnFlag))
checkKey += "-reject";
try{
dataKeyCheckService.create(checkKey, this.getClass().getName());
}catch (Exception e){
// e.printStackTrace();
return CommonResult.success(new JSONObject());
}
//流程状态 1-提交(含退回) 4-取消流程
String PROCESS_STATUS = variables.getString(QmsBpmConstant.PROCESS_INSTANCE_VARIABLE_STATUS);
String mainId = variables.getString("mainId");
JSONArray fieldExtensions = new JSONArray();
if(variables.containsKey(QmsBpmConstant.BPM_FIELD_EXTENSIONS)){
fieldExtensions = variables.getJSONArray(QmsBpmConstant.BPM_FIELD_EXTENSIONS);
}
SupplierEvaluationDO entity = getSupplierEvaluation(Long.valueOf(mainId));
String currentActivityId = variables.getString(QmsBpmConstant.BPM_CALLBACK_ACTIVITY_ID);
//判断是否最后一个节点
String lastActivityFlag = "0";
String firstActivityFlag = "0";
if(!fieldExtensions.isEmpty()){
for(int i = 0; i < fieldExtensions.size(); i++){
JSONObject fieldExtension = fieldExtensions.getJSONObject(i);
if(fieldExtension.getString("fieldName").equalsIgnoreCase(QmsBpmConstant.BPM_LAST_ACTIVITY_FLAG)){
lastActivityFlag = "1";
}
if(fieldExtension.getString("fieldName").equalsIgnoreCase(QmsBpmConstant.BPM_FIRST_ACTIVITY_FLAG)){
firstActivityFlag = "1";
}
}
}
//"RETURN_FLAG_Activity_001": true 标识驳回到发起环节
if(("1").equals(returnFlag)){
//驳回。流程需要配置退回到发起节点
entity.setFlowStatus(QmsCommonConstant.REJECTED);
entity.setSignatureInfo("");
}else if("4".equals(PROCESS_STATUS)){
//作废
entity.setFlowStatus(QmsCommonConstant.VOID);
entity.setSignatureInfo("");
}else if("1".equals(PROCESS_STATUS)){
//通过
assembleSignature(currentActivityId, entity);
if("1".equals(firstActivityFlag))
entity.setFlowStatus(QmsCommonConstant.IN_PROGRESS); //驳回后重新提交
if("1".equals(lastActivityFlag))
entity.setFlowStatus(QmsCommonConstant.COMPLETED); //结束审批
}
supplierEvaluationMapper.updateById(entity);
// try {
// reportDocumentAssistService.updateDocFileAndCreateIWorkflow( variables, entity);
// } catch (IOException e) {
// throw new RuntimeException(e);
// }
JSONObject ret = new JSONObject();
return CommonResult.success(ret);
}
private void assembleSignature(String currentActivityId, SupplierEvaluationDO entity){
if(ObjectUtils.isEmpty(currentActivityId) || "null".equals(currentActivityId))
return;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sign = entity.getSignatureInfo();
JSONObject signObj = new JSONObject();
if(!ObjectUtils.isEmpty( sign))
signObj = JSONObject.parseObject(sign);
if(signObj.containsKey(currentActivityId))
return;
JSONObject obj = new JSONObject();
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
Long userId = loginUser.getId();
//当前登录用户昵称
String nickName = SecurityFrameworkUtils.getLoginUserNickname();
ConfigUserSignatureDO configUserSignatureDO = configUserSignatureService.getByUserId(userId);
obj.put("signatureId", "");
if(configUserSignatureDO != null)
obj.put("signatureId", configUserSignatureDO.getId());
obj.put("userId", userId);
obj.put("userName", nickName);
obj.put("signTime", sdf.format(new Date()));
signObj.put(currentActivityId, obj);
entity.setSignatureInfo(signObj.toJSONString());
}
} }

View File

@@ -2,6 +2,7 @@ package com.zt.plat.module.qms.office.supplier.service;
import java.util.*; import java.util.*;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierExtendRespVO;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierPageReqVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierPageReqVO;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierRespVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierRespVO;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierSaveReqVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierSaveReqVO;
@@ -51,7 +52,7 @@ public interface SupplierService {
* @param id 编号 * @param id 编号
* @return 供应商 * @return 供应商
*/ */
SupplierDO getSupplier(Long id); SupplierExtendRespVO getSupplier(Long id);
/** /**
* 获得供应商分页 * 获得供应商分页

View File

@@ -1,6 +1,7 @@
package com.zt.plat.module.qms.office.supplier.service; package com.zt.plat.module.qms.office.supplier.service;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierExtendRespVO;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierPageReqVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierPageReqVO;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierRespVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierRespVO;
import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierSaveReqVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierSaveReqVO;
@@ -80,8 +81,8 @@ public class SupplierServiceImpl implements SupplierService {
} }
@Override @Override
public SupplierDO getSupplier(Long id) { public SupplierExtendRespVO getSupplier(Long id) {
return supplierMapper.selectById(id); return supplierMapper.selectOneWithCertifications(id);
} }
@Override @Override

View File

@@ -30,7 +30,7 @@ import com.zt.plat.framework.datapermission.core.annotation.DeptDataPermissionIg
import static com.zt.plat.framework.common.pojo.CommonResult.success; import static com.zt.plat.framework.common.pojo.CommonResult.success;
import com.zt.plat.framework.excel.core.util.ExcelUtils; import com.zt.plat.framework.excel.core.util.ExcelUtils;
import com.alibaba.fastjson.JSONObject;
import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog; import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*; import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
@@ -121,7 +121,7 @@ public class VersionManagementController extends AbstractFileUploadController im
@GetMapping("/checkUpdate") @GetMapping("/checkUpdate")
@Operation(summary = "根据更新平台和安装包类型获取最新客户端版本管理信息") @Operation(summary = "根据更新平台和安装包类型获取最新客户端版本管理信息")
public CommonResult<VersionManagementRespVO> checkUpdate(@Valid VersionManagementPageReqVO pageReqVO) { public Object checkUpdate(@Valid VersionManagementPageReqVO pageReqVO) {
if (pageReqVO.getApplicationCode() == null ) { if (pageReqVO.getApplicationCode() == null ) {
return CommonResult.error(400, "客户端编号不能为空"); return CommonResult.error(400, "客户端编号不能为空");
@@ -130,10 +130,42 @@ public class VersionManagementController extends AbstractFileUploadController im
return CommonResult.error(400, "更新平台不能为空"); return CommonResult.error(400, "更新平台不能为空");
} }
PageResult<VersionManagementDO> pageResult = systemVersionManagementService.getList(pageReqVO); PageResult<VersionManagementDO> pageResult = systemVersionManagementService.getList(pageReqVO);
if ("pc".equals(pageReqVO.getUpdatePlatform())) {
String version = "0.0.0";
String minVersion = "0.0.0";
String checksumSha1 = "";
String url = "";
String log = "";
if (pageResult.getList().size() != 0) {
VersionManagementDO versionManagementDO = pageResult.getList().get(0);
version = versionManagementDO.getCurrentVersion();
minVersion = versionManagementDO.getMinimumVersion();
url = versionManagementDO.getDownloadUrl();
log = versionManagementDO.getUpdateContent();
checksumSha1 = versionManagementDO.getFileEncryptAlgorithm();
}
JSONObject resultJson = new JSONObject();
resultJson.put("version", version);
resultJson.put("url", url);
resultJson.put("changelog", log);
JSONObject mandatory = new JSONObject();
mandatory.put("value", true);
mandatory.put("minVersion", minVersion);
mandatory.put("mode", 2);
resultJson.put("mandatory", mandatory);
JSONObject checksum = new JSONObject();
checksum.put("hashingAlgorithm", "SHA1");
checksum.put("value", checksumSha1);
resultJson.put("checksum", checksum);
return resultJson;
}
if (pageResult.getList().size() == 0) { if (pageResult.getList().size() == 0) {
return CommonResult.error(400, "没有可更新版本"); return CommonResult.error(400, "没有可更新版本");
} }
VersionManagementDO versionManagementDO = pageResult.getList().get(0); VersionManagementDO versionManagementDO = pageResult.getList().get(0);
return success(BeanUtils.toBean(versionManagementDO, VersionManagementRespVO.class)); return success(BeanUtils.toBean(versionManagementDO, VersionManagementRespVO.class));
} }

View File

@@ -1,6 +1,5 @@
package com.zt.plat.module.qms.resource.device.controller.admin; package com.zt.plat.module.qms.resource.device.controller.admin;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog; import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
import com.zt.plat.framework.business.annotation.FileUploadController; import com.zt.plat.framework.business.annotation.FileUploadController;
import com.zt.plat.framework.business.controller.AbstractFileUploadController; import com.zt.plat.framework.business.controller.AbstractFileUploadController;
@@ -25,7 +24,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -40,7 +38,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@RestController @RestController
@RequestMapping("/qms/resource/device-product") @RequestMapping("/qms/resource/device-product")
@Validated @Validated
//@DeptDataPermissionIgnore(enable = "true") @DeptDataPermissionIgnore(enable = "true")
@FileUploadController(source = "resource.deviceproduct") @FileUploadController(source = "resource.deviceproduct")
public class DeviceProductController extends AbstractFileUploadController implements BusinessControllerMarker{ public class DeviceProductController extends AbstractFileUploadController implements BusinessControllerMarker{
@@ -122,9 +120,6 @@ public class DeviceProductController extends AbstractFileUploadController implem
return success(BeanUtils.toBean(deviceProduct, DeviceProductRespVO.class)); return success(BeanUtils.toBean(deviceProduct, DeviceProductRespVO.class));
} }
@Autowired
private MybatisPlusInterceptor mybatisPlusInterceptor;
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "获得设备-设备大类分页") @Operation(summary = "获得设备-设备大类分页")
// @PreAuthorize("@ss.hasPermission('resource:device-product:query')") // @PreAuthorize("@ss.hasPermission('resource:device-product:query')")

View File

@@ -43,7 +43,6 @@ public interface DeviceApplyMapper extends BaseMapperX<DeviceApplyDO> {
.betweenIfPresent(DeviceApplyDO::getCreateTime, reqVO.getCreateTime()) .betweenIfPresent(DeviceApplyDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(DeviceApplyDO::getId); .orderByDesc(DeviceApplyDO::getId);
return selectPage(reqVO, wrapper); return selectPage(reqVO, wrapper);
} }
} }

View File

@@ -3,6 +3,7 @@ package com.zt.plat.module.qms.resource.device.dal.mapper;
import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.module.qms.core.aspect.annotation.QmsPermission;
import com.zt.plat.module.qms.resource.device.controller.vo.DeviceInfomationPageReqVO; import com.zt.plat.module.qms.resource.device.controller.vo.DeviceInfomationPageReqVO;
import com.zt.plat.module.qms.resource.device.dal.dataobject.DeviceInfoWithBizConfigVO; import com.zt.plat.module.qms.resource.device.dal.dataobject.DeviceInfoWithBizConfigVO;
import com.zt.plat.module.qms.resource.device.dal.dataobject.DeviceInfomationDO; import com.zt.plat.module.qms.resource.device.dal.dataobject.DeviceInfomationDO;
@@ -20,6 +21,7 @@ import java.util.Map;
@Mapper @Mapper
public interface DeviceInfomationMapper extends BaseMapperX<DeviceInfomationDO> { public interface DeviceInfomationMapper extends BaseMapperX<DeviceInfomationDO> {
@QmsPermission(deptDataRoleCodes = "")
default PageResult<DeviceInfomationDO> selectPage(DeviceInfomationPageReqVO reqVO) { default PageResult<DeviceInfomationDO> selectPage(DeviceInfomationPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<DeviceInfomationDO>() return selectPage(reqVO, new LambdaQueryWrapperX<DeviceInfomationDO>()
.eqIfPresent(DeviceInfomationDO::getProductId, reqVO.getProductId()) .eqIfPresent(DeviceInfomationDO::getProductId, reqVO.getProductId())

View File

@@ -3,7 +3,6 @@ package com.zt.plat.module.qms.resource.device.dal.mapper;
import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.module.qms.resource.device.controller.vo.*;
import com.zt.plat.module.qms.resource.device.controller.vo.DeviceProductPageReqVO; import com.zt.plat.module.qms.resource.device.controller.vo.DeviceProductPageReqVO;
import com.zt.plat.module.qms.resource.device.dal.dataobject.DeviceProductDO; import com.zt.plat.module.qms.resource.device.dal.dataobject.DeviceProductDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;