diff --git a/zt-module-qms/zt-module-qms-api/src/main/java/com/zt/plat/module/qms/enums/QmsSupplierConstant.java b/zt-module-qms/zt-module-qms-api/src/main/java/com/zt/plat/module/qms/enums/QmsSupplierConstant.java new file mode 100644 index 0000000..892a7b6 --- /dev/null +++ b/zt-module-qms/zt-module-qms-api/src/main/java/com/zt/plat/module/qms/enums/QmsSupplierConstant.java @@ -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"; +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessSubSampleServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessSubSampleServiceImpl.java index 6336b2b..f0d7010 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessSubSampleServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessSubSampleServiceImpl.java @@ -321,6 +321,8 @@ public class BusinessSubSampleServiceImpl implements BusinessSubSampleService { * */ BusinessSubSampleExtendRespVO respVO = BeanUtils.toBean(businessSubSampleDO, BusinessSubSampleExtendRespVO.class); respVO.setIsPrint(printFlag); + respVO.setWarehouseName(warehouseDO.getName()); + respVO.setWarehouseLocationCode(locationDO.getCode()); return respVO; } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisAuditServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisAuditServiceImpl.java index 51a3f51..648e206 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisAuditServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisAuditServiceImpl.java @@ -861,7 +861,7 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic // 查找匹配的允差区间 private ConfigAssayMethodProjectAssessmentDO findMatchingRule(List rules, BigDecimal value) { if (rules == null || rules.isEmpty()) return null; - + // 特殊处理 level=0 和 level=4 for (ConfigAssayMethodProjectAssessmentDO rule : rules) { if (rule.getAssessmentLevel() == 0) { @@ -869,19 +869,17 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic .filter(r -> r.getAssessmentLevel() == 1) .findFirst() .orElse(rule); -// if (value.compareTo(new BigDecimal(next.getMinimumValue())) >= 0 && value.compareTo(new BigDecimal(next.getMaximumValue())) <= 0) { -// return next; -// } - return next; + if (value.compareTo(new BigDecimal(rule.getMinimumValue())) >= 0 && value.compareTo(new BigDecimal(rule.getMaximumValue())) <= 0) { + return next; + } } else if (rule.getAssessmentLevel() == 4) { ConfigAssayMethodProjectAssessmentDO prev = rules.stream() .filter(r -> r.getAssessmentLevel() == 3) .findFirst() .orElse(rule); -// if (value.compareTo(new BigDecimal(prev.getMinimumValue())) >= 0 && value.compareTo(new BigDecimal(prev.getMaximumValue())) <= 0) { -// return prev; -// } - return prev; + if (value.compareTo(new BigDecimal(rule.getMinimumValue())) >= 0 && value.compareTo(new BigDecimal(rule.getMaximumValue())) <= 0) { + return prev; + } } else { if (value.compareTo(new BigDecimal(rule.getMinimumValue())) >= 0 && value.compareTo(new BigDecimal(rule.getMaximumValue())) <= 0) { return rule; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/common/dic/dal/mapper/DictionaryBusinessMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/common/dic/dal/mapper/DictionaryBusinessMapper.java index c5256ac..bac3c9b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/common/dic/dal/mapper/DictionaryBusinessMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/common/dic/dal/mapper/DictionaryBusinessMapper.java @@ -1,6 +1,8 @@ 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.datapermission.core.annotation.DeptDataPermissionIgnore; 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.MPJLambdaWrapperX; @@ -21,6 +23,12 @@ import java.util.List; @Mapper public interface DictionaryBusinessMapper extends BaseMapperX { + @DeptDataPermissionIgnore(enable = "true") + default List selectListWithoutPermissionCheck(Wrapper queryWrapper){ + return selectList(queryWrapper); + } + + @DeptDataPermissionIgnore(enable = "true") default PageResult selectPage(DictionaryBusinessPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(DictionaryBusinessDO::getIdPath, reqVO.getIdPath()) @@ -36,7 +44,8 @@ public interface DictionaryBusinessMapper extends BaseMapperX selectItemByCategoryKeys(List keys) { return selectJoinList(DictionaryBusinessExtendRespVO.class, new MPJLambdaWrapperX() .leftJoin(DictionaryBusinessDO.class, "dbd", DictionaryBusinessDO::getId, DictionaryBusinessDO::getParentId) @@ -56,6 +65,7 @@ public interface DictionaryBusinessMapper extends BaseMapperX queryTableDictCustom(@Param("table") String table, @Param("text") String text, @Param("code") String code, @Param("filterSql") String filterSql, @Param("keys") List keys); @@ -64,7 +74,10 @@ public interface DictionaryBusinessMapper extends BaseMapperX parList = dictionaryBusinessMapper.selectList(query); + List parList = dictionaryBusinessMapper.selectListWithoutPermissionCheck(query); if(parList.isEmpty()) return dictMap; List parIds = parList.stream().map(DictionaryBusinessDO::getId).toList(); @@ -159,7 +159,7 @@ public class DictionaryBusinessServiceImpl implements DictionaryBusinessService query.in(DictionaryBusinessDO::getKey, itemKeys); else query.in(DictionaryBusinessDO::getId, itemKeys); - List itemList = dictionaryBusinessMapper.selectList(query); + List itemList = dictionaryBusinessMapper.selectListWithoutPermissionCheck(query); List modelItemList = new ArrayList<>(); for(DictionaryBusinessDO item: itemList){ Long parId = item.getParentId(); @@ -185,7 +185,7 @@ public class DictionaryBusinessServiceImpl implements DictionaryBusinessService // query.in(DictionaryBusinessDO::getKey, dictCodeList); // query.eq(DictionaryBusinessDO::getNodeType, DataTypeConstant.DATA_TYPE_CATEGORY); //// query.eq(DictionaryBusinessDO::getDeleted, 0); -// List parList = dictionaryBusinessMapper.selectList(query); +// List parList = dictionaryBusinessMapper.selectListWithoutPermissionCheck(query); // if(parList.isEmpty()) // return dictMap; // List parIds = parList.stream().map(DictionaryBusinessDO::getId).toList(); @@ -193,7 +193,7 @@ public class DictionaryBusinessServiceImpl implements DictionaryBusinessService // query.in(DictionaryBusinessDO::getParentId, parIds); // query.eq(DictionaryBusinessDO::getNodeType, DataTypeConstant.DATA_TYPE_DATA); // query.in(DictionaryBusinessDO::getId, ids); -// List itemList = dictionaryBusinessMapper.selectList(query); +// List itemList = dictionaryBusinessMapper.selectListWithoutPermissionCheck(query); // List modelItemList = new ArrayList<>(); // for(DictionaryBusinessDO item: itemList){ // Long parId = item.getParentId(); @@ -216,7 +216,7 @@ public class DictionaryBusinessServiceImpl implements DictionaryBusinessService LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(DictionaryBusinessDO::getKey, key); query.eq(DictionaryBusinessDO::getNodeType, DataTypeConstant.DATA_TYPE_CATEGORY); - List list = dictionaryBusinessMapper.selectList(query); + List list = dictionaryBusinessMapper.selectListWithoutPermissionCheck(query); if(list.isEmpty()) throw exception(DICTIONARY_BUSINESS_NOT_EXISTS); if(list.size() > 1) @@ -234,7 +234,7 @@ public class DictionaryBusinessServiceImpl implements DictionaryBusinessService LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(DictionaryBusinessDO::getKey, key); query.eq(DictionaryBusinessDO::getNodeType, DataTypeConstant.DATA_TYPE_DATA); - List list = dictionaryBusinessMapper.selectList(query); + List list = dictionaryBusinessMapper.selectListWithoutPermissionCheck(query); if(list.isEmpty()) return CommonResult.error(DICTIONARY_BUSINESS_NOT_EXISTS); if(list.size() > 1) @@ -325,7 +325,7 @@ public class DictionaryBusinessServiceImpl implements DictionaryBusinessService LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(DictionaryBusinessDO::getNodeType, DataTypeConstant.DATA_TYPE_CATEGORY); query.orderByAsc(DictionaryBusinessDO::getSortNo); - return dictionaryBusinessMapper.selectList(query); + return dictionaryBusinessMapper.selectListWithoutPermissionCheck(query); } @Override @@ -335,7 +335,7 @@ public class DictionaryBusinessServiceImpl implements DictionaryBusinessService if(!ObjectUtils.isEmpty(nodeType)) query.eq(DictionaryBusinessDO::getNodeType, nodeType); query.orderByAsc(DictionaryBusinessDO::getSortNo); - return dictionaryBusinessMapper.selectList(query); + return dictionaryBusinessMapper.selectListWithoutPermissionCheck(query); } @Override diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/core/aspect/QmsPermissionAspect.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/core/aspect/QmsPermissionAspect.java new file mode 100644 index 0000000..37c1bca --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/core/aspect/QmsPermissionAspect.java @@ -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; + } + +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/core/aspect/annotation/QmsPermission.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/core/aspect/annotation/QmsPermission.java index be5ca86..29379bc 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/core/aspect/annotation/QmsPermission.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/core/aspect/annotation/QmsPermission.java @@ -12,13 +12,16 @@ public @interface QmsPermission { 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 ""; } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/framework/datapermission/QMSMultiDataPermissionHandler.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/framework/datapermission/QMSMultiDataPermissionHandler.java index 6b2c38a..2ba0b9b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/framework/datapermission/QMSMultiDataPermissionHandler.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/framework/datapermission/QMSMultiDataPermissionHandler.java @@ -1,219 +1,227 @@ -//package com.zt.plat.module.qms.framework.datapermission; -// -//import cn.hutool.core.collection.CollUtil; -//import cn.hutool.core.util.ObjectUtil; -//import cn.hutool.core.util.StrUtil; -//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.dto.DeptDataPermissionRespDTO; -//import com.zt.plat.framework.common.enums.UserTypeEnum; -//import com.zt.plat.framework.common.util.collection.CollectionUtils; -//import com.zt.plat.framework.common.util.json.JsonUtils; -//import com.zt.plat.framework.mybatis.core.util.MyBatisUtils; -//import com.zt.plat.framework.security.core.LoginUser; -//import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; -//import com.zt.plat.framework.tenant.core.context.DeptContextHolder; +package com.zt.plat.module.qms.framework.datapermission; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +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.dto.DeptDataPermissionRespDTO; +import com.zt.plat.framework.common.enums.UserTypeEnum; +import com.zt.plat.framework.common.util.collection.CollectionUtils; +import com.zt.plat.framework.common.util.json.JsonUtils; +import com.zt.plat.framework.mybatis.core.util.MyBatisUtils; +import com.zt.plat.framework.security.core.LoginUser; +import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; //import com.zt.plat.module.qms.core.aspect.annotation.QmsPermission; -//import lombok.extern.slf4j.Slf4j; -//import net.sf.jsqlparser.expression.Alias; -//import net.sf.jsqlparser.expression.Expression; -//import net.sf.jsqlparser.expression.LongValue; -//import net.sf.jsqlparser.expression.NullValue; -//import net.sf.jsqlparser.expression.operators.conditional.AndExpression; -//import net.sf.jsqlparser.expression.operators.conditional.OrExpression; -//import net.sf.jsqlparser.expression.operators.relational.*; -//import net.sf.jsqlparser.schema.Column; -//import net.sf.jsqlparser.schema.Table; -//import net.sf.jsqlparser.statement.select.ParenthesedSelect; -//import net.sf.jsqlparser.statement.select.PlainSelect; -//import net.sf.jsqlparser.statement.select.SelectItem; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.stereotype.Component; -// -//import java.lang.reflect.Method; -//import java.util.Map; -//import java.util.Set; -//import java.util.concurrent.ConcurrentHashMap; -// -//import static java.util.Collections.singletonList; -// -// -///* -//* QMS权限处理 -//* 1、只能查看自己创建的数据 -//* 2、部门领导可查看本部门数据 -//* 3、模块管理员可查看本模块数据 -//* -//* */ -//@Component -//@Slf4j -//public class QMSMultiDataPermissionHandler implements MultiDataPermissionHandler { -// -// @Autowired private PermissionCommonApi permissionApi; -// /** -// * LoginUser 的 Context 缓存 Key -// */ -// protected static final String QMS_PERMISSION_CONTEXT_KEY = "QMS_DATA_PERMISSION_KEY"; -// static final Expression EXPRESSION_NULL = new NullValue(); -// public static final String SYSTEM_USERS = "system_users"; -// -// @Override -// public Expression getSqlSegment(Table table, Expression where, String mappedStatementId) { -// log.error("QMSMultiDataPermissionHandler: Expression={}", where); -// -// //获取注解 -// QmsPermission permissionAnnotation = getQmsPermission(mappedStatementId); -// if (permissionAnnotation == null || !permissionAnnotation.enable()) return null; -// -// return buildExpression(permissionAnnotation, table, where); -// } -// -// /* -// * 构建权限sql*/ -// private Expression buildExpression(QmsPermission permissionAnnotation, Table table, Expression where) { -// LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); -// if (loginUser == null) { -// return null; -// } -// //管理员用户,不进行权限处理 -// if (ObjectUtil.notEqual(loginUser.getUserType(), UserTypeEnum.ADMIN.getValue())) { -// return null; -// } -// String deptCol = permissionAnnotation.deptColumn(); -// String userCol = permissionAnnotation.userColumn(); -// String tableName = MyBatisUtils.getTableName(table); -// Alias tableAlias = table.getAlias(); -// DeptDataPermissionRespDTO qmsDataPermission = loginUser.getContext(QMS_PERMISSION_CONTEXT_KEY, DeptDataPermissionRespDTO.class); -// if(qmsDataPermission == null){ -// qmsDataPermission = permissionApi.getDeptDataPermission(loginUser.getId()).getCheckedData(); -// if (qmsDataPermission == null) { -// log.error("[getExpression][LoginUser({}) 获取数据权限为 null]", JsonUtils.toJsonString(loginUser)); -// throw new NullPointerException(String.format("LoginUser(%d) Table(%s/%s) 未返回数据权限", loginUser.getId(), tableName, tableAlias.getName())); -// } -// // 添加到上下文中,避免重复计算 -// loginUser.setContext(QMS_PERMISSION_CONTEXT_KEY, qmsDataPermission); -// } -// -// // 计算有效的部门与自查标记:当存在上下文部门且未被忽略时,强制仅使用该部门,以避免默认全量或空权限分支 -// Long ctxDeptId = QMSPermissionContextHolder.getDeptId(); -// Set effectiveDeptIds = qmsDataPermission.getDeptIds(); -// Boolean effectiveSelf = qmsDataPermission.getSelf(); -// if (!QMSPermissionContextHolder.shouldIgnore() && ctxDeptId != null && ctxDeptId > 0L) { -// effectiveDeptIds = CollUtil.newHashSet(ctxDeptId); -// } -// -// // 情况一:仅当不存在上下文部门时,且 ALL 可查看全部,才无需拼接条件;若存在上下文部门则仍需基于该部门过滤 -// if (ctxDeptId == null && qmsDataPermission.getAll()) { -// return null; -// } -// -// // 情况二:仅在有效部门集合为空且不可查看自己时,才认为无权限;若上下文提供部门,则跳过该兜底 -// if (CollUtil.isEmpty(effectiveDeptIds) -// && Boolean.FALSE.equals(effectiveSelf)) { -// return new EqualsTo(null, null); // WHERE null = null,可以保证返回的数据为空 -// } -// -// // 情况三,拼接 Dept 和 Company User 的条件,最后组合 -// Expression deptExpression = buildDeptExpression(tableName, tableAlias, effectiveDeptIds); -//// Expression deptExpression = buildDeptExpression(tableName, tableAlias, deptDataPermission.getDeptIds()); -// Expression userExpression = buildUserExpression(tableName, tableAlias, effectiveSelf, loginUser.getId()); -// if (deptExpression == null && userExpression == null) { -// // TODO ZT:获得不到条件的时候,暂时不抛出异常,而是不返回数据 -// log.warn("[getExpression][LoginUser({}) Table({}/{}) DeptDataPermission({}) 构建的条件为空]", -// JsonUtils.toJsonString(loginUser), tableName, tableAlias, JsonUtils.toJsonString(qmsDataPermission)); -//// throw new NullPointerException(String.format("LoginUser(%d) Table(%s/%s) 构建的条件为空", -//// loginUser.getId(), tableName, tableAlias.getName())); -// return EXPRESSION_NULL; -// } -// if (deptExpression == null) { -// return userExpression; -// } -// if (userExpression == null) { -// return deptExpression; -// } -// // 目前,如果有指定部门 + 可查看自己,采用 OR 条件。即,WHERE (dept_id IN ? OR user_id = ?) -// return new ParenthesedExpressionList(new OrExpression(deptExpression, userExpression)); -// -// return null; -// } -// -// private Expression buildDeptExpression(String tableName, Alias tableAlias, Set deptIds) { -// // 如果不存在配置,则无需作为条件 -// String columnName = deptColumns.get(tableName); -// // 特殊处理:system_users 表没有 dept_id 字段,已经迁移到了 user_dept 表 -// if (SYSTEM_USERS.equals(tableName)) { -// // system_users 走 exists 子查询 user_dept -// if (CollUtil.isEmpty(deptIds)) { -// 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(); -// plainSelect.setSelectItems(singletonList(new SelectItem<>(new LongValue(1)))); -// Table userDept = new Table(SYSTEM_USER_DEPT); -// // 使用 user 表别名避免语法错误 -// Table user = new Table(tableAlias == null ? tableName : tableAlias.getName()); -// plainSelect.setFromItem(userDept); -// // where user_dept.user_id = system_users.id and user_dept.dept_id in (...) -// Column userDeptUserIdCol = new Column(userDept, USER_COLUMN_NAME); -// Column systemUsersIdCol = new Column(user, "id"); -// EqualsTo userIdEquals = new EqualsTo(userDeptUserIdCol, systemUsersIdCol); -// Column userDeptDeptIdCol = new Column(userDept, DEPT_COLUMN_NAME); -// InExpression deptIn = new InExpression(userDeptDeptIdCol, new ParenthesedExpressionList<>(new ExpressionList<>(CollectionUtils.convertList(deptIds, LongValue::new)))); -// Expression whereExp = new AndExpression(userIdEquals, deptIn); -// plainSelect.setWhere(whereExp); -// // -// ParenthesedSelect parenthesedSelect = new ParenthesedSelect(); -// parenthesedSelect.setSelect(plainSelect); -// // 构建 exists 表达式 -// ExistsExpression existsExpr = new ExistsExpression(); -// existsExpr.setRightExpression(parenthesedSelect); -// return existsExpr; -// } -// if (StrUtil.isEmpty(columnName)) { -// return null; -// } -// // 如果为空,则无条件 -// if (CollUtil.isEmpty(deptIds)) { -// return null; -// } -// // 拼接条件 -// return new InExpression(MyBatisUtils.buildColumn(tableName, tableAlias, columnName), -// // Parenthesis 的目的,是提供 (1,2,3) 的 () 左右括号 -// new ParenthesedExpressionList(new ExpressionList(CollectionUtils.convertList(deptIds, LongValue::new)))); -// } -// -// private Expression buildUserExpression(String tableName, Alias tableAlias, Boolean self, Long userId) { -// // 如果不查看自己,则无需作为条件 -// if (Boolean.FALSE.equals(self)) { -// return null; -// } -// String columnName = userColumns.get(tableName); -// if (StrUtil.isEmpty(columnName)) { -// return null; -// } -// // 拼接条件 -// return new EqualsTo(MyBatisUtils.buildColumn(tableName, tableAlias, columnName), new LongValue(userId)); -// } -// -// private static final Map CACHE = new ConcurrentHashMap<>(); -// -// private QmsPermission getQmsPermission(String mappedStatementId) { -// try { -// int idx = mappedStatementId.lastIndexOf("."); -// String className = mappedStatementId.substring(0, idx); -// String methodName = mappedStatementId.substring(idx + 1); -// -// Class mapperClass = Class.forName(className); -// -// for (Method method : mapperClass.getMethods()) { -// if (method.getName().equals(methodName) && method.isAnnotationPresent(QmsPermission.class)) { -// return method.getAnnotation(QmsPermission.class); -// } -// } -// } catch (Exception e) { -// log.error("解析 QmsPermission 失败: {}", mappedStatementId, e); -// } -// return null; -// } -// -//} +import com.zt.plat.framework.tenant.core.context.DeptContextHolder; +import lombok.extern.slf4j.Slf4j; +import net.sf.jsqlparser.expression.Alias; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.LongValue; +import net.sf.jsqlparser.expression.NullValue; +import net.sf.jsqlparser.expression.operators.conditional.AndExpression; +import net.sf.jsqlparser.expression.operators.conditional.OrExpression; +import net.sf.jsqlparser.expression.operators.relational.*; +import net.sf.jsqlparser.schema.Column; +import net.sf.jsqlparser.schema.Table; +import net.sf.jsqlparser.statement.select.ParenthesedSelect; +import net.sf.jsqlparser.statement.select.PlainSelect; +import net.sf.jsqlparser.statement.select.SelectItem; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +import static java.util.Collections.singletonList; + + +/* +* QMS权限处理 +* 1、只能查看自己创建的数据 +* 2、部门领导可查看本部门数据 +* 3、模块管理员可查看本模块数据 +* +* */ +@Component +@Slf4j +public class QMSMultiDataPermissionHandler implements MultiDataPermissionHandler { + + @Autowired private PermissionCommonApi permissionApi; + /** + * LoginUser 的 Context 缓存 Key + */ + protected static final String QMS_PERMISSION_CONTEXT_KEY = "QMS_DATA_PERMISSION"; + static final Expression EXPRESSION_NULL = new NullValue(); + public static final String SYSTEM_USERS = "system_users"; + private static final String SYSTEM_USER_DEPT = "system_user_dept"; + private static final String DEPT_COLUMN_NAME = "dept_id"; + private static final String USER_COLUMN_NAME = "user_id"; + + @Override + public Expression getSqlSegment(Table table, Expression where, String mappedStatementId) { + log.error("QMSMultiDataPermissionHandler: Expression={}", where); + + //获取注解 + if(!QMSPermissionContextHolder.shouldExecute()) + return null; + try{ + Expression expression = buildExpression(table, where); + return expression; + }catch (Exception e){ + log.error("QMSMultiDataPermissionHandler: Expression={}", where); + }finally { + QMSPermissionContextHolder.clear(); + } + return EXPRESSION_NULL; + } + + /* + * 构建权限sql*/ + private Expression buildExpression(Table table, Expression where) { + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + if (loginUser == null) { + return EXPRESSION_NULL; + } + //管理员用户,不进行权限处理 + if (ObjectUtil.notEqual(loginUser.getUserType(), UserTypeEnum.ADMIN.getValue())) { + return null; + } + String deptIdCol = QMSPermissionContextHolder.getDeptIdColumn(); //部门id列 + String userIdCol = QMSPermissionContextHolder.getUserIdColumn(); //人员id列 + String deptDataRoleCodes = QMSPermissionContextHolder.getDeptDataRoleCode(); //部门数据权限角色。具有该角色,然后按角色的权限属性判断。从而获得人员允许查看的部门数据 + String moduleDataRoleCodes = QMSPermissionContextHolder.getModuleDataRoleCodes(); //模块数据权限角色。 + String custom = QMSPermissionContextHolder.getCustom(); //todo 自定义权限 + + List allRoleCode = new ArrayList<>(); + if(!ObjectUtil.isEmpty(deptDataRoleCodes)){ + allRoleCode.addAll(Arrays.asList(deptDataRoleCodes.split( ","))); + } + if(!ObjectUtil.isEmpty(moduleDataRoleCodes)){ + allRoleCode.addAll(Arrays.asList(moduleDataRoleCodes.split( ","))); + } + //查询角色 + + String tableName = MyBatisUtils.getTableName(table); + Alias tableAlias = table.getAlias(); + DeptDataPermissionRespDTO qmsDataPermission = loginUser.getContext(QMS_PERMISSION_CONTEXT_KEY, DeptDataPermissionRespDTO.class); + if(qmsDataPermission == null){ + try{ +// DeptContextHolder.setRoleCodeList(allRoleCode); + qmsDataPermission = permissionApi.getDeptDataPermission(loginUser.getId()).getCheckedData(); + }catch (Exception e){ + log.error("[getExpression][LoginUser({}) 获取角色权限为 null]", JsonUtils.toJsonString(loginUser)); + log.error("", e); + }finally { +// DeptContextHolder.clearRoleCodeList(); + } + + if (qmsDataPermission == null) { + log.error("[getExpression][LoginUser({}) 获取数据权限为 null]", JsonUtils.toJsonString(loginUser)); + throw new NullPointerException(String.format("LoginUser(%d) Table(%s/%s) 未返回数据权限", loginUser.getId(), tableName, tableAlias.getName())); + } + // 添加到上下文中,避免重复计算 + loginUser.setContext(QMS_PERMISSION_CONTEXT_KEY, qmsDataPermission); + } + Long ctxDeptId = DeptContextHolder.getDeptId(); + // 计算有效的部门与自查标记:当存在上下文部门且未被忽略时,强制仅使用该部门,以避免默认全量或空权限分支 + Set effectiveDeptIds = qmsDataPermission.getDeptIds(); + Boolean effectiveSelf = qmsDataPermission.getSelf(); + if (!DeptContextHolder.shouldIgnore() && ctxDeptId != null && ctxDeptId > 0L) { + effectiveDeptIds = CollUtil.newHashSet(ctxDeptId); + } + // 情况一:仅当不存在上下文部门时,且 ALL 可查看全部,才无需拼接条件;若存在上下文部门则仍需基于该部门过滤 + if (ctxDeptId == null && qmsDataPermission.getAll()) { + return null; + } + + // 情况二:仅在有效部门集合为空且不可查看自己时,才认为无权限;若上下文提供部门,则跳过该兜底 + if (CollUtil.isEmpty(effectiveDeptIds) && Boolean.FALSE.equals(effectiveSelf)) { + return new EqualsTo(null, null); // WHERE null = null,可以保证返回的数据为空 + } + + // 情况三,拼接 Dept 和 Company User 的条件,最后组合 + Expression deptExpression = buildDeptExpression(tableName, deptIdCol, tableAlias, effectiveDeptIds); + Expression userExpression = buildUserExpression(tableName, userIdCol, tableAlias, effectiveSelf, loginUser.getId()); + if (deptExpression == null && userExpression == null) { + // TODO:获得不到条件的时候,暂时不抛出异常,而是不返回数据 + log.warn("[getExpression][LoginUser({}) Table({}/{}) DeptDataPermission({}) 构建的条件为空]", + JsonUtils.toJsonString(loginUser), tableName, tableAlias, JsonUtils.toJsonString(qmsDataPermission)); +// throw new NullPointerException(String.format("LoginUser(%d) Table(%s/%s) 构建的条件为空", +// loginUser.getId(), tableName, tableAlias.getName())); + return null; + } + if (deptExpression == null) { + return userExpression; + } + if (userExpression == null) { + return deptExpression; + } + // 目前,如果有指定部门 + 可查看自己,采用 OR 条件。即,WHERE (dept_id IN ? OR user_id = ?) + return new ParenthesedExpressionList(new OrExpression(deptExpression, userExpression)); + } + + private Expression buildDeptExpression(String tableName, String columnName, Alias tableAlias, Set deptIds) { + // 特殊处理:system_users 表没有 dept_id 字段,已经迁移到了 user_dept 表 + if (SYSTEM_USERS.equals(tableName)) { + // system_users 走 exists 子查询 user_dept + if (CollUtil.isEmpty(deptIds)) { + 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(); + plainSelect.setSelectItems(singletonList(new SelectItem<>(new LongValue(1)))); + Table userDept = new Table(SYSTEM_USER_DEPT); + // 使用 user 表别名避免语法错误 + Table user = new Table(tableAlias == null ? tableName : tableAlias.getName()); + plainSelect.setFromItem(userDept); + // where user_dept.user_id = system_users.id and user_dept.dept_id in (...) + Column userDeptUserIdCol = new Column(userDept, USER_COLUMN_NAME); + Column systemUsersIdCol = new Column(user, "id"); + EqualsTo userIdEquals = new EqualsTo(userDeptUserIdCol, systemUsersIdCol); + Column userDeptDeptIdCol = new Column(userDept, DEPT_COLUMN_NAME); + InExpression deptIn = new InExpression(userDeptDeptIdCol, new ParenthesedExpressionList<>(new ExpressionList<>(CollectionUtils.convertList(deptIds, LongValue::new)))); + Expression whereExp = new AndExpression(userIdEquals, deptIn); + plainSelect.setWhere(whereExp); + // + ParenthesedSelect parenthesedSelect = new ParenthesedSelect(); + parenthesedSelect.setSelect(plainSelect); + // 构建 exists 表达式 + ExistsExpression existsExpr = new ExistsExpression(); + existsExpr.setRightExpression(parenthesedSelect); + return existsExpr; + } + if (StrUtil.isEmpty(columnName)) { + return null; + } + // 如果为空,则无条件 + if (CollUtil.isEmpty(deptIds)) { + return null; + } + // 拼接条件 + return new InExpression(MyBatisUtils.buildColumn(tableName, tableAlias, columnName), + // Parenthesis 的目的,是提供 (1,2,3) 的 () 左右括号 + new ParenthesedExpressionList(new ExpressionList(CollectionUtils.convertList(deptIds, LongValue::new)))); + } + + private Expression buildUserExpression(String tableName, String columnName, Alias tableAlias, Boolean self, Long userId) { + // 如果不查看自己,则无需作为条件 + if (Boolean.FALSE.equals(self)) { + return null; + } + if (StrUtil.isEmpty(columnName)) { + return null; + } + // 拼接条件 + return new EqualsTo(MyBatisUtils.buildColumn(tableName, tableAlias, columnName), new LongValue(userId)); + } + + /* + * */ + private DeptDataPermissionRespDTO getQmsDataPermission(){ + return null; + } + +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/framework/datapermission/QMSPermissionContextHolder.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/framework/datapermission/QMSPermissionContextHolder.java index 2c5eaeb..192bae8 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/framework/datapermission/QMSPermissionContextHolder.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/framework/datapermission/QMSPermissionContextHolder.java @@ -2,54 +2,80 @@ package com.zt.plat.module.qms.framework.datapermission; import com.alibaba.ttl.TransmittableThreadLocal; + public class QMSPermissionContextHolder { - /** 当前部门编号 */ - private static final ThreadLocal DEPT_ID = new TransmittableThreadLocal<>(); - /** 当前部门所属公司编号(用于一致性校验) */ - private static final ThreadLocal COMPANY_ID = new TransmittableThreadLocal<>(); - /** 是否忽略部门数据权限 */ - private static final ThreadLocal IGNORE = new TransmittableThreadLocal<>(); + // 是否启用 + private static final ThreadLocal enable = new TransmittableThreadLocal<>(); - public static Long getDeptId() { - return DEPT_ID.get(); + private static final ThreadLocal deptDataRoleCodes = new TransmittableThreadLocal<>(); //部门数据查看权限 + private static final ThreadLocal moduleDataRoleCodes = new TransmittableThreadLocal<>(); //模块数据权限 + private static final ThreadLocal deptIdColumn = new TransmittableThreadLocal<>(); //部门id列 + private static final ThreadLocal userIdColumn = new TransmittableThreadLocal<>(); //人员id列 + private static final ThreadLocal custom = new TransmittableThreadLocal<>(); //人员id列 + + public static void setEnable(Boolean ignore) { + enable.set(ignore); } - public static Long getCompanyId() { - return COMPANY_ID.get(); + public static boolean shouldExecute() { + return Boolean.TRUE.equals(enable.get()); } - /** - * 设置部门与所属公司编号。 - */ - public static void setContext(Long deptId, Long companyId) { - DEPT_ID.set(deptId); - COMPANY_ID.set(companyId); + public static void setContext(boolean enable, String deptDataRoleCode, String moduleDataRoleCode, String deptIdColumn, String userIdColumn, String custom){ + QMSPermissionContextHolder.setEnable(enable); + QMSPermissionContextHolder.deptDataRoleCodes.set(deptDataRoleCode); + QMSPermissionContextHolder.moduleDataRoleCodes.set(moduleDataRoleCode); + QMSPermissionContextHolder.deptIdColumn.set(deptIdColumn); + QMSPermissionContextHolder.userIdColumn.set(userIdColumn); + QMSPermissionContextHolder.custom.set(custom); } - public static void setDeptId(Long deptId) { - DEPT_ID.set(deptId); + public static void setDeptDataRoleCode(String deptDataRoleCode) { + QMSPermissionContextHolder.deptDataRoleCodes.set(deptDataRoleCode); + } + public static String getDeptDataRoleCode() { + return deptDataRoleCodes.get(); } - public static void setCompanyId(Long companyId) { - COMPANY_ID.set(companyId); + public static void setModuleDataRoleCodes(String moduleDataRoleCodes) { + QMSPermissionContextHolder.moduleDataRoleCodes.set(moduleDataRoleCodes); + } + public static String getModuleDataRoleCodes() { + return moduleDataRoleCodes.get(); } - public static boolean hasDeptId() { - Long deptId = DEPT_ID.get(); - return deptId != null && deptId > 0L; + public static void setDeptIdColumn(String deptIdColumn) { + QMSPermissionContextHolder.deptIdColumn.set(deptIdColumn); + } + public static String getDeptIdColumn() { + if(deptIdColumn.get() == null || deptIdColumn.get().length() == 0) + return "DEPT_ID"; + return deptIdColumn.get(); } - public static void setIgnore(Boolean ignore) { - IGNORE.set(ignore); + public static void setUserIdColumn(String userIdColumn) { + 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() { - return Boolean.TRUE.equals(IGNORE.get()); + public static void setCustom(String custom) { + QMSPermissionContextHolder.custom.set(custom); + } + public static String getCustom() { + return custom.get(); } public static void clear() { - DEPT_ID.remove(); - COMPANY_ID.remove(); - IGNORE.remove(); + enable.remove(); + deptDataRoleCodes.remove(); + moduleDataRoleCodes.remove(); + deptIdColumn.remove(); + userIdColumn.remove(); + custom.remove(); + } } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/framework/mybatis/QMSDataPermissionConfig.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/framework/mybatis/QMSDataPermissionConfig.java index 3bf9f88..d1610e2 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/framework/mybatis/QMSDataPermissionConfig.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/framework/mybatis/QMSDataPermissionConfig.java @@ -1,42 +1,42 @@ -//package com.zt.plat.module.qms.framework.mybatis; -// -// -//import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; -//import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor; -//import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; -//import com.zt.plat.module.qms.framework.datapermission.QMSMultiDataPermissionHandler; -//import jakarta.annotation.PostConstruct; -//import org.aspectj.lang.annotation.After; -//import org.springframework.beans.factory.SmartInitializingSingleton; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.context.annotation.Configuration; -// -//import java.util.List; -// +package com.zt.plat.module.qms.framework.mybatis; + + +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; +import com.zt.plat.module.qms.framework.datapermission.QMSMultiDataPermissionHandler; +import jakarta.annotation.PostConstruct; +import org.aspectj.lang.annotation.After; +import org.springframework.beans.factory.SmartInitializingSingleton; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; + +import java.util.List; + //@Configuration -//public class QMSDataPermissionConfig implements SmartInitializingSingleton { -// @Autowired -// private MybatisPlusInterceptor mybatisPlusInterceptor; +public class QMSDataPermissionConfig implements SmartInitializingSingleton { + @Autowired + private MybatisPlusInterceptor mybatisPlusInterceptor; + + @Autowired + private QMSMultiDataPermissionHandler qmsMultiDataPermissionHandler; + + @Override + public void afterSingletonsInstantiated() { + List 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 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() { -//// -//// } -// -//} + +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/admin/SupplierController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/admin/SupplierController.java index 78ddfd4..4e8fd76 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/admin/SupplierController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/admin/SupplierController.java @@ -93,9 +93,9 @@ public class SupplierController extends AbstractFileUploadController implements @Operation(summary = "获得供应商") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('qms:supplier:query')") - public CommonResult getSupplier(@RequestParam("id") Long id) { - SupplierDO supplier = supplierService.getSupplier(id); - return success(BeanUtils.toBean(supplier, SupplierRespVO.class)); + public CommonResult getSupplier(@RequestParam("id") Long id) { + SupplierExtendRespVO supplier = supplierService.getSupplier(id); + return success(supplier); } @GetMapping("/page") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/admin/SupplierEvaluationController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/admin/SupplierEvaluationController.java index 8a8a0dc..4e60ac1 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/admin/SupplierEvaluationController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/admin/SupplierEvaluationController.java @@ -1,5 +1,7 @@ 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.SupplierEvaluationRespVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationSaveReqVO; @@ -57,14 +59,14 @@ public class SupplierEvaluationController extends AbstractFileUploadController i @PostMapping("/create") @Operation(summary = "创建供应商评价") - @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:create')") +// @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:create')") public CommonResult createSupplierEvaluation(@Valid @RequestBody SupplierEvaluationSaveReqVO createReqVO) { return success(supplierEvaluationService.createSupplierEvaluation(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新供应商评价") - @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:update')") +// @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:update')") public CommonResult updateSupplierEvaluation(@Valid @RequestBody SupplierEvaluationSaveReqVO updateReqVO) { supplierEvaluationService.updateSupplierEvaluation(updateReqVO); return success(true); @@ -73,7 +75,7 @@ public class SupplierEvaluationController extends AbstractFileUploadController i @DeleteMapping("/delete") @Operation(summary = "删除供应商评价") @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:delete')") +// @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:delete')") public CommonResult deleteSupplierEvaluation(@RequestParam("id") Long id) { supplierEvaluationService.deleteSupplierEvaluation(id); return success(true); @@ -82,7 +84,7 @@ public class SupplierEvaluationController extends AbstractFileUploadController i @DeleteMapping("/delete-list") @Parameter(name = "ids", description = "编号", required = true) @Operation(summary = "批量删除供应商评价") - @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:delete')") +// @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:delete')") public CommonResult deleteSupplierEvaluationList(@RequestBody BatchDeleteReqVO req) { supplierEvaluationService.deleteSupplierEvaluationListByIds(req.getIds()); return success(true); @@ -91,7 +93,7 @@ public class SupplierEvaluationController extends AbstractFileUploadController i @GetMapping("/get") @Operation(summary = "获得供应商评价") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:query')") +// @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:query')") public CommonResult getSupplierEvaluation(@RequestParam("id") Long id) { SupplierEvaluationDO supplierEvaluation = supplierEvaluationService.getSupplierEvaluation(id); return success(BeanUtils.toBean(supplierEvaluation, SupplierEvaluationRespVO.class)); @@ -99,10 +101,16 @@ public class SupplierEvaluationController extends AbstractFileUploadController i @GetMapping("/page") @Operation(summary = "获得供应商评价分页") - @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:query')") +// @PreAuthorize("@ss.hasPermission('qms:supplier-evaluation:query')") public CommonResult> getSupplierEvaluationPage(@Valid SupplierEvaluationPageReqVO pageReqVO) { - PageResult pageResult = supplierEvaluationService.getSupplierEvaluationPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, SupplierEvaluationRespVO.class)); + PageResult pageResult = supplierEvaluationService.getSupplierEvaluationPage(pageReqVO); + return success(pageResult); + } + + @PostMapping("/createProcessInstance") + @Operation(summary = "发起流程") + public CommonResult createProcessInstance(@Valid @RequestBody SupplierEvaluationSaveReqVO createReqVO) { + return supplierEvaluationService.createProcessInstance(createReqVO); } @GetMapping("/export-excel") @@ -112,7 +120,7 @@ public class SupplierEvaluationController extends AbstractFileUploadController i public void exportSupplierEvaluationExcel(@Valid SupplierEvaluationPageReqVO pageReqVO, HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = supplierEvaluationService.getSupplierEvaluationPage(pageReqVO).getList(); + List list = supplierEvaluationService.getSupplierEvaluationPage(pageReqVO).getList(); // 导出 Excel ExcelUtils.write(response, "供应商评价.xls", "数据", SupplierEvaluationRespVO.class, BeanUtils.toBean(list, SupplierEvaluationRespVO.class)); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/admin/SupplierPropertiesController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/admin/SupplierPropertiesController.java index 85be988..f1231d5 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/admin/SupplierPropertiesController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/admin/SupplierPropertiesController.java @@ -57,14 +57,14 @@ public class SupplierPropertiesController extends AbstractFileUploadController i @PostMapping("/create") @Operation(summary = "创建供应商属性") - @PreAuthorize("@ss.hasPermission('qms:supplier-properties:create')") +// @PreAuthorize("@ss.hasPermission('qms:supplier-properties:create')") public CommonResult createSupplierProperties(@Valid @RequestBody SupplierPropertiesSaveReqVO createReqVO) { return success(supplierPropertiesService.createSupplierProperties(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新供应商属性") - @PreAuthorize("@ss.hasPermission('qms:supplier-properties:update')") +// @PreAuthorize("@ss.hasPermission('qms:supplier-properties:update')") public CommonResult updateSupplierProperties(@Valid @RequestBody SupplierPropertiesSaveReqVO updateReqVO) { supplierPropertiesService.updateSupplierProperties(updateReqVO); return success(true); @@ -73,7 +73,7 @@ public class SupplierPropertiesController extends AbstractFileUploadController i @DeleteMapping("/delete") @Operation(summary = "删除供应商属性") @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('qms:supplier-properties:delete')") +// @PreAuthorize("@ss.hasPermission('qms:supplier-properties:delete')") public CommonResult deleteSupplierProperties(@RequestParam("id") Long id) { supplierPropertiesService.deleteSupplierProperties(id); return success(true); @@ -91,7 +91,7 @@ public class SupplierPropertiesController extends AbstractFileUploadController i @GetMapping("/get") @Operation(summary = "获得供应商属性") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('qms:supplier-properties:query')") +// @PreAuthorize("@ss.hasPermission('qms:supplier-properties:query')") public CommonResult getSupplierProperties(@RequestParam("id") Long id) { SupplierPropertiesDO supplierProperties = supplierPropertiesService.getSupplierProperties(id); return success(BeanUtils.toBean(supplierProperties, SupplierPropertiesRespVO.class)); @@ -99,7 +99,7 @@ public class SupplierPropertiesController extends AbstractFileUploadController i @GetMapping("/page") @Operation(summary = "获得供应商属性分页") - @PreAuthorize("@ss.hasPermission('qms:supplier-properties:query')") +// @PreAuthorize("@ss.hasPermission('qms:supplier-properties:query')") public CommonResult> getSupplierPropertiesPage(@Valid SupplierPropertiesPageReqVO pageReqVO) { PageResult pageResult = supplierPropertiesService.getSupplierPropertiesPage(pageReqVO); return success(BeanUtils.toBean(pageResult, SupplierPropertiesRespVO.class)); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierEvaluationPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierEvaluationPageReqVO.java index 1b67536..8f1a779 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierEvaluationPageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierEvaluationPageReqVO.java @@ -1,5 +1,6 @@ package com.zt.plat.module.qms.office.supplier.controller.vo; +import com.alibaba.excel.annotation.ExcelProperty; import lombok.*; import io.swagger.v3.oas.annotations.media.Schema; 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) private LocalDateTime[] createTime; + //==============扩展字段=============== + @Schema(description = "供应商名称") + private String supplierName; + + @Schema(description = "审批签名") + private String signatureInfo; + + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierEvaluationRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierEvaluationRespVO.java index bb2ea1b..403d25a 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierEvaluationRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierEvaluationRespVO.java @@ -1,5 +1,6 @@ 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 lombok.*; @@ -45,6 +46,7 @@ public class SupplierEvaluationRespVO { @Schema(description = "流程审批状态", example = "2") @ExcelProperty("流程审批状态") + @Dict(dicCode = "flow_status") private String flowStatus; @Schema(description = "流程实例id", example = "24931") @@ -63,4 +65,13 @@ public class SupplierEvaluationRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; + //==============扩展字段=============== + @Schema(description = "供应商名称") + private String supplierName; + + @Schema(description = "审批签名") + @ExcelProperty("审批签名") + private String signatureInfo; + + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierEvaluationSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierEvaluationSaveReqVO.java index 5f208ce..a5ff13e 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierEvaluationSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierEvaluationSaveReqVO.java @@ -1,5 +1,6 @@ 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 lombok.*; @@ -45,4 +46,7 @@ public class SupplierEvaluationSaveReqVO { @Schema(description = "备注") private String remark; + @Schema(description = "审批签名") + private String signatureInfo; + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierExtendRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierExtendRespVO.java new file mode 100644 index 0000000..36e0530 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierExtendRespVO.java @@ -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 supplierPropertiesList; + + +} \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierPageReqVO.java index e00c5d0..c471eff 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierPageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierPageReqVO.java @@ -21,6 +21,12 @@ public class SupplierPageReqVO extends PageParam { @Schema(description = "类型", example = "1") private String type; + @Schema(description = "统一社会信用代码") + private String creditCode; + + @Schema(description = "注册日期") + private LocalDateTime registerDate; + @Schema(description = "地址") private String address; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierPropertiesPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierPropertiesPageReqVO.java index 101fdba..efe174b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierPropertiesPageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierPropertiesPageReqVO.java @@ -29,6 +29,9 @@ public class SupplierPropertiesPageReqVO extends PageParam { @Schema(description = "名称", example = "王五") private String name; + @Schema(description = "说明") + private String content; + @Schema(description = "有效期开始") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] startDate; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierPropertiesRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierPropertiesRespVO.java index d39ddb0..eb425f8 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierPropertiesRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierPropertiesRespVO.java @@ -1,5 +1,6 @@ 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 lombok.*; @@ -30,12 +31,17 @@ public class SupplierPropertiesRespVO { @Schema(description = "子业务编码") @ExcelProperty("子业务编码") + @Dict(dicCode = "") private String subitemCode; @Schema(description = "名称", example = "王五") @ExcelProperty("名称") private String name; + @Schema(description = "说明") + @ExcelProperty("说明") + private String content; + @Schema(description = "有效期开始") @ExcelProperty("有效期开始") private LocalDateTime startDate; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierPropertiesSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierPropertiesSaveReqVO.java index 77a27cf..f3b0c30 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierPropertiesSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierPropertiesSaveReqVO.java @@ -28,6 +28,9 @@ public class SupplierPropertiesSaveReqVO { @Schema(description = "名称", example = "王五") private String name; + @Schema(description = "说明") + private String content; + @Schema(description = "有效期开始") private LocalDateTime startDate; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierRespVO.java index d120efc..f263313 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierRespVO.java @@ -27,6 +27,14 @@ public class SupplierRespVO { @ExcelProperty("类型") private String type; + @Schema(description = "统一社会信用代码") + @ExcelProperty("统一社会信用代码") + private String creditCode; + + @Schema(description = "注册日期") + @ExcelProperty("注册日期") + private LocalDateTime registerDate; + @Schema(description = "地址") @ExcelProperty("地址") private String address; @@ -58,5 +66,4 @@ public class SupplierRespVO { @Schema(description = "创建时间") @ExcelProperty("创建时间") private LocalDateTime createTime; - } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierSaveReqVO.java index 843cbfc..7c21946 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/controller/vo/SupplierSaveReqVO.java @@ -1,8 +1,11 @@ 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 lombok.*; +import java.time.LocalDateTime; + @Schema(description = "管理后台 - 供应商新增/修改 Request VO") @Data public class SupplierSaveReqVO { @@ -19,6 +22,12 @@ public class SupplierSaveReqVO { @Schema(description = "类型", example = "1") private String type; + @Schema(description = "统一社会信用代码") + private String creditCode; + + @Schema(description = "注册日期") + private LocalDateTime registerDate; + @Schema(description = "地址") private String address; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/dataobject/SupplierDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/dataobject/SupplierDO.java index 08ad568..eaec43e 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/dataobject/SupplierDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/dataobject/SupplierDO.java @@ -3,6 +3,9 @@ package com.zt.plat.module.qms.office.supplier.dal.dataobject; import lombok.*; import com.baomidou.mybatisplus.annotation.*; import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO; + +import java.time.LocalDateTime; + /** * 供应商 DO * @@ -44,6 +47,16 @@ public class SupplierDO extends BusinessBaseDO { @TableField("TP") private String type; /** + * 统一社会信用代码 + */ + @TableField("CRDT_CD") + private String creditCode; + /** + * 注册日期 + */ + @TableField("REG_DT") + private LocalDateTime registerDate; + /** * 地址 */ @TableField("ADR") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/dataobject/SupplierEvaluationDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/dataobject/SupplierEvaluationDO.java index c0e1fbb..a8d1d80 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/dataobject/SupplierEvaluationDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/dataobject/SupplierEvaluationDO.java @@ -77,6 +77,11 @@ public class SupplierEvaluationDO extends BusinessBaseDO { @TableField("FLW_INSC_ID") private String flowInstanceId; /** + * 签名信息 + */ + @TableField("SIG_INF") + private String signatureInfo; + /** * 所属部门 */ @TableField("SYS_DEPT_CD") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/dataobject/SupplierPropertiesDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/dataobject/SupplierPropertiesDO.java index d74a2a4..22046f4 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/dataobject/SupplierPropertiesDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/dataobject/SupplierPropertiesDO.java @@ -57,6 +57,11 @@ public class SupplierPropertiesDO extends BusinessBaseDO { */ @TableField("NAME") private String name; + /** + * 说明 + */ + @TableField("CNTT") + private String content; /** * 有效期开始 */ diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/mapper/SupplierEvaluationMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/mapper/SupplierEvaluationMapper.java index c2e5388..ce1b97b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/mapper/SupplierEvaluationMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/mapper/SupplierEvaluationMapper.java @@ -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.mybatis.core.query.LambdaQueryWrapperX; 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.controller.vo.SupplierEvaluationPageReqVO; import org.apache.ibatis.annotations.Mapper; @@ -15,8 +18,11 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface SupplierEvaluationMapper extends BaseMapperX { - default PageResult selectPage(SupplierEvaluationPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() + default PageResult selectPage(SupplierEvaluationPageReqVO reqVO) { + return selectJoinPage(reqVO,SupplierEvaluationRespVO.class, new MPJLambdaWrapperX() + .leftJoin(SupplierDO.class,SupplierDO::getId, SupplierEvaluationDO::getSupplierId) + .selectAll(SupplierEvaluationDO.class) + .selectAs(SupplierDO::getName, SupplierEvaluationRespVO::getSupplierName) .eqIfPresent(SupplierEvaluationDO::getSupplierId, reqVO.getSupplierId()) .eqIfPresent(SupplierEvaluationDO::getFormId, reqVO.getFormId()) .eqIfPresent(SupplierEvaluationDO::getContent, reqVO.getContent()) @@ -29,7 +35,10 @@ public interface SupplierEvaluationMapper extends BaseMapperX { .eqIfPresent(SupplierDO::getCode, reqVO.getCode()) .eqIfPresent(SupplierDO::getType, reqVO.getType()) .eqIfPresent(SupplierDO::getAddress, reqVO.getAddress()) + .eqIfPresent(SupplierDO::getCreditCode, reqVO.getCreditCode()) + .eqIfPresent(SupplierDO::getRegisterDate, reqVO.getRegisterDate()) .eqIfPresent(SupplierDO::getContact, reqVO.getContact()) .eqIfPresent(SupplierDO::getMobile, reqVO.getMobile()) .eqIfPresent(SupplierDO::getBusinessScope, reqVO.getBusinessScope()) @@ -30,4 +38,16 @@ public interface SupplierMapper extends BaseMapperX { .orderByDesc(SupplierDO::getId)); } + default SupplierExtendRespVO selectOneWithCertifications(Long id) { + return selectJoinOne(SupplierExtendRespVO.class, + new MPJLambdaWrapperX() + .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) + ); + } + + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/mapper/SupplierPropertiesMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/mapper/SupplierPropertiesMapper.java index 89ecc1e..6b13a04 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/mapper/SupplierPropertiesMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/dal/mapper/SupplierPropertiesMapper.java @@ -1,5 +1,6 @@ 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.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; @@ -22,6 +23,7 @@ public interface SupplierPropertiesMapper extends BaseMapperX selectList(SupplierPropertiesPageReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(SupplierPropertiesDO::getSupplierId, reqVO.getSupplierId()) + .eqIfPresent(SupplierPropertiesDO::getBusinessType, reqVO.getBusinessType()) + .eqIfPresent(SupplierPropertiesDO::getBusinessCode, reqVO.getBusinessCode()) + .eqIfPresent(SupplierPropertiesDO::getSubitemCode, reqVO.getSubitemCode()) + .orderByDesc(SupplierPropertiesDO::getId)); + } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierEvaluationService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierEvaluationService.java index 5eff693..2b4f4fe 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierEvaluationService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierEvaluationService.java @@ -2,6 +2,9 @@ package com.zt.plat.module.qms.office.supplier.service; 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.SupplierEvaluationRespVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationSaveReqVO; @@ -59,6 +62,9 @@ public interface SupplierEvaluationService { * @param pageReqVO 分页查询 * @return 供应商评价分页 */ - PageResult getSupplierEvaluationPage(SupplierEvaluationPageReqVO pageReqVO); + PageResult getSupplierEvaluationPage(SupplierEvaluationPageReqVO pageReqVO); + + //发起流程 + CommonResult createProcessInstance(SupplierEvaluationSaveReqVO entity); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierEvaluationServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierEvaluationServiceImpl.java index e19b7e8..a6f3047 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierEvaluationServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierEvaluationServiceImpl.java @@ -1,13 +1,37 @@ package com.zt.plat.module.qms.office.supplier.service; 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.SupplierEvaluationRespVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierEvaluationSaveReqVO; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; +import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; import java.util.*; 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 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.module.qms.enums.ErrorCodeConstants.*; +import static com.zt.plat.module.qms.enums.QmsBpmConstant.BPM_CALLBACK_BEAN_NAME; /** * 供应商评价 Service 实现类 * * @author 后台管理 */ -@Service +@Service("supplierEvaluationService") @Validated -public class SupplierEvaluationServiceImpl implements SupplierEvaluationService { +public class SupplierEvaluationServiceImpl implements SupplierEvaluationService, BMPCallbackInterface { - @Resource - private SupplierEvaluationMapper supplierEvaluationMapper; + @Resource private SupplierEvaluationMapper supplierEvaluationMapper; + @Resource private BpmProcessInstanceApi bpmProcessInstanceApi; + @Resource private BpmTaskApi bpmTaskApi; + @Resource private ConfigUserSignatureService configUserSignatureService; + @Resource private DataKeyCheckService dataKeyCheckService; @Override public SupplierEvaluationRespVO createSupplierEvaluation(SupplierEvaluationSaveReqVO createReqVO) { + // 插入 SupplierEvaluationDO supplierEvaluation = BeanUtils.toBean(createReqVO, SupplierEvaluationDO.class); + supplierEvaluation.setFlowStatus(QmsCommonConstant.NOT_START); supplierEvaluationMapper.insert(supplierEvaluation); // 返回 return BeanUtils.toBean(supplierEvaluation, SupplierEvaluationRespVO.class); @@ -85,8 +116,166 @@ public class SupplierEvaluationServiceImpl implements SupplierEvaluationService } @Override - public PageResult getSupplierEvaluationPage(SupplierEvaluationPageReqVO pageReqVO) { + public PageResult getSupplierEvaluationPage(SupplierEvaluationPageReqVO pageReqVO) { return supplierEvaluationMapper.selectPage(pageReqVO); } + @Override + public CommonResult 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> taskRet = bpmTaskApi.getTaskListByProcessInstanceId(flowInsId); + List 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 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 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 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 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()); + } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierService.java index 003ca82..b9592f0 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierService.java @@ -2,6 +2,7 @@ package com.zt.plat.module.qms.office.supplier.service; 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.SupplierRespVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierSaveReqVO; @@ -51,7 +52,7 @@ public interface SupplierService { * @param id 编号 * @return 供应商 */ - SupplierDO getSupplier(Long id); + SupplierExtendRespVO getSupplier(Long id); /** * 获得供应商分页 diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierServiceImpl.java index 867d750..f188ef7 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierServiceImpl.java @@ -1,6 +1,7 @@ package com.zt.plat.module.qms.office.supplier.service; 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.SupplierRespVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierSaveReqVO; @@ -80,8 +81,8 @@ public class SupplierServiceImpl implements SupplierService { } @Override - public SupplierDO getSupplier(Long id) { - return supplierMapper.selectById(id); + public SupplierExtendRespVO getSupplier(Long id) { + return supplierMapper.selectOneWithCertifications(id); } @Override diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/clientManage/controller/admin/VersionManagementController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/clientManage/controller/admin/VersionManagementController.java index 48b88f4..ddb9572 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/clientManage/controller/admin/VersionManagementController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/clientManage/controller/admin/VersionManagementController.java @@ -30,7 +30,7 @@ import com.zt.plat.framework.datapermission.core.annotation.DeptDataPermissionIg import static com.zt.plat.framework.common.pojo.CommonResult.success; import com.zt.plat.framework.excel.core.util.ExcelUtils; - +import com.alibaba.fastjson.JSONObject; import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog; import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*; @@ -121,7 +121,7 @@ public class VersionManagementController extends AbstractFileUploadController im @GetMapping("/checkUpdate") @Operation(summary = "根据更新平台和安装包类型获取最新客户端版本管理信息") - public CommonResult checkUpdate(@Valid VersionManagementPageReqVO pageReqVO) { + public Object checkUpdate(@Valid VersionManagementPageReqVO pageReqVO) { if (pageReqVO.getApplicationCode() == null ) { return CommonResult.error(400, "客户端编号不能为空"); @@ -130,10 +130,42 @@ public class VersionManagementController extends AbstractFileUploadController im return CommonResult.error(400, "更新平台不能为空"); } PageResult 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) { return CommonResult.error(400, "没有可更新版本"); } VersionManagementDO versionManagementDO = pageResult.getList().get(0); + return success(BeanUtils.toBean(versionManagementDO, VersionManagementRespVO.class)); } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceProductController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceProductController.java index 5571f2b..c8f642a 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceProductController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceProductController.java @@ -1,6 +1,5 @@ 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.business.annotation.FileUploadController; 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.servlet.http.HttpServletResponse; import jakarta.validation.Valid; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -40,7 +38,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @RestController @RequestMapping("/qms/resource/device-product") @Validated -//@DeptDataPermissionIgnore(enable = "true") +@DeptDataPermissionIgnore(enable = "true") @FileUploadController(source = "resource.deviceproduct") public class DeviceProductController extends AbstractFileUploadController implements BusinessControllerMarker{ @@ -122,9 +120,6 @@ public class DeviceProductController extends AbstractFileUploadController implem return success(BeanUtils.toBean(deviceProduct, DeviceProductRespVO.class)); } - @Autowired - private MybatisPlusInterceptor mybatisPlusInterceptor; - @GetMapping("/page") @Operation(summary = "获得设备-设备大类分页") // @PreAuthorize("@ss.hasPermission('resource:device-product:query')") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceApplyMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceApplyMapper.java index 44a4e49..813b61b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceApplyMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceApplyMapper.java @@ -43,7 +43,6 @@ public interface DeviceApplyMapper extends BaseMapperX { .betweenIfPresent(DeviceApplyDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(DeviceApplyDO::getId); return selectPage(reqVO, wrapper); - } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceInfomationMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceInfomationMapper.java index 2fba698..a2f89c0 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceInfomationMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceInfomationMapper.java @@ -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.mybatis.core.mapper.BaseMapperX; 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.dal.dataobject.DeviceInfoWithBizConfigVO; import com.zt.plat.module.qms.resource.device.dal.dataobject.DeviceInfomationDO; @@ -20,6 +21,7 @@ import java.util.Map; @Mapper public interface DeviceInfomationMapper extends BaseMapperX { + @QmsPermission(deptDataRoleCodes = "") default PageResult selectPage(DeviceInfomationPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(DeviceInfomationDO::getProductId, reqVO.getProductId()) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceProductMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceProductMapper.java index fd64a7c..1b87ec9 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceProductMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceProductMapper.java @@ -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.mybatis.core.mapper.BaseMapperX; 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.dal.dataobject.DeviceProductDO; import org.apache.ibatis.annotations.Mapper;