Commit 28f58958 authored by 严国华's avatar 严国华

20251212专家库试运行定版

parent 767beba5
......@@ -27,9 +27,8 @@ steps:
secret_key:
from_secret: SECRET_KEY_MINIO
- name: build
image: hub.wodcloud.com/base/devops-maven:3.8-openjdk-17
image: registry.cn-qingdao.aliyuncs.com/wod/devops-maven:3.8-openjdk-11
commands:
- mvn clean install -Dmaven.test.skip=true
......@@ -46,74 +45,74 @@ steps:
from_secret: ACCESS_KEY_MINIO
secret_key:
from_secret: SECRET_KEY_MINIO
# - name: docker-system-amd64
# image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0
# volumes:
# - name: docker-sock
# path: /var/run/docker.sock
# settings:
# base: registry.cn-qingdao.aliyuncs.com/wod/openjdk:11.0-jdk-amd64 # 基础镜像
# dockerfile: .beagle/dockerfile.system
# repo: zjk/system
# version: "1.0"
# channel: amd64
# args: "TARGETOS=linux,TARGETARCH=amd64"
# registry: hub.wodcloud.com
# registry_user:
# from_secret: REGISTRY_USER
# registry_password:
# from_secret: REGISTRY_PASSWORD
# - name: docker-auth-amd64
# image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0
# volumes:
# - name: docker-sock
# path: /var/run/docker.sock
# settings:
# base: registry.cn-qingdao.aliyuncs.com/wod/openjdk:11.0-jdk-amd64 # 基础镜像
# dockerfile: .beagle/dockerfile.auth
# repo: zjk/auth
# version: "1.0"
# channel: amd64
# args: "TARGETOS=linux,TARGETARCH=amd64"
# registry: hub.wodcloud.com
# registry_user:
# from_secret: REGISTRY_USER
# registry_password:
# from_secret: REGISTRY_PASSWORD
# - name: docker-resource-amd64
# image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0
# volumes:
# - name: docker-sock
# path: /var/run/docker.sock
# settings:
# base: registry.cn-qingdao.aliyuncs.com/wod/openjdk:11.0-jdk-amd64 # 基础镜像
# dockerfile: .beagle/dockerfile.resource
# repo: zjk/resource
# version: "1.0"
# channel: amd64
# args: "TARGETOS=linux,TARGETARCH=amd64"
# registry: hub.wodcloud.com
# registry_user:
# from_secret: REGISTRY_USER
# registry_password:
# from_secret: REGISTRY_PASSWORD
# - name: docker-zjkapi-amd64
# image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0
# volumes:
# - name: docker-sock
# path: /var/run/docker.sock
# settings:
# base: registry.cn-qingdao.aliyuncs.com/wod/openjdk:11.0-jdk-amd64 # 基础镜像
# dockerfile: .beagle/dockerfile.zjkapi
# repo: zjk/zjk-api
# version: "1.0"
# channel: amd64
# args: "TARGETOS=linux,TARGETARCH=amd64"
# registry: hub.wodcloud.com
# registry_user:
# from_secret: REGISTRY_USER
# registry_password:
# from_secret: REGISTRY_PASSWORD
# - name: docker-system-amd64
# image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0
# volumes:
# - name: docker-sock
# path: /var/run/docker.sock
# settings:
# base: registry.cn-qingdao.aliyuncs.com/wod/openjdk:11.0-jdk-amd64 # 基础镜像
# dockerfile: .beagle/dockerfile.system
# repo: zjk/system
# version: "1.0"
# channel: amd64
# args: "TARGETOS=linux,TARGETARCH=amd64"
# registry: hub.wodcloud.com
# registry_user:
# from_secret: REGISTRY_USER
# registry_password:
# from_secret: REGISTRY_PASSWORD
# - name: docker-auth-amd64
# image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0
# volumes:
# - name: docker-sock
# path: /var/run/docker.sock
# settings:
# base: registry.cn-qingdao.aliyuncs.com/wod/openjdk:11.0-jdk-amd64 # 基础镜像
# dockerfile: .beagle/dockerfile.auth
# repo: zjk/auth
# version: "1.0"
# channel: amd64
# args: "TARGETOS=linux,TARGETARCH=amd64"
# registry: hub.wodcloud.com
# registry_user:
# from_secret: REGISTRY_USER
# registry_password:
# from_secret: REGISTRY_PASSWORD
# - name: docker-resource-amd64
# image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0
# volumes:
# - name: docker-sock
# path: /var/run/docker.sock
# settings:
# base: registry.cn-qingdao.aliyuncs.com/wod/openjdk:11.0-jdk-amd64 # 基础镜像
# dockerfile: .beagle/dockerfile.resource
# repo: zjk/resource
# version: "1.0"
# channel: amd64
# args: "TARGETOS=linux,TARGETARCH=amd64"
# registry: hub.wodcloud.com
# registry_user:
# from_secret: REGISTRY_USER
# registry_password:
# from_secret: REGISTRY_PASSWORD
# - name: docker-zjkapi-amd64
# image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0
# volumes:
# - name: docker-sock
# path: /var/run/docker.sock
# settings:
# base: registry.cn-qingdao.aliyuncs.com/wod/openjdk:11.0-jdk-amd64 # 基础镜像
# dockerfile: .beagle/dockerfile.zjkapi
# repo: zjk/zjk-api
# version: "1.0"
# channel: amd64
# args: "TARGETOS=linux,TARGETARCH=amd64"
# registry: hub.wodcloud.com
# registry_user:
# from_secret: REGISTRY_USER
# registry_password:
# from_secret: REGISTRY_PASSWORD
- name: docker-zjkapi-arm64
image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0
......
# 使用基础镜像作为构建起点
ARG BASE
FROM ${BASE}
# 设置时区
RUN echo "Asia/Shanghai" > /etc/timezone
# 拷贝 .service 和 .job 的 jar 包到容器中
COPY ../jtjxx-service/target/jtjxx-service-0.0.1-SNAPSHOT.jar /app/jtjxx-service.jar
COPY ../jtjxx-job/powerjob-server/powerjob-server-starter/target/jtjxx-job-service.jar /app/jtjxx-job-service.jar
# 暴露两个服务所需的端口
EXPOSE 8091 7700
# 启动脚本:同时启动两个 Java 服务
ENTRYPOINT ["sh", "-c", "java -jar /app/jtjxx-service.jar -Duser.timezone=Asia/Shanghai & java -jar /app/jtjxx-job-service.jar -Duser.timezone=Asia/Shanghai"]
FROM hub.wodcloud.com/base/openjdk17:17-jdk-slim
# 安装 Maven
ARG MAVEN_VERSION=3.8.6
ARG USER_HOME_DIR="/root"
ARG SHA=c704d082a11eca8344b68347029f51ad59588714ded9078f61393e505064ac0263390717454071242948aa1b390604529512033750907819f032220151745cf7
ARG BASE_URL=https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries
RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
&& curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
&& echo "${SHA} /tmp/apache-maven.tar.gz" | sha512sum -c - \
&& tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
&& rm -f /tmp/apache-maven.tar.gz \
&& ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
ENV MAVEN_HOME /usr/share/maven
ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2"
# 创建 .m2 目录
RUN mkdir -p $USER_HOME_DIR/.m2
MIT License
Copyright (c) 2022 RuoYi-Cloud-Plus
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
......@@ -7,7 +7,7 @@ spring:
boot:
admin:
ui:
title: RuoYi-Cloud-Plus服务监控中心
title: 专家库服务监控中心
discovery:
# seata 不具有健康检查的能力 防止报错排除掉
ignored-services: ruoyi-seata-server
ALTER TABLE "zjk_expert"
ADD COLUMN "scope_of_activity" varchar(255),
ADD COLUMN "is_classified" tinyint DEFAULT 0;
COMMENT ON COLUMN "zjk_expert"."scope_of_activity" IS '活动范围';
COMMENT ON COLUMN "zjk_expert"."is_classified" IS '是否涉密';
delete from zjk_expert where expert_id in (select expert_id from zjk_expert where to_date(create_time, 'YYYY-MM-DD')< '2025-12-10')
delete from zjk_review_phase;
delete from zjk_product;
delete from zjk_product_reviewsn;
delete from zjk_product_summarize;
delete from zjk_product_summarize_log;
delete from zjk_project_evaluation;
delete from zjk_retirement_records;
delete from zjk_settlement_voucher;
delete from zjk_point;
delete from zjk_point_user;
delete from zjk_leave;
delete from zjk_item_extreation;
delete from zjk_credit;
delete from zjk_credit_reward;
delete from zjk_annual_inspection;
delete from zjk_annual_inspection_copy1;
delete from zjk_annual_inspection_records;
delete from zjk_credit_reward;
--删除抽取记录
delete from zjk_item_extreation where id ='1998937901021708289';
delete from zjk_review_phase where id=34;
delete from zjk_expert_item where review_id=34;
@startuml
class org.dromara.zjk.controller.ZjkEvaluateController {
- ZjkEvaluateService zjkEvaluateService
+ TableDataInfo<ZjkEvaluateVO> listToZj(ZjkEvaluateVO,PageQuery)
+ TableDataInfo<ZjkEvaluateVO> listToOrg(ZjkEvaluateVO,PageQuery)
+ TableDataInfo<ZjkEvaluateVO> listToXm(ZjkEvaluateVO,PageQuery)
+ R<Void> addComment(ZjkEvaluateVO)
+ R<ZjkEvaluateVO> getInfo(String)
+ TableDataInfo<ZjkEvaluateVO> getEvaluateListByExpert(ZjkEvaluateVO,PageQuery)
+ R<StsEvaluateNumVO> getStsNum()
+ R<StsEvaluateVO> stsChart(Integer)
+ TableDataInfo<StsListVO> getStsList(ZjkEvaluateVO,PageQuery)
+ void export(ZjkEvaluateVO,HttpServletResponse)
}
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkEvaluateController
@enduml
\ No newline at end of file
......@@ -72,6 +72,7 @@ public interface RemoteUserService {
Boolean wbjregisterUserInfo(List<RemoteUserBo> remoteUserBo) throws UserException, ServiceException;
Boolean expertRegisterUserInfo(List<RemoteUserBo> remoteUserBo,String tenantId) throws UserException, ServiceException;
Boolean expertRegisterUserInfoForSpj(List<RemoteUserBo> remoteUserBo,String tenantId) throws UserException, ServiceException;
/**
* 通过userId查询用户账户
......
......@@ -190,6 +190,7 @@ public class TokenController {
}
return R.ok(sxzwfwLoginService.sxzwfwUserInfo(null, clientId, accessLink, acctType, tenantId));
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException("登陆失败请重试"+e.getMessage());
}
......
package org.dromara.common.core.config;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
/**
* 程序注解配置
......@@ -14,4 +19,15 @@ import org.springframework.scheduling.annotation.EnableAsync;
@EnableAsync(proxyTargetClass = true)
public class ApplicationConfig {
@Bean("smsTaskExecutor")
public Executor smsTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(100);
executor.setThreadNamePrefix("sms-sender-");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
return executor;
}
}
package org.dromara.common.excel.convert;
import cn.hutool.core.annotation.AnnotationUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.core.service.DictService;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.excel.utils.ExcelUtil;
import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
/**
* 多选字典格式化转换处理
*
* @author your-name
*/
@Slf4j
public class MultiDictConvert implements Converter<Object> {
@Override
public Class<Object> supportJavaTypeKey() {
return Object.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return null;
}
@Override
public Object convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
ExcelDictFormat anno = getAnnotation(contentProperty.getField());
String type = anno.dictType();
String label = cellData.getStringValue();
String value;
if (StringUtils.isBlank(label)) {
return null;
}
// 处理多选值
if (label.contains(anno.separator())) {
String[] labels = label.split(anno.separator());
List<String> values = new ArrayList<>();
for (String l : labels) {
String v;
if (StringUtils.isBlank(type)) {
v = ExcelUtil.reverseByExp(l.trim(), anno.readConverterExp(), anno.separator());
} else {
v = SpringUtils.getBean(DictService.class).getDictValue(type, l.trim(), anno.separator());
}
if (StringUtils.isNotEmpty(v)) {
values.add(v);
}
}
value = String.join(anno.separator(), values);
} else {
// 单值处理
if (StringUtils.isBlank(type)) {
value = ExcelUtil.reverseByExp(label, anno.readConverterExp(), anno.separator());
} else {
value = SpringUtils.getBean(DictService.class).getDictValue(type, label, anno.separator());
}
}
return Convert.convert(contentProperty.getField().getType(), value);
}
@Override
public WriteCellData<String> convertToExcelData(Object object, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
if (ObjectUtil.isNull(object)) {
return new WriteCellData<>("");
}
ExcelDictFormat anno = getAnnotation(contentProperty.getField());
String type = anno.dictType();
String value = Convert.toStr(object);
String label;
if (StringUtils.isBlank(value)) {
return new WriteCellData<>("");
}
// 处理多选值
if (value.contains(anno.separator())) {
String[] values = value.split(anno.separator());
List<String> labels = new ArrayList<>();
for (String v : values) {
String l;
if (StringUtils.isBlank(type)) {
l = ExcelUtil.convertByExp(v.trim(), anno.readConverterExp(), anno.separator());
} else {
l = SpringUtils.getBean(DictService.class).getDictLabel(type, v.trim(), anno.separator());
}
if (StringUtils.isNotEmpty(l)) {
labels.add(l);
}
}
label = String.join(anno.separator(), labels);
} else {
// 单值处理
if (StringUtils.isBlank(type)) {
label = ExcelUtil.convertByExp(value, anno.readConverterExp(), anno.separator());
} else {
label = SpringUtils.getBean(DictService.class).getDictLabel(type, value, anno.separator());
}
}
return new WriteCellData<>(label);
}
private ExcelDictFormat getAnnotation(Field field) {
return AnnotationUtil.getAnnotation(field, ExcelDictFormat.class);
}
}
......@@ -58,36 +58,26 @@
<groupId>com.tongweb.springboot</groupId>
<artifactId>tongweb-spring-boot-starter-3.x</artifactId>
<version>${tw.starter.version}</version>
<scope>system</scope>
<systemPath>${basedir}/libs/tongweb-spring-boot-starter-3.x-7.0.E.6_P7.jar</systemPath>
</dependency>
<dependency>
<groupId>com.tongweb.springboot</groupId>
<artifactId>tongweb-spring-boot-websocket-3.x</artifactId>
<version>${tw.starter.version}</version>
<scope>system</scope>
<systemPath>${basedir}/libs/tongweb-spring-boot-websocket-3.x-7.0.E.6_P7.jar</systemPath>
</dependency>
<dependency>
<groupId>com.tongweb</groupId>
<artifactId>tongweb-lic-sdk</artifactId>
<version>4.5.0.0</version>
<scope>system</scope>
<systemPath>${basedir}/libs/tongweb-lic-sdk-4.5.0.0.jar</systemPath>
</dependency>
<dependency>
<groupId>com.tongweb</groupId>
<artifactId>tongweb-embed-core</artifactId>
<version>${tw.starter.version}</version>
<scope>system</scope>
<systemPath>${basedir}/libs/tongweb-embed-core-3.x-7.0.E.6_P7.jar</systemPath>
</dependency>
<dependency>
<groupId>com.tongweb</groupId>
<artifactId>tongweb-embed-websocket</artifactId>
<version>${tw.starter.version}</version>
<scope>system</scope>
<systemPath>${basedir}/libs/tongweb-embed-websocket-3.x-7.0.E.6_P7.jar</systemPath>
</dependency>
<!-- SpringBoot Actuator -->
<dependency>
......
......@@ -21,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
/**
* 文件请求处理
......@@ -38,7 +39,6 @@ public class RemoteFileServiceImpl implements RemoteFileService {
/**
* 文件上传请求
*/
@Transactional(rollbackFor = Exception.class)
@Override
public RemoteFile upload(String name, String originalFilename, String contentType, byte[] file) throws ServiceException {
try {
......@@ -61,7 +61,8 @@ public class RemoteFileServiceImpl implements RemoteFileService {
sysFile.setFileSuffix(suffix);
return sysFile;
} catch (Exception e) {
log.error("上传文件失败", e);
log.error("上传文件失败");
e.printStackTrace();
throw new ServiceException("上传文件失败");
}
}
......
......@@ -56,6 +56,7 @@ public class SysProfileController extends BaseController {
* 个人信息
*/
@GetMapping
@DecryptOperation
public R<ProfileVo> profile() {
SysUserVo user = userService.selectUserById(LoginHelper.getUserId());
ProfileVo profileVo = new ProfileVo();
......@@ -68,6 +69,7 @@ public class SysProfileController extends BaseController {
/**
* 修改用户信息
*/
@DecryptOperation
@RepeatSubmit
@Log(title = "个人信息", businessType = BusinessType.UPDATE)
@PutMapping
......@@ -125,7 +127,6 @@ public class SysProfileController extends BaseController {
* @param avatarfile 用户头像
*/
@RepeatSubmit
@GlobalTransactional(rollbackFor = Exception.class)
@Log(title = "用户头像", businessType = BusinessType.UPDATE)
@PostMapping(value = "/avatar", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<AvatarVo> avatar(@RequestPart("avatarfile") MultipartFile avatarfile) throws IOException {
......
......@@ -5,12 +5,10 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.sensitive.annotation.Sensitive;
import org.dromara.common.sensitive.core.SensitiveStrategy;
import org.dromara.system.zwy.annotation.EncryptSensitive;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.system.domain.SysDept;
import org.dromara.system.zwy.annotation.EncryptSensitive;
import java.io.Serial;
import java.io.Serializable;
......
......@@ -225,19 +225,14 @@ public class RemoteUserServiceImpl implements RemoteUserService {
public Boolean expertRegisterUserInfo(List<RemoteUserBo> remoteUserBo,String tenantId) throws UserException, ServiceException {
// 将 RemoteUserBo 转换为 SysUserBo 列表
List<SysUserBo> sysUserBoList = BeanUtil.copyToList(remoteUserBo, SysUserBo.class);
// 获取所有用户名
List<String> userNameList = sysUserBoList.stream()
.map(SysUserBo::getUserName)
.collect(Collectors.toList());
// 根据用户名列表查询已存在的用户
List<SysUser> existingSysUsers = userService.selectListByUserNames(userNameList);
// 提取已存在用户的租户 ID
Set<String> existingTenantIds = existingSysUsers.stream()
.map(SysUser::getTenantId)
.collect(Collectors.toSet());
// 过滤掉租户 ID 已存在的用户
List<String> names = sysUserBoList.stream().map(item -> {
String name = userService.selectByIdcardAndNickName(item.getIdCard(), item.getNickName());
return name;
}).collect(Collectors.toList());
// 过滤掉已存在的用户
sysUserBoList = sysUserBoList.stream()
.filter(sysUser -> !existingTenantIds.contains(sysUser.getTenantId()))
.filter(sysUser -> !names.contains(sysUser.getNickName()))
.collect(Collectors.toList());
// 如果过滤后的列表为空,则直接返回 true
if (CollectionUtil.isEmpty(sysUserBoList)) {
......@@ -247,6 +242,14 @@ public class RemoteUserServiceImpl implements RemoteUserService {
return userService.registerExpertUser(sysUserBoList,tenantId);
}
@Override
public Boolean expertRegisterUserInfoForSpj(List<RemoteUserBo> remoteUserBo, String tenantId) throws UserException, ServiceException {
List<SysUserBo> sysUserBoList = BeanUtil.copyToList(remoteUserBo, SysUserBo.class);
// 注册新用户
return userService.registerExpertUser(sysUserBoList,tenantId);
}
/**
* 通过用户ID查询用户账户
*
......
......@@ -76,10 +76,6 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
long countUserById(Long userId);
@Override
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id"),
@DataColumn(key = "userName", value = "user_id")
})
int update(@Param(Constants.ENTITY) SysUser user, @Param(Constants.WRAPPER) Wrapper<SysUser> updateWrapper);
@Override
......@@ -105,4 +101,6 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
int updatePasswordById(@Param("userId") Long userId, @Param("password") String password);
void updateHmacById(SysUser update);
String selectByIdcardAndNickName(String idCard, String nickName);
}
package org.dromara.system.service;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.SysUser;
......@@ -312,4 +314,6 @@ public interface ISysUserService {
Object selectSysUserById(Long id);
void updateUserHmac(SysUser update);
String selectByIdcardAndNickName(String idCard, String nickName);
}
......@@ -557,6 +557,12 @@ public class SysUserServiceImpl implements ISysUserService {
baseMapper.updateHmacById(update);
}
@Override
public String selectByIdcardAndNickName(String idCard, String nickName) {
return baseMapper.selectByIdcardAndNickName(idCard, nickName);
}
/**
* 用户授权角色
*
......@@ -608,8 +614,7 @@ public class SysUserServiceImpl implements ISysUserService {
.set(SysUser::getEmail, user.getEmail())
.set(SysUser::getSex, user.getSex())
.eq(SysUser::getUserId, user.getUserId())
.set(SysUser::getPasswordUpdateTime, user.getPasswordUpdateTime())
.set(ObjectUtil.isNotNull(user.getBankName()), SysUser::getBankName, user.getBankName())
.set(ObjectUtil.isNotNull(user.getPasswordUpdateTime()), SysUser::getPasswordUpdateTime, user.getPasswordUpdateTime()) .set(ObjectUtil.isNotNull(user.getBankName()), SysUser::getBankName, user.getBankName())
.set(ObjectUtil.isNotNull(user.getBankCode()), SysUser::getBankCode, user.getBankCode())
.set(ObjectUtil.isNotNull(user.getBankAddr()), SysUser::getBankAddr, user.getBankAddr())
);
......
......@@ -101,6 +101,9 @@
AND del_flag = '0'
</select>
<select id="selectByIdcardAndNickName" resultType="java.lang.String">
select nick_name from sys_user where user_name=#{idCard} and nick_name=#{nickName}
</select>
<update id="updatePasswordById">
UPDATE sys_user
......
......@@ -112,9 +112,12 @@
<groupId>cn.bubi.sdk</groupId>
<artifactId>bubichain-sdk</artifactId>
<version>4.0.4</version>
<scope>system</scope>
<systemPath>${basedir}/libs/bubichain-sdk-4.0.4.jar</systemPath>
</dependency>
<dependency>
<groupId>cn.bubi.sdk</groupId>
<artifactId>bubichain-sdk</artifactId>
<version>4.0.4</version>
</dependency>
</dependencies>
<build>
......
......@@ -3,6 +3,7 @@ package org.dromara.zjk.annualInspection.annualInspectionAudit.domain;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.EqualsAndHashCode;
import org.dromara.common.tenant.core.TenantEntity;
import org.dromara.zjk.annotation.PropertyMsg;
......@@ -86,5 +87,9 @@ public class ZjkAnnualInspection extends TenantEntity {
private String reason;
private String hmac;
/**
* 更新人(年检审核人)
*/
@TableField(exist = false)
private String updateByStr;
}
......@@ -91,4 +91,6 @@ public class ZjkAnnualInspectionBo extends BaseEntity {
@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date endAuditTime;
private String start;
private String end;
}
......@@ -19,4 +19,5 @@ public interface ZjkAnnualInspectionMapper extends BaseMapperPlus<ZjkAnnualInspe
void batchAnnualInspection(ZjkAnnualInspectionBo zjkAnnualInspectionBo);
String selectApprovalByUserId(Long updateBy);
}
......@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.satoken.utils.LoginHelper;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.DateUtils;
......@@ -28,6 +29,7 @@ import org.dromara.zjk.utils.IdCardUtils;
import org.dromara.zjk.utils.NumberGenerator;
import org.dromara.zjk.zwy.client.HmacClient;
import org.dromara.zjk.zwy.utils.ObjectHashGenerator;
import org.dromara.zjk.zwy.utils.StringCryptoUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -55,7 +57,8 @@ public class ZjkAnnualInspectionServiceImpl implements IZjkAnnualInspectionServi
private IZjkExpertService zjkExpertService;
private final HmacClient hmacClient;
@Autowired
private StringCryptoUtil stringCryptoUtil;
/**
* 查询年检管理
*
......@@ -76,6 +79,16 @@ public class ZjkAnnualInspectionServiceImpl implements IZjkAnnualInspectionServi
*/
@Override
public TableDataInfo<ZjkAnnualInspectionVo> queryPageList(ZjkAnnualInspectionBo bo, PageQuery pageQuery) {
if(StringUtils.isNotBlank(bo.getContact())){
String phone = stringCryptoUtil.encryptField(bo.getContact());
bo.setContact(phone);
}
Map<String, Object> params = bo.getParams();
if(params!=null){
bo.setStart((String) params.get("beginAuditTime"));
bo.setEnd((String) params.get("endAuditTime"));
}
bo.setAnnualInspectionType(AnnualInspectionTypeEnum.MANUAL_ANNUAL_INSPECTION.getCode());
Page<ZjkAnnualInspectionVo> result = zjkAnnualInspectionMapper.queryAnnualInspection(pageQuery.build(), bo);
return TableDataInfo.build(result);
}
......@@ -193,6 +206,8 @@ public class ZjkAnnualInspectionServiceImpl implements IZjkAnnualInspectionServi
} catch (Exception e) {
log.error("年检HMAC生成失败 expertId:{}", zjkExpert.getExpertId(), e);
}
zjkAnnualInspectionBo.setUpdateBy(LoginHelper.getUserId());
zjkAnnualInspectionBo.setUpdateTime(new Date());
zjkAnnualInspectionMapper.batchAnnualInspection(zjkAnnualInspectionBo);
}
......
package org.dromara.zjk.config;
import com.alibaba.fastjson.JSON;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.constant.HttpStatus;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.system.api.RemoteConfigService;
import org.dromara.zjk.utils.ApiThreadLocal;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
/**
* @author : yanguohua
* @version : 1.0
* @date : 2025/8/26 15:19
*/
@Component
public class ApiAuthInterceptor implements HandlerInterceptor {
@DubboReference
private RemoteConfigService remoteConfigService;
private static final String DEFAULT_SECRET_KEY = "k6psy7kafT%UaPd2";
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 设置响应的字符编码为 UTF-8
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json;charset=UTF-8");
String authorizationCode = request.getHeader("Authorization");
// 获取密钥配置
String secretKey = remoteConfigService.selectConfigByKey("api.secret.key");
// 验证授权码是否为空
if (StringUtils.isEmpty(authorizationCode)) {
response.setStatus(HttpStatus.UNAUTHORIZED);
response.getWriter().write(JSON.toJSONString(R.fail("授权码为空,禁止访问")));
return false;
}
// 验证授权码是否匹配
if (!authorizationCode.equals(secretKey)) {
response.setStatus(HttpStatus.FORBIDDEN);
response.getWriter().write(JSON.toJSONString(R.fail("授权码错误,禁止访问")));
return false;
}
ApiThreadLocal.putAk(authorizationCode);
return true;
}
}
package org.dromara.zjk.config;
import cn.bubi.SDK;
import cn.bubi.common.Tools;
import cn.bubi.model.request.*;
import cn.bubi.model.request.operation.AccountSetMetadataOperation;
import cn.bubi.model.request.operation.BaseOperation;
......@@ -9,6 +8,7 @@ import cn.bubi.model.response.*;
import cn.bubi.model.response.result.data.Signature;
import cn.bubi.model.response.result.data.TransactionHistory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
......@@ -20,43 +20,44 @@ public class OnChainUtils {
@Resource
private YsdpaasConfig ysdpaasConfig;
// 在 OnChainUtils 中添加异步方法
@Async
public void toChainAsync(String data, Long reviewId) {
toChain(data, reviewId);
}
// private static String address = "adxSqD9EdNMNYkfssD28YmSmgE1NLdm18Uhi9";
// private static String privateKey = "privbynqzw8xmhim7LuwsLbkr4GVzkwn6CasJdbYEhVbFgFEcTWJ9Khq";
public void toChain(String data, Long reviewId) {
sdk = SDK.getInstance(ysdpaasConfig.getOnchainUrl());
Long nonce = getAccountNonce();
String key = "expert_cq_" + reviewId;
//String value = "{\"Plaintext\":{},\"Privacy\":{\"userId\":\"\",\"loginName\":\"\",\"phone\":\"\",\"userName\":\"\",\"source\":\"\",\"password\":\"\",\"userType\":\"\",\"isRegisterd\":\"\",\"caHash\":\"\",\"status\":\"\",\"updateTime\":\"\",\"company\":\"\"}}";
BaseOperation[] operations = buildOperations(ysdpaasConfig.getOnchainAddress(), key, data);
long startTime = System.currentTimeMillis();
try {
log.info("开始上链操作,reviewId: {}", reviewId);
sdk = SDK.getInstance(ysdpaasConfig.getOnchainUrl());
Long nonce = getAccountNonce();
String key = "expert_cq_" + reviewId;
BaseOperation[] operations = buildOperations(ysdpaasConfig.getOnchainAddress(), key, data);
String tranBlob = seralizeTransaction(nonce, operations);
String tranBlob = seralizeTransaction(nonce, operations);
Signature[] signatures = signTransaction(tranBlob);
Signature[] signatures = signTransaction(tranBlob);
String txHash = submitTransaction(tranBlob, signatures);
System.out.println(txHash);
String txHash = submitTransaction(tranBlob, signatures);
long endTime = System.currentTimeMillis();
log.info("交易已提交,txHash: {}, reviewId: {}, 耗时: {} ms", txHash, reviewId, endTime - startTime);
long startTime = System.currentTimeMillis();
while (true) {
// 立即返回,不再等待区块链确认
// 移除了原来的轮询等待逻辑
} catch (Exception e) {
long endTime = System.currentTimeMillis();
if (endTime - startTime > 60000000) {
log.info("交易执行超时");
return;
}
TransactionHistory transactionHistory = checkTransactionStatus(txHash);
if (!Tools.isNULL(transactionHistory) && transactionHistory.getErrorCode() == 0) {
break;
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.error("上链操作异常,reviewId: {}, 耗时: {} ms", reviewId, endTime - startTime, e);
}
log.info("交易结束");
log.info("上链请求已完成,reviewId: {}", reviewId);
}
public long getAccountNonce() {
long nonce = 0;
......
package org.dromara.zjk.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* @author : yanguohua
* @version : 1.0
* @date : 2024/10/28 11:28
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "syncuser")
public class SyncRemortUserConfig {
private String spjSyncUserUrl;
}
package org.dromara.zjk.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 对外接口拦截器
*
* @author : yanguohua
* @version : 1.0
* @date : 2025/8/26 15:23
*/
@Configuration
public class ZjkApiWebMvcConfig implements WebMvcConfigurer {
@Autowired
private ApiAuthInterceptor apiAuthInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(apiAuthInterceptor)
.addPathPatterns("/api/**"); // 拦截所有 /api 开头的请求
}
}
package org.dromara.zjk.controller;
import com.alibaba.fastjson.JSON;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.api.RemoteConfigService;
import org.dromara.zjk.domain.bo.ZjkExpertBo;
import org.dromara.zjk.domain.bo.ZjkProductBo;
import org.dromara.zjk.domain.vo.ProductPanoramaDetailVo;
import org.dromara.zjk.domain.vo.ZjkExpertVo;
import org.dromara.zjk.domain.vo.ZjkProductVo;
import org.dromara.zjk.service.IZjkExpertService;
import org.dromara.zjk.service.IZjkProductService;
import org.dromara.zjk.service.ZjkExpertMoneyInfoService;
import org.dromara.zjk.utils.ApiThreadLocal;
import org.dromara.zjk.utils.EncryptionUtil;
import org.dromara.zjk.zwy.annotation.DecryptOperation;
import org.dromara.zjk.zwy.utils.StringCryptoUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 专家库对外api接口
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/zjk")
@RequestMapping("/api")
@Slf4j
public class ApiController {
// 默认的密钥常量
private static final String DEFAULT_SECRET_KEY = "k6psy7kafT%UaPd2";
@DubboReference(timeout=5000)
@DubboReference(timeout = 5000)
private final RemoteConfigService remoteConfigService;
private final IZjkExpertService zjkExpertService;
@Autowired
private StringCryptoUtil stringCryptoUtil;
private final IZjkProductService zjkProductService;
private final ZjkExpertMoneyInfoService zjkExpertMoneyInfoService;
/**
* 专家库数据获取
* @param authorizationCode
* 专家库数据列表获取
*
* @return
*/
@PostMapping("/api/expert-data")
public R<String> getEncryptedExpertData(@RequestHeader("Authorization") String authorizationCode) {
@DecryptOperation
@GetMapping("/expertList")
public R<String> getExpertListData(ZjkExpertBo bo) {
try {
// 获取密钥配置
String secretKey = remoteConfigService.selectConfigByKey("api.secret.key");
if (StringUtils.isEmpty(secretKey)) {
secretKey = DEFAULT_SECRET_KEY;
PageQuery pageQuery = new PageQuery();
pageQuery.setPageNum(1);
pageQuery.setPageSize(2000);
if (StringUtils.isNotBlank(bo.getContact())) {
String phone = stringCryptoUtil.encryptField(bo.getContact());
bo.setContact(phone);
}
// 验证授权码是否为空
if (StringUtils.isEmpty(authorizationCode)) {
log.warn("Authorization code is missing.");
throw new ServiceException("授权码为空,禁止访问");
if (StringUtils.isNotBlank(bo.getIdCard())) {
String idcard = stringCryptoUtil.encryptField(bo.getIdCard());
bo.setIdCard(idcard);
}
// 验证授权码是否匹配
if (!authorizationCode.equals(secretKey)) {
log.warn("Invalid authorization code: {}", authorizationCode);
throw new ServiceException("授权码错误,禁止访问");
}
// 查询专家数据
List<ZjkExpertVo> zjkExpertVoList = zjkExpertService.exportList(new ZjkExpertBo());
if (zjkExpertVoList == null || zjkExpertVoList.isEmpty()) {
log.info("无可返回的数据");
TableDataInfo<ZjkExpertVo> zjkExpertVoTableDataInfo = zjkExpertService.expertList(bo, pageQuery);
List<ZjkExpertVo> rows = zjkExpertVoTableDataInfo.getRows();
if (CollectionUtils.isEmpty(rows)) {
return R.ok("无可返回的数据");
}
String data = JSON.toJSONString(zjkExpertVoList);
// 数据加密
String encryptedData = EncryptionUtil.encrypt(data, secretKey);
return R.ok("操作成功",encryptedData);
} catch (ServiceException e) {
log.error("Service exception occurred: {}", e.getMessage());
return R.fail(e.getMessage());
String ak = ApiThreadLocal.getAk();
String data = JSON.toJSONString(rows);
return R.ok("操作成功", data);
} catch (Exception e) {
log.error("Unexpected error occurred", e);
return R.fail("系统异常,请联系管理员");
}
}
/**
* 专家详情信息获取
*
* @return
*/
@DecryptOperation
@GetMapping("/expertInfo/{id}")
public R<String> getExpertInfo(@PathVariable Long id) {
ZjkExpertVo zjkExpertVo = zjkExpertService.queryById(id);
if (zjkExpertVo == null) {
return R.fail("数据不存在");
}
String data = JSON.toJSONString(zjkExpertVo);
return R.ok("操作成功", data);
}
/**
* 项目列表数据获取
*
* @return
*/
@DecryptOperation
@GetMapping("/productList")
public R<String> getProductList(ZjkProductBo bo) {
List<ZjkProductVo> rows = zjkProductService.queryListForApi(bo);
if (CollectionUtils.isEmpty(rows)) {
return R.ok("无可返回的数据");
}
String data = JSON.toJSONString(rows);
return R.ok("操作成功", data);
}
/**
* 项目基本细信息获取
*
* @return
*/
@DecryptOperation
@GetMapping("/productInfo/{id}")
public R<String> getProductInfo(@PathVariable Long id) {
ZjkProductVo vo = zjkProductService.queryById(id);
if (vo == null) {
return R.fail("数据不存在");
}
String data = JSON.toJSONString(vo);
return R.ok("操作成功", data);
}
/**
* 项目阶段全景细信息获取
*
* @return
*/
@DecryptOperation
@GetMapping("/productLife/{id}")
public R<String> getProductLife(@PathVariable Long id) {
List<ProductPanoramaDetailVo> vo = zjkProductService.getProductPanoramaDetailVoById(id);
if (vo.size() == 0) {
return R.fail("数据不存在");
}
String data = JSON.toJSONString(vo);
return R.ok("操作成功", data);
}
/**
* 获取项目某个阶段参评的专家信息
*
* @param productId
* @param reviewSn
* @return
*/
@DecryptOperation
@GetMapping("/stageExperts")
public R<String> getStageExperts(@NotNull(message = "项目不能为空")
Long productId, @NotNull(message = "阶段不能为空")
Integer reviewSn) {
List<ZjkExpertVo> res = zjkExpertService.getStageExperts(productId, reviewSn);
if (CollectionUtils.isEmpty(res)) {
return R.ok("无可返回的数据");
}
String data = JSON.toJSONString(res);
return R.ok("操作成功", data);
}
// 解密接口 (用于调试或者需要解密的地方)
@PostMapping("/api/decrypt")
@PostMapping("/decrypt")
public String decryptData(
@RequestHeader("Authorization") String authorizationCode,
@RequestBody String encryptedData) {
......@@ -102,4 +192,5 @@ public class ApiController {
}
}
}
......@@ -18,6 +18,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.zjk.domain.bo.InoutCheckBo;
import org.dromara.zjk.domain.bo.ZjkProductBo;
import org.dromara.zjk.domain.vo.CheckSupportVo;
import org.dromara.zjk.domain.vo.InoutCheckVo;
import org.dromara.zjk.domain.vo.ProductPanoramaVo;
......@@ -120,12 +121,13 @@ public class InoutCheckController extends BaseController {
}, mode = SaMode.OR)
@GetMapping("/productList")
public TableDataInfo<ProductPanoramaVo> productPanorama(ProductPanoramaVo vo, PageQuery pageQuery) {
return zjkProductService.productPanorama(vo, pageQuery);
return zjkProductService.getProductList(vo, pageQuery);
}
/**
* 财务审计支持-查看
*/
@DecryptOperation
@SaCheckRole(value = {
TenantConstants.JG_ROLE_KEY
}, mode = SaMode.OR)
......
......@@ -44,7 +44,6 @@ public class LearningSuggestController extends BaseController {
* 查询学习园地-学习推荐列表
*/
@SaCheckRole(value = {
TenantConstants.JG_ROLE_KEY,
TenantConstants.EXPERT_ROLE_KEY
},mode = SaMode.OR)
......
......@@ -69,6 +69,7 @@ public class SmsUpController {
@PostMapping("/receive")
public String receiveUpSms(@RequestParam("deliver") String deliver) {
try {
log.info("接收到上行数据: {}", deliver);
String[] records = deliver.split(";");
List<SmsUpEventDto> dtoList = new ArrayList<>();
......
......@@ -57,7 +57,6 @@ public class ZjkApprovalProcessLogsController extends BaseController {
/**
* 导出审批流程记录列表
*/
@SaCheckPermission("traceManagement:approvalProcessLogs:export")
@Log(title = "审批流程记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ZjkApprovalProcessLogsBo bo, HttpServletResponse response) {
......
......@@ -36,6 +36,8 @@ public class ZjkChartController extends BaseController {
public R<ChartBaseVO> getChartBase(Long userId) {
return zjkExpertChartService.getChartBase(userId);
}
@DecryptOperation
@GetMapping("/users")
public R<List<SimpleExpertDto>> getExperts() {
return zjkExpertChartService.getExperts();
......
......@@ -122,8 +122,8 @@ public class ZjkCreditUserController extends BaseController {
//专家信用详情
@GetMapping("/selectUserById")
public R<List<ZjkCreditRuleVo>> expertPointRanks(ZjkCreditBo creditId, PageQuery pageQuery) {
return zjkCreditUserService.selectUserById(creditId,pageQuery);
public TableDataInfo<ZjkCreditRuleVo> expertPointRanks(ZjkCreditBo dto, PageQuery pageQuery) {
return zjkCreditUserService.selectUserById(dto,pageQuery);
}
//黑名单
......
......@@ -58,7 +58,6 @@ public class ZjkDataChangesLogsController extends BaseController {
/**
* 导出业务数据变更记录列表
*/
@SaCheckPermission("dataChangesLogs:dataChangesLogs:export")
@Log(title = "业务数据变更记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ZjkDataChangesLogsBo bo, HttpServletResponse response) {
......
......@@ -13,6 +13,7 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.excel.core.DropDownOptions;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
......@@ -23,9 +24,12 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.web.core.BaseController;
import org.dromara.zjk.domain.ExpertBaseInfo;
import org.dromara.zjk.domain.ZjkInvoice;
import org.dromara.zjk.domain.bo.ApprovalCommonBo;
import org.dromara.zjk.domain.bo.ZjkExpertBo;
import org.dromara.zjk.domain.vo.ExpertPerformWorkCountVO;
import org.dromara.zjk.domain.vo.SelectOptionVo;
import org.dromara.zjk.domain.vo.SyncUserReturnVO;
import org.dromara.zjk.domain.vo.ZjkExpertVo;
import org.dromara.zjk.enums.ResultTypeEnum;
import org.dromara.zjk.enums.ZjkExpertTypeEnum;
......@@ -39,6 +43,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 专家库
......@@ -158,8 +163,8 @@ public class ZjkExpertController extends BaseController {
}, mode = SaMode.OR)
public void export(@ModelAttribute ZjkExpertBo bo, HttpServletResponse response) {
if (bo.getIsTemplate() == 0){
List<ZjkExpertVo> list = new ArrayList<>();
ExcelUtil.exportExcel(list, "专家库模板", ZjkExpertVo.class, response);
zjkExpertService.exportTml(response);
}else {
List<ZjkExpertVo> list = zjkExpertService.exportList(bo);
ExcelUtil.exportExcel(list, "专家库", ZjkExpertVo.class, response);
......@@ -179,13 +184,7 @@ public class ZjkExpertController extends BaseController {
TenantConstants.TENANT_ADMIN_ROLE_KEY
}, mode = SaMode.OR)
public R<Void> imports(@RequestPart("file") MultipartFile file) {
List<String> list = zjkExpertService.imports(file);
// 如果存在重复的身份证号则提示,剔除之后再次导入
if (!CollUtil.isEmpty(list)){
// 将身份证号列表转换为用逗号分隔的字符串
return R.fail("以下身份证号专家已经存在,请剔除后再次导入专家数据:" + String.join(", ", list));
}
return R.ok();
return zjkExpertService.imports(file);
}
/**
......@@ -218,7 +217,20 @@ public class ZjkExpertController extends BaseController {
public R<Void> save(@Validated(AddGroup.class) @RequestBody ZjkExpertBo bo) {
return toAjax(zjkExpertService.insertByBo(bo));
}
/**
* 专专家库-专家涉密修改
* @param bo
* @return
*/
@Log(title = "专家库-专家涉密修改", businessType = BusinessType.EXPERT_SYS,operatorType = OperatorType.BROWSER)
@RepeatSubmit()
@PostMapping("handleClassified")
@SaCheckRole(value = {
TenantConstants.JG_ROLE_KEY
}, mode = SaMode.OR)
public R<Void> handleClassified(@RequestBody ZjkExpertBo bo) {
return toAjax(zjkExpertService.handleClassified(bo));
}
/**
* 提交
*/
......@@ -481,9 +493,8 @@ public class ZjkExpertController extends BaseController {
TenantConstants.TENANT_ADMIN_ROLE_KEY
},mode = SaMode.OR)
@GetMapping("/api/fetchRemoteProfessors")
public R<Void> fetchRemoteProfessors() {
zjkExpertService.fetchRemoteProfessors();
return R.ok();
public R<SyncUserReturnVO> fetchRemoteProfessors() {
return R.ok( zjkExpertService.fetchRemoteProfessors());
}
......
......@@ -50,7 +50,7 @@ public class ZjkExpertMoneyInfoController extends BaseController {
TenantConstants.TENANT_ADMIN_ROLE_KEY,
TenantConstants.XM_ROLE_KEY,
}, mode = SaMode.OR)
public TableDataInfo<ZjkExpertMoneyInfoVO> page(ZjkExpertMoneyInfoBo bo, PageQuery query) {
public TableDataInfo<ZjkExpertMoneyInfo> page(ZjkExpertMoneyInfoBo bo, PageQuery query) {
return zjkExpertMoneyInfoService.queryPageList(bo, query);
}
......@@ -197,15 +197,24 @@ public class ZjkExpertMoneyInfoController extends BaseController {
* 通过项目id和阶段获取参评专家列表
* @param productId
* @param reviewSn
* @param toSettle 1:新增结算单带出的专家
* @return
*/
@DecryptOperation
@SaCheckRole(value = {
TenantConstants.JG_ROLE_KEY
}, mode = SaMode.OR)
@GetMapping("/expertList")
public R<List<ZjkExpertVo>> getExpertList(@NotNull(message = "项目不能为空")
Long productId, @NotNull(message = "阶段不能为空")
Integer reviewSn) {
return R.ok(zjkExpertMoneyInfoService.getExpertList(productId, reviewSn));
Integer reviewSn,String toSettle) {
if(toSettle!=null){
return R.ok(zjkExpertMoneyInfoService.getExpertListForSettle(productId, reviewSn));
}else{
//发票管理的人员带出
return R.ok(zjkExpertMoneyInfoService.getExpertList(productId, reviewSn));
}
}
}
......@@ -139,8 +139,7 @@ public class ZjkInvoiceController extends BaseController {
@Log(title = "发票", businessType = BusinessType.OTHER)
@PostMapping("/downloadExcel")
public void downloadExcel(HttpServletResponse response) {
List<ZjkInvoiceVo> list = new ArrayList<>();
ExcelUtil.exportExcel(list, "模板", ZjkInvoiceVo.class, response);
zjkInvoiceService.downloadExcelTem(response);
}
......@@ -149,15 +148,13 @@ public class ZjkInvoiceController extends BaseController {
* @param file
* @return
*/
@EncryptOperation
@Log(title = "发票信息导入", businessType = BusinessType.IMPORT)
@PostMapping("/imports")
@SaCheckRole(value = {
TenantConstants.JG_ROLE_KEY,
}, mode = SaMode.OR)
public R<Void> imports(@RequestPart("file") MultipartFile file) {
zjkInvoiceService.imports(file);
return R.ok();
return zjkInvoiceService.imports(file);
}
......
......@@ -43,7 +43,7 @@ public class ZjkLeaveController extends BaseController {
private final IZjkLeaveRuleService zjkLeaveRuleService;
@InitBinder //解决前段传过来时间的字符串解析成时间报错问题
public void initBinder(WebDataBinder webDataBinder){
webDataBinder.registerCustomEditor(Date.class,new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
webDataBinder.registerCustomEditor(Date.class,new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"),true));
}
@GetMapping("/pros")
......
......@@ -56,7 +56,7 @@ public class ZjkPointController extends BaseController {
private RemoteUserService remoteUserService;
@InitBinder //解决前段传过来时间的字符串解析成时间报错问题
public void initBinder(WebDataBinder webDataBinder){
webDataBinder.registerCustomEditor(Date.class,new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
webDataBinder.registerCustomEditor(Date.class,new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"),true));
}
/**
* 查询列表-积分规则定义
......@@ -71,7 +71,7 @@ public class ZjkPointController extends BaseController {
},mode = SaMode.OR)
public R<List<ZjkPointRule>> pointRule(PointReqDto dto) {
QueryWrapper<ZjkPointRule> wq = new QueryWrapper<>();
wq.lambda().eq(!StringUtils.isEmpty(dto.getStartFlag()), ZjkPointRule::getStatus, dto.getStartFlag())
wq.lambda().eq(!StringUtils.isEmpty(dto.getStatus()), ZjkPointRule::getStatus, dto.getStatus())
.like(!StringUtils.isEmpty(dto.getRuleName()), ZjkPointRule::getRuleName, dto.getRuleName())
.between(dto.getStartDate() != null && dto.getEndDate() != null, ZjkPointRule::getCreateTime,
dto.getStartDate(), dto.getEndDate());
......@@ -90,8 +90,8 @@ public class ZjkPointController extends BaseController {
},mode = SaMode.OR)
public R<List<ZjkPointRewardVO>> rewardList(PointReqDto dto) {
QueryWrapper<ZjkPointReward> wq = new QueryWrapper<>();
wq.lambda().eq(!StringUtils.isEmpty(dto.getStartFlag()), ZjkPointReward::getStatus, dto.getStartFlag())
.like(!StringUtils.isEmpty(dto.getRuleName()), ZjkPointReward::getRewardName, dto.getRuleName())
wq.lambda().eq(!StringUtils.isEmpty(dto.getStatus()), ZjkPointReward::getStatus, dto.getStatus())
.like(!StringUtils.isEmpty(dto.getRewardName()), ZjkPointReward::getRewardName, dto.getRewardName())
.between(dto.getStartDate() != null && dto.getEndDate() != null, ZjkPointReward::getCreateTime, dto.getStartDate(), dto.getEndDate());
List<ZjkPointReward> list = zjkPointRewardService.list(wq);
List<ZjkPointRewardVO> zjkPointRewardVOS = BeanUtil.copyToList(list, ZjkPointRewardVO.class);
......
......@@ -85,7 +85,7 @@ public class ZjkProductController extends BaseController {
/**
* 导出项目管理列表
*/
// @DecryptOperation
@DecryptOperation
@SaCheckRole(value={
TenantConstants.JG_ROLE_KEY,
TenantConstants.SUPER_ADMIN_ROLE_KEY,
......
......@@ -67,9 +67,8 @@ public class ZjkProductSummarizeController extends BaseController {
@SaCheckPermission("zjk:productSummarize:export")
public void export(ZjkProductSummarizeBo bo, HttpServletResponse response) {
List<ZjkProductSummarizeVo> list = zjkProductSummarizeService.queryList(bo);
List<ZjkProductSummarizeExportVo> zjkProductSummarizeExportVos = BeanUtil.copyToList(list, ZjkProductSummarizeExportVo.class);
ExcelUtil.exportExcel(zjkProductSummarizeExportVos, "项目总结", ZjkProductSummarizeExportVo.class, response);
ExcelUtil.exportExcel(list, "项目总结", ZjkProductSummarizeVo.class, response);
}
/**
* 导出项目总结列表
......
......@@ -8,6 +8,7 @@ import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.apache.commons.math3.stat.descriptive.summary.Product;
import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
......@@ -19,6 +20,7 @@ import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.zjk.domain.bo.ZjkProductBo;
import org.dromara.zjk.domain.bo.ZjkReviewPhaseBo;
import org.dromara.zjk.domain.bo.ZjkReviewProductBo;
import org.dromara.zjk.domain.vo.ZjkReviewExportVo;
......@@ -125,14 +127,22 @@ public class ZjkReviewPhaseController extends BaseController {
return zjkReviewPhaseService.reviewProductList(bo, pageQuery);
}
/**
* 发票/结算 获取项目列表
* @return
*/
@GetMapping("/invoice/productList")
public R<List<ZjkProductBo>> invoiceProductList() {
return zjkReviewPhaseService.invoiceProductList();
}
@DecryptOperation
@SaCheckPermission("zjk:reviewproduct:export")
@PostMapping("/review/export")
public void reviewExport(ZjkReviewProductBo bo, HttpServletResponse response) {
List<ZjkReviewProductVo> zjkReviewProductVos = zjkReviewPhaseService.reviewExport(bo);
List<ZjkReviewExportVo> zjkReviewExportVo = BeanUtil.copyToList(zjkReviewProductVos, ZjkReviewExportVo.class);
ExcelUtil.exportExcel(zjkReviewExportVo, "评审项目", ZjkReviewExportVo.class, response);
//List<ZjkReviewExportVo> zjkReviewExportVo = BeanUtil.copyToList(zjkReviewProductVos, ZjkReviewExportVo.class);
ExcelUtil.exportExcel(zjkReviewProductVos, "评审项目", ZjkReviewProductVo.class, response);
}
......
......@@ -35,7 +35,11 @@ public class ZjkApprovalProcessLogs extends TenantEntity {
* 操作内容
*/
private String actionContent;
/**
* 操作人
*/
@TableField(exist = false)
private String createByStr;
/**
* 审批意见
*/
......
......@@ -360,5 +360,14 @@ public class ZjkExpert extends BaseEntity {
private String unitTypeDescribe;
private String hmac;
/**
* 活动范围
*/
private String scopeOfActivity;
/**
* 是否涉密
*/
private Integer isClassified;
}
......@@ -6,11 +6,18 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.baomidou.mybatisplus.annotation.TableField;
import com.alibaba.excel.annotation.ExcelIgnore;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.zjk.annotation.PropertyMsg;
import org.dromara.zjk.zwy.annotation.EncryptSensitive;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import java.io.Serial;
import java.math.BigDecimal;
......@@ -25,6 +32,7 @@ import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("zjk_invoice")
@ExcelIgnoreUnannotated
public class ZjkInvoice extends BaseEntity {
@Serial
......@@ -35,21 +43,24 @@ public class ZjkInvoice extends BaseEntity {
*/
@PropertyMsg(propertyName = "id")
@TableId(type = IdType.ASSIGN_ID)
@ExcelIgnore // 忽略该字段导出
private Long id;
/**
* 发票号码
*/
@PropertyMsg(propertyName = "invoice_number")
@ExcelProperty(value = "发票号码")
private Long invoiceNumber;
@ExcelProperty(value = "*发票号码")
@NotBlank(message = "发票号码不能为空")
private String invoiceNumber;
/**
* 发票金额
*/
@PropertyMsg(propertyName = "invoice_money")
@ExcelProperty(value = "发票金额")
@ExcelProperty(value = "*发票金额")
@JsonFormat(shape = JsonFormat.Shape.NUMBER)
@NotNull(message = "发票金额不能为空")
private BigDecimal invoiceMoney;
/**
......@@ -58,16 +69,44 @@ public class ZjkInvoice extends BaseEntity {
@PropertyMsg(propertyName = "start_date")
@JsonFormat(pattern = "yyyy-MM-dd")
@DateTimeFormat(value = "yyyy-MM-dd")
@ExcelProperty(value = "开票日期")
@ExcelProperty(value = "*开票日期")
@NotNull(message = "开票日期不能为空")
private Date startDate;
@TableField(exist = false)
@ExcelProperty(value = "*项目名称")
@NotBlank(message = "项目名称不能为空")
private String productName;
/**
* 项目阶段
*/
@PropertyMsg(propertyName = "review_sn")
@ExcelIgnore // 忽略该字段导出
private Integer reviewSn;
/**
* 项目阶段
*/
@ExcelProperty(value = "*项目阶段",converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "item_stage")
@TableField(exist = false)
@NotBlank(message = "项目阶段不能为空")
private String reviewSnStr;
/**
* 专家名称
*/
@PropertyMsg(propertyName = "expert_name")
@ExcelProperty(value = "专家名称")
@ExcelProperty(value = "*专家名称")
@NotBlank(message = "专家名称不能为空")
private String expertName;
/**
* 专家身份证号
*/
@PropertyMsg(propertyName = "expert_id_number")
@ExcelProperty(value = "*专家身份证号")
@NotBlank(message = "专家身份证号不能为空")
private String expertIdNumber;
/**
* 联系电话
*/
......@@ -76,12 +115,6 @@ public class ZjkInvoice extends BaseEntity {
@ExcelProperty(value = "联系电话")
private String expertPhone;
/**
* 专家身份证号
*/
@PropertyMsg(propertyName = "expert_id_number")
@ExcelProperty(value = "专家身份证号")
private String expertIdNumber;
/**
* 职称等级
......@@ -94,62 +127,31 @@ public class ZjkInvoice extends BaseEntity {
* 电子发票附件相关 ,存储oss的id
*/
@PropertyMsg(propertyName = "invoice_attached")
@ExcelIgnore // 忽略该字段导出
private String invoiceAttached;
/**
* 创建人
*/
@PropertyMsg(propertyName = "create_by")
private Long createBy;
/**
* 创建时间
*/
@PropertyMsg(propertyName = "create_time")
private Date createTime;
/**
* 修改人
*/
@PropertyMsg(propertyName = "update_by")
private Long updateBy;
/**
* 创建时间
*/
@PropertyMsg(propertyName = "update_time")
private Date updateTime;
/**
* 创建部门
*/
@PropertyMsg(propertyName = "create_dept")
private Long createDept;
/**
* 租户编码
*/
@PropertyMsg(propertyName = "tenant_id")
private String tenantId;
/**
* 项目id
*/
@PropertyMsg(propertyName = "product_id")
@ExcelIgnore // 忽略该字段导出
private Long productId;
/**
* 项目阶段
*/
@PropertyMsg(propertyName = "reviewSn")
private Integer reviewSn;
/**
* 结算单id
*/
@PropertyMsg(propertyName = "settle_id")
@ExcelIgnore // 忽略该字段导出
private Long settleId;
@TableField(exist = false)
@ExcelProperty(value = "*结算单号")
@NotBlank(message = "结算单号不能为空")
private String settleNo;
@ExcelIgnore // 忽略该字段导出
private String hmac;
/**
* 审核状态1:已审核
*/
@ExcelIgnore // 忽略该字段导出
private Integer checkStatus;
}
package org.dromara.zjk.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.zjk.domain.InoutCheck;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
......@@ -32,11 +34,15 @@ public class InoutCheckBo extends BaseEntity {
/**
* 时间范围开始
*/
@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date checkRangeStart;
/**
* 时间范围结束
*/
@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date checkRangeEnd;
/**
......
package org.dromara.zjk.domain.bo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.common.excel.convert.MultiDictConvert;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.zjk.zwy.annotation.EncryptSensitive;
import org.dromara.zjk.annotation.PropertyMsg;
import org.dromara.zjk.domain.ZjkExpert;
import org.dromara.zjk.domain.ZjkExpertMajor;
......@@ -20,6 +22,7 @@ import org.dromara.zjk.domain.ZjkExpertProfessional;
import org.dromara.zjk.expert.expertAwards.domain.ZjkExpertAwards;
import org.dromara.zjk.expert.expertPaper.domain.ZjkExpertPaper;
import org.dromara.zjk.expert.expertPatent.domain.ZjkExpertPatent;
import org.dromara.zjk.zwy.annotation.EncryptSensitive;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
......@@ -33,6 +36,7 @@ import java.util.List;
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ExcelIgnoreUnannotated
@AutoMapper(target = ZjkExpert.class, reverseConvertGenerate = false)
public class ZjkExpertBo extends BaseEntity {
......@@ -44,8 +48,9 @@ public class ZjkExpertBo extends BaseEntity {
/**
* 姓名
*/
@ExcelProperty(value = "姓名")
@Size(max = 20, message = "推荐专家姓名长度不能超过20个字符",groups = { AddGroup.class})
@ExcelProperty(value = "*姓名")
@Size(max = 20, message = "推荐专家姓名长度不能超过20个字符", groups = {AddGroup.class})
@NotBlank(message = "姓名不能为空")
private String expertName;
/**
......@@ -53,20 +58,29 @@ public class ZjkExpertBo extends BaseEntity {
*/
@ExcelProperty(value = "性别", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "sys_user_sex")
@NotNull(message = "性别不能为空")
private Long sex;
/**
* 身份证号
*/
@ExcelProperty(value = "身份证号")
@ExcelProperty(value = "*身份证号")
@Pattern(
regexp = "^[1-9]\\d{5}(18|19|20|21)?\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[0-9Xx]$",
message = "身份证号格式不正确",
groups = { AddGroup.class }
groups = {AddGroup.class}
)
@EncryptSensitive
@NotBlank(message = "身份证号不能为空")
private String idCard;
/**
* 联系方式
*/
@ExcelProperty(value = "*联系方式")
@Size(max = 11, message = "专家手机号长度不能超过11个字符", groups = {AddGroup.class})
@EncryptSensitive
@NotBlank(message = "联系方式不能为空")
private String contact;
/**
* 生日
*/
......@@ -75,13 +89,7 @@ public class ZjkExpertBo extends BaseEntity {
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthDate;
/**
* 联系方式
*/
@ExcelProperty(value = "联系方式")
@Size(max = 11, message = "专家手机号长度不能超过11个字符",groups = { AddGroup.class })
@EncryptSensitive
private String contact;
/**
* 工作单位
......@@ -92,7 +100,7 @@ public class ZjkExpertBo extends BaseEntity {
/**
* 单位类型 1企业,2高校,3政府单位
*/
@ExcelProperty(value = "单位类型" ,converter = ExcelDictConvert.class)
@ExcelProperty(value = "单位类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "unit_type")
private String unitType;
......@@ -100,7 +108,7 @@ public class ZjkExpertBo extends BaseEntity {
/**
* 是否专家推荐 1 是 2 否
*/
@ExcelProperty(value = "是否专家推荐" ,converter = ExcelDictConvert.class)
@ExcelProperty(value = "是否专家推荐", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "is_recommend")
private Integer isRecommend;
......@@ -113,7 +121,7 @@ public class ZjkExpertBo extends BaseEntity {
/**
* 政治面貌
*/
@ExcelProperty(value = "政治面貌" ,converter = ExcelDictConvert.class)
@ExcelProperty(value = "政治面貌", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "politics")
private String politics;
......@@ -130,7 +138,7 @@ public class ZjkExpertBo extends BaseEntity {
private String major;
@ExcelProperty(value = "学历" ,converter = ExcelDictConvert.class)
@ExcelProperty(value = "学历", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "degree_type")
private String degree;
......@@ -144,13 +152,11 @@ public class ZjkExpertBo extends BaseEntity {
/**
* 专业技术资格
*/
@ExcelProperty(value = "专业技术资格")
private String professional;
/**
* 专业技术资格取得时间
*/
@ExcelProperty(value = "专业技术资格取得时间")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date professionalAcquisitionDate;
......@@ -175,14 +181,13 @@ public class ZjkExpertBo extends BaseEntity {
/**
* 从事工作或研究领域
*/
@ExcelProperty(value = "从事工作或研究领域", converter = ExcelDictConvert.class)
@ExcelProperty(value = "从事工作或研究领域", converter = MultiDictConvert.class)
@ExcelDictFormat(dictType = "perform_work_type")
private String performWorkId;
/**
* 其他领域描述
*/
@ExcelProperty(value = "其他领域描述")
private String otherDescribe;
/**
......@@ -200,7 +205,6 @@ public class ZjkExpertBo extends BaseEntity {
/**
* 主要论著、业绩成果及获奖情况
*/
@ExcelProperty(value = "主要论著、业绩成果及获奖情况")
private String achievement;
......@@ -267,21 +271,25 @@ public class ZjkExpertBo extends BaseEntity {
/**
* 省
*/
@ExcelProperty(value = "省")
private String province;
/**
* 市
*/
@ExcelProperty(value = "市")
private String city;
/**
* 区
*/
@ExcelProperty(value = "区")
private String area;
/**
* 详细地址
*/
@ExcelProperty(value = "详细地址")
private String address;
......@@ -331,11 +339,27 @@ public class ZjkExpertBo extends BaseEntity {
*/
@PropertyMsg(propertyName = "职称等级")
private Long positionTitleLevel;
@ExcelProperty(value = "职称等级")
private String positionTitleLevelStr;
@PropertyMsg(propertyName = "籍贯")
@ExcelProperty(value = "籍贯")
private String origin;
private String unitTypeDescribe;
private String expertIds;
/**
* 审批局同步过来的专业领域对应的类型名称
*/
private String professorDeclareCategory;
/**
* 活动范围
*/
private String scopeOfActivity;
/**
* 是否涉密0:不涉密 1:涉密
*/
private Integer isClassified;
}
......@@ -39,7 +39,7 @@ public class ZjkInvoiceBo extends BaseEntity {
*/
@NotNull(message = "发票号码不能为空", groups = { AddGroup.class, EditGroup.class })
@JsonFormat(shape = JsonFormat.Shape.NUMBER)
private Long invoiceNumber;
private String invoiceNumber;
/**
* 发票金额
......
......@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.zjk.domain.ZjkLeave;
......@@ -29,10 +30,12 @@ public class ZjkLeaveBo extends BaseEntity {
* $column.columnComment
*/
private String leaveType;
@JsonFormat(timezone = "UTC",pattern="yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date startDate;
@JsonFormat(timezone = "UTC",pattern="yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date endDate;
/**
......@@ -64,6 +67,8 @@ public class ZjkLeaveBo extends BaseEntity {
* 租户ID
*/
private String tenantId;
/**
* 创建人
*/
private String createByStr;
}
......@@ -33,11 +33,11 @@ public class ZjkProductSummarizeBo extends BaseEntity {
private String search;
private String reviewSn;
@DateTimeFormat(pattern = "YYYY-MM-dd hh:mm:ss")
@JsonFormat(pattern = "YYYY-MM-dd hh:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date startTime;
@DateTimeFormat(pattern = "YYYY-MM-dd hh:mm:ss")
@JsonFormat(pattern = "YYYY-MM-dd hh:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date endTime;
......@@ -116,4 +116,5 @@ public class ZjkProductSummarizeBo extends BaseEntity {
private List<String> statusList;
private List<Long> productIds;
private List<Long> ids;
}
......@@ -33,5 +33,6 @@ public class ZjkReviewProductBo implements Serializable {
private Date endTime;
private Long expertId;
private Long userId;
private Integer isExpert;
}
......@@ -13,6 +13,7 @@ import java.util.Date;
public class PointReqDto {
private Long id;
private String ruleName;
private String rewardName;
private Date startDate;
......
......@@ -15,7 +15,7 @@ public class ZjkProductSummarizeExcelVO {
@ExcelProperty(value = "所属项目")
private String productName;
@ExcelProperty(value = "项目总结总结名称")
@ExcelProperty(value = "项目总结名称")
private String productSummarizeName;
@ExcelProperty(value = "项目总结分类",converter = ExcelDictConvert.class)
......
......@@ -5,6 +5,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.zjk.domain.InoutCheck;
import org.dromara.zjk.zwy.annotation.EncryptSensitive;
import java.io.Serial;
import java.io.Serializable;
......@@ -38,11 +39,13 @@ public class CheckSupportVo implements Serializable {
* 联系电话
*/
@ExcelProperty(value = "联系电话")
@EncryptSensitive
private String contact;
/**
* 身份证号
*/
@ExcelProperty(value = "身份证号")
@EncryptSensitive
private String idcard;
/**
* 评审阶段
......
......@@ -46,12 +46,14 @@ public class InoutCheckVo implements Serializable {
* 时间范围开始
*/
@ExcelProperty(value = "时间范围开始")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date checkRangeStart;
/**
* 时间范围结束
*/
@ExcelProperty(value = "时间范围结束")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date checkRangeEnd;
/**
......@@ -63,9 +65,12 @@ public class InoutCheckVo implements Serializable {
/**
* 创建人
*/
@ExcelProperty(value = "创建人")
private Long createBy;
/**
* 操作员
*/
@ExcelProperty(value = "创建人")
private String createByStr;
/**
* 创建时间
*/
......
package org.dromara.zjk.domain.vo;
import lombok.Data;
/**
* 同步用户返回
*
* @author : yanguohua
* @version : 1.0
* @date : 2025/12/11 16:26
*/
@Data
public class SyncUserReturnVO {
//数据同步完成,共新增X条,更新Y条,失败Z条
private boolean statu;
private String msg;
}
......@@ -56,9 +56,12 @@ public class ZjkApprovalProcessLogsVo implements Serializable {
/**
* 创建人
*/
@ExcelProperty(value = "操作人")
private Long createBy;
/**
* 创建人
*/
@ExcelProperty(value = "操作人")
private String createByStr;
/**
* 创建时间
*/
......
......@@ -2,6 +2,7 @@ package org.dromara.zjk.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
......@@ -70,7 +71,11 @@ public class ZjkDataChangesLogsVo implements Serializable {
* 操作人
*/
private Long createBy;
/**
* 操作人
*/
@ExcelProperty(value = "操作人")
private String createByStr;
/**
* 操作时间
......
......@@ -145,6 +145,10 @@ public class ZjkEvaluateVO implements Serializable {
* 1.正常评价,不进行控制
*/
private Integer xmEvaluateStatus;
/**
* 项目管理员id
*/
private String productCreateBy;
private static final long serialVersionUID = 1L;
}
......@@ -63,8 +63,10 @@ public class ZjkExpertLogVo implements Serializable {
/**
* 入库结果
*/
@ExcelProperty(value = "入库结果")
private Integer entryResult;
@ExcelProperty(value = "入库结果")
private String entryResultStr;
/**
* 申请时间
......
......@@ -6,13 +6,10 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.common.sensitive.annotation.Sensitive;
import org.dromara.common.sensitive.core.SensitiveStrategy;
import org.dromara.common.excel.convert.MultiDictConvert;
import org.dromara.resource.api.domain.RemoteFile;
import org.dromara.zjk.zwy.annotation.EncryptSensitive;
import org.dromara.zjk.annotation.PropertyMsg;
import org.dromara.zjk.annualInspection.annualInspectionAudit.domain.ZjkAnnualInspection;
import org.dromara.zjk.domain.ZjkExpert;
......@@ -21,6 +18,7 @@ import org.dromara.zjk.domain.ZjkExpertProfessional;
import org.dromara.zjk.expert.expertAwards.domain.ZjkExpertAwards;
import org.dromara.zjk.expert.expertPaper.domain.ZjkExpertPaper;
import org.dromara.zjk.expert.expertPatent.domain.ZjkExpertPatent;
import org.dromara.zjk.zwy.annotation.EncryptSensitive;
import java.io.Serial;
import java.io.Serializable;
......@@ -72,8 +70,6 @@ public class ZjkExpertVo implements Serializable {
/**
* 身份证号
*/
@ExcelProperty(value = "身份证号")
@EncryptSensitive
private String idCard;
......@@ -82,7 +78,6 @@ public class ZjkExpertVo implements Serializable {
*/
@ExcelProperty(value = "联系方式")
@EncryptSensitive
private String contact;
/**
......@@ -90,6 +85,10 @@ public class ZjkExpertVo implements Serializable {
*/
@ExcelProperty(value = "工作单位")
private String workUnit;
/**
* 详细地址
*/
private String address;
/**
* 职务
......@@ -100,14 +99,11 @@ public class ZjkExpertVo implements Serializable {
/**
* 政治面貌
*/
@ExcelProperty(value = "政治面貌", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "politics")
private String politics;
/**
* 毕业学校
*/
@ExcelProperty(value = "毕业学校")
private String graduateSchool;
/**
......@@ -118,11 +114,11 @@ public class ZjkExpertVo implements Serializable {
/**
* 邮箱
*/
@ExcelProperty(value = "邮箱")
@EncryptSensitive
private String email;
@ExcelDictFormat(dictType = "degree_type")
private String degree;
/**
* 专业技术资格
*/
......@@ -136,14 +132,11 @@ public class ZjkExpertVo implements Serializable {
/**
* 从事专业
*/
@ExcelProperty(value = "从事专业")
private String workProfessial;
/**
* 从事专业年限
*/
@ExcelProperty(value = "从事专业年限", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "work_professial_year")
private Integer workProfessialYear;
/**
......@@ -164,13 +157,11 @@ public class ZjkExpertVo implements Serializable {
/**
* 主要工作经历
*/
@ExcelProperty(value = "主要工作经历")
private String workExperience;
/**
* 社会兼职情况
*/
@ExcelProperty(value = "社会兼职情况")
private String workPluralistic;
/**
......@@ -236,23 +227,17 @@ public class ZjkExpertVo implements Serializable {
/**
* 审批类型 0 专家申请 1 信息变更
*/
@ExcelProperty(value = "审批类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "approval_type")
private Integer approvalType;
/**
* 单位类型 1企业,2高校,3政府单位
*/
@ExcelProperty(value = "单位类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "unit_type")
private String unitType;
/**
* 是否专家推荐 1 是 2 否
*/
@ExcelProperty(value = "是否专家推荐", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "is_recommend")
private Integer isRecommend;
/**
......@@ -270,10 +255,6 @@ public class ZjkExpertVo implements Serializable {
*/
private String area;
/**
* 详细地址
*/
private String address;
/**
* 专业关系表对象
......@@ -304,7 +285,9 @@ public class ZjkExpertVo implements Serializable {
* 发生变化的字段
*/
private String modifiedFields;
/**
* 接受状态(1:已接受;0:未接受;2:拒绝; 4:取消)
*/
private Integer acceptStatus;
/**
......@@ -353,6 +336,8 @@ public class ZjkExpertVo implements Serializable {
private ZjkAnnualInspection zjkAnnualInspection;
private String rewardType;
private String rewardId;
/**
* 其他附件集合
*/
......@@ -370,8 +355,8 @@ public class ZjkExpertVo implements Serializable {
private String positionTitleLevelStr;
/*
* 抽取的数据来源
* */
* 抽取的数据来源
* */
private Integer isSource;
//2024/12/3 add返回字段 抽取状态(0:取消,1:确认,2:重抽) 页面进行显示 枚举类ExtractionStatusEnum
......@@ -383,10 +368,19 @@ public class ZjkExpertVo implements Serializable {
}
return Arrays.asList(performWorkId.split(","));
}
@PropertyMsg(propertyName = "籍贯")
private String origin;
private String unitTypeDescribe;
private String hmac;
/**
* 活动范围
*/
private String scopeOfActivity;
/**
* 是否涉密0:不涉密 1:涉密
*/
private Integer isClassified;
}
......@@ -37,7 +37,7 @@ public class ZjkInvoiceVo implements Serializable {
* 发票号码
*/
@ExcelProperty(value = "发票号码")
private Long invoiceNumber;
private String invoiceNumber;
/**
* 发票金额
......@@ -103,6 +103,10 @@ public class ZjkInvoiceVo implements Serializable {
* 结算单id
*/
private Long settleId;
/**
* 结算单id
*/
private String settleIdName;
/**
* 审核状态1:已审核
*/
......
......@@ -48,6 +48,7 @@ public class ZjkLeaveVo implements Serializable {
*/
@ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "$column.readConverterExp()")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date startDate;
/**
......@@ -55,6 +56,7 @@ public class ZjkLeaveVo implements Serializable {
*/
@ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "$column.readConverterExp()")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date endDate;
/**
......
......@@ -36,96 +36,89 @@ public class ZjkProductSummarizeVo implements Serializable {
/**
* id
*/
@ExcelProperty(value = "id", converter = ExcelDictConvert.class)
@ExcelProperty(value = "项目总结编号")
private Long id;
/**
* 专家抽取id
*/
@ExcelProperty(value = "专家抽取id", converter = ExcelDictConvert.class)
private Long reviewId;
/**
* 总结名称
*/
@ExcelProperty(value = "总结名称", converter = ExcelDictConvert.class)
@ExcelProperty(value = "总结名称")
private String productSummarizeName;
/**
* 总结类型
*/
@ExcelProperty(value = "总结类型", converter = ExcelDictConvert.class)
@ExcelProperty(value = "总结分类", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "summarize_classify")
private String productSummarizeType;
/**
* 备注
*/
@ExcelProperty(value = "总结标签")
private String remark;
@ExcelProperty(value = "所属项目")
private String productName;
/**
* 状态
*/
@ExcelProperty(value = "总结状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "summarize_status")
private String status;
private String statusName;
private String productSummarizeTypeName;
/**
* 项目概况
*/
@ExcelProperty(value = "项目概况", converter = ExcelDictConvert.class)
private String productGeneral;
/**
* 评审范围
*/
@ExcelProperty(value = "评审范围", converter = ExcelDictConvert.class)
private String reviewScope;
/**
* 评审结论
*/
@ExcelProperty(value = "评审结论", converter = ExcelDictConvert.class)
private String reviewConclusion;
/**
* 反馈
*/
@ExcelProperty(value = "反馈", converter = ExcelDictConvert.class)
private String feedback;
/**
* 后续改进措施
*/
@ExcelProperty(value = "后续改进措施", converter = ExcelDictConvert.class)
private String subsequent;
/**
* 附件
*/
@ExcelProperty(value = "附件", converter = ExcelDictConvert.class)
@ExcelIgnore
private String attachment;
/**
* 专家id
*/
@ExcelIgnore
private String expertIds;
/**
* 状态
*/
@ExcelIgnore
private String status;
/**
* 状态名称
*/
@ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
private String statusName;
/**
* 备注
*/
@ExcelProperty(value = "备注", converter = ExcelDictConvert.class)
private String remark;
@ExcelProperty(value = "项目时间", converter = ExcelDictConvert.class)
@ExcelProperty(value = "项目时间")
private Date reviewTime;
@ExcelIgnore
private List<ZjkExpertVo> zjkExpertList;
@ExcelIgnore
private String productName;
private Long productId;
......
......@@ -105,7 +105,6 @@ public class ZjkProductVo implements Serializable {
/**
* $column.columnComment
*/
@ExcelProperty(value = "备注")
private String remark;
private Long reviewId;
......
......@@ -2,10 +2,14 @@ package org.dromara.zjk.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.dromara.zjk.zwy.annotation.EncryptSensitive;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
......@@ -49,6 +53,7 @@ public class ZjkReviewExportVo implements Serializable {
/**
* 联系方式
*/
@EncryptSensitive
@ExcelProperty(value = "联系方式")
private String unitConcat;
......@@ -61,6 +66,11 @@ public class ZjkReviewExportVo implements Serializable {
/**
* 评审时间
*/
/**
* 评审时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ExcelProperty(value = "评审时间")
private String reviewTime;
private Date reviewTime;
}
package org.dromara.zjk.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
......@@ -22,6 +23,7 @@ import java.util.List;
* @date 2024-10-29
*/
@Data
@ExcelIgnoreUnannotated
public class ZjkReviewProductVo implements Serializable {
@Serial
......@@ -37,18 +39,6 @@ public class ZjkReviewProductVo implements Serializable {
*/
private Long expertId;
/**
* 项目阶段
*/
private String reviewSn;
/**
* 评审时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date reviewTime;
/**
* 规则id
*/
......@@ -67,19 +57,6 @@ public class ZjkReviewProductVo implements Serializable {
*/
@ExcelProperty(value = "项目名称")
private String productName;
/**
* 项目类型
*/
@ExcelProperty(value = "项目类型")
private String productType;
/**
* 项目规则
*/
@ExcelProperty(value = "项目规模")
private Integer productScale;
/**
* 项目单位
*/
......@@ -99,11 +76,36 @@ public class ZjkReviewProductVo implements Serializable {
@EncryptSensitive
@ExcelProperty(value = "联系方式")
private String unitConcat;
/**
* 评审阶段
*/
@ExcelProperty(value = "评审阶段")
private String reviewSn;
/**
* 评审时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ExcelProperty(value = "评审时间")
private Date reviewTime;
/**
* 项目类型
*/
//@ExcelProperty(value = "项目类型")
private String productType;
/**
* 项目规则
*/
//@ExcelProperty(value = "项目规模")
private Integer productScale;
/**
* 简介
*/
@ExcelProperty(value = "简介")
//@ExcelProperty(value = "简介")
private String productBrief;
/**
......@@ -120,7 +122,6 @@ public class ZjkReviewProductVo implements Serializable {
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
private Long productId;
......
......@@ -22,7 +22,28 @@ public enum ReviewSnEnum {
* 描述
*/
private final String desc;
/**
* 通过描述获取编码
*
* @param desc 描述
* @return 编码
*/
public static Integer getCodeByDesc(String desc) {
for (ReviewSnEnum status : ReviewSnEnum.values()) {
if (status.getDesc().equals(desc)) {
return Integer.valueOf(status.getCode());
}
}
return null; // 找不到对应描述的枚举值时返回 null
}
public static String getDescByCode(String code) {
for (ReviewSnEnum status : ReviewSnEnum.values()) {
if (status.getCode().equals(code)) {
return status.getDesc();
}
}
return null; // 找不到对应描述的枚举值时返回 null
}
public static ReviewSnEnum getByCode(String code) {
for (ReviewSnEnum status : ReviewSnEnum.values()) {
if (status.getCode().equals( code)) {
......
......@@ -9,8 +9,7 @@ public enum SourceTypeEnum implements BaseCodeEnum {
ACADEMIC_TYPE("1","政务信息"),
RESEARCH_REPORTS("2","政务信息"),
ACADEMIC_CONFERENCES("3","政务信息");
RESEARCH_REPORTS("2","政务服务");
private String code;
private String name;
......
package org.dromara.zjk.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum UserSourceTypeEnum implements BaseCodeEnum {
FROM_SPJ("11", "审批局原系统用户同步");
private String code;
private String name;
}
......@@ -9,6 +9,7 @@ import org.dromara.zjk.event.OnchainEvent;
import org.dromara.zjk.service.IZjkExpertItemService;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
......@@ -32,12 +33,18 @@ public class OnchainListener implements ApplicationListener<OnchainEvent> {
* 保存系统日志记录
*/
@EventListener
@Async("smsTaskExecutor")
public void sendChainInfo(OnchainDto onchainDto) {
log.info("规则id为{},抽取的专家上区块链开始", onchainDto.getReviewId());
List<ZjkExpertItemVo> data = zjkExpertItemService.getByReviewId(onchainDto.getReviewId());
if (!CollectionUtils.isEmpty(data)) {
String jsonStr = JSONUtil.toJsonStr(data);
onChainUtils.toChain(jsonStr, onchainDto.getReviewId());
try {
List<ZjkExpertItemVo> data = zjkExpertItemService.getByReviewId(onchainDto.getReviewId());
if (!CollectionUtils.isEmpty(data)) {
String jsonStr = JSONUtil.toJsonStr(data);
onChainUtils.toChainAsync(jsonStr, onchainDto.getReviewId());
}
} catch (Exception e) {
e.printStackTrace();
log.error("规则id为{},抽取的专家上区块链异常", onchainDto.getReviewId());
}
log.info("规则id为{},抽取的专家上区块链结束", onchainDto.getReviewId());
}
......
......@@ -9,6 +9,7 @@ import org.dromara.zjk.event.SmsSendEvent;
import org.dromara.zjk.mapper.ZjkSmsInfoMapper;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
......@@ -40,15 +41,28 @@ public class SmsSendListener implements ApplicationListener<SmsSendEvent> {
* 保存系统日志记录
*/
@EventListener
@Async("smsTaskExecutor")
public void sendSms(SmsSendYsdDto dto) {
List<Map<String, String>> data = dto.getReceiveUserTels().stream().map(item -> {
Map<String, String> stringStringMap = remoteSmsService.sendYsdSingleSms(dto.getContent(), item);
return stringStringMap;
}).collect(Collectors.toList());
//数据库信息回改
handleData(data, dto);
try {
// 设置整体处理超时时间
List<Map<String, String>> data = dto.getReceiveUserTels().parallelStream().map(item -> {
try {
// 为单个短信发送设置超时
return remoteSmsService.sendYsdSingleSms(dto.getContent(), item);
} catch (Exception e) {
log.error("发送短信失败,手机号: {}", item, e);
return Map.of("status", "-1", "tel", item, "resultId", "", "msg", "发送失败");
}
}).collect(Collectors.toList());
//数据库信息回改
handleData(data, dto);
} catch (Exception e) {
log.error("短信批量发送处理异常,批次号: {}", dto.getBatchNum(), e);
}
}
private void handleData(List<Map<String, String>> data, SmsSendYsdDto dto) {
//发送短信后的数据入库
List<ZjkSmsInfo> collect = data.stream().map(item -> {
......
......@@ -24,6 +24,8 @@ import org.dromara.zjk.expert.expertRecommend.service.IZjkExpertRecommendService
import org.dromara.zjk.mapper.ZjkExpertMapper;
import org.dromara.zjk.zwy.client.HmacClient;
import org.dromara.zjk.zwy.utils.ObjectHashGenerator;
import org.dromara.zjk.zwy.utils.StringCryptoUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.nio.charset.StandardCharsets;
......@@ -45,7 +47,8 @@ public class ZjkExpertRecommendServiceImpl implements IZjkExpertRecommendService
private final ZjkExpertMapper zjkExpertMapper;
private final HmacClient hmacClient;
@Autowired
private StringCryptoUtil stringCryptoUtil;
/**
* 查询专家推荐信息
*
......@@ -67,6 +70,10 @@ public class ZjkExpertRecommendServiceImpl implements IZjkExpertRecommendService
@Override
public TableDataInfo<ZjkExpertRecommendVo> queryPageList(ZjkExpertRecommendBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ZjkExpertRecommend> lqw = buildQueryWrapper(bo);
if(StringUtils.isNotBlank(bo.getExpertPhone())){
String phone = stringCryptoUtil.encryptField(bo.getExpertPhone());
lqw.eq(ZjkExpertRecommend::getExpertPhone, phone);
}
Page<ZjkExpertRecommendVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
......@@ -86,6 +93,8 @@ public class ZjkExpertRecommendServiceImpl implements IZjkExpertRecommendService
}
bo.setExpertId(existingExpert.getExpertId());
}
bo.getExpertPhone();
LambdaQueryWrapper<ZjkExpertRecommend> lqw = buildQueryWrapper(bo);
Page<ZjkExpertRecommendVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
......@@ -109,7 +118,6 @@ public class ZjkExpertRecommendServiceImpl implements IZjkExpertRecommendService
lqw.eq(bo.getExpertId() != null, ZjkExpertRecommend::getExpertId, bo.getExpertId());
lqw.eq(bo.getUserId() != null, ZjkExpertRecommend::getUserId, bo.getUserId());
lqw.like(StringUtils.isNotBlank(bo.getExpertName()), ZjkExpertRecommend::getExpertName, bo.getExpertName());
lqw.like(StringUtils.isNotBlank(bo.getExpertPhone()), ZjkExpertRecommend::getExpertPhone, bo.getExpertPhone());
lqw.eq(StringUtils.isNotBlank(bo.getReason()), ZjkExpertRecommend::getReason, bo.getReason());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), ZjkExpertRecommend::getStatus, bo.getStatus());
lqw.orderByDesc(ZjkExpertRecommend::getCreateTime);
......
......@@ -21,6 +21,9 @@ import org.dromara.common.web.core.BaseController;
import org.dromara.zjk.expert.retirementRecords.domain.bo.ZjkRetirementRecordsBo;
import org.dromara.zjk.expert.retirementRecords.domain.vo.ZjkRetirementRecordsVo;
import org.dromara.zjk.expert.retirementRecords.service.IZjkRetirementRecordsService;
import org.dromara.zjk.zwy.annotation.DecryptOperation;
import org.dromara.zjk.zwy.utils.StringCryptoUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
......@@ -41,6 +44,9 @@ public class ZjkRetirementRecordsController extends BaseController {
private final IZjkRetirementRecordsService zjkRetirementRecordsService;
@Autowired
private StringCryptoUtil stringCryptoUtil;
/**
* 查询专家退休记录列表
*/
......@@ -49,8 +55,16 @@ public class ZjkRetirementRecordsController extends BaseController {
TenantConstants.TENANT_ADMIN_ROLE_KEY,
TenantConstants.SUPER_ADMIN_ROLE_KEY
}, mode = SaMode.OR)
@DecryptOperation
@GetMapping("/list")
public TableDataInfo<ZjkRetirementRecordsVo> list(ZjkRetirementRecordsBo bo, PageQuery pageQuery) {
// 2025-08-11 搜索时敏感字段需先加密
String encryptContact = stringCryptoUtil.encryptField(bo.getContact());
String encryptIdCard = stringCryptoUtil.encryptField(bo.getIdCard());
bo.setContact(encryptContact);
bo.setContact(encryptIdCard);
return zjkRetirementRecordsService.queryPageList(bo, pageQuery);
}
......@@ -76,6 +90,7 @@ public class ZjkRetirementRecordsController extends BaseController {
TenantConstants.SUPER_ADMIN_ROLE_KEY
}, mode = SaMode.OR)
@SaCheckPermission("expert:retirementRecords:query")
@DecryptOperation
@GetMapping("/{id}")
public R<ZjkRetirementRecordsVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
......
......@@ -78,6 +78,7 @@ public class ZjkRetirementRecordsVo implements Serializable {
private String expertName;
@ExcelProperty(value = "联系方式")
@EncryptSensitive
private String contact;
@ExcelProperty(value = "身份证号")
......
......@@ -5,6 +5,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.zjk.expert.retirementRecords.domain.bo.ZjkRetirementRecordsBo;
import org.dromara.zjk.expert.retirementRecords.domain.vo.ZjkRetirementRecordsVo;
import org.dromara.zjk.zwy.annotation.DecryptOperation;
import java.util.Collection;
import java.util.List;
......
package org.dromara.zjk.handler;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.zjk.utils.ApiThreadLocal;
import org.dromara.zjk.utils.EncryptionUtil;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
/**
* @author : yanguohua
* @version : 1.0
* @date : 2025/8/27 10:11
*/
@RestControllerAdvice(basePackages = "org.dromara.zjk.controller")
@Slf4j
public class ApiEncryptResponseAdvice implements ResponseBodyAdvice<R<String>> {
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
// 只处理返回类型为 R<String> 的接口
return R.class.isAssignableFrom(returnType.getParameterType());
}
@Override
public R<String> beforeBodyWrite(R<String> body, MethodParameter returnType, MediaType selectedContentType,
Class<? extends HttpMessageConverter<?>> selectedConverterType,
ServerHttpRequest request, ServerHttpResponse response) {
// 判断是否需要加密(可以根据注解、路径等条件判断)
if (body != null && body.getCode() == 200 ) {
String ak = ApiThreadLocal.getAk();
if (StringUtils.isNotEmpty(ak)) {
try {
// 对数据进行加密
String encryptedData = EncryptionUtil.encrypt(body.getData(), ak);
// 替换原始数据为加密数据
return R.ok(body.getMsg(), encryptedData);
} catch (Exception e) {
// 加密失败记录日志
log.error("数据加密失败", e);
}
}
}
return body;
}
}
......@@ -20,6 +20,7 @@ import org.dromara.common.web.core.BaseController;
import org.dromara.zjk.learning_world.domain.bo.ZjkLearningCommontBo;
import org.dromara.zjk.learning_world.domain.vo.ZjkLearningCommontVo;
import org.dromara.zjk.learning_world.service.IZjkLearningCommontService;
import org.dromara.zjk.zwy.annotation.DecryptOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
......@@ -62,7 +63,7 @@ public class ZjkLearningCommontController extends BaseController {
TenantConstants.SUPER_ADMIN_ROLE_KEY,
TenantConstants.TENANT_ADMIN_ROLE_KEY,
},mode = SaMode.OR)
@Log(title = "评论", businessType = BusinessType.EXPORT)
@DecryptOperation
@PostMapping("/export")
public void export(ZjkLearningCommontBo bo, HttpServletResponse response) {
List<ZjkLearningCommontVo> list = zjkLearningCommontService.queryList(bo);
......
package org.dromara.zjk.learning_world.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.zjk.learning_world.domain.entity.ZjkLearningActivity;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
......@@ -8,6 +9,8 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
......@@ -43,11 +46,15 @@ public class ZjkLearningActivityBo extends BaseEntity {
* 活动时间
*/
@NotNull(message = "活动开始时间不能为空", groups = { AddGroup.class})
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date activityStartTime;
/**
* 活动时间
*/
@NotNull(message = "活动结束时间不能为空", groups = { AddGroup.class})
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date activityEndTime;
/**
......
......@@ -19,6 +19,7 @@ import java.util.Date;
* @date 2024-11-08
*/
@Data
@ExcelIgnoreUnannotated
public class ZjkLearningActivityExcel {
......@@ -32,13 +33,12 @@ public class ZjkLearningActivityExcel {
/**
* 活动分类
*/
@ExcelIgnore
@ExcelProperty(value = "活动分类")
private String activityClassify;
/**
* 活动分类
*/
@ExcelProperty(value = "活动分类")
private String activityClassifyName;
/**
......@@ -73,7 +73,6 @@ public class ZjkLearningActivityExcel {
/**
* 状态
*/
@ExcelProperty(value = "发布状态")
private String status;
/**
......@@ -85,13 +84,12 @@ public class ZjkLearningActivityExcel {
/**
* 活动状态
*/
@ExcelProperty(value = "活动状态")
@ExcelProperty(value = "发布状态")
private String activityStatusName;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
......
......@@ -2,7 +2,10 @@ package org.dromara.zjk.learning_world.domain.excel;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import java.util.Date;
......@@ -24,14 +27,13 @@ public class ZjkLearningResourceExcel {
@ExcelProperty(value = "资源编号")
private String resourceName;
@ExcelProperty(value = "资源类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "source_type")
private String resourceClassify;
/**
* 资源分类
*/
@ExcelIgnore
private String resourceClassify; /**
* 资源分类
*/
@ExcelProperty(value = "资源分类")
private String resourceClassifyName;
/**
......@@ -42,7 +44,7 @@ public class ZjkLearningResourceExcel {
/**
* 资源类型
*/
@ExcelProperty(value = "资源类型")
@ExcelProperty(value = "资源分类")
private String resourceTypeName;
/**
......@@ -55,6 +57,7 @@ public class ZjkLearningResourceExcel {
* 发布时间
*/
@ExcelProperty(value = "发布时间")
@DateTimeFormat("yyyy-MM-dd")
private Date resourceTime;
/**
......
......@@ -5,6 +5,8 @@ import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.zjk.learning_world.domain.entity.ZjkLearningCommont;
import org.springframework.format.annotation.DateTimeFormat;
......@@ -31,35 +33,41 @@ public class ZjkLearningCommontVo implements Serializable {
/**
* id
*/
@ExcelProperty(value = "id")
@ExcelProperty(value = "评论记录编号")
private Long id;
/**
* 资讯id
* 评论
*/
@ExcelProperty(value = "资讯id")
private Long informationId;
@ExcelProperty(value = "资讯Title")
@ExcelProperty(value = "评论内容")
private String comment;
@ExcelProperty(value = "所属帖子")
private String informationTitle;
/**
* 状态
*/
@ExcelProperty(value = "评论状态",converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "is_publish")
private String status;
/**
* 评论人
*/
@ExcelProperty(value = "评论人")
private String reviewer;
private Long reviewerId;
/**
* 资讯id
*/
private Long informationId;
/**
* 被回复人ID
*/
@ExcelProperty(value = "被回复人ID")
private Long replyId;
/**
* 评论
*/
@ExcelProperty(value = "评论")
private String comment;
/**
* 评论时间
......@@ -69,16 +77,11 @@ public class ZjkLearningCommontVo implements Serializable {
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date commentTime;
/**
* 状态
*/
@ExcelProperty(value = "状态")
private String status;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
......@@ -89,24 +92,17 @@ public class ZjkLearningCommontVo implements Serializable {
@ExcelProperty(value = "撤销时间")
private Date takedownTime;
@ExcelProperty(value = "上级")
private Long parentId;
@ExcelProperty(value = "专家名称")
private String expertName;
@ExcelProperty(value = "专家头像")
private String expertPhotograph;
@ExcelProperty(value = "部门名称")
private String deptName;
@ExcelProperty(value = "被回复人名称")
private String replyName;
@ExcelProperty(value = "被回复人头像")
private String replyPhotograph;
@ExcelProperty(value = "部门名称")
private String replyDeptName;
/**
......
......@@ -90,4 +90,6 @@ public class ZjkLearningCourseVo implements Serializable {
* 附件名称
*/
private String originalName;
private String createBy;
private Date createTime;
}
......@@ -8,7 +8,20 @@ import org.dromara.zjk.enums.BaseCodeEnum;
@AllArgsConstructor
public enum ActivityTypeEnum implements BaseCodeEnum {
GOVERNMENT_INFORMATION("1","政务信息");
/**
* 老年活动
*/
SENIOR_ACTIVITY("1", "老年活动"),
/**
* 线下运动
*/
OFFLINE_SPORTS("2", "线下运动"),
/**
* 阅读
*/
READING("3", "阅读");
private String code;
......
......@@ -8,7 +8,8 @@ import org.dromara.zjk.enums.BaseCodeEnum;
@AllArgsConstructor
public enum CourseTypeEnum implements BaseCodeEnum {
GOVERNMENT_INFORMATION("1","政务信息");
GOVERNMENT_INFORMATION("1","政务信息"),
GOVERNMENT_SERVICE("2","政务服务");
private String code;
......
package org.dromara.zjk.learning_world.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.zjk.learning_world.domain.bo.ZjkLearningCommontBo;
import org.dromara.zjk.learning_world.domain.entity.ZjkLearningCommont;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.zjk.learning_world.domain.vo.ZjkLearningCommontVo;
import java.util.List;
/**
* 评论Mapper接口
*
......@@ -15,4 +18,6 @@ import org.dromara.zjk.learning_world.domain.vo.ZjkLearningCommontVo;
public interface ZjkLearningCommontMapper extends BaseMapperPlus<ZjkLearningCommont, ZjkLearningCommontVo> {
Page<ZjkLearningCommontVo> selectCommonPage(Page<Object> build, ZjkLearningCommontBo bo);
List<ZjkLearningCommontVo> selectCommonList(@Param("bo") ZjkLearningCommontBo bo);
}
......@@ -7,6 +7,8 @@ import org.dromara.zjk.learning_world.domain.bo.ZjkLearningToolBo;
import org.dromara.zjk.learning_world.domain.entity.ZjkLearningTool;
import org.dromara.zjk.learning_world.domain.vo.ZjkLearningToolVo;
import java.util.Collection;
/**
* 学习工具管理Mapper接口
*
......@@ -20,5 +22,5 @@ public interface ZjkLearningToolMapper extends BaseMapperPlus<ZjkLearningTool, Z
Page<ZjkLearningToolVo> selectByAll(@Param("page") Page<ZjkLearningToolVo> page, @Param("bo") ZjkLearningToolBo zjkLearningToolBo);
void deleteTool(Collection<Long> ids);
}
......@@ -155,10 +155,6 @@ public class ZjkLearningActivityServiceImpl implements IZjkLearningActivityServi
if (zjkLearningActivityVo == null) {
return false;
}
String activityStatus = zjkLearningActivityVo.getActivityStatus();
if (!activityStatus.equals(ActivityStatusEnum.DIDN_T_START.getCode())) {
throw new ServiceException("活动无法修改,请确认活动状态");
}
return baseMapper.updateById(update) > 0;
}
......@@ -195,12 +191,12 @@ public class ZjkLearningActivityServiceImpl implements IZjkLearningActivityServi
String activityStatus = excel.getActivityStatus();
String nameByCode = EnumUtil.getNameByCode(ActivityStatusEnum.class, activityStatus);
if (StringUtils.isNotBlank(nameByCode)) {
excel.setActivityStatus(nameByCode);
excel.setActivityStatusName(nameByCode);
}
String activityClassify = excel.getActivityClassify();
String classifyByCode = EnumUtil.getNameByCode(ActivityTypeEnum.class, activityClassify);
if (StringUtils.isNotBlank(classifyByCode)) {
excel.setActivityStatusName(classifyByCode);
excel.setActivityClassify(classifyByCode);
}
}
......
......@@ -13,6 +13,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.model.LoginUser;
import org.dromara.zjk.annualInspection.annualInspectionAudit.mapper.ZjkAnnualInspectionMapper;
import org.dromara.zjk.domain.vo.ZjkExpertVo;
import org.dromara.zjk.learning_world.domain.bo.ZjkLearningCommontBo;
import org.dromara.zjk.learning_world.domain.entity.ZjkLearningCommont;
......@@ -43,6 +44,7 @@ public class ZjkLearningCommontServiceImpl implements IZjkLearningCommontService
private final ZjkLearningInformationMapper zjkLearningInformationMapper;
private final ZjkExpertMapper zjkExpertMapper;
private final ZjkAnnualInspectionMapper zjkAnnualInspectionMapper;
/**
* 查询评论
......@@ -80,11 +82,9 @@ public class ZjkLearningCommontServiceImpl implements IZjkLearningCommontService
if (null == zjkLearningInformation) {
throw new ServiceException("无效帖子ID");
}
userId = zjkLearningInformation.getUserId();
userId = zjkLearningInformation.getUserId();
}
//LambdaQueryWrapper<ZjkLearningCommont> lqw = buildQueryWrapper(bo);
bo.setStatus("2");
Page<ZjkLearningCommontVo> result = baseMapper.selectCommonPage(pageQuery.build(), bo);
List<ZjkLearningCommontVo> records = result.getRecords();
if (CollectionUtil.isEmpty(records)) {
......@@ -100,7 +100,7 @@ public class ZjkLearningCommontServiceImpl implements IZjkLearningCommontService
Map<Long, ZjkExpertVo> getExpertMap = zjkExpertVos.stream().collect(Collectors.toMap(ZjkExpertVo::getUserId, v -> v));
for (ZjkLearningCommontVo record : records) {
ZjkExpertVo zjkExpertVo = getExpertMap.get(record.getReviewerId());
record.setExpertName(zjkExpertVo.getExpertName());
record.setExpertName(zjkExpertVo.getUserName());
record.setExpertPhotograph(zjkExpertVo.getPhotograph());
boolean flag = LoginHelper.getUserId().equals(userId);
record.setReply(flag);
......@@ -158,8 +158,13 @@ public class ZjkLearningCommontServiceImpl implements IZjkLearningCommontService
*/
@Override
public List<ZjkLearningCommontVo> queryList(ZjkLearningCommontBo bo) {
LambdaQueryWrapper<ZjkLearningCommont> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
List<ZjkLearningCommontVo> zjkLearningCommontVos = baseMapper.selectCommonList(bo);
zjkLearningCommontVos.stream().forEach(item -> {
item.setReviewer(zjkAnnualInspectionMapper.selectApprovalByUserId(item.getReviewerId()));
item.setInformationTitle(zjkLearningInformationMapper.selectById(item.getInformationId()).getInformationTitle());
});
return zjkLearningCommontVos;
}
private LambdaQueryWrapper<ZjkLearningCommont> buildQueryWrapper(ZjkLearningCommontBo bo) {
......@@ -285,7 +290,6 @@ public class ZjkLearningCommontServiceImpl implements IZjkLearningCommontService
}
@Override
public int updateStatuso(ZjkLearningCommontBo bo) {
Long id = bo.getId();
......
......@@ -166,14 +166,14 @@ public class ZjkLearningResourceServiceImpl implements IZjkLearningResourceServi
String statusByCode = EnumUtil.getNameByCode(PublishStatusEnum.class, status);
zjkLearningResourceExcel.setStatusName(statusByCode);
}
String resourceClassify = zjkLearningResourceExcel.getResourceClassify();
if (StringUtils.isNotBlank(resourceClassify)) {
String resourceClassifyByCode = EnumUtil.getNameByCode(SourceClassifyEnum.class, resourceClassify);
zjkLearningResourceExcel.setResourceClassifyName(resourceClassifyByCode);
}
// String resourceClassify = zjkLearningResourceExcel.getResourceClassify();
// if (StringUtils.isNotBlank(resourceClassify)) {
// String resourceClassifyByCode = EnumUtil.getNameByCode(SourceClassifyEnum.class, resourceClassify);
// zjkLearningResourceExcel.setResourceClassifyName(resourceClassifyByCode);
// }
}
return List.of();
return zjkLearningResourceExcels;
}
@Override
......
......@@ -129,7 +129,8 @@ public class ZjkLearningToolServiceImpl implements IZjkLearningToolService {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
baseMapper.deleteTool(ids);
return true;
}
@Override
......
......@@ -24,4 +24,6 @@ public interface InoutCheckMapper extends BaseMapperPlus<InoutCheck, InoutCheckV
String getInvFileNameById(String invFileId);
String getCheckNo();
String selectUserNameById(Long createBy);
}
......@@ -18,4 +18,5 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
public interface ZjkCreditMapper extends BaseMapperPlus<ZjkCredit, ZjkCreditVo> {
IPage<CreditShowVO> queryPointList(Page<Object> build, @Param("bo") CreditReqDto bo);
Integer getPointCount(@Param("bo") CreditReqDto bo);
}
package org.dromara.zjk.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.zjk.domain.ZjkCreditRule;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.zjk.domain.bo.ZjkCreditBo;
import org.dromara.zjk.domain.vo.ZjkCreditRuleVo;
/**
......@@ -12,4 +15,5 @@ import org.dromara.zjk.domain.vo.ZjkCreditRuleVo;
*/
public interface ZjkCreditRuleMapper extends BaseMapperPlus<ZjkCreditRule, ZjkCreditRuleVo> {
Page<ZjkCreditRuleVo> selectCreditInfo(Page<Object> build,@Param("bo") ZjkCreditBo dto);
}
......@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.zjk.domain.ZjkEvaluate;
import org.dromara.zjk.domain.dto.LeaveStsDto;
import org.dromara.zjk.domain.dto.SelExpertRuleDto;
......
......@@ -72,5 +72,20 @@ public interface ZjkExpertMapper extends BaseMapperPlus<ZjkExpert, ZjkExpertVo>
int updateHmac(ZjkExpert update);
List<Long> selectIdsByName(String expertName);
List<ZjkExpertVo> getConcatenatedExpert(String name);
String getProvinceByName(String province);
String getCityByNameAndProvinceId(String province, String city);
String getAreaByNameAndCityId(String city, String area);
List<ZjkExpertVo> getStageExperts(Long productId, Integer reviewSn);
List<Map<String, String>> getWorkperformIdByName();
void handleClassified(Long expertId, Integer isClassified);
List<String> selectExistingNameAndIdCardPairs(List<String> checkKeys);
}
......@@ -19,13 +19,19 @@ import java.util.List;
*/
public interface ZjkExpertMoneyInfoMapper extends BaseMapperPlus<ZjkExpertMoneyInfo, ZjkExpertMoneyInfoVO> {
Page<ZjkExpertMoneyInfoVO> selectMoneyInfoList(Page<ZjkExpertMoneyInfo> build, @Param("bo") ZjkExpertMoneyInfoBo bo);
Page<ZjkExpertMoneyInfo> selectMoneyInfoList(Page<ZjkExpertMoneyInfo> build, @Param("bo") ZjkExpertMoneyInfoBo bo);
List<ZjkExpertMoneyInfoVO> selectListByMonth(@Param("startTime") Date startTime ,@Param("endTime") Date endTime,@Param("tenantId") String tenantId);
List<String> selectTenantIds();
List<ZjkExpertVo> getExpertList(Long productId, Integer reviewSn);
List<ZjkExpertVo> getExpertListForSettle(Long productId, Integer reviewSn);
ZjkExpertMoneyInfo selectByIdEx(Long moneyId);
List<ZjkExpertMoneyInfo> selectJsList(Long productId, Integer reviewSn, String expertId);
}
......
......@@ -6,12 +6,11 @@ import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.zjk.domain.ZjkInvoice;
import org.dromara.zjk.domain.bo.ZjkInvoiceBo;
import org.dromara.zjk.domain.vo.SysOssVo;
import org.dromara.zjk.domain.vo.ZjkExpertVo;
import org.dromara.zjk.domain.vo.ZjkInvoiceVo;
import org.dromara.zjk.domain.ZjkExpertMoneyInfo;
import java.math.BigDecimal;
import java.util.Map;
/**
* 发票Mapper接口
......@@ -37,4 +36,6 @@ public interface ZjkInvoiceMapper extends BaseMapperPlus<ZjkInvoice, ZjkInvoiceV
* @return
*/
BigDecimal selectTotalMoney();
ZjkExpertMoneyInfo checkIfImport(String productName, Integer reviewSn, String expertName, String settleNo);
}
......@@ -51,6 +51,7 @@ public interface ZjkProductMapper extends BaseMapperPlus<ZjkProduct, ZjkProductV
@DataColumn(key = "deptName", value = "create_dept"),
})
Page<ZjkProductVo> selectProdoctPage(Page<ZjkProduct> build, ZjkProductBo bo);
List<ZjkProductVo> selectProdoctForApi(@Param("bo") ZjkProductBo bo);
@DataPermission({
@DataColumn(key = "xmUserName", value = "zp.user_id"),
......@@ -59,4 +60,6 @@ public interface ZjkProductMapper extends BaseMapperPlus<ZjkProduct, ZjkProductV
Set<ProductPanoramaDeptVo> productPanoramaDept();
void updateProductByApproval(Long id, Integer approvalStatus, String approvalReason);
Page<ProductPanoramaVo> getProductList(Page<Object> build,@Param("bo") ProductPanoramaVo bo);
}
......@@ -6,6 +6,7 @@ import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.zjk.domain.ZjkReviewPhase;
import org.dromara.zjk.domain.bo.ZjkProductBo;
import org.dromara.zjk.domain.bo.ZjkReviewProductBo;
import org.dromara.zjk.domain.vo.ZjkReviewPhaseVo;
import org.dromara.zjk.domain.vo.ZjkReviewProductVo;
......@@ -21,18 +22,17 @@ import java.util.List;
*/
public interface ZjkReviewPhaseMapper extends BaseMapperPlus<ZjkReviewPhase, ZjkReviewPhaseVo> {
@DataPermission({
@DataColumn(key = "deptName", value = "zei.dept_id"),
@DataColumn(key = "xmUserName", value = "zp.user_id"),
@DataColumn(key = "userName", value = "zei.user_id")
})
Page<ZjkReviewProductVo> reviewProductList(Page<ZjkReviewProductVo> build, ZjkReviewProductBo bo);
List<ZjkReviewProductVo> reviewProductListForExport(@Param("bo") ZjkReviewProductBo bo);
@DataPermission({
@DataColumn(key = "deptName", value = "zei.dept_id"),
@DataColumn(key = "xmUserName", value = "zrp.create_by"),
@DataColumn(key = "userName", value = "zei.user_id")
})
List<Long> getByProductId(@Param("productId")Long id);
List<Long> getByProductId(@Param("productId") Long id);
@DataPermission({
@DataColumn(key = "deptName", value = "zei.dept_id"),
......@@ -41,19 +41,19 @@ public interface ZjkReviewPhaseMapper extends BaseMapperPlus<ZjkReviewPhase, Zjk
})
List<ZjkReviewProductVo> reviewExport(@Param("bo") ZjkReviewProductBo bo);
List<ZjkReviewProductVo> getProductList();
List<ZjkReviewProductVo> getByProductIds(@Param("productIds") Collection<Long> id);
Page<ZjkReviewProductVo> getReviewProductListByExpert(Page<ZjkReviewProductVo> build,@Param("bo") ZjkReviewProductBo bo);
Page<ZjkReviewProductVo> getReviewProductListByExpert(Page<ZjkReviewProductVo> build, @Param("bo") ZjkReviewProductBo bo);
ZjkReviewPhase selectVoListByLimit(Long id);
Long getReviewProductCountByExpertId(Long expertId);
List<ZjkReviewPhaseVo> selectVoListByZjkItemExpert(@Param("itemid") Long itemid, @Param("reviewSn")String reviewSn,@Param("rown")Long rown,@Param("supplementCause")Integer supplementCause);
List<ZjkReviewPhaseVo> selectVoListByZjkItemExpert(@Param("itemid") Long itemid, @Param("reviewSn") String reviewSn, @Param("rown") Long rown, @Param("supplementCause") Integer supplementCause);
List<ZjkReviewPhaseVo> selectUpdateZjkItemExpert(Long itemid, String reviewSn);
......@@ -65,4 +65,5 @@ public interface ZjkReviewPhaseMapper extends BaseMapperPlus<ZjkReviewPhase, Zjk
List<ZjkReviewPhaseVo> selectVoByExtreationId(@Param("extractionId") Long extractionId);
List<ZjkProductBo> getInvoiceProductList();
}
......@@ -76,7 +76,7 @@ public interface IZjkCreditUserService {
R<CreditExpertRankVO> getExpertPointRank(Integer rangeDay);
R<List<ZjkCreditRuleVo>> selectUserById(ZjkCreditBo creditId, PageQuery pageQuery);
TableDataInfo<ZjkCreditRuleVo> selectUserById(ZjkCreditBo creditId, PageQuery pageQuery);
R<List<ChartBaseCreditVO>> blacklist(ZjkCreditBo creditBo);
......
......@@ -17,7 +17,7 @@ import java.util.Map;
* @date 2024-11-01
*/
public interface IZjkExpertMajorService {
void saveBatch(List<ZjkExpertMajor> zjkExpertMajorList);
/**
* 查询专家库 专业关系表
*
......
package org.dromara.zjk.service;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotNull;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.core.domain.R;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.zjk.domain.ExpertBaseInfo;
......@@ -9,8 +12,8 @@ import org.dromara.zjk.domain.ZjkExpertItem;
import org.dromara.zjk.domain.bo.ZjkExpertBo;
import org.dromara.zjk.domain.bo.ZjkProjectExpertItemBo;
import org.dromara.zjk.domain.vo.ExpertPerformWorkCountVO;
import org.dromara.zjk.domain.vo.SyncUserReturnVO;
import org.dromara.zjk.domain.vo.ZjkExpertVo;
import org.dromara.zjk.zwy.annotation.DecryptOperation;
import org.springframework.web.multipart.MultipartFile;
import java.util.Collection;
......@@ -145,7 +148,7 @@ public interface IZjkExpertService {
*/
Boolean expertQuash(Integer type,String businessKey);
List<String> imports(MultipartFile file);
R<Void> imports(MultipartFile file);
Long getExpertCount();
......@@ -171,5 +174,11 @@ public interface IZjkExpertService {
Long getUserIdByPhone(String tel);
void fetchRemoteProfessors();
SyncUserReturnVO fetchRemoteProfessors();
void exportTml(HttpServletResponse response);
List<ZjkExpertVo> getStageExperts(@NotNull(message = "项目不能为空") Long productId, @NotNull(message = "阶段不能为空") Integer reviewSn);
Boolean handleClassified(ZjkExpertBo bo);
}
......@@ -2,6 +2,7 @@ package org.dromara.zjk.service;
import jakarta.servlet.http.HttpServletResponse;
import org.dromara.common.core.domain.R;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.zjk.domain.bo.ZjkInvoiceBo;
......@@ -12,7 +13,6 @@ import org.springframework.web.multipart.MultipartFile;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* 发票Service接口
......@@ -74,9 +74,11 @@ public interface IZjkInvoiceService {
/**
* 导入信息excel
*
* @param file
* @return
*/
void imports(MultipartFile file);
R<Void> imports(MultipartFile file);
/**
* ,包括发票的数量、金额、开票单位等,
......@@ -87,4 +89,6 @@ public interface IZjkInvoiceService {
Boolean check(Long moneyId);
CheckSupportVo getInvByProductInfo(String productId, String reviewSn, String expertId);
void downloadExcelTem(HttpServletResponse response);
}
......@@ -36,6 +36,7 @@ public interface IZjkProductService {
* @return 项目管理分页列表
*/
TableDataInfo<ZjkProductVo> queryPageList(ZjkProductBo bo, PageQuery pageQuery);
List<ZjkProductVo> queryListForApi(ZjkProductBo bo);
/**
* 查询符合条件的项目管理列表
......@@ -105,4 +106,6 @@ public interface IZjkProductService {
Set<ProductPanoramaDeptVo> productPanoramaDept();
Boolean approval(ZjkProductBo bo);
TableDataInfo<ProductPanoramaVo> getProductList(ProductPanoramaVo vo, PageQuery pageQuery);
}
package org.dromara.zjk.service;
import org.dromara.common.core.domain.R;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.zjk.domain.bo.ZjkProductBo;
import org.dromara.zjk.domain.bo.ZjkReviewPhaseBo;
import org.dromara.zjk.domain.bo.ZjkReviewProductBo;
import org.dromara.zjk.domain.vo.ZjkReviewPhaseVo;
......@@ -79,4 +81,6 @@ public interface IZjkReviewPhaseService {
Long getReviewCount();
Long getReviewProductCountByExpertId(Long expertId);
R<List<ZjkProductBo>> invoiceProductList();
}
......@@ -33,7 +33,7 @@ public interface ZjkExpertMoneyInfoService extends IService<ZjkExpertMoneyInfo>
* @param pageQuery 分页参数
* @return 专家费用管理分页列表
*/
TableDataInfo<ZjkExpertMoneyInfoVO> queryPageList(ZjkExpertMoneyInfoBo bo, PageQuery pageQuery);
TableDataInfo<ZjkExpertMoneyInfo> queryPageList(ZjkExpertMoneyInfoBo bo, PageQuery pageQuery);
boolean updateMoneyInfo(ZjkExpertMoneyInfoBo bo);
......@@ -75,4 +75,6 @@ public interface ZjkExpertMoneyInfoService extends IService<ZjkExpertMoneyInfo>
List<ZjkExpertMoneyInfo> getJsList(@NotNull(message = "项目不能为空") Long productId, @NotNull(message = "阶段不能为空") Integer reviewSn, String expertId);
List<ZjkExpertVo> getExpertList(@NotNull(message = "项目不能为空") Long productId, @NotNull(message = "阶段不能为空") Integer reviewSn);
List<ZjkExpertVo> getExpertListForSettle(@NotNull(message = "项目不能为空") Long productId, @NotNull(message = "阶段不能为空") Integer reviewSn);
}
......@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
......@@ -14,6 +15,7 @@ import org.dromara.zjk.domain.bo.InoutCheckBo;
import org.dromara.zjk.domain.vo.CheckSupportVo;
import org.dromara.zjk.domain.vo.InoutCheckVo;
import org.dromara.zjk.mapper.InoutCheckMapper;
import org.dromara.zjk.mapper.ZjkExpertMapper;
import org.dromara.zjk.service.IInoutCheckService;
import org.dromara.zjk.service.IZjkInvoiceService;
import org.springframework.stereotype.Service;
......@@ -64,6 +66,9 @@ public class InoutCheckServiceImpl implements IInoutCheckService {
public TableDataInfo<InoutCheckVo> queryPageList(InoutCheckBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<InoutCheck> lqw = buildQueryWrapper(bo);
Page<InoutCheckVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().stream().forEach(item->{
item.setCreateByStr(baseMapper.selectUserNameById(item.getCreateBy()));
});
return TableDataInfo.build(result);
}
......
......@@ -2,29 +2,27 @@ package org.dromara.zjk.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.zjk.domain.LearningEvaluate;
import org.dromara.zjk.domain.LearningSuggest;
import org.dromara.zjk.mapper.ZjkExpertMapper;
import org.springframework.stereotype.Service;
import org.dromara.zjk.domain.LearningBack;
import org.dromara.zjk.domain.bo.LearningBackBo;
import org.dromara.zjk.domain.vo.LearningBackVo;
import org.dromara.zjk.domain.LearningBack;
import org.dromara.zjk.mapper.LearningBackMapper;
import org.dromara.zjk.mapper.ZjkExpertMapper;
import org.dromara.zjk.service.ILearningBackService;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 【请填写功能名称】Service业务层处理
......@@ -38,6 +36,7 @@ public class LearningBackServiceImpl implements ILearningBackService {
private final LearningBackMapper baseMapper;
private final ZjkExpertMapper zjkExpertMapper;
/**
* 查询【请填写功能名称】
*
......@@ -45,7 +44,7 @@ public class LearningBackServiceImpl implements ILearningBackService {
* @return 【请填写功能名称】
*/
@Override
public LearningBackVo queryById(String ID){
public LearningBackVo queryById(String ID) {
return baseMapper.selectVoById(ID);
}
......@@ -62,17 +61,19 @@ public class LearningBackServiceImpl implements ILearningBackService {
if (contains) {
bo.setCreateBy(LoginHelper.getUserId());
}
Page<LearningBackVo> result = new Page<>();
LambdaQueryWrapper<LearningBack> lqw = buildQueryWrapper(bo);
if(!StringUtils.isEmpty(bo.getExpertName())){
if (!StringUtils.isEmpty(bo.getExpertName())) {
List<Long> uids = zjkExpertMapper.selectIdsByName(bo.getExpertName());
if(!CollectionUtil.isEmpty(uids)){
if (!CollectionUtil.isEmpty(uids)) {
lqw.in(LearningBack::getCreateBy, uids);
}else{
return TableDataInfo.build(result);
}
}
lqw.orderByDesc(LearningBack::getCreateTime);
Page<LearningBackVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().stream().forEach(o ->{
result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().stream().forEach(o -> {
o.setExpertName(zjkExpertMapper.selectByUserId(o.getCreateBy()).getExpertName());
});
......@@ -138,7 +139,7 @@ public class LearningBackServiceImpl implements ILearningBackService {
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(LearningBack entity){
private void validEntityBeforeSave(LearningBack entity) {
//TODO 做一些数据校验,如唯一约束
// 如果ID为空,生成新的ID
if (StringUtils.isBlank(entity.getID())) {
......@@ -155,7 +156,7 @@ public class LearningBackServiceImpl implements ILearningBackService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) {
if(isValid){
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
......
......@@ -2,28 +2,30 @@ package org.dromara.zjk.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.zjk.domain.LearningEvaluate;
import org.dromara.zjk.domain.LearningBack;
import org.dromara.zjk.enums.ApprovalStatusEnum;
import org.dromara.zjk.learning_world.mapper.ZjkLearningCourseMapper;
import org.dromara.zjk.mapper.ZjkExpertMapper;
import org.springframework.stereotype.Service;
import org.dromara.zjk.domain.bo.LearningEvaluateBo;
import org.dromara.zjk.domain.vo.LearningEvaluateVo;
import org.dromara.zjk.learning_world.mapper.ZjkLearningCourseMapper;
import org.dromara.zjk.domain.LearningEvaluate;
import org.dromara.zjk.mapper.LearningEvaluateMapper;
import org.dromara.zjk.mapper.ZjkExpertMapper;
import org.dromara.zjk.service.ILearningEvaluateService;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 【请填写功能名称】Service业务层处理
......@@ -38,7 +40,6 @@ public class LearningEvaluateServiceImpl implements ILearningEvaluateService {
private final LearningEvaluateMapper baseMapper;
private final ZjkExpertMapper zjkExpertMapper;
private final ZjkLearningCourseMapper zjkLearningCourseMapper;
/**
* 查询【请填写功能名称】
*
......@@ -46,9 +47,9 @@ public class LearningEvaluateServiceImpl implements ILearningEvaluateService {
* @return 【请填写功能名称】
*/
@Override
public LearningEvaluateVo queryById(String ID) {
public LearningEvaluateVo queryById(String ID){
LearningEvaluateVo res = baseMapper.selectVoById(ID);
if (res.getCourseId() != null) {
if(res.getCourseId()!=null){
res.setCourseName(zjkLearningCourseMapper.selectById(res.getCourseId()).getCourseName());
}
return res;
......@@ -68,21 +69,26 @@ public class LearningEvaluateServiceImpl implements ILearningEvaluateService {
if (contains) {
lqw.in(LearningEvaluate::getCreateBy, LoginHelper.getUserId());
}
if (!StringUtils.isEmpty(bo.getExpertName())) {
Page<LearningEvaluateVo> result = new Page<>();
if(!StringUtils.isEmpty(bo.getExpertName())){
List<Long> uids = zjkExpertMapper.selectIdsByName(bo.getExpertName());
if (!CollectionUtil.isEmpty(uids)) {
if(!CollectionUtil.isEmpty(uids)){
lqw.in(LearningEvaluate::getCreateBy, uids);
}else{
return TableDataInfo.build(result);
}
}
if (!StringUtils.isEmpty(bo.getCourseName())) {
if(!StringUtils.isEmpty(bo.getCourseName())){
List<Long> cids = zjkLearningCourseMapper.selectIdsByName(bo.getCourseName());
if (!CollectionUtil.isEmpty(cids)) {
if(!CollectionUtil.isEmpty(cids)){
lqw.in(LearningEvaluate::getCourseId, cids);
}else{
return TableDataInfo.build(result);
}
}
lqw.orderByDesc(LearningEvaluate::getCreateTime);
Page<LearningEvaluateVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().stream().forEach(o -> {
result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().stream().forEach(o ->{
o.setExpertName(zjkExpertMapper.selectByUserId(o.getCreateBy()).getExpertName());
o.setCourseName(zjkLearningCourseMapper.selectById(o.getCourseId()).getCourseName());
});
......@@ -149,7 +155,7 @@ public class LearningEvaluateServiceImpl implements ILearningEvaluateService {
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(LearningEvaluate entity) {
private void validEntityBeforeSave(LearningEvaluate entity){
//TODO 做一些数据校验,如唯一约束
if (StringUtils.isBlank(entity.getID())) {
entity.setID(IdUtil.simpleUUID()); // 或使用其他ID生成方式
......@@ -165,7 +171,7 @@ public class LearningEvaluateServiceImpl implements ILearningEvaluateService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) {
if (isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
......
package org.dromara.zjk.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
......@@ -19,8 +18,8 @@ import org.dromara.zjk.domain.vo.LearningSuggestVo;
import org.dromara.zjk.domain.LearningSuggest;
import org.dromara.zjk.mapper.LearningSuggestMapper;
import org.dromara.zjk.service.ILearningSuggestService;
import cn.hutool.core.collection.CollectionUtil;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Collection;
......@@ -61,13 +60,16 @@ public class LearningSuggestServiceImpl implements ILearningSuggestService {
@Override
public TableDataInfo<LearningSuggestVo> queryPageList(LearningSuggestBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<LearningSuggest> lqw = buildQueryWrapper(bo);
Page<LearningSuggestVo> result = new Page<>();
if(!StringUtils.isEmpty(bo.getExpertName())){
List<Long> uids = zjkExpertMapper.selectIdsByName(bo.getExpertName());
if(!CollectionUtil.isEmpty(uids)){
lqw.in(LearningSuggest::getCreateBy, uids);
}else{
return TableDataInfo.build(result);
}
}
Page<LearningSuggestVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().stream().forEach(o ->{
o.setExpertName(zjkExpertMapper.selectByUserId(o.getCreateBy()).getExpertName());
});
......
......@@ -11,7 +11,9 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.zjk.domain.ZjkApprovalProcessLogs;
import org.dromara.zjk.domain.bo.ZjkApprovalProcessLogsBo;
import org.dromara.zjk.domain.vo.ZjkApprovalProcessLogsVo;
import org.dromara.zjk.domain.vo.ZjkDataChangesLogsVo;
import org.dromara.zjk.mapper.ZjkApprovalProcessLogsMapper;
import org.dromara.zjk.mapper.ZjkLearningMaterialsMapper;
import org.dromara.zjk.service.IZjkApprovalProcessLogsService;
import org.springframework.stereotype.Service;
......@@ -30,7 +32,7 @@ import java.util.Map;
public class ZjkApprovalProcessLogsServiceImpl implements IZjkApprovalProcessLogsService {
private final ZjkApprovalProcessLogsMapper baseMapper;
private final ZjkLearningMaterialsMapper zjkLearningMaterialsMapper;
/**
* 查询审批流程记录
*
......@@ -53,6 +55,7 @@ public class ZjkApprovalProcessLogsServiceImpl implements IZjkApprovalProcessLog
public TableDataInfo<ZjkApprovalProcessLogsVo> queryPageList(ZjkApprovalProcessLogsBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ZjkApprovalProcessLogs> lqw = buildQueryWrapper(bo);
Page<ZjkApprovalProcessLogsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().forEach(r -> r.setCreateByStr(zjkLearningMaterialsMapper.selectVoByUserId(r.getCreateBy())));
return TableDataInfo.build(result);
}
......@@ -65,7 +68,9 @@ public class ZjkApprovalProcessLogsServiceImpl implements IZjkApprovalProcessLog
@Override
public List<ZjkApprovalProcessLogsVo> queryList(ZjkApprovalProcessLogsBo bo) {
LambdaQueryWrapper<ZjkApprovalProcessLogs> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
List<ZjkApprovalProcessLogsVo> zjkDataChangesLogsVos = baseMapper.selectVoList(lqw);
zjkDataChangesLogsVos.forEach(r -> r.setCreateByStr(zjkLearningMaterialsMapper.selectVoByUserId(r.getCreateBy())));
return zjkDataChangesLogsVos;
}
private LambdaQueryWrapper<ZjkApprovalProcessLogs> buildQueryWrapper(ZjkApprovalProcessLogsBo bo) {
......
......@@ -10,7 +10,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.zjk.domain.ZjkCreditUser;
import org.dromara.zjk.domain.dto.CreditReqDto;
import org.dromara.zjk.domain.vo.ZjkCreditUserVo;
import org.dromara.zjk.mapper.ZjkCreditMapper;
import org.dromara.zjk.mapper.ZjkCreditUserMapper;
import org.springframework.stereotype.Service;
import org.dromara.zjk.domain.bo.ZjkCreditLvBo;
......@@ -36,7 +38,7 @@ public class ZjkCreditLvServiceImpl implements IZjkCreditLvService {
private final ZjkCreditLvMapper baseMapper;
private final ZjkCreditUserMapper zjkCreditUserMapper;
private final ZjkCreditMapper zjkCreditMapper;
/**
* 查询【请填写功能名称】
*
......@@ -63,11 +65,11 @@ public class ZjkCreditLvServiceImpl implements IZjkCreditLvService {
for (ZjkCreditLvVo zjkCreditLv : zjkCreditLvs) {
Long creditSectionGe = zjkCreditLv.getCreditSectionGe();
Long creditSectionLe = zjkCreditLv.getCreditSectionLe();
LambdaQueryWrapper<ZjkCreditUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.le(ZjkCreditUser::getCreditCount,creditSectionGe);
lambdaQueryWrapper.ge(ZjkCreditUser::getCreditCount,creditSectionLe);
Long count = zjkCreditUserMapper.selectCount(lambdaQueryWrapper);
zjkCreditLv.setPersonSum(count);
CreditReqDto creditReqDto = new CreditReqDto();
creditReqDto.setCredtieGe(creditSectionGe);
creditReqDto.setCrediteLe(creditSectionLe);
Integer pointCount = zjkCreditMapper.getPointCount(creditReqDto);
zjkCreditLv.setPersonSum(Long.valueOf(pointCount));
}
return zjkCreditLvs;
}
......
......@@ -174,7 +174,6 @@ public class ZjkCreditUserServiceImpl implements IZjkCreditUserService {
lambdaQueryWrapper.orderBy(true,true,ZjkCreditUser::getUpdateTime).last("Limit 1");
ZjkCreditUser zjkCreditUser = baseMapper.selectOne(lambdaQueryWrapper);
if(zjkCreditUser!=null){
//修改用户总信用
zjkCreditUser.setExpertId(creditInfoDto.getExpertId());
zjkCreditUser.setUserId(creditInfoDto.getUserId());
......@@ -331,52 +330,9 @@ public class ZjkCreditUserServiceImpl implements IZjkCreditUserService {
}
@Override
public R<List<ZjkCreditRuleVo>> selectUserById(ZjkCreditBo zjkCreditBo, PageQuery pageQuery) {
try {
int count = 0;
LambdaQueryWrapper<ZjkCreditRule> queryWrapper = new LambdaQueryWrapper<>();
if(zjkCreditBo.getIntegralReason()!=null){
queryWrapper.like(ZjkCreditRule::getRuleName,zjkCreditBo.getIntegralReason());
count++;
}
List<Long> vos = new ArrayList<>();
if(count!=0){
List<ZjkCreditRuleVo> zjkCreditRuleVos = zjkCreditRuleMapper.selectVoList(queryWrapper);
if(zjkCreditRuleVos==null||zjkCreditRuleVos.size()<=0){
return R.ok();
}
vos = zjkCreditRuleVos.stream().map(ZjkCreditRuleVo::getRuleKey).collect(Collectors.toList());
}
LambdaQueryWrapper<ZjkCredit> lambdaQueryWrapper = new LambdaQueryWrapper<>();
Long expertId = zjkCreditBo.getExpertId();
lambdaQueryWrapper.eq(ZjkCredit::getExpertId,expertId==null?LoginHelper.getUserId():expertId);
if(zjkCreditBo.getStartTime()!=null&&zjkCreditBo.getEndTime()!=null){
lambdaQueryWrapper.ge(ZjkCredit::getUpdateTime,zjkCreditBo.getStartTime());
lambdaQueryWrapper.le(ZjkCredit::getUpdateTime,zjkCreditBo.getEndTime());
}
if(vos!=null&&vos.size()>0){
lambdaQueryWrapper.in(ZjkCredit::getRuleId,vos);
}
Page<ZjkCreditVo> zjkCreditVos = zjkCreditMapper.selectVoPage(pageQuery.build(), lambdaQueryWrapper);
// List<ZjkCreditVo> zjkCreditVos = zjkCreditMapper.selectVoList(lambdaQueryWrapper);
//所偶有的信用分规则
List<ZjkCreditRuleVo> zjkCreditRuleVos = zjkCreditRuleMapper.selectVoList();
Map<Long, ZjkCreditRuleVo> userMap = zjkCreditRuleVos.stream()
.collect(Collectors.toMap(ZjkCreditRuleVo::getID, user -> user));
List<ZjkCreditRuleVo> zjkCreditRuleVos1 = new ArrayList<>();
for (ZjkCreditVo zjkCreditVo : zjkCreditVos.getRecords()) {
if(zjkCreditVo.getRuleId()!=null){
ZjkCreditRuleVo zjkCreditRuleVo = userMap.get(zjkCreditVo.getRuleId());
zjkCreditRuleVo.setEachScore(zjkCreditVo.getCredit());
zjkCreditRuleVo.setUpdateTime(zjkCreditVo.getUpdateTime());
zjkCreditRuleVos1.add(zjkCreditRuleVo);
}
}
return R.ok(zjkCreditRuleVos1);
}catch (Exception e){
return R.fail();
}
public TableDataInfo<ZjkCreditRuleVo> selectUserById(ZjkCreditBo dto, PageQuery pageQuery) {
Page<ZjkCreditRuleVo> result = zjkCreditRuleMapper.selectCreditInfo(pageQuery.build(),dto);
return TableDataInfo.build(result);
}
@Override
......@@ -407,7 +363,7 @@ public class ZjkCreditUserServiceImpl implements IZjkCreditUserService {
}
//获取所有行用分低于
LambdaQueryWrapper<ZjkCreditUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.ge(ZjkCreditUser::getRewardId,4);
lambdaQueryWrapper.in(ZjkCreditUser::getRewardId,Arrays.asList("4","5","6"));
if(collect1!=null&&collect1.size()>0){
lambdaQueryWrapper.in(ZjkCreditUser::getExpertId,collect1);
}
......
......@@ -15,6 +15,7 @@ import org.dromara.zjk.domain.bo.ZjkDataChangesLogsBo;
import org.dromara.zjk.domain.vo.ZjkDataChangesLogsDetailVo;
import org.dromara.zjk.domain.vo.ZjkDataChangesLogsVo;
import org.dromara.zjk.mapper.ZjkDataChangesLogsMapper;
import org.dromara.zjk.mapper.ZjkLearningMaterialsMapper;
import org.dromara.zjk.service.IZjkDataChangesLogsService;
import org.springframework.stereotype.Service;
......@@ -33,7 +34,7 @@ import java.util.Map;
public class ZjkDataChangesLogsServiceImpl implements IZjkDataChangesLogsService {
private final ZjkDataChangesLogsMapper baseMapper;
private final ZjkLearningMaterialsMapper zjkLearningMaterialsMapper;
/**
* 查询业务数据变更记录
*
......@@ -73,6 +74,7 @@ public class ZjkDataChangesLogsServiceImpl implements IZjkDataChangesLogsService
public TableDataInfo<ZjkDataChangesLogsVo> queryPageList(ZjkDataChangesLogsBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ZjkDataChangesLogs> lqw = buildQueryWrapper(bo);
Page<ZjkDataChangesLogsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().forEach(r -> r.setCreateByStr(zjkLearningMaterialsMapper.selectVoByUserId(r.getCreateBy())));
return TableDataInfo.build(result);
}
......@@ -85,7 +87,9 @@ public class ZjkDataChangesLogsServiceImpl implements IZjkDataChangesLogsService
@Override
public List<ZjkDataChangesLogsVo> queryList(ZjkDataChangesLogsBo bo) {
LambdaQueryWrapper<ZjkDataChangesLogs> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
List<ZjkDataChangesLogsVo> zjkDataChangesLogsVos = baseMapper.selectVoList(lqw);
zjkDataChangesLogsVos.forEach(r -> r.setCreateByStr(zjkLearningMaterialsMapper.selectVoByUserId(r.getCreateBy())));
return zjkDataChangesLogsVos;
}
private LambdaQueryWrapper<ZjkDataChangesLogs> buildQueryWrapper(ZjkDataChangesLogsBo bo) {
......
......@@ -7,13 +7,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.domain.R;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.RemoteDictService;
import org.dromara.system.api.model.RoleDTO;
import org.dromara.zjk.domain.*;
import org.dromara.zjk.domain.dto.CreditInfoDto;
......@@ -22,6 +22,7 @@ import org.dromara.zjk.domain.dto.PointInfoDto;
import org.dromara.zjk.domain.dto.SelExpertRuleDto;
import org.dromara.zjk.domain.vo.*;
import org.dromara.zjk.mapper.*;
import org.dromara.zjk.service.IZjkReviewPhaseService;
import org.dromara.zjk.service.ZjkEvaluateService;
import org.dromara.zjk.utils.DateRangUtils;
import org.dromara.zjk.utils.NumberGenerator;
......@@ -31,7 +32,6 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
......@@ -44,6 +44,7 @@ import java.util.stream.Collectors;
* @createDate 2024-11-01 10:11:52
*/
@Service
@Slf4j
public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEvaluate>
implements ZjkEvaluateService {
@Resource
......@@ -52,7 +53,6 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
private ApplicationEventPublisher eventPublisher;
@Resource
private ZjkExpertMapper zjkExpertMapper;
private RemoteDictService remoteDictService;
@Resource
private ZjkCreditRuleMapper zjkCreditRuleMapper;
@Resource
......@@ -65,7 +65,10 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
private ZjkReviewPhaseMapper zjkReviewPhaseMapper;
@Resource
private ZjkPointMapper zjkPointMapper;
@Resource
private IZjkReviewPhaseService zjkReviewPhaseService;
@Resource
private ZjkPointUserMapper zjkPointUserMapper;
@Override
public TableDataInfo<ZjkEvaluateVO> getListToZj(ZjkEvaluateVO bo, PageQuery pageQuery) {
Long userId = LoginHelper.getUserId();
......@@ -87,7 +90,7 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
List<String> exUserIds = usersId.stream().distinct().collect(Collectors.toList());
bo.setUserId(String.valueOf(userId));
IPage<ZjkEvaluateVO> result = baseMapper.getListToZj(pageQuery.build(), exUserIds, ruleIds, bo);
result.getRecords().stream().forEach(item->{
result.getRecords().stream().forEach(item -> {
item.setXmEvaluateStatus(checkStatu(item));
});
//setTrans(result.getRecords());
......@@ -136,13 +139,13 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
if (zjkEvaluate.getSourceRole() != null && zjkEvaluate.getSourceRole() == 2 && zjkEvaluate.getIsPresent().equals("0")) {
List<String> evaIds = baseMapper.updateOtherInfoToUnPresent(zjkEvaluate);
//更新对应积分
if(!CollectionUtils.isEmpty(evaIds)){
if (!CollectionUtils.isEmpty(evaIds)) {
//清除未出席积分记录为0
zjkPointMapper.clearUnPresentData(evaIds);
zjkPointMapper.clearUnPresentData(evaIds);
}
}
baseMapper.insert(zjkEvaluate);
baseMapper.insert(zjkEvaluate);
//已出席,项目管理员评审专家后,需给财务打款记录表插入数据
try {
if (zjkEvaluate.getSourceRole() != null && zjkEvaluate.getSourceRole() == 2 && zjkEvaluate.getIsPresent().equals("1")) {
......@@ -152,11 +155,13 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
moneyInfo.setExpertId(bo.getEvaluateUser());
moneyInfo.setExpertName(zjkExpert.getExpertName());
moneyInfo.setExpertUnit(zjkExpert.getWorkUnit());
moneyInfo.setPaySn(NumberGenerator.generateUniqueNumber("fee",8));
moneyInfo.setPaySn(NumberGenerator.generateUniqueNumber("fee", 8));
moneyInfo.setAssignId(0);
moneyInfo.setProductType(zjkEvaluate.getItemStage()+"");
moneyInfo.setProductType(zjkEvaluate.getItemStage() + "");
//专家参与项目评审的次数
moneyInfo.setReviewCount(String.valueOf(zjkReviewPhaseService.getReviewProductCountByExpertId(zjkExpert.getExpertId())));
ZjkProduct zjkProduct = zjkProductMapper.selectById(zjkEvaluate.getItemId());
if (zjkExpert != null) {
if (zjkProduct != null) {
moneyInfo.setProductId(zjkEvaluate.getItemId());
moneyInfo.setProductType(String.valueOf(zjkEvaluate.getItemStage()));
moneyInfo.setProductName(zjkProduct.getProductName());
......@@ -174,9 +179,22 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
moneyInfo.setExpertType(con.getMoneyType());
moneyInfo.setExpertTypeMoneyFee(con.getMoneyNumber());
moneyInfo.setExpertNoPayMoney(con.getMoneyNumber());
moneyInfo.setMoneyCycle(con.getMoneyCycle());
}
//结算表已有同项目同阶段同专家id不做第二次录入
List<ZjkExpertVo> expertListForSettle = zjkExpertMoneyInfoMapper.getExpertListForSettle(Long.parseLong(moneyInfo.getProductId()), Integer.parseInt(moneyInfo.getProductType()));
if (!CollectionUtils.isEmpty(expertListForSettle)) {
List<String> collect = expertListForSettle.stream().map(item -> String.valueOf(item.getExpertId())).collect(Collectors.toList());
if (collect.contains(moneyInfo.getExpertId())) {
int insert = zjkExpertMoneyInfoMapper.insert(moneyInfo);
log.info("项目管理员评审专家后,给财务打款记录表插入数据:" + insert);
} else {
log.error("结算表已有同项目同阶段同专家id不做第二次录入");
}
}
int insert = zjkExpertMoneyInfoMapper.insert(moneyInfo);
log.error("项目管理员评审专家后,给财务打款记录表插入数据:" + insert);
}
}
......@@ -189,18 +207,25 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
QueryWrapper<ZjkExpert> wq = null;
ZjkExpert zjkExpert = null;
try {
PointInfoDto pointInfoEvent = new PointInfoDto();
pointInfoEvent.setEvaluateId(zjkEvaluate.getId());
pointInfoEvent.setRuleKey(UserConstants.POINT_EVALUATE_KEY);
pointInfoEvent.setExpertId(Long.valueOf(bo.getEvaluateUser()));
pointInfoEvent.setPoints(bo.getBusLevelScore().add(bo.getWorkAttitudeScore()).add(bo.getRightApprovalScore()));
wq = new QueryWrapper<>();
wq.lambda().eq(ZjkExpert::getExpertId, bo.getEvaluateUser());
zjkExpert = zjkExpertMapper.selectOne(wq);
if (zjkExpert != null) {
pointInfoEvent.setUserId(zjkExpert.getUserId());
//对未积分冻结得用户进行积分新增录入
QueryWrapper<ZjkPointUser> wqw = new QueryWrapper<>();
wqw.lambda().eq(ZjkPointUser::getCheckStatus, 1).eq(ZjkPointUser::getExpertId, Long.valueOf(bo.getEvaluateUser()));
List<ZjkPointUser> zjkPointUsers = zjkPointUserMapper.selectList(wqw);
if(CollectionUtils.isEmpty(zjkPointUsers)){
PointInfoDto pointInfoEvent = new PointInfoDto();
pointInfoEvent.setEvaluateId(zjkEvaluate.getId());
pointInfoEvent.setRuleKey(UserConstants.POINT_EVALUATE_KEY);
pointInfoEvent.setExpertId(Long.valueOf(bo.getEvaluateUser()));
pointInfoEvent.setPoints(bo.getBusLevelScore().add(bo.getWorkAttitudeScore()).add(bo.getRightApprovalScore()));
wq = new QueryWrapper<>();
wq.lambda().eq(ZjkExpert::getExpertId, bo.getEvaluateUser());
zjkExpert = zjkExpertMapper.selectOne(wq);
if (zjkExpert != null) {
pointInfoEvent.setUserId(zjkExpert.getUserId());
}
eventPublisher.publishEvent(pointInfoEvent);
}
eventPublisher.publishEvent(pointInfoEvent);
} catch (Exception e) {
log.error("发布完成评价的积分事件异常");
e.printStackTrace();
......@@ -208,37 +233,39 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
//更新信用分
//去过机构管理员 项目管理员 评价为缺席就扣减
try {
if (zjkEvaluate.getIsPresent().equals("0") && zjkEvaluate.getSourceRole()==2) {
//发布完成评价的信用事件
CreditInfoDto creditInfoDto = new CreditInfoDto();
//获取信用规则
LambdaQueryWrapper<ZjkCreditRule> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ZjkCreditRule::getRuleKey, 3).last("Limit 1");
ZjkCreditRuleVo zjkCreditRuleVo = zjkCreditRuleMapper.selectVoOne(lambdaQueryWrapper);
creditInfoDto.setRuleKey(UserConstants.CREDIT_ABSENCE_KEY);
creditInfoDto.setExpertId(Long.valueOf(bo.getEvaluateUser()));
creditInfoDto.setCreditSum(zjkCreditRuleVo.getEachScore());
wq.lambda().eq(ZjkExpert::getExpertId, bo.getEvaluateUser());
if (zjkExpert != null) {
creditInfoDto.setUserId(zjkExpert.getUserId());
}
eventPublisher.publishEvent(creditInfoDto);
//如果机构管理员评价为参评就增加
} else {
//发布完成评价的信用事件
CreditInfoDto creditInfoDto = new CreditInfoDto();
//获取信用规则
LambdaQueryWrapper<ZjkCreditRule> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ZjkCreditRule::getRuleKey, 1).last("Limit 1");
ZjkCreditRuleVo zjkCreditRuleVo = zjkCreditRuleMapper.selectVoOne(lambdaQueryWrapper);
creditInfoDto.setRuleKey(UserConstants.CREDIT_REVIEW_KEY);
creditInfoDto.setExpertId(Long.valueOf(bo.getEvaluateUser()));
creditInfoDto.setCreditSum(zjkCreditRuleVo.getEachScore());
wq.lambda().eq(ZjkExpert::getExpertId, bo.getEvaluateUser());
if (zjkExpert != null) {
creditInfoDto.setUserId(zjkExpert.getUserId());
}
eventPublisher.publishEvent(creditInfoDto);
if(zjkEvaluate.getSourceRole() == 2){
if (zjkEvaluate.getIsPresent().equals("0")) {
//未出席,且是项目管理员进行的评价,信用分进行扣减
CreditInfoDto creditInfoDto = new CreditInfoDto();
//获取信用规则
LambdaQueryWrapper<ZjkCreditRule> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ZjkCreditRule::getRuleKey, 3).last("Limit 1");
ZjkCreditRuleVo zjkCreditRuleVo = zjkCreditRuleMapper.selectVoOne(lambdaQueryWrapper);
creditInfoDto.setRuleKey(UserConstants.CREDIT_ABSENCE_KEY);
creditInfoDto.setExpertId(Long.valueOf(bo.getEvaluateUser()));
creditInfoDto.setCreditSum(zjkCreditRuleVo.getEachScore());
wq.lambda().eq(ZjkExpert::getExpertId, bo.getEvaluateUser());
if (zjkExpert != null) {
creditInfoDto.setUserId(zjkExpert.getUserId());
}
eventPublisher.publishEvent(creditInfoDto);
}else{
//发布完成评价的信用事件
CreditInfoDto creditInfoDto = new CreditInfoDto();
//获取信用规则
LambdaQueryWrapper<ZjkCreditRule> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ZjkCreditRule::getRuleKey, 1).last("Limit 1");
ZjkCreditRuleVo zjkCreditRuleVo = zjkCreditRuleMapper.selectVoOne(lambdaQueryWrapper);
creditInfoDto.setRuleKey(UserConstants.CREDIT_REVIEW_KEY);
creditInfoDto.setExpertId(Long.valueOf(bo.getEvaluateUser()));
creditInfoDto.setCreditSum(zjkCreditRuleVo.getEachScore());
wq.lambda().eq(ZjkExpert::getExpertId, bo.getEvaluateUser());
if (zjkExpert != null) {
creditInfoDto.setUserId(zjkExpert.getUserId());
}
eventPublisher.publishEvent(creditInfoDto);
}
}
} catch (Exception e) {
log.error("发布完成评价的信用事件异常");
......@@ -272,6 +299,7 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
List<String> usersId = new ArrayList<>();
//限定我参与的项目
usersId.add(String.valueOf(userId));
//限定项目管理员权限
bo.setUserId(String.valueOf(userId));
IPage<ZjkEvaluateVO> result = baseMapper.getListToXm(pageQuery.build(), usersId, null, bo);
return TableDataInfo.build(result);
......@@ -330,14 +358,14 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
public Integer checkStatu(ZjkEvaluateVO vo) {
Integer status = baseMapper.checkIsPresentStatus(vo);
if(status!=null && 0==status){
//未出席
return status;
}else{
return 1;
}
Integer status = baseMapper.checkIsPresentStatus(vo);
if (status != null && 0 == status) {
//未出席
return status;
} else {
return 1;
}
}
private List<String> getYdataByMonth(Map<Integer, Long> data, List<String> monthsRange) {
......@@ -351,6 +379,8 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
return res;
}
}
......
......@@ -11,7 +11,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.DynamicTask;
......@@ -22,16 +21,15 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.resource.api.RemoteMessageService;
import org.dromara.system.api.RemoteConfigService;
import org.dromara.zjk.config.OnChainUtils;
import org.dromara.zjk.domain.*;
import org.dromara.zjk.domain.bo.ZjkExpertItemBo;
import org.dromara.zjk.domain.bo.ZjkItemExtreationBo;
import org.dromara.zjk.domain.bo.ZjkProjectExpertItemBo;
import org.dromara.zjk.domain.dto.OnchainDto;
import org.dromara.zjk.domain.dto.SmsSendDto;
import org.dromara.zjk.domain.dto.SmsUpEventDto;
import org.dromara.zjk.domain.vo.*;
import org.dromara.zjk.enums.*;
import org.dromara.zjk.event.OnchainEvent;
import org.dromara.zjk.mapper.*;
import org.dromara.zjk.service.IZjkExpertItemService;
import org.dromara.zjk.service.IZjkExpertService;
......@@ -45,6 +43,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
......@@ -62,7 +61,6 @@ import java.util.stream.Collectors;
* @date 2024-10-29
*/
@RequiredArgsConstructor
@Transactional
@Service
public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
private static final Logger log = LoggerFactory.getLogger(ZjkExpertItemServiceImpl.class);
......@@ -99,10 +97,12 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
@Resource
private DynamicTask dynamicTask;
private final ApplicationEventPublisher eventPublisher;
@Resource
private OnChainUtils onChainUtils;
@Autowired
private StringCryptoUtil stringCryptoUtil;
/**
* 查询专家抽取
*
......@@ -203,201 +203,270 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
* @param b 专家抽取
* @return 是否修改成功
*/
@Transactional(rollbackFor = Exception.class)
@Override
public Boolean updateByBo(ZjkExpertItemBo b) {
ZjkReviewPhase zjkReviewPhase1 = zjkReviewPhaseMapper.selectById(b.getReviewId());
//专家确认的截至时间
Date noticeTime = zjkReviewPhase1.getNoticeTime();
int compare = DateUtil.compare(noticeTime, new Date());
if(compare<0){
throw new ServiceException("当前时间已超过专家确认截止时间,请修改抽取规则");
}
Long reviewId = zjkReviewPhase1.getId();
if (zjkReviewPhase1.getParentId() != 0L) {
reviewId = zjkReviewPhase1.getParentId();
}
//根据规则获取所有项目id,阶段,已发送的
Long zjkItemExtreationId = zjkReviewPhaseMapper.selectListByItem(reviewId);
//修改之前的项目数据为失效
ZjkItemExtreation zjkItemExtreation = zjkItemExtreationMapper.selectById(zjkItemExtreationId);
ZjkProduct zjkProduct = zjkProductMapper.selectById(zjkItemExtreation.getItemId());
zjkItemExtreation.setIsSure(1L);
zjkItemExtreation.setExtractionStatus(ItemExpertTypeEnum.EXTRACTION_SUCCESS_TYPE.getCode());
//修改规则为有效
ZjkReviewPhase zjkReviewPhase = new ZjkReviewPhase();
zjkReviewPhase.setId(b.getReviewId());
zjkReviewPhase.setEffective(ReviewTypeEnum.REVIEW_LOSE_TYPE.getCode());
//完成按钮 把重抽原因清除
zjkReviewPhase.setCauseRepum(null);
// 拿到这次的抽取记录
List<ZjkExpertItem> zjkExpertItemList = baseMapper.selectList(new LambdaQueryWrapper<ZjkExpertItem>()
.eq(ZjkExpertItem::getReviewId, b.getReviewId()));
zjkItemExtreation.setExpertSum(zjkExpertItemList.size());
zjkItemExtreation.setReviewId(b.getReviewId());
zjkItemExtreationMapper.updateById(zjkItemExtreation);
// 根据这次的规则拿到上次的规则
ZjkReviewPhase beforZjkReviewPhase = zjkReviewPhaseMapper.selectOne(new LambdaQueryWrapper<ZjkReviewPhase>()
.eq(ZjkReviewPhase::getReviewSn,zjkReviewPhase1.getReviewSn())
.eq(ZjkReviewPhase::getItemId,zjkReviewPhase1.getItemId())
.orderByDesc(ZjkReviewPhase::getId) // 按 id 降序排序
.last("LIMIT 1") // 只取一条记录
long startTime = System.currentTimeMillis();
log.info("开始执行updateByBo方法,参数b.id={}", b.getReviewId());
try {
ZjkReviewPhase zjkReviewPhase1 = zjkReviewPhaseMapper.selectById(b.getReviewId());
log.info("查询ZjkReviewPhase耗时: {}ms", System.currentTimeMillis() - startTime);
//专家确认的截至时间
Date noticeTime = zjkReviewPhase1.getNoticeTime();
int compare = DateUtil.compare(noticeTime, new Date());
if (compare < 0) {
throw new ServiceException("当前时间已超过专家确认截止时间,请修改抽取规则");
}
Long reviewId = zjkReviewPhase1.getId();
if (zjkReviewPhase1.getParentId() != 0L) {
reviewId = zjkReviewPhase1.getParentId();
}
//根据规则获取所有项目id,阶段,已发送的
Long zjkItemExtreationId = zjkReviewPhaseMapper.selectListByItem(reviewId);
log.info("selectListByItem耗时: {}ms", System.currentTimeMillis() - startTime);
//修改之前的项目数据为失效
ZjkItemExtreation zjkItemExtreation = zjkItemExtreationMapper.selectById(zjkItemExtreationId);
log.info("selectById ZjkItemExtreation耗时: {}ms", System.currentTimeMillis() - startTime);
ZjkProduct zjkProduct = zjkProductMapper.selectById(zjkItemExtreation.getItemId());
log.info("selectById ZjkProduct耗时: {}ms", System.currentTimeMillis() - startTime);
zjkItemExtreation.setIsSure(1L);
zjkItemExtreation.setExtractionStatus(ItemExpertTypeEnum.EXTRACTION_SUCCESS_TYPE.getCode());
//修改规则为有效
ZjkReviewPhase zjkReviewPhase = new ZjkReviewPhase();
zjkReviewPhase.setId(b.getReviewId());
zjkReviewPhase.setEffective(ReviewTypeEnum.REVIEW_LOSE_TYPE.getCode());
//完成按钮 把重抽原因清除
zjkReviewPhase.setCauseRepum(null);
// 拿到这次的抽取记录
long queryStartTime = System.currentTimeMillis();
List<ZjkExpertItem> zjkExpertItemList = baseMapper.selectList(new LambdaQueryWrapper<ZjkExpertItem>()
.eq(ZjkExpertItem::getReviewId, b.getReviewId()));
log.info("查询ZjkExpertItemList耗时: {}ms, 结果数量: {}", System.currentTimeMillis() - queryStartTime, zjkExpertItemList.size());
zjkItemExtreation.setExpertSum(zjkExpertItemList.size());
zjkItemExtreation.setReviewId(b.getReviewId());
// 在执行update前添加日志,确认具体是哪条记录被锁定
log.info("准备更新zjkItemExtreation记录,ID: {}, 当前时间: {}", zjkItemExtreation.getId(), new Date());
zjkItemExtreationMapper.updateById(zjkItemExtreation);
log.info("zjkItemExtreation记录更新完成,ID: {}, 耗时: {}ms", zjkItemExtreation.getId(), System.currentTimeMillis() - startTime);
// 根据这次的规则拿到上次的规则
queryStartTime = System.currentTimeMillis();
ZjkReviewPhase beforZjkReviewPhase = zjkReviewPhaseMapper.selectOne(new LambdaQueryWrapper<ZjkReviewPhase>()
.eq(ZjkReviewPhase::getReviewSn, zjkReviewPhase1.getReviewSn())
.eq(ZjkReviewPhase::getItemId, zjkReviewPhase1.getItemId())
.orderByDesc(ZjkReviewPhase::getId) // 按 id 降序排序
.last("LIMIT 1") // 只取一条记录
);
// 提取所有 userId
List<Long> expertIds = zjkExpertItemList.stream()
.map(ZjkExpertItem::getExpertId)
.collect(Collectors.toList());
List<ZjkExpert> zjkExpertList = zjkExpertMapper.selectList(new LambdaQueryWrapper<ZjkExpert>().in(ZjkExpert::getExpertId,expertIds));
Map<Long, ZjkExpert> groupedByUserId = zjkExpertList.stream()
.collect(Collectors.toMap(
ZjkExpert::getUserId,
expert -> expert,
(existing, replacement) -> existing));
if (beforZjkReviewPhase != null) {
// 根据上次的规则拿到上次的抽取记录
List<ZjkExpertItem> beforeZjkExpertItemList = baseMapper.selectList(new LambdaQueryWrapper<ZjkExpertItem>()
.eq(ZjkExpertItem::getReviewId, beforZjkReviewPhase.getId()));
// 循环更新状态
Map<Long, ZjkExpertItem> beforeItemMap = beforeZjkExpertItemList.stream()
.collect(Collectors.toMap(ZjkExpertItem::getExpertId, item -> item));
// 遍历 zjkExpertItemList,更新匹配记录
for (ZjkExpertItem currentItem : zjkExpertItemList) {
ZjkExpertItem beforeItem = beforeItemMap.get(currentItem.getExpertId());
if (beforeItem != null && (beforeItem.getAcceptStatus().equals("1")|| beforeItem.getAcceptStatus().equals("0"))) {
currentItem.setAcceptStatus(beforeItem.getAcceptStatus());
currentItem.setConfirmCode(beforeItem.getConfirmCode());
currentItem.setRefuseCode(beforeItem.getRefuseCode());
} else {
// 新数据为待接受
currentItem.setAcceptStatus(String.valueOf(ExpertItemTypeEnum.EXPERTITEM_NOTAFFIRM_TYPE.getCode()));
//获取每个被抽取到的专家的userid;发送消息
log.info("查询beforZjkReviewPhase耗时: {}ms", System.currentTimeMillis() - queryStartTime);
// 提取所有 userId
queryStartTime = System.currentTimeMillis();
List<Long> expertIds = zjkExpertItemList.stream()
.map(ZjkExpertItem::getExpertId)
.collect(Collectors.toList());
List<ZjkExpert> zjkExpertList = zjkExpertMapper.selectList(new LambdaQueryWrapper<ZjkExpert>().in(ZjkExpert::getExpertId, expertIds));
log.info("查询ZjkExpertList耗时: {}ms, 结果数量: {}", System.currentTimeMillis() - queryStartTime, zjkExpertList.size());
Map<Long, ZjkExpert> groupedByUserId = zjkExpertList.stream()
.collect(Collectors.toMap(
ZjkExpert::getUserId,
expert -> expert,
(existing, replacement) -> existing));
if (beforZjkReviewPhase != null) {
log.info("处理历史数据逻辑开始");
// 根据上次的规则拿到上次的抽取记录
queryStartTime = System.currentTimeMillis();
List<ZjkExpertItem> beforeZjkExpertItemList = baseMapper.selectList(new LambdaQueryWrapper<ZjkExpertItem>()
.eq(ZjkExpertItem::getReviewId, beforZjkReviewPhase.getId()));
log.info("查询beforeZjkExpertItemList耗时: {}ms, 结果数量: {}", System.currentTimeMillis() - queryStartTime, beforeZjkExpertItemList.size());
// 循环更新状态
Map<Long, ZjkExpertItem> beforeItemMap = beforeZjkExpertItemList.stream()
.collect(Collectors.toMap(ZjkExpertItem::getExpertId, item -> item));
// 遍历 zjkExpertItemList,更新匹配记录
long processStartTime = System.currentTimeMillis();
for (ZjkExpertItem currentItem : zjkExpertItemList) {
ZjkExpertItem beforeItem = beforeItemMap.get(currentItem.getExpertId());
if (beforeItem != null && (beforeItem.getAcceptStatus().equals("1") || beforeItem.getAcceptStatus().equals("0"))) {
currentItem.setAcceptStatus(beforeItem.getAcceptStatus());
currentItem.setConfirmCode(beforeItem.getConfirmCode());
currentItem.setRefuseCode(beforeItem.getRefuseCode());
} else {
// 新数据为待接受
currentItem.setAcceptStatus(String.valueOf(ExpertItemTypeEnum.EXPERTITEM_NOTAFFIRM_TYPE.getCode()));
//获取每个被抽取到的专家的userid;发送消息
scheduledExecutorService.schedule(() -> {
long msgStartTime = System.currentTimeMillis();
try {
remoteMessageService.publishMessage(currentItem.getUserId(), "您有新的评审任务,请尽快确认");
log.debug("发送站内消息给用户{}耗时: {}ms", currentItem.getUserId(), System.currentTimeMillis() - msgStartTime);
} catch (Exception e) {
log.error("发送站内消息异常, 用户ID: {}, 耗时: {}ms", currentItem.getUserId(), System.currentTimeMillis() - msgStartTime, e);
}
}, 3, TimeUnit.SECONDS);
currentItem.setConfirmCode("是");
currentItem.setRefuseCode("否");
// 构建短信参数
SmsSendDto smsSendDto = buildSmsSendDto(currentItem, groupedByUserId, zjkReviewPhase1, zjkProduct);
try {
long smsStartTime = System.currentTimeMillis();
zjkSmsInfoService.sendSms(smsSendDto);
log.debug("发送短信给用户{}耗时: {}ms", currentItem.getUserId(), System.currentTimeMillis() - smsStartTime);
} catch (Exception smsException) {
log.error("短信发送异常,发送参数:{}, 耗时: {}ms", smsSendDto, System.currentTimeMillis() - processStartTime, smsException);
}
}
//2024/12/3 add操作 确认时改变zjkExpertItem 记录的接受状态为确认(1) 借用枚举内的1
currentItem.setExtractionStatus(ExtractionStautsEnum.CONFIRM.getCode());
currentItem.setIsSure(1);
baseMapper.updateById(currentItem);
}
log.info("处理历史数据逻辑完成,耗时: {}ms", System.currentTimeMillis() - processStartTime);
} else {
log.info("首次确认逻辑开始");
// 首次确认 进行随机码构建
long processStartTime = System.currentTimeMillis();
for (ZjkExpertItem currentItem : zjkExpertItemList) {
// 异步发送站内消息
scheduledExecutorService.schedule(() -> {
remoteMessageService.publishMessage(currentItem.getUserId(), "您有新的评审任务,请尽快确认");
long msgStartTime = System.currentTimeMillis();
try {
remoteMessageService.publishMessage(currentItem.getUserId(), "您有新的评审任务,请尽快确认");
log.debug("发送站内消息给用户{}耗时: {}ms", currentItem.getUserId(), System.currentTimeMillis() - msgStartTime);
} catch (Exception e) {
log.error("发送站内消息异常, 用户ID: {}, 耗时: {}ms", currentItem.getUserId(), System.currentTimeMillis() - msgStartTime, e);
}
}, 3, TimeUnit.SECONDS);
currentItem.setConfirmCode(NumberGenerator.generateRandomNumber(4)+"1");
currentItem.setRefuseCode(NumberGenerator.generateRandomNumber(4)+"0");
currentItem.setConfirmCode(NumberGenerator.generateRandomNumber(4) + "1");
currentItem.setRefuseCode(NumberGenerator.generateRandomNumber(4) + "0");
// 更新当前条目的状态
currentItem.setIsSure(1);
currentItem.setAcceptStatus(String.valueOf(ExpertItemTypeEnum.EXPERTITEM_NOTAFFIRM_TYPE.getCode()));
baseMapper.updateById(currentItem);
// 构建短信参数
SmsSendDto smsSendDto = buildSmsSendDto(currentItem, groupedByUserId, zjkReviewPhase1, zjkProduct);
try {
long smsStartTime = System.currentTimeMillis();
zjkSmsInfoService.sendSms(smsSendDto);
log.debug("发送短信给用户{}耗时: {}ms", currentItem.getUserId(), System.currentTimeMillis() - smsStartTime);
} catch (Exception smsException) {
log.error("短信发送异常,发送参数:{}",smsSendDto);
smsException.printStackTrace(); // 记录日志或做其他处理
log.error("短信发送异常,发送参数:{}, 耗时: {}ms", smsSendDto, System.currentTimeMillis() - processStartTime, smsException);
}
}
//2024/12/3 add操作 确认时改变zjkExpertItem 记录的接受状态为确认(1) 借用枚举内的1
currentItem.setExtractionStatus(ExtractionStautsEnum.CONFIRM.getCode());
currentItem.setIsSure(1);
baseMapper.updateById(currentItem);
log.info("首次确认逻辑完成,耗时: {}ms", System.currentTimeMillis() - processStartTime);
}
} else {
// 首次确认 进行随机码构建
for (ZjkExpertItem currentItem : zjkExpertItemList) {
// 异步发送站内消息
scheduledExecutorService.schedule(() ->
remoteMessageService.publishMessage(currentItem.getUserId(), "您有新的评审任务,请尽快确认"),
3, TimeUnit.SECONDS
);
currentItem.setConfirmCode(NumberGenerator.generateRandomNumber(4)+"1");
currentItem.setRefuseCode(NumberGenerator.generateRandomNumber(4)+"0");
// 更新当前条目的状态
currentItem.setIsSure(1);
currentItem.setAcceptStatus(String.valueOf(ExpertItemTypeEnum.EXPERTITEM_NOTAFFIRM_TYPE.getCode()));
baseMapper.updateById(currentItem);
// 构建短信参数
SmsSendDto smsSendDto = buildSmsSendDto(currentItem, groupedByUserId, zjkReviewPhase1, zjkProduct);
try {
zjkSmsInfoService.sendSms(smsSendDto);
} catch (Exception smsException) {
log.error("短信发送异常,发送参数:{}",smsSendDto);
smsException.printStackTrace(); // 记录日志或做其他处理
zjkReviewPhaseMapper.updateById(zjkReviewPhase);
//到达该时间后需要向项目管理员发送专家确认的情况
long between = DateUtil.between(noticeTime, new Date(), DateUnit.SECOND);
String key = "zjcq_" + zjkReviewPhase1.getId();
dynamicTask.startDelay(key, () -> sendConfirmSmsToXmManager(zjkReviewPhase1, zjkProduct), 1000 * between);
//专家抽取结果数据上区块链
log.info("规则id为{},抽取的专家上区块链开始", reviewId);
try {
List<ZjkExpertItemVo> data = this.getByReviewId(reviewId);
if (!CollectionUtils.isEmpty(data)) {
String jsonStr = JSONUtil.toJsonStr(data);
onChainUtils.toChainAsync(jsonStr, reviewId);
}
} catch (Exception e) {
e.printStackTrace();
log.error("规则id为{},抽取的专家上区块链异常", reviewId);
}
log.info("规则id为{},抽取的专家上区块链结束", reviewId);
log.info("updateByBo方法执行完成,总耗时: {}ms", System.currentTimeMillis() - startTime);
return true;
} catch (Exception e) {
log.error("updateByBo方法执行异常,总耗时: {}ms", System.currentTimeMillis() - startTime, e);
throw e;
}
zjkReviewPhaseMapper.updateById(zjkReviewPhase);
//到达该时间后需要向项目管理员发送专家确认的情况
long between = DateUtil.between(noticeTime, new Date(), DateUnit.SECOND);
String key= "zjcq_"+zjkReviewPhase1.getId();
dynamicTask.startDelay(key, () -> sendConfirmSmsToXmManager(zjkReviewPhase1, zjkProduct), 1000 * between);
//专家抽取结果数据上区块链
OnchainDto onchainDto = new OnchainDto();
onchainDto.setReviewId(reviewId);
eventPublisher.publishEvent(new OnchainEvent(this, onchainDto));
return true;
}
/**
* 抽取截至通知短信发送
*
* @param phase
* @param zjkProduct
*/
private void sendConfirmSmsToXmManager(ZjkReviewPhase phase, ZjkProduct zjkProduct){
List<ZjkExpertItem> zjs= baseMapper.getCheckZjAccetpt(phase.getId());
if (!CollectionUtil.isEmpty(zjs)) {
Integer size=zjs.size();
//获取项目管理员的用户id
Long createBy = zjs.get(0).getCreateBy();
String phone = baseMapper.checkUserPhoneExist(createBy);
if(!StringUtils.isEmpty(phone)){
int acceptedCount = (int) zjs.stream()
.filter(zjkExpertItem -> ZjkExpertItemAcceptStatus.accept.getValue().equals(zjkExpertItem.getAcceptStatus()))
.count();
int unacceptedCount = (int) zjs.stream()
.filter(zjkExpertItem -> ZjkExpertItemAcceptStatus.no_accept.getValue().equals(zjkExpertItem.getAcceptStatus()))
.count();
int rejectedCount = (int) zjs.stream()
.filter(zjkExpertItem -> ZjkExpertItemAcceptStatus.reject.getValue().equals(zjkExpertItem.getAcceptStatus()))
.count();
int canceledCount = (int) zjs.stream()
.filter(zjkExpertItem -> ZjkExpertItemAcceptStatus.cancel.getValue().equals(zjkExpertItem.getAcceptStatus()))
.count();
SmsSendDto smsSendDto = new SmsSendDto();
smsSendDto.setBatchType(1);
smsSendDto.setReceiveUserIds(Arrays.asList(createBy));
smsSendDto.setSendBy(createBy);
JSONObject jsonObject = new JSONObject();
String reviewSnDesc = ReviewSnEnum.getByCode(phase.getReviewSn()).getDesc();
jsonObject.put("productName", zjkProduct.getProductName());
jsonObject.put("reviewSn", reviewSnDesc != null ? reviewSnDesc : "");
jsonObject.put("num", size);
if(size==acceptedCount){
//全部接收
smsSendDto.setTemplateId(SmsTemplateEnum.SMS_NOTICE_ACCEPT.getCode());
}else{
//部分接收
smsSendDto.setTemplateId(SmsTemplateEnum.SMS_NOTICE_NO_ACCEPT.getCode());
jsonObject.put("noAcceptNum", unacceptedCount);
jsonObject.put("rejectNum", rejectedCount);
jsonObject.put("acceptNum", acceptedCount);
//部分接收修改抽取状态
// 更新抽取人数
ZjkItemExtreation zjkItemExtreation =zjkItemExtreationMapper.selectOne(new LambdaQueryWrapper<ZjkItemExtreation>()
.eq(ZjkItemExtreation::getId,phase.getItemExtreationId()));
if (zjkItemExtreation != null){
zjkItemExtreation.setExtractedSum(zjkItemExtreation.getExtractedSum()-unacceptedCount-rejectedCount);
zjkItemExtreation.setExtractionStatus(1);
zjkItemExtreationMapper.updateById(zjkItemExtreation);
private void sendConfirmSmsToXmManager(ZjkReviewPhase phase, ZjkProduct zjkProduct) {
List<ZjkExpertItem> zjs = baseMapper.getCheckZjAccetpt(phase.getId());
if (!CollectionUtil.isEmpty(zjs)) {
Integer size = zjs.size();
//获取项目管理员的用户id
Long createBy = zjs.get(0).getCreateBy();
String phone = baseMapper.checkUserPhoneExist(createBy);
if (!StringUtils.isEmpty(phone)) {
int acceptedCount = (int) zjs.stream()
.filter(zjkExpertItem -> ZjkExpertItemAcceptStatus.accept.getValue().equals(zjkExpertItem.getAcceptStatus()))
.count();
int unacceptedCount = (int) zjs.stream()
.filter(zjkExpertItem -> ZjkExpertItemAcceptStatus.no_accept.getValue().equals(zjkExpertItem.getAcceptStatus()))
.count();
int rejectedCount = (int) zjs.stream()
.filter(zjkExpertItem -> ZjkExpertItemAcceptStatus.reject.getValue().equals(zjkExpertItem.getAcceptStatus()))
.count();
int canceledCount = (int) zjs.stream()
.filter(zjkExpertItem -> ZjkExpertItemAcceptStatus.cancel.getValue().equals(zjkExpertItem.getAcceptStatus()))
.count();
SmsSendDto smsSendDto = new SmsSendDto();
smsSendDto.setBatchType(1);
smsSendDto.setReceiveUserIds(Arrays.asList(createBy));
smsSendDto.setSendBy(createBy);
JSONObject jsonObject = new JSONObject();
String reviewSnDesc = ReviewSnEnum.getByCode(phase.getReviewSn()).getDesc();
jsonObject.put("productName", zjkProduct.getProductName());
jsonObject.put("reviewSn", reviewSnDesc != null ? reviewSnDesc : "");
jsonObject.put("num", size);
if (size == acceptedCount) {
//全部接收
smsSendDto.setTemplateId(SmsTemplateEnum.SMS_NOTICE_ACCEPT.getCode());
} else {
//部分接收
smsSendDto.setTemplateId(SmsTemplateEnum.SMS_NOTICE_NO_ACCEPT.getCode());
jsonObject.put("noAcceptNum", unacceptedCount);
jsonObject.put("rejectNum", rejectedCount);
jsonObject.put("acceptNum", acceptedCount);
//部分接收修改抽取状态
// 更新抽取人数
ZjkItemExtreation zjkItemExtreation = zjkItemExtreationMapper.selectOne(new LambdaQueryWrapper<ZjkItemExtreation>()
.eq(ZjkItemExtreation::getId, phase.getItemExtreationId()));
if (zjkItemExtreation != null) {
zjkItemExtreation.setExtractedSum((zjkItemExtreation.getExtractedSum() - unacceptedCount - rejectedCount) < 0 ? 0 : zjkItemExtreation.getExtractedSum() - unacceptedCount - rejectedCount);
zjkItemExtreation.setExtractionStatus(1);
zjkItemExtreationMapper.updateById(zjkItemExtreation);
}
}
smsSendDto.setParamJson(jsonObject);
try {
zjkSmsInfoService.sendSms(smsSendDto);
} catch (Exception smsException) {
log.error("抽取截至通知短信发送异常,发送参数:{}", smsSendDto);
smsException.printStackTrace(); // 记录日志或做其他处理
}
}
smsSendDto.setParamJson(jsonObject);
try {
zjkSmsInfoService.sendSms(smsSendDto);
} catch (Exception smsException) {
log.error("抽取截至通知短信发送异常,发送参数:{}",smsSendDto);
smsException.printStackTrace(); // 记录日志或做其他处理
}
}
}
}
}
......@@ -423,9 +492,11 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
String reviewSnDesc = ReviewSnEnum.getByCode(zjkReviewPhase1.getReviewSn()).getDesc();
jsonObject.put("reviewSn", reviewSnDesc != null ? reviewSnDesc : "");
jsonObject.put("reviewPlace", zjkReviewPhase1.getReviewPlace());
jsonObject.put("confirmCode",currentItem.getConfirmCode());
jsonObject.put("confirmCode", currentItem.getConfirmCode());
jsonObject.put("noticeTime", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, zjkReviewPhase1.getNoticeTime()));
jsonObject.put("refuseCode",currentItem.getRefuseCode());
jsonObject.put("refuseCode", currentItem.getRefuseCode());
jsonObject.put("productPer", zjkProduct.getUnitBy());
jsonObject.put("productTel", stringCryptoUtil.decryptField(zjkProduct.getUnitConcat()));
smsSendDto.setParamJson(jsonObject);
return smsSendDto;
}
......@@ -572,6 +643,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
zjkProjectExpertItemBo.setReviewPlace(zjkReviewPhaseVo.getReviewPlace());
zjkProjectExpertItemBo.setReviewTime(zjkReviewPhaseVo.getReviewTime());
zjkProjectExpertItemBo.setItemid(zjkReviewPhaseVo.getItemId());
zjkProjectExpertItemBo.setNoticeTime(zjkReviewPhaseVo.getNoticeTime());
// 每个领域需要抽多少人
if (zjkReviewPhaseVo.getArea() != null && zjkReviewPhaseVo.getArea() != "") {
String[] pairs = zjkReviewPhaseVo.getArea().split(",");
......@@ -852,7 +924,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
case "random":
zjkProjectExpertItemBo.setZjkReviewPhase(zjkReviewPhase);
// 随机抽取获取满足条件的专家 id
List<Long> randomed = random(zjkProjectExpertItemBo, remoZjkExpertItems,new ArrayList<>());
List<Long> randomed = random(zjkProjectExpertItemBo, remoZjkExpertItems, new ArrayList<>());
if (CollectionUtil.isEmpty(randomed)) {
//抽取失败
throw new ServiceException("抽取失败");
......@@ -991,7 +1063,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
}
zjkProjectExpertItemBo.setExpertIds(nameList);
List<Long> specifiedExpertList = zjkProjectExpertItemBo.getExpertsId();
List<Long> random = random(zjkProjectExpertItemBo, remoZjkExpertItems,specifiedExpertList);
List<Long> random = random(zjkProjectExpertItemBo, remoZjkExpertItems, specifiedExpertList);
if (random == null) {
//抽取失败
throw new ServiceException("抽取失败");
......@@ -1158,12 +1230,12 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
public List<ZjkExpertVo> concatenated(String name) {
//获取字典中的所有领域名称
LambdaQueryWrapper<ZjkExpert> lambdaQueryWrapper = new LambdaQueryWrapper();
if (name != null) {
lambdaQueryWrapper.like(ZjkExpert::getExpertName, name);
}
lambdaQueryWrapper.eq(ZjkExpert::getStatus, 2);
List<ZjkExpertVo> zjkExpertVos = zjkExpertMapper.selectVoList(lambdaQueryWrapper);
// LambdaQueryWrapper<ZjkExpert> lambdaQueryWrapper = new LambdaQueryWrapper();
// if (name != null) {
// lambdaQueryWrapper.like(ZjkExpert::getExpertName, name);
// }
// lambdaQueryWrapper.eq(ZjkExpert::getStatus, 2);
List<ZjkExpertVo> zjkExpertVos = zjkExpertMapper.getConcatenatedExpert(name);
return zjkExpertVos;
}
......@@ -1203,7 +1275,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
Integer extractedSum = zjkItemExtreation.getExpertSum();
Integer extractionCount = zjkReviewPhase1.getPlannedIntake();
Integer i = extractedSum - extractionCount;
zjkItemExtreation.setExtractedSum(i);
zjkItemExtreation.setExtractedSum(i < 0 ? 0 : i);
zjkItemExtreationMapper.updateById(zjkItemExtreation);
} else {
//修改记录表状态
......@@ -1211,7 +1283,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
Integer extractedSum = zjkItemExtreation.getExpertSum();
Integer extractionCount = zjkReviewPhase1.getPlannedIntake();
Integer i = extractedSum - extractionCount;
zjkItemExtreation.setExtractedSum(i);
zjkItemExtreation.setExtractedSum(i < 0 ? 0 : i);
zjkItemExtreationMapper.updateById(zjkItemExtreation);
}
// 获取规则下的专家信息
......@@ -1305,7 +1377,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
}
//随机抽取
public List<Long> random(ZjkProjectExpertItemBo zjkProjectExpertItemBo, Set<ZjkExpertItem> remoZjkExpertItems,List<Long> specifiedExpertList) {
public List<Long> random(ZjkProjectExpertItemBo zjkProjectExpertItemBo, Set<ZjkExpertItem> remoZjkExpertItems, List<Long> specifiedExpertList) {
int count = 0;
// 补抽人数逻辑
if (zjkProjectExpertItemBo.getRedraw() && zjkProjectExpertItemBo.getSupplementNum() != null) {
......@@ -1319,7 +1391,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
zjkProjectExpertItemBo.setCount((int) (zjkProjectExpertItemBo.getSupplementNum() - expertsCout));
}
// 随机抽取专家的逻辑
List<ZjkExpertVo> zjkExpertVos = zjkExpertService.queryByExpertltemList(zjkProjectExpertItemBo, zjkProjectExpertItemBo.getExtractioRestrictio(), zjkProjectExpertItemBo,remoZjkExpertItems,specifiedExpertList);
List<ZjkExpertVo> zjkExpertVos = zjkExpertService.queryByExpertltemList(zjkProjectExpertItemBo, zjkProjectExpertItemBo.getExtractioRestrictio(), zjkProjectExpertItemBo, remoZjkExpertItems, specifiedExpertList);
log.info("排除条件后 查询专家结果集{}", zjkExpertVos);
if (CollectionUtil.isEmpty(zjkExpertVos)) {
log.info("不存在符合抽取条件的专家");
......@@ -1670,6 +1742,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
}
}
}
private Long lastUnfulfilledArea = null; // 保存最后一个不满足条件的领域
private boolean assignExperts(
......@@ -1718,7 +1791,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
return backtrackCombination(
availableExperts, combination, 0, requiredCount, expert -> {
assignedExperts.add(expert);
if(concurrence){
if (concurrence) {
assignedUnits.add(expert.getWorkUnit());
}
......@@ -1726,7 +1799,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
},
expert -> {
assignedExperts.remove(expert);
if(concurrence){
if (concurrence) {
assignedUnits.remove(expert.getWorkUnit());
}
result.get(currentArea).remove(expert);
......@@ -1789,7 +1862,6 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
}
private static void generateCombinations(List<ZjkExpertVo> experts, Long n, int start, List<ZjkExpertVo> current, List<List<ZjkExpertVo>> result) {
if (current.size() == n) {
result.add(new ArrayList<>(current));
......@@ -1806,7 +1878,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
private static Map<Long, List<ZjkExpertVo>> getAreaToExpertsMap(List<ZjkExpertVo> experts) {
Map<Long, List<ZjkExpertVo>> areaToExpertsMap = new HashMap<>();
for (ZjkExpertVo expert : experts) {
if(StringUtils.isNotBlank(expert.getPerformWorkId())){
if (StringUtils.isNotBlank(expert.getPerformWorkId())) {
for (String area : expert.getAreaList()) {
areaToExpertsMap.computeIfAbsent(Long.parseLong(area), k -> new ArrayList<>()).add(expert);
}
......@@ -1824,10 +1896,10 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
Map<Long, List<ZjkExpertVo>> areaToExperts = getAreaToExpertsMap(allExperts);
log.info("全部专家集合=====================================================");
for (Long area1 : areaToExperts.keySet()) {
log.info("领域: {}" , area1);
log.info("领域: {}", area1);
List<ZjkExpertVo> zjkExpertVos = areaToExperts.get(area1);
for (ZjkExpertVo expert : zjkExpertVos) {
log.info("专家姓名:{}——专家单位:{}",expert.getExpertName() , expert.getWorkUnit());
log.info("专家姓名:{}——专家单位:{}", expert.getExpertName(), expert.getWorkUnit());
}
}
log.info("全部专家集合结束=====================================================");
......@@ -1844,13 +1916,13 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
boolean success = assignExperts(areaList, areaToExperts, new HashSet<>(), assignedUnits, result, 0, concurrence);
if (success) {
log.info("领域: {}","领域分配成功");
log.info("领域: {}", "领域分配成功");
Set<Long> areaMap = result.keySet();
for (Long area : areaMap) {
log.info("领域: {}",area);
log.info("领域: {}", area);
List<ZjkExpertVo> zjkExpertVos = result.get(area);
for (ZjkExpertVo expert : zjkExpertVos) {
log.info("专家姓名:{},专家单位{}",expert.getExpertName(),expert.getWorkUnit());
log.info("专家姓名:{},专家单位{}", expert.getExpertName(), expert.getWorkUnit());
}
}
} else {
......@@ -1863,7 +1935,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
Collections.shuffle(allExperts, new Random());
allExperts.removeAll(expertList);
log.info("剩余专家列表{}", allExperts);
if(concurrence){
if (concurrence) {
allExperts = allExperts.stream().filter(s -> !assignedUnits.contains(s.getWorkUnit())).toList();
}
Integer planCount = bo.getCount();
......@@ -1905,7 +1977,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
// 假设 encryptClient.encrypt() 是可重复加密,返回固定密文
String encryptField = stringCryptoUtil.encryptField(smsUpEventDto.getMobile());
ZjkExpert zjkExpert = baseMapper.selectExpertByCodeAndPhone(smsUpEventDto.getContent(),encryptField);
ZjkExpert zjkExpert = baseMapper.selectExpertByCodeAndPhone(smsUpEventDto.getContent(), encryptField);
/* ZjkExpert zjkExpert = zjkExpertMapper.selectOne(new LambdaQueryWrapper<ZjkExpert>()
.eq(ZjkExpert::getExpertId, item.getExpertId())
.eq(ZjkExpert::getDeleteFlag, UserConstants.DEL_FLAG_NORMAL));*/
......@@ -1913,21 +1985,21 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
throw new IllegalArgumentException("未找到对应的专家信息");
}
String lastContent = smsUpEventDto.getContent().substring(smsUpEventDto.getContent().length() - 1);
int smsIsSuer;
try {
smsIsSuer = Integer.parseInt(lastContent);
} catch (NumberFormatException e) {
throw new IllegalArgumentException("短信内容最后一位不是有效数字: " + lastContent, e);
}
String checkChar = smsUpEventDto.getContent().substring(smsUpEventDto.getContent().length() - 1);
// int smsIsSuer;
// try {
// smsIsSuer = Integer.parseInt(lastContent);
// } catch (NumberFormatException e) {
// throw new IllegalArgumentException("短信内容最后一位不是有效数字: " + lastContent, e);
// }
// 构建专家记录
ZjkExpertItemBo zjkExpertItemBo = new ZjkExpertItemBo();
zjkExpertItemBo.setExpertId(zjkExpert.getExpertId());
zjkExpertItemBo.setUserId(zjkExpert.getUserId());
zjkExpertItemBo.setSmsIsSuer(smsIsSuer);
zjkExpertItemBo.setSmsIsSuer("是".equals(checkChar) ? 1 : 0);
if (smsIsSuer == 1) {
if ("是".equals(checkChar)) {
zjkExpertItemBo.setConfirmCode(smsUpEventDto.getContent());
} else {
zjkExpertItemBo.setRefuseCode(smsUpEventDto.getContent());
......@@ -1939,9 +2011,9 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
}
// 更新接收状态
zjkExpertItem.setAcceptStatus(smsIsSuer == 1 ? "1" : "2");
zjkExpertItem.setAcceptStatus("是".equals(checkChar) ? "1" : "2");
if (smsIsSuer != 1) {
if (!"是".equals(checkChar)) {
// 获取抽取规则并更新抽取人数
updateExtractionStatus(zjkExpertItem);
}
......@@ -1953,11 +2025,11 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
public void cancelExpert() {
String cancelExpert = remoteConfigService.selectConfigByKey("cancel_expert");
if(StringUtils.isBlank(cancelExpert)){
if (StringUtils.isBlank(cancelExpert)) {
return;
}
List<ZjkExpertItemVo> zjkExpertItemVos = baseMapper.selectCancle(cancelExpert);
if(CollectionUtil.isEmpty(zjkExpertItemVos)){
if (CollectionUtil.isEmpty(zjkExpertItemVos)) {
return;
}
......@@ -1966,15 +2038,15 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
List<ZjkExpertItem> zjkExpertItems = BeanUtil.copyToList(zjkExpertItemVos, ZjkExpertItem.class);
zjkExpertItems.forEach(s->s.setAcceptStatus("2"));
zjkExpertItems.forEach(s -> s.setAcceptStatus("2"));
baseMapper.updateBatchById(zjkExpertItems);
List<ZjkItemExtreation> zjkItemExtreations = zjkItemExtreationMapper.selectBatchIds(listMap.keySet());
zjkItemExtreations.forEach(s->{
if(listMap.get(s.getId())!=null){
zjkItemExtreations.forEach(s -> {
if (listMap.get(s.getId()) != null) {
List<ZjkExpertItemVo> cancleExpertList = listMap.get(s.getId());
s.setExtractedSum(s.getExtractedSum()-cancleExpertList.size());
s.setExtractedSum((s.getExtractedSum() - cancleExpertList.size()) < 0 ? 0 : s.getExtractedSum() - cancleExpertList.size());
}
});
zjkItemExtreationMapper.updateBatchById(zjkItemExtreations);
......@@ -1989,7 +2061,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
ZjkItemExtreation zjkItemExtreation = zjkItemExtreationMapper.selectOne(new LambdaQueryWrapper<ZjkItemExtreation>()
.eq(ZjkItemExtreation::getId, zjkReviewPhase.getItemExtreationId()));
if (zjkItemExtreation != null) {
zjkItemExtreation.setExtractedSum(zjkItemExtreation.getExtractedSum() - 1);
zjkItemExtreation.setExtractedSum((zjkItemExtreation.getExtractedSum() - 1) < 0 ? 0 : (zjkItemExtreation.getExtractedSum() - 1));
zjkItemExtreation.setExtractionStatus(1);
zjkItemExtreationMapper.updateById(zjkItemExtreation);
}
......
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.service.DictService;
import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
......@@ -31,6 +32,7 @@ import java.util.Map;
public class ZjkExpertLogServiceImpl implements IZjkExpertLogService {
private final ZjkExpertLogMapper baseMapper;
private final DictService dictService;
/**
* 查询入库记录
......@@ -66,7 +68,11 @@ public class ZjkExpertLogServiceImpl implements IZjkExpertLogService {
@Override
public List<ZjkExpertLogVo> queryList(ZjkExpertLogBo bo) {
LambdaQueryWrapper<ZjkExpertLog> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
List<ZjkExpertLogVo> zjkExpertLogVos = baseMapper.selectVoList(lqw);
zjkExpertLogVos.stream().forEach(item->{
item.setEntryResultStr(item.getEntryResult()==1?"通过":"入库失败");
});
return zjkExpertLogVos;
}
private LambdaQueryWrapper<ZjkExpertLog> buildQueryWrapper(ZjkExpertLogBo bo) {
......
......@@ -32,6 +32,11 @@ public class ZjkExpertMajorServiceImpl implements IZjkExpertMajorService {
private final ZjkExpertMajorMapper baseMapper;
@Override
public void saveBatch(List<ZjkExpertMajor> zjkExpertMajorList) {
baseMapper.insertBatch(zjkExpertMajorList);
}
/**
* 查询专家库 专业关系表
*
......
......@@ -24,8 +24,11 @@ import org.dromara.zjk.mapper.ZjkExpertMapper;
import org.dromara.zjk.mapper.ZjkExpertMoneyConfigMapper;
import org.dromara.zjk.mapper.ZjkExpertMoneyInfoMapper;
import org.dromara.zjk.mapper.ZjkProductMapper;
import org.dromara.zjk.service.IZjkReviewPhaseService;
import org.dromara.zjk.service.ZjkExpertMoneyInfoService;
import org.dromara.zjk.utils.NumberGenerator;
import org.dromara.zjk.zwy.utils.StringCryptoUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -51,16 +54,23 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf
@Resource
private ZjkExpertMoneyConfigMapper zjkExpertMoneyConfigMapper;
@Resource
private IZjkReviewPhaseService zjkReviewPhaseService;
@Autowired
private StringCryptoUtil stringCryptoUtil;
@Override
public ZjkExpertMoneyInfo queryById(Long moneyId) {
return baseMapper.selectById(moneyId);
return baseMapper.selectByIdEx(moneyId);
}
@Override
public TableDataInfo<ZjkExpertMoneyInfoVO> queryPageList(ZjkExpertMoneyInfoBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ZjkExpertMoneyInfo> wrapper = buildQueryWrapper(bo);
Page<ZjkExpertMoneyInfoVO> result = baseMapper.selectMoneyInfoList(pageQuery.build(), bo);
public TableDataInfo<ZjkExpertMoneyInfo> queryPageList(ZjkExpertMoneyInfoBo bo, PageQuery pageQuery) {
String phone = stringCryptoUtil.encryptField(bo.getExpertContact());
String idcard = stringCryptoUtil.encryptField(bo.getExpertIdcard());
bo.setExpertContact(phone);
bo.setExpertIdcard(idcard);
Page<ZjkExpertMoneyInfo> result = baseMapper.selectMoneyInfoList(pageQuery.build(), bo);
return TableDataInfo.build(result);
}
......@@ -182,7 +192,7 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf
.eq(ZjkExpertMoneyInfo::getProductId, bo.getProductId())
.eq(ZjkExpertMoneyInfo::getProductType, bo.getProductType());
List<ZjkExpertMoneyInfo> zjkExpertMoneyInfos = baseMapper.selectList(wp);
if(!CollectionUtil.isEmpty(zjkExpertMoneyInfos)){
if (!CollectionUtil.isEmpty(zjkExpertMoneyInfos)) {
throw new ServiceException("该项目阶段下已经有专家录入了结算单不可重复录入!");
}
......@@ -190,8 +200,8 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf
add.setPaySn(NumberGenerator.generateUniqueNumber("fee", 8));
assert add != null;
if(add.getStatus().equals(MoneySettlementStatusEnum.NO_SETTLEMENT.getCode())){
add.setSettlementSn(NumberGenerator.generateUniqueNumber("stn",8));
if (add.getStatus().equals(MoneySettlementStatusEnum.NO_SETTLEMENT.getCode())) {
add.setSettlementSn(NumberGenerator.generateUniqueNumber("stn", 8));
add.setSettlementDate(new Date());
}
String expertType = bo.getExpertType();
......@@ -223,7 +233,7 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf
throw new ServiceException("无效项目id");
}
add.setProductName(zjkProduct.getProductName());
add.setReviewCount(String.valueOf(zjkReviewPhaseService.getReviewProductCountByExpertId(zjkExpert.getExpertId())));
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setMoneyId(add.getMoneyId());
......@@ -243,8 +253,8 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf
ZjkExpertMoneyInfo update = MapstructUtils.convert(bo, ZjkExpertMoneyInfo.class);
assert update != null;
if(update.getStatus().equals(MoneySettlementStatusEnum.NO_SETTLEMENT.getCode())){
update.setSettlementSn(NumberGenerator.generateUniqueNumber("stn",8));
if (update.getStatus().equals(MoneySettlementStatusEnum.NO_SETTLEMENT.getCode())) {
update.setSettlementSn(NumberGenerator.generateUniqueNumber("stn", 8));
update.setSettlementDate(new Date());
}
String expertType = bo.getExpertType();
......@@ -304,18 +314,22 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf
@Override
public List<ZjkExpertMoneyInfo> getJsList(Long productId, Integer reviewSn, String expertId) {
QueryWrapper<ZjkExpertMoneyInfo> wq = new QueryWrapper<>();
wq.lambda().eq(ZjkExpertMoneyInfo::getProductId, productId).eq(ZjkExpertMoneyInfo::getProductType, reviewSn)
.eq(ZjkExpertMoneyInfo::getStatus, MoneySettlementStatusEnum.NO_SETTLEMENT.getCode()).eq(ZjkExpertMoneyInfo::getExpertId, expertId);
List<ZjkExpertMoneyInfo> res = baseMapper.selectList(wq);
List<ZjkExpertMoneyInfo> res = baseMapper.selectJsList(productId, reviewSn, expertId);
return res;
}
@Override
public List<ZjkExpertVo> getExpertList(Long productId, Integer reviewSn) {
List<ZjkExpertVo> res = baseMapper.getExpertList(productId, reviewSn);
List<ZjkExpertVo> res = baseMapper.getExpertList(productId, reviewSn);
return res;
}
@Override
public List<ZjkExpertVo> getExpertListForSettle(Long productId, Integer reviewSn) {
//已有的结算,不再进行新增
List<ZjkExpertVo> list = baseMapper.getExpertListForSettle(productId, reviewSn);
return list;
}
}
......
package org.dromara.zjk.service.impl;
import cn.dev33.satoken.secure.BCrypt;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.http.HttpUtil;
......@@ -12,16 +13,21 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.domain.DateRange;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.exception.user.UserException;
import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.excel.core.DropDownOptions;
import org.dromara.common.excel.core.ExcelResult;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
......@@ -40,6 +46,7 @@ import org.dromara.workflow.api.domain.event.ProcessEvent;
import org.dromara.workflow.api.domain.event.ProcessTaskEvent;
import org.dromara.zjk.annualInspection.annualInspectionAudit.domain.ZjkAnnualInspection;
import org.dromara.zjk.annualInspection.annualInspectionAudit.mapper.ZjkAnnualInspectionMapper;
import org.dromara.zjk.config.SyncRemortUserConfig;
import org.dromara.zjk.domain.*;
import org.dromara.zjk.domain.bo.ZjkCreditUserBo;
import org.dromara.zjk.domain.bo.ZjkExpertBo;
......@@ -47,11 +54,8 @@ import org.dromara.zjk.domain.bo.ZjkProjectExpertItemBo;
import org.dromara.zjk.domain.dto.ProfessorsDto;
import org.dromara.zjk.domain.vo.*;
import org.dromara.zjk.enums.*;
import org.dromara.zjk.expert.expertAwards.domain.ZjkExpertAwards;
import org.dromara.zjk.expert.expertAwards.service.IZjkExpertAwardsService;
import org.dromara.zjk.expert.expertPaper.domain.ZjkExpertPaper;
import org.dromara.zjk.expert.expertPaper.service.IZjkExpertPaperService;
import org.dromara.zjk.expert.expertPatent.domain.ZjkExpertPatent;
import org.dromara.zjk.expert.expertPatent.service.IZjkExpertPatentService;
import org.dromara.zjk.mapper.*;
import org.dromara.zjk.service.*;
......@@ -70,13 +74,13 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.*;
import java.util.function.Consumer;
import java.util.function.Supplier;
import java.util.stream.Collectors;
......@@ -132,26 +136,28 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
private final ZjkExpertItemMapper zjkExpertItemMapper;
private final ZjkCreditMapper zjkCreditMapper;
private final ZjkExpertMoneyConfigMapper zjkExpertMoneyConfigMapper;
// 用户服务 远程调用
@DubboReference(timeout=5000)
@DubboReference(timeout = 5000)
private RemoteUserService remoteUserService;
@DubboReference(timeout=5000)
@DubboReference(timeout = 5000)
private RemoteDeptService remoteDeptService;
@DubboReference(timeout=5000)
@DubboReference(timeout = 5000)
private RemoteConfigService remoteConfigService;
@DubboReference(timeout=5000)
@DubboReference(timeout = 5000)
private RemoteFileService remoteFileService;
@DubboReference(timeout=20000)
@DubboReference(timeout = 20000)
private RemoteWorkflowService remoteWorkflowService;
@DubboReference(stub = "true")
private final RemoteMessageService remoteMessageService;
private final ZjkReviewPhaseMapper zjkReviewPhaseMapper;
private final ZjkProductMapper zjkProductMapper;
......@@ -162,8 +168,8 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
@Autowired
private StringCryptoUtil stringCryptoUtil;
// @Value("${api.type.sxzwfw.online-third-professorList}")
private String professorList;
@Resource
private SyncRemortUserConfig syncRemortUserConfig;
/**
......@@ -187,7 +193,20 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
ZjkExpertHistory zjkExpertHistory = zjkExpertHistoryMapper.selectOne(new LambdaQueryWrapper<ZjkExpertHistory>()
.eq(ZjkExpertHistory::getExpectId, zjkExpertVo.getExpertId()).eq(ZjkExpertHistory::getDeleteFlag, UserConstants.DEL_FLAG_NORMAL));
if (zjkExpertHistory != null && zjkExpertVo.getApprovalType() == ApprovalTypeEnum.CHANGESTO_INFORMATION.getCode()) {
zjkExpertVo.setModifiedFields(zjkExpertHistory.getModifiedFields());
JSONObject jsonObject = JSONObject.parseObject(zjkExpertHistory.getModifiedFields());
JSONObject afterOper = (JSONObject) jsonObject.get("afterOper");
List<String> list = Arrays.asList("身份证", "邮箱", "联系方式");
for (String key : list) {
if (afterOper.containsKey(key)) {
String encryptedValue = afterOper.getString(key);
if (StringUtils.isNotBlank(encryptedValue)) {
String decryptedValue = stringCryptoUtil.decryptField(encryptedValue);
afterOper.put(key, decryptedValue);
}
}
}
jsonObject.put("afterOper", afterOper);
zjkExpertVo.setModifiedFields(jsonObject.toJSONString());
}
return zjkExpertVo;
}
......@@ -207,6 +226,10 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
} else {
lqw.eq(ZjkExpert::getStatus, bo.getStatus());
}
if (StringUtils.isNotBlank(bo.getContact())) {
String phone = stringCryptoUtil.encryptField(bo.getContact());
bo.setContact(phone);
}
lqw.orderBy(true, true, ZjkExpert::getStatus);
lqw.orderBy(true, false, ZjkExpert::getUpdateTime);
Page<ZjkExpertVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
......@@ -219,12 +242,21 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
*/
@Override
public TableDataInfo<ZjkExpertVo> expertList(ZjkExpertBo bo, PageQuery pageQuery) {
if (StringUtils.isNotBlank(bo.getContact())) {
String phone = stringCryptoUtil.encryptField(bo.getContact());
bo.setContact(phone);
}
Page<ZjkExpertVo> result = baseMapper.expertList(pageQuery.build(), bo);
return TableDataInfo.build(result);
}
@Override
public TableDataInfo<ZjkExpertVo> expertInquiry(ZjkExpertBo bo, PageQuery pageQuery) {
// 2025-08-11 搜索时敏感字段需先加密
String encryptContact = stringCryptoUtil.encryptField(bo.getContact());
bo.setContact(encryptContact);
Page<ZjkExpertVo> result = baseMapper.expertInquiry(pageQuery.build(), bo);
return TableDataInfo.build(result);
}
......@@ -250,12 +282,16 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
*/
@Override
public List<ZjkExpertVo> exportList(ZjkExpertBo bo) {
// 2025-08-11 搜索时敏感字段需先加密
String encryptContact = stringCryptoUtil.encryptField(bo.getContact());
bo.setContact(encryptContact);
LambdaQueryWrapper<ZjkExpert> lqw = buildQueryWrapper(bo);
if (StringUtils.isNotBlank(bo.getExpertIds())) {
List<String> expertIds= List.of(bo.getExpertIds().split(","));
if (CollectionUtils.isNotEmpty(expertIds)) {
lqw.in(ZjkExpert::getExpertId, expertIds);
}
List<String> expertIds = List.of(bo.getExpertIds().split(","));
if (CollectionUtils.isNotEmpty(expertIds)) {
lqw.in(ZjkExpert::getExpertId, expertIds);
}
}
lqw.eq(ZjkExpert::getStatus, ZjkExpertTypeEnum.NORMAL.getCode());
lqw.orderBy(true, true, ZjkExpert::getStatus);
......@@ -283,7 +319,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(ZjkExpertBo bo) {
try{
try {
// 状态不为空且是暂存的时候
if (bo.getStatus() != null && bo.getStatus() == ZjkExpertTypeEnum.STAGING.getCode()) {
bo.setStatus(ZjkExpertTypeEnum.STAGING.getCode());
......@@ -299,7 +335,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
.eq(ZjkExpert::getUserId, userId)
.eq(ZjkExpert::getDeleteFlag, UserConstants.DEL_FLAG_NORMAL)
);
if(existingExpert!=null){
if (existingExpert != null) {
//解密
decryptIfNotBlank(existingExpert::getContact, existingExpert::setContact);
decryptIfNotBlank(existingExpert::getIdCard, existingExpert::setIdCard);
......@@ -402,23 +438,24 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
// // 调用远程服务 发起审批流程
// 暂存情况下 不发起审批流
if (bo.getStatus() != null && bo.getStatus() != ZjkExpertTypeEnum.STAGING.getCode()){
if (bo.getStatus() != null && bo.getStatus() != ZjkExpertTypeEnum.STAGING.getCode()) {
Map<String, Object> variables = Map.of(
"entity", Map.of(
"approvalType",bo.getApprovalType()
"approvalType", bo.getApprovalType()
)
);
Map<String, Object> startedWorkFlowMap = remoteWorkflowService.startWorkFlow(String.valueOf(addExpert.getExpertId()), "zjk_expert", variables);
log.info("ID:{}姓名:{}手机号:{}身份证号:{}专家工作流相关数据taskInfoMap:{}",addExpert.getExpertId(),addExpert.getExpertName(),addExpert.getContact(),addExpert.getIdCard(),JSON.toJSONString(startedWorkFlowMap));
remoteWorkflowService.completeTask(startedWorkFlowMap.get("taskId").toString(), new ArrayList<>(List.of("1")),null, String.valueOf(addExpert.getExpertId()));
log.info("ID:{}姓名:{}手机号:{}身份证号:{}专家工作流相关数据taskInfoMap:{}", addExpert.getExpertId(), addExpert.getExpertName(), addExpert.getContact(), addExpert.getIdCard(), JSON.toJSONString(startedWorkFlowMap));
remoteWorkflowService.completeTask(startedWorkFlowMap.get("taskId").toString(), new ArrayList<>(List.of("1")), null, String.valueOf(addExpert.getExpertId()));
}
refreshHmac(addExpert.getExpertId());
}catch (Exception e){
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException(e.getMessage());
}
return true;
}
private void decryptIfNotBlank(Supplier<String> getter, Consumer<String> setter) {
String value = getter.get();
if (value != null && !value.isBlank()) {
......@@ -428,6 +465,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
/**
* 校验专家以及专家附属信息的hmac
*
* @param expertId
*/
@Override
......@@ -464,7 +502,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
// 生成哈希与 HMAC 值(如需加密服务调用,请替换此行)
String hash = ObjectHashGenerator.generateHash(composite);
String base64 = Base64.getEncoder().encodeToString(hash.getBytes(StandardCharsets.UTF_8));
String hmac = hmacClient.calculateHmac(base64);
String hmac = hmacClient.calculateHmac(base64);
// String hmac = base64;
// 更新专家主表的 HMAC 字段
......@@ -478,6 +516,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
log.error("生成专家 HMAC 失败,专家ID: {}", expertId, e);
}
}
@Override
public Map<String, Object> getExpertObjectById(Long expertId) {
try {
......@@ -529,13 +568,27 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
return true;
}
List<ZjkExpert> zjkExpertList = new ArrayList<>();
List<ZjkExpertMajor> zjkExpertMajors = new ArrayList<>();
list.forEach(a -> {
ZjkExpert add = MapstructUtils.convert(a, ZjkExpert.class);
add.setApprovalType(ApprovalTypeEnum.EXPERTSAPPLY.getCode());
add.setStatus(ZjkExpertTypeEnum.NORMAL.getCode());
//处理专家专业和学历
ZjkExpertMajor zjkExpertMajor = new ZjkExpertMajor();
zjkExpertMajor.setMajor(a.getMajor());
zjkExpertMajor.setDegree(a.getDegree() == null ? null : Integer.valueOf(a.getDegree()));
zjkExpertMajor.setUserId(add.getUserId());
zjkExpertMajors.add(zjkExpertMajor);
zjkExpertList.add(add);
});
baseMapper.insertBatch(zjkExpertList);
zjkExpertList.stream().forEach(a -> {
zjkExpertMajors.stream().filter(b -> b.getUserId().equals(a.getUserId())).forEach(b -> {
b.setExpertId(a.getExpertId());
});
});
zjkExpertMajorService.saveBatch(zjkExpertMajors);
List<ZjkCreditUser> zjkCreditUserList = new ArrayList<>();
List<ZjkCredit> zjkCreditList = new ArrayList<>();
for (ZjkExpert zjkExpert : zjkExpertList) {
......@@ -554,7 +607,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
}
zjkCreditUserMapper.insertBatch(zjkCreditUserList);
zjkCreditMapper.insertBatch(zjkCreditList);
return true;
return true;
}
/**
......@@ -599,80 +652,80 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
ZjkExpert add = MapstructUtils.convert(bo, ZjkExpert.class);
try {
ZjkExpert zjkExpertInfo = baseMapper.selectById(bo.getExpertId());
// 如果状态为通过并且 为专家申请 设置审批时间
if (add.getStatus() == ZjkExpertTypeEnum.NORMAL.getCode() && zjkExpertInfo.getApprovalType() == ApprovalTypeEnum.EXPERTSAPPLY.getCode()) {
//同步信用用户 查询当前专家是否存在数据 存在不进行处理
ZjkCreditUser zjkCreditUser = zjkCreditUserMapper.selectOne(new LambdaQueryWrapper<ZjkCreditUser>()
.eq(ZjkCreditUser::getUserId, zjkExpertInfo.getUserId())
.eq(ZjkCreditUser::getExpertId, zjkExpertInfo.getExpertId()));
if (zjkCreditUser == null) {
ZjkCreditUserBo zjkCreditUserBo = new ZjkCreditUserBo();
zjkCreditUserBo.setExpertId(zjkExpertInfo.getExpertId());
zjkCreditUserBo.setUserId(zjkExpertInfo.getUserId());
zjkCreditUserBo.setChangeTime(new Date());
zjkCreditUserService.insertByBo(zjkCreditUserBo);
//新增一条信用记录
ZjkCredit zjkCredit = new ZjkCredit();
zjkCredit.setExpertId(zjkExpertInfo.getExpertId());
zjkCredit.setCreditCount(100L);
zjkCredit.setUserId(zjkExpertInfo.getUserId());
zjkCredit.setCredit(+100L);
zjkCreditMapper.insert(zjkCredit);
add.setApprovalTime(new Date());
ZjkExpert zjkExpertInfo = baseMapper.selectById(bo.getExpertId());
// 如果状态为通过并且 为专家申请 设置审批时间
if (add.getStatus() == ZjkExpertTypeEnum.NORMAL.getCode() && zjkExpertInfo.getApprovalType() == ApprovalTypeEnum.EXPERTSAPPLY.getCode()) {
//同步信用用户 查询当前专家是否存在数据 存在不进行处理
ZjkCreditUser zjkCreditUser = zjkCreditUserMapper.selectOne(new LambdaQueryWrapper<ZjkCreditUser>()
.eq(ZjkCreditUser::getUserId, zjkExpertInfo.getUserId())
.eq(ZjkCreditUser::getExpertId, zjkExpertInfo.getExpertId()));
if (zjkCreditUser == null) {
ZjkCreditUserBo zjkCreditUserBo = new ZjkCreditUserBo();
zjkCreditUserBo.setExpertId(zjkExpertInfo.getExpertId());
zjkCreditUserBo.setUserId(zjkExpertInfo.getUserId());
zjkCreditUserBo.setChangeTime(new Date());
zjkCreditUserService.insertByBo(zjkCreditUserBo);
//新增一条信用记录
ZjkCredit zjkCredit = new ZjkCredit();
zjkCredit.setExpertId(zjkExpertInfo.getExpertId());
zjkCredit.setCreditCount(100L);
zjkCredit.setUserId(zjkExpertInfo.getUserId());
zjkCredit.setCredit(+100L);
zjkCreditMapper.insert(zjkCredit);
add.setApprovalTime(new Date());
}
}
}
// 入库记录
ZjkExpertLog expertLog = new ZjkExpertLog();
expertLog.setExpertId(zjkExpertInfo.getExpertId());
expertLog.setName(zjkExpertInfo.getExpertName());
expertLog.setContactInfo(zjkExpertInfo.getContact());
expertLog.setOrganization(zjkExpertInfo.getWorkUnit());
expertLog.setPosition(zjkExpertInfo.getDuty());
expertLog.setEntryResult(bo.getStatus() == 2 ? ResultTypeEnum.SUCCESS.getCode() : ResultTypeEnum.ERROR.getCode());
expertLog.setApplicationTime(zjkExpertInfo.getUpdateTime());
expertLog.setRejectionReason(bo.getRemark());
zjkExpertLogMapper.insert(expertLog);
// 审批流程记录
zjkApprovalProcessLogsService.saveCommonApprovalRecord(bo.getStatus() == ZjkExpertTypeEnum.NORMAL.getCode() ? ApprovalProcessTypeEnum.APPROVAL_PASSED.getCode() : ApprovalProcessTypeEnum.APPROVAL_REFUSED.getCode(),
zjkExpertInfo.getApprovalType() == ApprovalTypeEnum.EXPERTSAPPLY.getCode() ? ApprovalProcessBusinessTypeEnum.Expert_warehousing.getCode() : ApprovalProcessBusinessTypeEnum.CHANGES_EXPERT_INFORMATION.getCode(),
bo.getRemark());
scheduledExecutorService.schedule(() -> {
remoteMessageService.publishMessage(zjkExpertInfo.getUserId(), bo.getStatus() == ZjkExpertTypeEnum.NORMAL.getCode() ? "您的专家信息审核通已通过" : "您的专家信息审核被驳回");
}, 3, TimeUnit.SECONDS);
ZjkExpertHistory zjkExpertHistory = zjkExpertHistoryMapper.selectOne(new LambdaQueryWrapper<ZjkExpertHistory>().eq(ZjkExpertHistory::getExpectId, zjkExpertInfo.getExpertId()).eq(ZjkExpertHistory::getDeleteFlag, UserConstants.DEL_FLAG_NORMAL));
if (zjkExpertHistory != null) {
zjkExpertHistoryMapper.deleteById(zjkExpertHistory.getId());
}
// 根据审核状态走不同的工作流 1. 根据业务 id 获取相关信息
// 入库记录
ZjkExpertLog expertLog = new ZjkExpertLog();
expertLog.setExpertId(zjkExpertInfo.getExpertId());
expertLog.setName(zjkExpertInfo.getExpertName());
expertLog.setContactInfo(zjkExpertInfo.getContact());
expertLog.setOrganization(zjkExpertInfo.getWorkUnit());
expertLog.setPosition(zjkExpertInfo.getDuty());
expertLog.setEntryResult(bo.getStatus() == 2 ? ResultTypeEnum.SUCCESS.getCode() : ResultTypeEnum.ERROR.getCode());
expertLog.setApplicationTime(zjkExpertInfo.getUpdateTime());
expertLog.setRejectionReason(bo.getRemark());
zjkExpertLogMapper.insert(expertLog);
// 审批流程记录
zjkApprovalProcessLogsService.saveCommonApprovalRecord(bo.getStatus() == ZjkExpertTypeEnum.NORMAL.getCode() ? ApprovalProcessTypeEnum.APPROVAL_PASSED.getCode() : ApprovalProcessTypeEnum.APPROVAL_REFUSED.getCode(),
zjkExpertInfo.getApprovalType() == ApprovalTypeEnum.EXPERTSAPPLY.getCode() ? ApprovalProcessBusinessTypeEnum.Expert_warehousing.getCode() : ApprovalProcessBusinessTypeEnum.CHANGES_EXPERT_INFORMATION.getCode(),
bo.getRemark());
scheduledExecutorService.schedule(() -> {
remoteMessageService.publishMessage(zjkExpertInfo.getUserId(), bo.getStatus() == ZjkExpertTypeEnum.NORMAL.getCode() ? "您的专家信息审核通已通过" : "您的专家信息审核被驳回");
}, 3, TimeUnit.SECONDS);
ZjkExpertHistory zjkExpertHistory = zjkExpertHistoryMapper.selectOne(new LambdaQueryWrapper<ZjkExpertHistory>().eq(ZjkExpertHistory::getExpectId, zjkExpertInfo.getExpertId()).eq(ZjkExpertHistory::getDeleteFlag, UserConstants.DEL_FLAG_NORMAL));
if (zjkExpertHistory != null) {
zjkExpertHistoryMapper.deleteById(zjkExpertHistory.getId());
}
// 根据审核状态走不同的工作流 1. 根据业务 id 获取相关信息
Map<String, Object> taskInfoMap = remoteWorkflowService.getTaskInfoByBusinessKey(String.valueOf(zjkExpertInfo.getExpertId()));
log.info("姓名:{}手机号:{}身份证号:{}专家工作流相关数据taskInfoMap:{}",zjkExpertInfo.getExpertName(),zjkExpertInfo.getContact(),zjkExpertInfo.getIdCard(),JSON.toJSONString(taskInfoMap));
log.info("姓名:{}手机号:{}身份证号:{}专家工作流相关数据taskInfoMap:{}", zjkExpertInfo.getExpertName(), zjkExpertInfo.getContact(), zjkExpertInfo.getIdCard(), JSON.toJSONString(taskInfoMap));
// 审批通过时 进行工作流通过 否则驳回
if (bo.getStatus() == ZjkExpertTypeEnum.NORMAL.getCode()){
log.info("姓名:{}手机号:{}身份证号:{}审批通过",zjkExpertInfo.getExpertName(),zjkExpertInfo.getContact(),zjkExpertInfo.getIdCard());
if (bo.getStatus() == ZjkExpertTypeEnum.NORMAL.getCode()) {
log.info("姓名:{}手机号:{}身份证号:{}审批通过", zjkExpertInfo.getExpertName(), zjkExpertInfo.getContact(), zjkExpertInfo.getIdCard());
// 创建嵌套 Map
Map<String, Object> result = Map.of(
"entity", Map.of(
"status",bo.getStatus(),
"approvalType",zjkExpertInfo.getApprovalType()
"status", bo.getStatus(),
"approvalType", zjkExpertInfo.getApprovalType()
)
);
remoteWorkflowService.completeTask(taskInfoMap.get("taskId").toString(), new ArrayList<>(List.of("1")),result, String.valueOf(zjkExpertInfo.getExpertId()));
remoteWorkflowService.completeTask(taskInfoMap.get("taskId").toString(), new ArrayList<>(List.of("1")), result, String.valueOf(zjkExpertInfo.getExpertId()));
} else {
log.info("姓名:{}手机号:{}身份证号:{}审批驳回",zjkExpertInfo.getExpertName(),zjkExpertInfo.getContact(),zjkExpertInfo.getIdCard());
log.info("姓名:{}手机号:{}身份证号:{}审批驳回", zjkExpertInfo.getExpertName(), zjkExpertInfo.getContact(), zjkExpertInfo.getIdCard());
// 获取可驳回的流程 id
String targetActivityId = remoteWorkflowService.getNodeList(taskInfoMap.get("processInstanceId").toString());
log.info("可驳回的流程:{}",targetActivityId);
log.info("可驳回的流程:{}", targetActivityId);
// 进行驳回操作
String backResult = remoteWorkflowService.backProcess(taskInfoMap.get("taskId").toString(), new ArrayList<>(List.of("1")),targetActivityId,bo.getRemark());
log.info("姓名:{} 手机号:{} 身份证号:{} 驳回状态:{}",zjkExpertInfo.getExpertName(),zjkExpertInfo.getContact(),zjkExpertInfo.getIdCard(),backResult);
String backResult = remoteWorkflowService.backProcess(taskInfoMap.get("taskId").toString(), new ArrayList<>(List.of("1")), targetActivityId, bo.getRemark());
log.info("姓名:{} 手机号:{} 身份证号:{} 驳回状态:{}", zjkExpertInfo.getExpertName(), zjkExpertInfo.getContact(), zjkExpertInfo.getIdCard(), backResult);
}
boolean b = baseMapper.updateStatusById(add) > 0;
refreshHmac(zjkExpertInfo.getExpertId());
return b;
} catch (Exception e){
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException("系统异常,请联系管理员处理");
}
......@@ -772,7 +825,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
userWrapper.ge(ZjkCreditUser::getRewardId, 4);
List<ZjkCreditUser> zjkCreditUsers = zjkCreditUserMapper.selectList(userWrapper);
List<Long> collect2 = zjkCreditUsers.stream().map(ZjkCreditUser::getExpertId).collect(Collectors.toList());
log.info("黑名单专家结果集{}",collect2);
log.info("黑名单专家结果集{}", collect2);
if (collect2 != null && collect2.size() > 0) {
expertIds.addAll(collect2);
}
......@@ -794,9 +847,9 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
LambdaQueryWrapper<ZjkExpert> lqw = Wrappers.lambdaQuery();
//回避专家
if(CollectionUtils.isNotEmpty(zjkProjectExpertItemBo.getExpertIds())){
if (CollectionUtils.isNotEmpty(zjkProjectExpertItemBo.getExpertIds())) {
expertIds.addAll(zjkProjectExpertItemBo.getExpertIds());
log.info("回避专家结果集{}",collect2);
log.info("回避专家结果集{}", collect2);
}
//请假过滤,获取在开标时间段内请假的专家并过滤
LambdaQueryWrapper<ZjkLeave> queryWrapper = new LambdaQueryWrapper<>();
......@@ -808,20 +861,20 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
Set<String> set = zjkLeaveVos.stream().filter(s -> s.getCreateBy() != null).map(ZjkLeaveVo::getCreateBy).collect(Collectors.toSet());
if (CollectionUtil.isNotEmpty(set)) {
lqw.notIn(ZjkExpert::getUserId, set);
log.info("长期请假用户集合{}",set);
log.info("长期请假用户集合{}", set);
}
if (CollectionUtil.isNotEmpty(zjkProjectExpertItemBo.getExtractArea())) {
if (zjkProjectExpertItemBo.getExtractArea().size() == 1) {
lqw.eq(ZjkExpert::getProvince, zjkProjectExpertItemBo.getProvinces());
log.info("抽取回避 省市区 --省{}",zjkProjectExpertItemBo.getProvinces());
log.info("抽取回避 省市区 --省{}", zjkProjectExpertItemBo.getProvinces());
}
if (zjkProjectExpertItemBo.getExtractArea().size() == 2) {
lqw.eq(ZjkExpert::getCity, zjkProjectExpertItemBo.getProvinces());
log.info("抽取回避 省市区 --市{}",zjkProjectExpertItemBo.getProvinces());
log.info("抽取回避 省市区 --市{}", zjkProjectExpertItemBo.getProvinces());
}
if (zjkProjectExpertItemBo.getExtractArea().size() == 3) {
lqw.eq(ZjkExpert::getArea, zjkProjectExpertItemBo.getProvinces());
log.info("抽取回避 省市区 --区{}",zjkProjectExpertItemBo.getProvinces());
log.info("抽取回避 省市区 --区{}", zjkProjectExpertItemBo.getProvinces());
}
}
if (zjkProjectExpertItemBo.getZjkReviewPhase() != null && zjkProjectExpertItemBo.getZjkReviewPhase().getParentId() != null) {
......@@ -838,7 +891,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
if (CollectionUtil.isNotEmpty(zjkReviewPhases)) {
List<Long> collect = zjkReviewPhases.stream().map(ZjkReviewPhase::getId).collect(Collectors.toList());
collect1.addAll(collect);
log.info("项目请假专家集合{}",collect);
log.info("项目请假专家集合{}", collect);
}
LambdaQueryWrapper<ZjkExpertItem> lambdasQuery = new LambdaQueryWrapper<>();
......@@ -853,7 +906,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
.collect(Collectors.toList());
zjkProjectExpertItemBo.setExpertIds(collect);
expertIds.addAll(collect);
log.info("发送通知结果集{}",collect);
log.info("发送通知结果集{}", collect);
}
}
......@@ -870,10 +923,10 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
.collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(idList)) {
List<ZjkExpertItemVo> zjkExpertItemVos = zjkExpertItemMapper.selectBatchByReviewIds(idList);
if(CollectionUtil.isNotEmpty(zjkExpertItemVos)){
if (CollectionUtil.isNotEmpty(zjkExpertItemVos)) {
List<Long> expertIdList = zjkExpertItemVos.stream().map(ZjkExpertItemVo::getExpertId).toList();
expertIds.addAll(expertIdList);
log.info("屏蔽同天评审专家集{}",expertIdList);
log.info("屏蔽同天评审专家集{}", expertIdList);
}
}
}
......@@ -906,7 +959,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
}
if (CollectionUtil.isNotEmpty(unit)) {
lqw.notIn(ZjkExpert::getWorkUnit, unit);
log.info("屏蔽本单位 {}",unit);
log.info("屏蔽本单位 {}", unit);
}
lqw.eq(ZjkExpert::getStatus, 2);
......@@ -918,7 +971,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
);
if (CollectionUtil.isNotEmpty(expertIds)) {
lqw.notIn(ZjkExpert::getExpertId, expertIds);
log.info("排除全部专家集合{}",expertIds);
log.info("排除全部专家集合{}", expertIds);
}
return baseMapper.selectVoList(lqw);
}
......@@ -981,11 +1034,13 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
@Override
@Transactional(rollbackFor = Exception.class)
public List<String> imports(MultipartFile file) {
public R<Void> imports(MultipartFile file) {
try {
InputStream inputStream = file.getInputStream();
// 文件转化
List<ZjkExpertBo> zjkExpertVos = ExcelUtil.importExcel(inputStream, ZjkExpertBo.class);
ExcelResult<ZjkExpertBo> zjkExpertBoExcelResult = ExcelUtil.importExcel(inputStream, ZjkExpertBo.class, true);
log.info("抓夹导入数据报错数据大小:{}", zjkExpertBoExcelResult.getErrorList().size());
List<ZjkExpertBo> zjkExpertVos = zjkExpertBoExcelResult.getList();
// 提取所有的身份证号
List<String> idCards = zjkExpertVos.stream()
.map(ZjkExpertBo::getIdCard)
......@@ -1005,7 +1060,41 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
// 如果存在重复的身份证号则提示,剔除之后再次导入
if (!CollUtil.isEmpty(existingIdCards)) {
// 将身份证号列表转换为用逗号分隔的字符串
return existingIdCards;
// 如果存在重复的身份证号则提示,剔除之后再次导入
// 将身份证号列表转换为用逗号分隔的字符串
return R.fail("以下身份证号专家已经存在,请剔除后再次导入专家数据:" + String.join(", ", existingIdCards));
}
//省市区 进行校验
List<String> strings = new ArrayList<>();
zjkExpertVos.stream().forEach(item -> {
StringBuffer errorMsg = new StringBuffer();
String province = baseMapper.getProvinceByName(item.getProvince());
if (province == null) {
errorMsg.append(item.getProvince() + "不存在;");
errorMsg.append("<br/>");
} else {
item.setProvince(province);
}
String city = baseMapper.getCityByNameAndProvinceId(province, item.getCity());
if (city == null) {
errorMsg.append(item.getCity() + "不存在;");
errorMsg.append("<br/>");
} else {
item.setCity(city);
}
String area = baseMapper.getAreaByNameAndCityId(city, item.getArea());
if (area == null) {
errorMsg.append(item.getArea() + "不存在;");
errorMsg.append("<br/>");
} else {
item.setArea(area);
}
if (errorMsg.length() > 0) {
strings.add(errorMsg.toString());
}
});
if (strings.size() > 0) {
return R.fail("以下地址信息有误:" + String.join(", ", strings));
}
// 注册用户信息
List<RemoteUserBo> remoteUserBoList = new ArrayList<>();
......@@ -1065,14 +1154,29 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
if (userId != null) {
expert.setUserId(userId);
}
});
//处理职称等级
//得到职称-数字一一对应list
List<SelectOptionVo> expertMoneyConfigList = zjkExpertMoneyConfigMapper.getExpertMoneyConfig();
if (expertMoneyConfigList != null && !expertMoneyConfigList.isEmpty()) {
for (ZjkExpertBo ex : filteredZjkExpertVos) {
//因为数据库职称是数字 转换成汉字
for (SelectOptionVo selectOptionVo : expertMoneyConfigList) {
if (selectOptionVo.getLabel().equals(ex.getPositionTitleLevelStr())) {
ex.setPositionTitleLevel(Long.valueOf(selectOptionVo.getValue()));//赋予汉字职称
}
}
}
}
insertList(filteredZjkExpertVos);
} catch (Exception e) {
e.printStackTrace();
} catch (IOException e) {
log.error("导入发票信息失败,{}", e.getMessage());
throw new ServiceException("导入失败请联系管理员");
}
return new ArrayList<>();
return R.ok();
}
@Override
......@@ -1208,139 +1312,328 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
return baseMapper.getUserIdByPhone(tel);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void fetchRemoteProfessors() {
// 初始页面参数
int currentPage = 1;
int pageSize = 10; // 每页10条数据
ProfessorsDto allProfessorsDto = new ProfessorsDto(); // 用于存储所有请求到的数据
int totalPage = 1; // 默认总页数为1
public SyncUserReturnVO fetchRemoteProfessors() {
SyncUserReturnVO result = null;
int syncCount = 0; // 审批局获取的用户总数
int actualNum = 0; // 实际需要同步的用户数
try {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// 使用循环动态获取每一页数据
while (currentPage <= totalPage) {
String url = professorList + "?pageNumber=" + currentPage + "&pageSize=" + pageSize;
String response = HttpUtil.createGet(url).execute().body();
// String response = "{\"code\":\"00000\",\"msg\":\"操作成功\",\"data\":{\"data\":\"fx/cZTfDSwcPlU9Lgkud8WIe66mxnyHwO/OKG3WKfqRk0AcMGufIdvVZB4HT7ASPbXngSbZXABXzoHhC6kiUS7jE3EgyYqgLQoLO4+1az6cqjGaFT+GH3tZ87CCMM4nsN0O3FzD6h1jydUhHirkVLmqT76SO1czXEqIXxbNGl6YhzXV8k4oQXOZAnXnXwCZX5yYitsJKrxllHuCTEAsISWhWTx3BS5gDFA3Qr7rzJgJ9PFQrvzAw9G/5K3v6BSwEwhDradTJUkchzIgIGIg2PNlGN1Onajz6IAUk+WV7obgHCAy9DTXt+34Tu48xuGA4g7coNziI7GzAG3tCx2ldO2XaRDCTnRb+unRbXXU9q7iSx/Cz7z7oLvid9sOK7VHqzim8XXc6XoaVT6ShqsLK5xEum8+zc6m8CzM4CZy5WMAXIgXbLybaTZ0FmK8tqFFB2NGhrSa13RdNs7PMU5Wsl2b/Ml4g3d3uzgD1zVCeHg1GulGhxehvhYMbeVyOWCGjDw6zw8J3EjBXrQKFIeczMga4EQuXWIp3+hJZvs4YIsvRvK0u6/Bs2IK+cThyKADUMKCuGLPWrueEapZ3zcdWGRCtan6+0GM+pyQw1ko1YnfUhE5HLvSgeaMUZlCjT+D3H2ucwSRimkBGDh+M9qdudx5YZBLwj6rnNbHqVLxE9Dhs+2sVCxIJslChxD7eJkR2CrUBGejJOoXGglcjcOUSkuYclmguJSelEeGHy/AFwRFe5G+LUF/Hfr0Lt+dpA4RV9eg4smaq8yCyaYUs+sjJg6dI8MjTDPL7JWjo9ginMDMbgbj3ZNxtzFdUswq/Z5J/FJ3H1wzSyaXKo9XRN/yebTB30XTdePLWfnOron/KDW0uXHU/UMXHefc6yX970c8PbZR+rUxYl0ow53f78HS2+o8cPUNTowC9VLQvlHgpmuuT1QMBFrV22MyBgBE7pBdWhdytC0pj96P9Bb+JBeSouFAxdM9U1qs5c5e8/xn9p7cgviMrYzAVEXK4Hy4rKel0MtdqrJZaF32Qd9Ke8ZVaP2geaDhI/TRAGUiJ3HDzDwxteeBJtlcAFfOgeELqSJRLLhJCOwxl4L4e47Pv80esk6Tp41+P3CGG7j1ljPZYaE47c6FfWh4aD3BdjOv7K5qhx3ZF5sErxAgJI/YTJmi1PoSG6P4UlOkWdXSjVBod3qrUVNUksXruaCg2duoT7y0sHGZv0CpBWf0Z/zr/1RJNYg2YJQ4AqTOVeyANRJe162TkdMs1Jm814a9lvGB6z0hL3l/iZE4N+AFQGcqhyCrMMPtGa+HwAQU5Fd0GRxW4thgqHAvElGaHTBa0xTyPS71xXkm73MykIPeMHZQ6Bzma1mXaRDCTnRb+unRbXXU9q7iplJEujP5XfYRMg2yHv6upFJ3H1wzSyaXKo9XRN/yebcbr98MkDGjBVqf5ugl/paV/pTx2FimbVdKzRaFGE7G6pNcUylm2NeQGbOUl/zDYslbbpHxvP/XJKDE+Bn5OVvMLsDS3VlsBQ6Oh5J6hoRXIYtoA/7b0CjJtcvYMngn5P7kUwbmaRo+0zgOuCOVzA0gP/fKw1lSGyEJa+Nq5bEto\"}}";
JSONObject jsonResponse = JSON.parseObject(response);
if (!"00000".equals(jsonResponse.getString("code"))) {
break;
}
// 1. 获取所有远程专家数据
List<ProfessorsInfo> allProfessors = fetchAllRemoteProfessors();
syncCount = allProfessors.size();
log.info("审批局需要同步的总用户量为: {}", syncCount);
// 2. 过滤出需要同步的专家数据(去重)
List<ProfessorsInfo> filteredProfessors = filterNeedSyncProfessors(allProfessors);
actualNum = filteredProfessors.size();
log.info("审批局去重后需要同步的用户量为: {}", actualNum);
// 3. 处理并同步过滤后的专家数据
if (actualNum > 0) {
processAndSyncProfessors(filteredProfessors);
}
log.info("成功同步 {} 条专家数据", actualNum);
// 获取最里面的 "data" 并解密
String innerData = AesUtils.decrypt(jsonResponse.getJSONObject("data").getString("data"), "KlzY40Xw2wywV9Me");
result = new SyncUserReturnVO();
result.setStatu(true);
result.setMsg("数据同步完成,共新增 " + actualNum + " 条专家数据");
} catch (Exception e) {
log.error("同步远程专家数据失败", e);
throw new ServiceException("同步远程专家数据失败强联系管理员!");
}
// 将响应数据转化为 ProfessorsDto 对象
ProfessorsDto dto = objectMapper.readValue(innerData, ProfessorsDto.class);
return result;
}
/**
* 从远程接口获取所有专家数据
*/
private List<ProfessorsInfo> fetchAllRemoteProfessors() throws Exception {
int pageSize = 10; // 每页10条数据
// 首先获取第一页数据以确定总页数
String firstUrl = syncRemortUserConfig.getSpjSyncUserUrl() + "?pageNumber=1&pageSize=" + pageSize;
log.info("同步的url为{}", firstUrl);
String firstResponse = HttpUtil.createGet(firstUrl).execute().body();
log.info("同步的url为{},返回的数据为{}", firstUrl, firstResponse);
JSONObject firstJsonResponse = JSON.parseObject(firstResponse);
if (!"00000".equals(firstJsonResponse.getString("code"))) {
throw new ServiceException("获取远程专家数据失败");
}
if (currentPage == 1) {
// 初始化分页信息
allProfessorsDto.setTotalPage(dto.getTotalPage());
allProfessorsDto.setTotalRow(dto.getTotalRow());
allProfessorsDto.setPageSize(dto.getPageSize());
// 解密并解析第一页数据
String firstInnerData = AesUtils.decrypt(firstJsonResponse.getJSONObject("data").getString("data"), "KlzY40Xw2wywV9Me");
log.info("firstInnerData: {}", firstInnerData);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
ProfessorsDto firstDto = objectMapper.readValue(firstInnerData, ProfessorsDto.class);
int totalPage = firstDto.getTotalPage();
// 使用线程池并发获取所有页面数据
ExecutorService executorService = Executors.newFixedThreadPool(5); // 创建固定大小线程池
List<CompletableFuture<List<ProfessorsInfo>>> futures = new ArrayList<>();
// 获取所有页面数据
for (int currentPage = 1; currentPage <= totalPage; currentPage++) {
final int page = currentPage;
CompletableFuture<List<ProfessorsInfo>> future = CompletableFuture.supplyAsync(() -> {
try {
String url = syncRemortUserConfig.getSpjSyncUserUrl() + "?pageNumber=" + page + "&pageSize=" + pageSize;
String response = HttpUtil.createGet(url).execute().body();
JSONObject jsonResponse = JSON.parseObject(response);
if (!"00000".equals(jsonResponse.getString("code"))) {
return new ArrayList<ProfessorsInfo>(); // 返回空列表表示失败
}
// 解密数据
String innerData = AesUtils.decrypt(jsonResponse.getJSONObject("data").getString("data"), "KlzY40Xw2wywV9Me");
ProfessorsDto dto = objectMapper.readValue(innerData, ProfessorsDto.class);
return dto.getList();
} catch (Exception e) {
log.error("获取第{}页数据失败", page, e);
return new ArrayList<ProfessorsInfo>();
}
}, executorService);
// 合并数据
allProfessorsDto.getList().addAll(dto.getList());
totalPage = dto.getTotalPage(); // 更新总页数
currentPage++; // 获取下一页数据
}
futures.add(future);
}
// 数据拷贝转化
List<ZjkExpertBo> zjkExpertBos = allProfessorsDto.getList().stream()
.map(professor -> {
ZjkExpertBo expertBo = new ZjkExpertBo();
BeanUtils.copyProperties(professor, expertBo);
return expertBo;
})
.toList();
// 收集所有页面的数据
CompletableFuture<Void> allFutures = CompletableFuture.allOf(
futures.toArray(new CompletableFuture[0])
);
// 提取身份证号
List<String> idCards = zjkExpertBos.stream()
.map(ZjkExpertBo::getIdCard)
.filter(idCard -> idCard != null && !idCard.trim().isEmpty())
.collect(Collectors.toList());
CompletableFuture<List<ProfessorsInfo>> allPageDataFuture = allFutures.thenApply(v ->
futures.stream()
.map(CompletableFuture::join)
.flatMap(List::stream)
.collect(Collectors.toList())
);
// 查询已存在的身份证号
List<String> existingIdCards = baseMapper.selectExistingIdCards(idCards);
List<ProfessorsInfo> allProfessors = allPageDataFuture.get(); // 获取所有数据
// 关闭线程池
executorService.shutdown();
// 过滤重复记录并设置额外字段
List<ZjkExpertBo> filteredZjkExpertBos = zjkExpertBos.stream()
.filter(expert -> !existingIdCards.contains(expert.getIdCard()) && StringUtils.isNotBlank(expert.getIdCard()))
.peek(expert -> {
expert.setApprovalTime(new Date()); // 设置审批时间
return allProfessors;
}
// 提取出生日期
String idCard = expert.getIdCard();
if (idCard.length() == 18) {
try {
String birthDateString = idCard.substring(6, 14);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
expert.setBirthDate(sdf.parse(birthDateString));
} catch (ParseException e) {
throw new RuntimeException("Invalid ID card format", e);
}
}
})
.toList();
/**
* 过滤出需要同步的专家数据(去重处理)
*/
private List<ProfessorsInfo> filterNeedSyncProfessors(List<ProfessorsInfo> allProfessors) {
// 构建 name + idCard 的组合标识用于去重
List<String> checkKeys = allProfessors.stream()
.map(item -> item.getExpertName() + "|" + item.getIdCard())
.collect(Collectors.toList());
// 查询数据库中已存在的 name + idCard 组合
Set<String> existingKeys = new HashSet<>(baseMapper.selectExistingNameAndIdCardPairs(checkKeys));
// 过滤出数据库中不存在的专家数据
List<ProfessorsInfo> filteredProfessors = allProfessors.stream()
.filter(professor -> professor.getIdCard() != null && !professor.getIdCard().trim().isEmpty())
.filter(professor -> !existingKeys.contains(professor.getExpertName() + "|" + professor.getIdCard()))
.collect(Collectors.toList());
log.info("需要同步的用户量为{},信息为:{}", filteredProfessors.size(), filteredProfessors);
return filteredProfessors;
}
// 获取当前用户部门信息
List<RemoteDeptBo> remoteDeptBos = remoteDeptService.selectDeptInfoByTenantId(LoginHelper.getTenantId());
String tenantId = LoginHelper.getTenantId();
String password = StringUtils.defaultIfEmpty(
remoteConfigService.selectConfigByKey("expert.import.password"),
"k6psy7kafT%U"
);
// 构造 RemoteUserBo 列表
List<RemoteUserBo> remoteUserBoList = filteredZjkExpertBos.stream()
.map(expert -> {
RemoteUserBo userBo = new RemoteUserBo();
userBo.setUserName(expert.getIdCard());
userBo.setNickName(expert.getExpertName());
userBo.setIdCard(expert.getIdCard());
userBo.setPhonenumber(expert.getContact());
userBo.setPassword(BCrypt.hashpw(password));
userBo.setTenantId(tenantId);
userBo.setSource("30");
userBo.setSourceTenant(2);
userBo.setDeptId(remoteDeptBos.get(0).getDeptId());
return userBo;
})
.toList();
/**
* 处理并同步过滤后的专家数据
*/
private void processAndSyncProfessors(List<ProfessorsInfo> filteredProfessors) throws Exception {
// 数据转换处理
List<ZjkExpertBo> zjkExpertBos = convertProfessorsToExpertBo(filteredProfessors);
// 用户注册
remoteUserService.expertRegisterUserInfo(remoteUserBoList, tenantId);
// 用户注册
List<RemoteUserBo> remoteUserBoList = registerRemoteUsers(zjkExpertBos);
// 根据手机号获取用户信息
List<String> phoneNumbers = filteredZjkExpertBos.stream()
.map(ZjkExpertBo::getIdCard)
.toList();
// 设置用户ID
setUserIdsForExperts(zjkExpertBos, remoteUserBoList);
List<RemoteUserVo> fetchedUsers = remoteUserService.selectListByUserName(phoneNumbers);
// 数据落库
insertList(zjkExpertBos);
}
// 转换为 Map (手机号 -> 用户 ID)
Map<String, Long> userNameToUserIdMap = fetchedUsers.stream()
.collect(Collectors.toMap(RemoteUserVo::getUserName, RemoteUserVo::getUserId));
/**
* 将ProfessorsInfo转换为ZjkExpertBo
*/
private List<ZjkExpertBo> convertProfessorsToExpertBo(List<ProfessorsInfo> filteredProfessors) {
List<Map<String, String>> workperformIdByName = baseMapper.getWorkperformIdByName();
// 匹配用户 ID 并赋值
filteredZjkExpertBos.forEach(expert -> {
Long userId = userNameToUserIdMap.get(expert.getIdCard());
if (userId != null) {
expert.setUserId(userId);
return filteredProfessors.stream()
.map(professor -> {
ZjkExpertBo expertBo = new ZjkExpertBo();
BeanUtils.copyProperties(professor, expertBo);
if (StringUtils.isNotBlank(expertBo.getContact())) {
String phone = stringCryptoUtil.encryptField(expertBo.getContact());
expertBo.setContact(phone);
}
if (StringUtils.isNotBlank(expertBo.getIdCard())) {
String idCard = stringCryptoUtil.encryptField(expertBo.getIdCard());
expertBo.setIdCard(idCard);
}
if (StringUtils.isNotBlank(expertBo.getEmail())) {
String email = stringCryptoUtil.encryptField(expertBo.getEmail());
expertBo.setEmail(email);
}
expertBo.setApprovalTime(new Date()); // 设置审批时间
// 提取出生日期
String idCard = expertBo.getIdCard();
if (idCard.length() == 18) {
try {
String birthDateString = idCard.substring(6, 14);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
expertBo.setBirthDate(sdf.parse(birthDateString));
} catch (ParseException e) {
log.error("身份证格式不正确,专家姓名为{},专家身份证号为{}", expertBo.getExpertName(), expertBo.getIdCard());
}
}
});
// 数据落库
insertList(filteredZjkExpertBos);
// 转换业务领域为id逗号拼接
String professorDeclareCategory = expertBo.getProfessorDeclareCategory();
if (StringUtils.isNotBlank(professorDeclareCategory)) {
List<String> categoryNames = List.of(professorDeclareCategory.split(","));
expertBo.setPerformWorkId(workperformIdByName.stream()
.filter(workperform -> categoryNames.contains(workperform.get("label")))
.map(workperform -> workperform.get("value"))
.collect(Collectors.joining(",")));
}
if (expertBo.getPerformWorkId() == null) {
// 业务领域为空设置默认为"其它"
expertBo.setPerformWorkId("25");
}
} catch (Exception e) {
e.printStackTrace();
}
return expertBo;
})
.collect(Collectors.toList());
}
/**
* 注册远程用户
*/
private List<RemoteUserBo> registerRemoteUsers(List<ZjkExpertBo> zjkExpertBos) {
// 获取当前用户部门信息
List<RemoteDeptBo> remoteDeptBos = remoteDeptService.selectDeptInfoByTenantId(LoginHelper.getTenantId());
String tenantId = LoginHelper.getTenantId();
String password = StringUtils.defaultIfEmpty(
remoteConfigService.selectConfigByKey("expert.import.password"),
"k6psy7kafT%U"
);
// 构造 RemoteUserBo 列表
List<RemoteUserBo> remoteUserBoList = zjkExpertBos.stream()
.map(expert -> {
RemoteUserBo userBo = new RemoteUserBo();
userBo.setUserName(expert.getIdCard());
userBo.setNickName(expert.getExpertName());
userBo.setIdCard(expert.getIdCard());
userBo.setPhonenumber(expert.getContact());
userBo.setPassword(BCrypt.hashpw(password));
userBo.setTenantId(tenantId);
userBo.setSource(UserSourceTypeEnum.FROM_SPJ.getCode());
userBo.setSourceTenant(2);
userBo.setDeptId(remoteDeptBos.get(0).getDeptId());
return userBo;
})
.collect(Collectors.toList());
// 用户注册
remoteUserService.expertRegisterUserInfoForSpj(remoteUserBoList, tenantId);
return remoteUserBoList;
}
/**
* 为专家设置用户ID
*/
private void setUserIdsForExperts(List<ZjkExpertBo> zjkExpertBos, List<RemoteUserBo> remoteUserBoList) {
// 根据身份证号获取用户信息
List<String> idCardNumbers = remoteUserBoList.stream()
.map(RemoteUserBo::getUserName)
.collect(Collectors.toList());
List<RemoteUserVo> fetchedUsers = remoteUserService.selectListByUserName(idCardNumbers);
zjkExpertBos.forEach(expert -> {
// 在 fetchedUsers 中查找匹配的用户
Optional<RemoteUserVo> matchedUser = fetchedUsers.stream()
.filter(user ->
StringUtils.equals(user.getUserName(), expert.getIdCard()) &&
StringUtils.equals(user.getNickName(), expert.getExpertName()))
.findFirst();
if (matchedUser.isPresent()) {
expert.setUserId(matchedUser.get().getUserId());
} else {
log.warn("未找到匹配的用户,专家姓名: {}, 身份证号: {}",
expert.getExpertName(), expert.getIdCard());
}
});
}
@Override
public void exportTml(HttpServletResponse response) {
downloadExcelTem(response);
}
@Override
public List<ZjkExpertVo> getStageExperts(Long productId, Integer reviewSn) {
List<ZjkExpertVo> res = baseMapper.getStageExperts(productId, reviewSn);
return res;
}
@Override
public Boolean handleClassified(ZjkExpertBo bo) {
baseMapper.handleClassified(bo.getExpertId(), bo.getIsClassified());
return true;
}
public void downloadExcelTem(HttpServletResponse response) {
// // 获取项目名称下拉选项数据
// List<ZjkReviewProductVo> productList = zjkReviewPhaseMapper.getProductList();
// List<String> productNames = productList.stream().map(ZjkReviewProductVo::getProductName).collect(Collectors.toList());
// //获取可开票的结算单号list
// LambdaQueryWrapper<ZjkExpertMoneyInfo> wq = new LambdaQueryWrapper<>();
// wq.eq(ZjkExpertMoneyInfo::getStatus, MoneySettlementStatusEnum.NO_SETTLEMENT.getCode());
//
// List<ZjkExpertMoneyInfo> moneyInfoList = zjkExpertMoneyInfoMapper.selectList(wq);
// List<String> settleSnList = moneyInfoList.stream().map(ZjkExpertMoneyInfo::getSettlementSn).collect(Collectors.toList());
// //职称等级
List<SelectOptionVo> expertMoneyConfigList = zjkExpertMoneyConfigMapper.getExpertMoneyConfig();
List<String> titleList = expertMoneyConfigList.stream().map(SelectOptionVo::getLabel).collect(Collectors.toList());
// 创建下拉选项
List<DropDownOptions> options = new ArrayList<>();
// DropDownOptions settleSnOption = new DropDownOptions(
// 9, // 假设"项目名称"列在第5列(索引为4),需要根据实际列位置调整
// settleSnList
// );
// // 为"项目名称"列添加下拉框选项
// // 需要确定"项目名称"列在Excel中的索引位置(从0开始)
// DropDownOptions productNameOption = new DropDownOptions(
// 3, // 假设"项目名称"列在第5列(索引为4),需要根据实际列位置调整
// productNames
// );
DropDownOptions titleOption = new DropDownOptions(
25,
titleList
);
// options.add(productNameOption);
// options.add(settleSnOption);
options.add(titleOption);
// 创建空列表用于模板
List<ZjkExpertBo> list = new ArrayList<>();
ExcelUtil.exportExcel(list, "专家库模板", ZjkExpertBo.class, response);
}
}
......@@ -63,8 +63,8 @@ public class ZjkInvoiceReportServiceImpl extends ServiceImpl<ZjkInvoiceReportMap
zjkInvoiceReport.setTenantId(tenantId);
if (type == 0) {
// 月度报表
Date lastMonthStart = DateUtil.beginOfMonth(DateUtil.offsetMonth(now, -1));
Date lastMonthEnd = DateUtil.endOfMonth(DateUtil.offsetMonth(now, -1));
Date lastMonthStart = DateUtil.beginOfMonth(DateUtil.offsetMonth(now, 0));
Date lastMonthEnd = DateUtil.endOfMonth(DateUtil.offsetMonth(now, 0));
zjkInvoiceReport.setDateRangeStart(lastMonthStart);
zjkInvoiceReport.setDateRangeEnd(lastMonthEnd);
......@@ -82,8 +82,8 @@ public class ZjkInvoiceReportServiceImpl extends ServiceImpl<ZjkInvoiceReportMap
} else if (type == 1) {
// 年度报表
Date lastYearStart = DateUtil.beginOfYear(DateUtil.offsetYear(now, -1));
Date lastYearEnd = DateUtil.endOfYear(DateUtil.offsetYear(now, -1));
Date lastYearStart = DateUtil.beginOfYear(DateUtil.offsetYear(now, 0));
Date lastYearEnd = DateUtil.endOfYear(DateUtil.offsetYear(now, 0));
zjkInvoiceReport.setDateRangeStart(lastYearStart);
zjkInvoiceReport.setDateRangeEnd(lastYearEnd);
......
......@@ -4,10 +4,15 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import jakarta.servlet.http.HttpServletResponse;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.core.ExcelResult;
import org.dromara.zjk.domain.ZjkExpert;
import org.dromara.zjk.mapper.*;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.excel.core.DropDownOptions;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
......@@ -22,15 +27,15 @@ import org.dromara.zjk.domain.ZjkSettlementVoucher;
import org.dromara.zjk.domain.bo.ZjkInvoiceBo;
import org.dromara.zjk.domain.vo.*;
import org.dromara.zjk.enums.MoneySettlementStatusEnum;
import org.dromara.zjk.expert.expertRecommend.domain.vo.ZjkExpertRecommendVo;
import org.dromara.zjk.mapper.ZjkExpertMoneyConfigMapper;
import org.dromara.zjk.mapper.ZjkExpertMoneyInfoMapper;
import org.dromara.zjk.mapper.ZjkInvoiceMapper;
import org.dromara.zjk.mapper.ZjkSettlementVoucherMapper;
import org.dromara.zjk.service.IZjkInvoiceService;
import org.dromara.zjk.service.ZjkExpertMoneyInfoService;
import org.dromara.zjk.zwy.client.HmacClient;
import org.dromara.zjk.zwy.utils.ObjectHashGenerator;
import org.mapstruct.Mapper;
import org.dromara.zjk.zwy.utils.StringCryptoUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -43,12 +48,15 @@ import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
import org.dromara.zjk.enums.ReviewSnEnum;
/**
* 发票Service业务层处理
*
* @author mzx
* @date 2024-12-09
*
*/
@Slf4j
@RequiredArgsConstructor
......@@ -57,14 +65,22 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
@Resource
private final ZjkInvoiceMapper zjkInvoiceMapper;
@Resource
private final ZjkProductMapper zjkProductMapper;
@Resource
private final ZjkSettlementVoucherMapper zjkSettlementVoucherMapper;
@Resource
private ZjkExpertMoneyInfoMapper zjkExpertMoneyInfoMapper;
@Autowired
private ZjkExpertMoneyConfigMapper zjkExpertMoneyConfigMapper;
@Resource
private ZjkExpertMapper zjkExpertMapper;
private final HmacClient hmacClient;
@Autowired
private StringCryptoUtil stringCryptoUtil;
@Resource
private final ZjkExpertMoneyInfoService zjkExpertMoneyInfoService;
@Resource
private final ZjkReviewPhaseMapper zjkReviewPhaseMapper;
/**
* 查询发票
*
......@@ -85,6 +101,10 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
*/
@Override
public TableDataInfo<ZjkInvoiceVo> queryPageList(ZjkInvoiceBo bo, PageQuery pageQuery) {
String idcard = stringCryptoUtil.encryptField(bo.getExpertIdNumber());
String phone = stringCryptoUtil.encryptField(bo.getExpertPhone());
bo.setExpertPhone(phone);
bo.setExpertIdNumber(idcard);
Page<ZjkInvoiceVo> result = zjkInvoiceMapper.queryPageList(pageQuery.build(),bo);
return TableDataInfo.build(result);
}
......@@ -232,7 +252,7 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
private void validEntityBeforeSave(ZjkInvoice entity){
//TODO 做一些数据校验,如唯一约束
//发票号码验证是否已存在
Long invoiceNumber = entity.getInvoiceNumber();
String invoiceNumber = entity.getInvoiceNumber();
LambdaQueryWrapper<ZjkInvoice> zjkInvoiceLambdaQueryWrapper = new LambdaQueryWrapper<>();
zjkInvoiceLambdaQueryWrapper.eq(ZjkInvoice::getInvoiceNumber, invoiceNumber);
if (entity.getId()!=null){
......@@ -262,20 +282,73 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
@Override
@Transactional(rollbackFor = Exception.class)
public void imports(MultipartFile file) {
public R<Void> imports(MultipartFile file) {
try {
InputStream inputStream = file.getInputStream();
// 文件转化
List<ZjkInvoice> zjkInvoiceList = ExcelUtil.importExcel(inputStream, ZjkInvoice.class);
ExcelResult<ZjkInvoice> zjkInvoiceExcelResult = ExcelUtil.importExcel(inputStream, ZjkInvoice.class, true);
List<ZjkInvoice> zjkInvoiceList = zjkInvoiceExcelResult.getList();
if (zjkInvoiceList != null && !zjkInvoiceList.isEmpty()) {
Set<Long> invoiceNumberList = zjkInvoiceList.stream().map(ZjkInvoice::getInvoiceNumber).collect(Collectors.toSet());;
//专家姓名转换为专家id
StringBuffer errorSb = new StringBuffer();
zjkInvoiceList.stream().forEach(item->{
String ename = item.getExpertName();
item.setReviewSn(Integer.valueOf(item.getReviewSnStr()));
//首先校验项目 阶段 专家 结算单号 四者条件下是否存在该结算单,存在时才能导入
ZjkExpertMoneyInfo moneyInfo = zjkInvoiceMapper.checkIfImport(item.getProductName(), item.getReviewSn(), item.getExpertName(), item.getSettleNo());
if(moneyInfo==null){
String msg=ename+"所参与的"+item.getProductName()+ReviewSnEnum.getDescByCode(String.valueOf(item.getReviewSn()))+"结算单号为:"+item.getSettleNo()+"的结算单不存在";
errorSb.append( msg);
errorSb.append("<br/>");
}else{
LambdaQueryWrapper<ZjkExpert> wq = new LambdaQueryWrapper<>();
if(StringUtils.isNotBlank(item.getExpertIdNumber())){
String idcard = stringCryptoUtil.encryptField(item.getExpertIdNumber());
item.setExpertIdNumber(idcard);
wq.eq(ZjkExpert::getIdCard, idcard);
}
if(StringUtils.isNotBlank(item.getExpertName())){
wq.eq(ZjkExpert::getExpertName, item.getExpertName());
ZjkExpert zjkExpert = zjkExpertMapper.selectOne(wq);
if(zjkExpert==null){
String msg="身份证为:"+item.getExpertIdNumber()+",专家名为"+item.getExpertName()+"的专家信息不在专家库中!";
errorSb.append( msg);
errorSb.append("<br/>");
}else{
Long eid = zjkExpert.getExpertId();
item.setExpertName(String.valueOf(eid));
List<ZjkExpertVo> eps = zjkExpertMoneyInfoMapper.getExpertListForSettle(Long.valueOf(moneyInfo.getProductId()), item.getReviewSn());
List<Long> collect = eps.stream().map(epsItem -> epsItem.getExpertId()).collect(Collectors.toList());
if(!collect.contains(eid)){
String msg=ename+"所参与的"+item.getProductName()+ReviewSnEnum.getDescByCode(String.valueOf(item.getReviewSn()))+"结算单号为:"+item.getSettleNo()+"已经进行了开票,不可重复开票!";
errorSb.append( msg);
errorSb.append("<br/>");
}else{
item.setProductId(Long.valueOf(moneyInfo.getProductId()));
item.setSettleId(moneyInfo.getMoneyId());
}
}
}
}
if(StringUtils.isNotBlank(item.getExpertPhone())){
String phone = stringCryptoUtil.encryptField(item.getExpertPhone());
item.setExpertPhone(phone);
}
});
Set<String> invoiceNumberList = zjkInvoiceList.stream().map(ZjkInvoice::getInvoiceNumber).collect(Collectors.toSet());;
List<ZjkInvoice> exitsZjkInvoice = zjkInvoiceMapper.selectList(new LambdaQueryWrapper<ZjkInvoice>().in(ZjkInvoice::getInvoiceNumber,invoiceNumberList));
if (CollUtil.isNotEmpty(exitsZjkInvoice)) {
String existingInvoiceNumbersStr = exitsZjkInvoice.stream()
.map(ZjkInvoice::getInvoiceNumber)
.map(String::valueOf)
.collect(Collectors.joining(","));
throw new ServiceException("以下发票号已存在: " + existingInvoiceNumbersStr + ",请修改后重新导入");
errorSb.append( "以下发票号已存在: " + existingInvoiceNumbersStr + ",请修改后重新导入");
errorSb.append("<br/>");
}
//处理职称等级
//得到职称-数字一一对应list
......@@ -290,14 +363,19 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
}
}
}
if(errorSb.length()>0){
return R.fail(errorSb.toString());
}else{
//insert
zjkInvoiceMapper.insert(zjkInvoiceList);
return R.ok();
}
}
}catch (IOException e){
log.error("导入发票信息失败,{}",e.getMessage());
throw new ServiceException("导入发票信息失败,请联系管理员");
}
return R.ok();
}
@Override
......@@ -329,6 +407,9 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
@Override
public Boolean check(Long moneyId) {
ZjkInvoice zjkInvoice = zjkInvoiceMapper.selectById(moneyId);
if(zjkInvoice.getInvoiceAttached()==null){
throw new ServiceException("发票附件不存在,不可审核!");
}
zjkInvoice.setCheckStatus(1);
zjkInvoiceMapper.updateById(zjkInvoice);
//TODO 向【财务报表和结算凭证】同步该数据
......@@ -340,7 +421,7 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
settlementVoucher.setProductId(zjkInvoice.getProductId());
settlementVoucher.setExpertId(zjkInvoice.getExpertName()==null?null:Long.valueOf(zjkInvoice.getExpertName()));
settlementVoucher.setSettleNo(zjkExpertMoneyInfoMapper.selectById(zjkInvoice.getSettleId()).getSettlementSn());
settlementVoucher.setMoney(zjkExpertMoneyConfigMapper.selectById(zjkInvoice.getExpertTitleLevel()).getMoneyNumber());
settlementVoucher.setMoney(zjkInvoice.getInvoiceMoney());
settlementVoucher.setSyncStatus(1);
zjkSettlementVoucherMapper.insert(settlementVoucher);
return true;
......@@ -371,6 +452,8 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
checkSupportVo.setInvFileId(zjkInvoices.get(0).getInvoiceAttached());
List<String> fids = zjkInvoices.stream().map(ZjkInvoice::getInvoiceAttached).collect(Collectors.toList());
checkSupportVo.setFids(fids);
}else{
checkSupportVo.setInvStu("未开票");
}
}
}else{
......@@ -378,4 +461,45 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
}
return checkSupportVo;
}
@Override
public void downloadExcelTem(HttpServletResponse response) {
// // 获取项目名称下拉选项数据
// List<ZjkReviewProductVo> productList = zjkReviewPhaseMapper.getProductList();
// List<String> productNames = productList.stream().map(ZjkReviewProductVo::getProductName).collect(Collectors.toList());
// //获取可开票的结算单号list
// LambdaQueryWrapper<ZjkExpertMoneyInfo> wq = new LambdaQueryWrapper<>();
// wq.eq(ZjkExpertMoneyInfo::getStatus, MoneySettlementStatusEnum.NO_SETTLEMENT.getCode());
//
// List<ZjkExpertMoneyInfo> moneyInfoList = zjkExpertMoneyInfoMapper.selectList(wq);
// List<String> settleSnList = moneyInfoList.stream().map(ZjkExpertMoneyInfo::getSettlementSn).collect(Collectors.toList());
// //职称等级
List<SelectOptionVo> expertMoneyConfigList = zjkExpertMoneyConfigMapper.getExpertMoneyConfig();
List<String> titleList = expertMoneyConfigList.stream().map(SelectOptionVo::getLabel).collect(Collectors.toList());
// 创建下拉选项
List<DropDownOptions> options = new ArrayList<>();
// DropDownOptions settleSnOption = new DropDownOptions(
// 9, // 假设"项目名称"列在第5列(索引为4),需要根据实际列位置调整
// settleSnList
// );
// // 为"项目名称"列添加下拉框选项
// // 需要确定"项目名称"列在Excel中的索引位置(从0开始)
// DropDownOptions productNameOption = new DropDownOptions(
// 3, // 假设"项目名称"列在第5列(索引为4),需要根据实际列位置调整
// productNames
// );
DropDownOptions titleOption = new DropDownOptions(
8,
titleList
);
// options.add(productNameOption);
// options.add(settleSnOption);
options.add(titleOption);
// 创建空列表用于模板
List<ZjkInvoice> list = new ArrayList<>();
// 导出带下拉框的Excel模板
ExcelUtil.exportExcel(list, "发票导入模板", ZjkInvoice.class, response, options);
}
}
......@@ -385,7 +385,7 @@ public class ZjkLeaveServiceImpl implements IZjkLeaveService {
Date reviewTime = vo.getReviewTime();
long hours = DateUtil.between(reviewTime, new Date(), DateUnit.HOUR);
if (hours <= Long.valueOf(proBeforeHour) && vo.getUserId() == null) {
return R.fail("评审前" + zjkLeaveRuleVo.getBeforeDay() + "小时才能进行请假");
return R.fail("评审前" + zjkLeaveRuleVo.getProBeforeHour() + "小时才能进行请假");
}
ZjkLeave zjkLeave = new ZjkLeave();
zjkLeave.setLeaveType(UserConstants.LEAVE_TYPE_PRO);
......@@ -407,7 +407,7 @@ public class ZjkLeaveServiceImpl implements IZjkLeaveService {
//插入请假记录
baseMapper.insert(zjkLeave);
// 根据用户 id 项目 id 更新专家请假信息
ZjkExpertItem zjkExpertItem = zjkExpertItemMapper.getExpertItemByUserIdAndItemId(vo.getUserId(),vo.getItemId(),vo.getItemStage());
ZjkExpertItem zjkExpertItem = zjkExpertItemMapper.getExpertItemByUserIdAndItemId(String.valueOf(vo.getUserId()==null?String.valueOf(LoginHelper.getUserId()):vo.getUserId()),vo.getItemId(),vo.getItemStage());
zjkExpertItem.setLeaveStatus("1");
zjkExpertItemMapper.updateById(zjkExpertItem);
// 更新抽取人数
......@@ -415,7 +415,7 @@ public class ZjkLeaveServiceImpl implements IZjkLeaveService {
ZjkItemExtreation zjkItemExtreation =zjkItemExtreationMapper.selectOne(new LambdaQueryWrapper<ZjkItemExtreation>()
.eq(ZjkItemExtreation::getId,zjkReviewPhase.getItemExtreationId()));
if (zjkItemExtreation != null){
zjkItemExtreation.setExtractedSum(zjkItemExtreation.getExtractedSum()-1);
zjkItemExtreation.setExtractedSum((zjkItemExtreation.getExtractedSum()-1)<0?0:zjkItemExtreation.getExtractedSum()-1);
zjkItemExtreation.setExtractionStatus(1);
zjkItemExtreationMapper.updateById(zjkItemExtreation);
}
......@@ -466,7 +466,7 @@ public class ZjkLeaveServiceImpl implements IZjkLeaveService {
ZjkItemExtreation zjkItemExtreation =zjkItemExtreationMapper.selectOne(new LambdaQueryWrapper<ZjkItemExtreation>()
.eq(ZjkItemExtreation::getId,zjkReviewPhase.getItemExtreationId()));
if (zjkItemExtreation != null){
zjkItemExtreation.setExtractedSum(zjkItemExtreation.getExtractedSum()-1);
zjkItemExtreation.setExtractedSum((zjkItemExtreation.getExtractedSum()-1)<0?0:zjkItemExtreation.getExtractedSum()-1);
zjkItemExtreation.setExtractionStatus(1);
zjkItemExtreationMapper.updateById(zjkItemExtreation);
}
......
......@@ -32,12 +32,24 @@ public class ZjkPointRewardServiceImpl extends ServiceImpl<ZjkPointRewardMapper,
reward.stream().forEach(item -> {
String result = "";
Integer effectFlag = item.getEffectFlag();
if (OperateCodeEnum.DAYU.getCode().equals(effectFlag) && points.compareTo(item.getEffectStandard()) >= 0) {
if (OperateCodeEnum.DAYU.getCode().equals(effectFlag) && points.compareTo(item.getEffectStandard()) >0) {
strings.add(item.getRewardName());
}else if(OperateCodeEnum.XAIOYU.getCode().equals(effectFlag)&& points.compareTo(item.getEffectStandard()) < 0){
strings.add(item.getRewardName());
}else if (OperateCodeEnum.EQUES.getCode().equals(effectFlag)&& points.compareTo(item.getEffectStandard()) == 0){
strings.add(item.getRewardName());
}
});
return strings;
}
public static void main(String[] args) {
Integer a =1;
Integer b=1;
BigDecimal c = new BigDecimal(1);
BigDecimal d = new BigDecimal(1);
System.out.print(a.equals(b));
}
}
......
package org.dromara.zjk.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSON;
......@@ -10,13 +11,16 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.enums.UserType;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.service.DictService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.model.RoleDTO;
import org.dromara.zjk.domain.*;
import org.dromara.zjk.domain.bo.ZjkProductBo;
import org.dromara.zjk.domain.dto.ProjectSummaryStatistics;
......@@ -38,6 +42,7 @@ import org.dromara.zjk.zwy.utils.ObjectHashGenerator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.nio.charset.StandardCharsets;
import java.util.*;
......@@ -73,6 +78,8 @@ public class ZjkProductServiceImpl implements IZjkProductService {
private final ZjkProductReviewsnMapper zjkProductReviewsnMapper;
private final HmacClient hmacClient;
private final DictService dictService;
/**
* 查询项目管理
*
......@@ -114,7 +121,27 @@ public class ZjkProductServiceImpl implements IZjkProductService {
}
return TableDataInfo.build(result);
}
@Override
public List<ZjkProductVo> queryListForApi(ZjkProductBo bo) {
List<ZjkProductVo> records = baseMapper.selectProdoctForApi(bo);
if (CollectionUtil.isEmpty(records)) {
return records;
}
Set<Long> productIdSet = records.stream().map(ZjkProductVo::getId).collect(Collectors.toSet());
List<ZjkReviewProductVo> byProductIds = zjkReviewPhaseMapper.getByProductIds(productIdSet);
if (CollectionUtil.isEmpty(byProductIds)) {
return records;
}
Map<Long, ZjkReviewProductVo> collect = byProductIds.stream().collect(Collectors.toMap(ZjkReviewProductVo::getProductId, v -> v, (k1, k2) -> k1));
for (ZjkProductVo record : records) {
Long productId = record.getId();
if (collect.containsKey(productId)) {
record.setIsItem(1);
}
}
return records;
}
/**
* 查询符合条件的项目管理列表
*
......@@ -124,7 +151,11 @@ public class ZjkProductServiceImpl implements IZjkProductService {
@Override
public List<ZjkProductVo> queryList(ZjkProductBo bo) {
LambdaQueryWrapper<ZjkProduct> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
List<ZjkProductVo> zjkProductVos = baseMapper.selectVoList(lqw);
zjkProductVos.stream().forEach(item->{
item.setProductType(dictService.getDictLabel("project_type",item.getProductType()));
});
return zjkProductVos;
}
private LambdaQueryWrapper<ZjkProduct> buildQueryWrapper(ZjkProductBo bo) {
......@@ -574,6 +605,16 @@ public class ZjkProductServiceImpl implements IZjkProductService {
@Override
public Long getProductPanoramaCount() {
LambdaQueryWrapper<ZjkProduct> wrapper = Wrappers.lambdaQuery();
List<RoleDTO> roles = LoginHelper.getLoginUser().getRoles();
if (!CollectionUtils.isEmpty(roles)) {
List<String> rs = roles.stream().map(RoleDTO::getRoleKey).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(rs)) {
if (rs.contains(TenantConstants.XM_ROLE_KEY)) {
wrapper.eq(ZjkProduct::getCreateBy, LoginHelper.getUserId());
}
}
}
return baseMapper.selectCount(wrapper);
}
......@@ -623,6 +664,12 @@ public class ZjkProductServiceImpl implements IZjkProductService {
@Override
public TableDataInfo<ZjkProductVo> selectList(ZjkProductBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ZjkProduct> lambdaQueryWrapper = buildQueryWrapper(bo);
// zjkEvaluate.setSourceRole();
boolean isXmAdmin = StpUtil.hasRole(TenantConstants.XM_ROLE_KEY);
if (isXmAdmin) {
//项目管理员需做数据隔离
bo.setUserId(LoginHelper.getUserId());
}
IPage<ZjkProductVo> zjkProductVoIPage = baseMapper.selectProductReview(pageQuery.build(), bo);
return TableDataInfo.build(zjkProductVoIPage);
}
......@@ -712,6 +759,12 @@ public class ZjkProductServiceImpl implements IZjkProductService {
return true;
}
@Override
public TableDataInfo<ProductPanoramaVo> getProductList(ProductPanoramaVo vo, PageQuery pageQuery) {
Page<ProductPanoramaVo> result = baseMapper.getProductList(pageQuery.build(), vo);
return TableDataInfo.build(result);
}
@Override
public List<ProductCountReport> getProductTypeCountReport() {
return baseMapper.getProductTypeCountReport();
......
......@@ -86,7 +86,7 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi
List<ZjkExpertVo> zjkExpertVos = BeanUtil.copyToList(zjkExperts, ZjkExpertVo.class);
List<ZjkExpertMajor> zjkExpertMajors = zjkExpertMajorMapper.selectMajorList(expertIdList);
if(CollectionUtil.isNotEmpty(zjkExpertMajors)){
if (CollectionUtil.isNotEmpty(zjkExpertMajors)) {
Map<Long, List<ZjkExpertMajor>> expertMajorMap = zjkExpertMajors.stream().collect(Collectors.groupingBy(ZjkExpertMajor::getExpertId));
for (ZjkExpertVo zjkExpertVo : zjkExpertVos) {
Long expertId = zjkExpertVo.getExpertId();
......@@ -125,18 +125,6 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi
if (CollectionUtil.isEmpty(zjkProductSummarizeVos)) {
return zjkProductSummarizeVos;
}
for (ZjkProductSummarizeVo zjkProductSummarizeVo : zjkProductSummarizeVos) {
String status = zjkProductSummarizeVo.getStatus();
SummarizeStatusEnum byCode = SummarizeStatusEnum.getByCode(status);
if (byCode != null) {
zjkProductSummarizeVo.setStatusName(byCode.getDesc());
}
String productSummarizeType = zjkProductSummarizeVo.getProductSummarizeType();
SummarizeStatusEnum byCode1 = SummarizeStatusEnum.getByCode(productSummarizeType);
if (byCode1 != null) {
zjkProductSummarizeVo.setProductSummarizeName(byCode1.getDesc());
}
}
return zjkProductSummarizeVos;
}
......@@ -287,12 +275,12 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi
List<ZjkExpert> zjkExperts = expertMapper.selectByIds(list);
zjkExperts.forEach(zjkExpert -> {
// 获取专业学历
ZjkExpertMajor zjkExpertMajor = zjkExpertMajorMapper.selectOne(new LambdaQueryWrapper<ZjkExpertMajor>()
ZjkExpertMajor zjkExpertMajor = zjkExpertMajorMapper.selectOne(new LambdaQueryWrapper<ZjkExpertMajor>()
.eq(ZjkExpertMajor::getExpertId, zjkExpert.getExpertId())
.orderByDesc(ZjkExpertMajor::getDegree)
.last("limit 1"));
if (zjkExpertMajor != null) {
zjkExpert.setMajor(zjkExpertMajor.getMajor()+"/"+dictServiceImpl.getDictLabel("degree_type", String.valueOf(zjkExpertMajor.getDegree())));
zjkExpert.setMajor(zjkExpertMajor.getMajor() + "/" + dictServiceImpl.getDictLabel("degree_type", String.valueOf(zjkExpertMajor.getDegree())));
}
});
return zjkExperts;
......@@ -312,10 +300,10 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi
Set<String> collect = vos.stream().map(ZjkProductSummarizeExcelVO::getProductName).collect(Collectors.toSet());
LambdaQueryWrapper<ZjkProduct> lqw = Wrappers.lambdaQuery();
lqw.in(ZjkProduct::getProductName,collect);
lqw.eq(ZjkProduct::getUserId,LoginHelper.getUserId());
lqw.in(ZjkProduct::getProductName, collect);
lqw.eq(ZjkProduct::getUserId, LoginHelper.getUserId());
List<ZjkProductVo> zjkProductVos = zjkProductMapper.selectVoList(lqw);
if(CollectionUtil.isEmpty(zjkProductVos)){
if (CollectionUtil.isEmpty(zjkProductVos)) {
throw new ServiceException("无效项目");
}
Map<String, ZjkProductVo> productMap = zjkProductVos.stream().collect(Collectors.toMap(ZjkProductVo::getProductName, v -> v));
......@@ -326,10 +314,10 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi
//获取项目全部评审阶段
LambdaQueryWrapper<ZjkReviewPhase> ReviewLqw = Wrappers.lambdaQuery();
ReviewLqw.in(ZjkReviewPhase::getItemId,productSet);
ReviewLqw.eq(ZjkReviewPhase::getEffective,1);
ReviewLqw.eq(ZjkReviewPhase::getParentId,0);
ReviewLqw.eq(ZjkReviewPhase::getIsSummarize,0);
ReviewLqw.in(ZjkReviewPhase::getItemId, productSet);
ReviewLqw.eq(ZjkReviewPhase::getEffective, 1);
ReviewLqw.eq(ZjkReviewPhase::getParentId, 0);
ReviewLqw.eq(ZjkReviewPhase::getIsSummarize, 0);
List<ZjkReviewPhaseVo> zjkReviewPhaseVos = zjkReviewPhaseMapper.selectVoList(ReviewLqw);
......@@ -339,26 +327,26 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi
List<ZjkProductSummarizeVo> zjkProductSummarizeVos = baseMapper.selectVoList(pSlqw);
Map<Long, ZjkProductSummarizeVo> zjkProductSummarizeVoMap = zjkProductSummarizeVos.stream().collect(Collectors.toMap(ZjkProductSummarizeVo::getReviewId, v -> v));
List<ZjkProductSummarize> zjkProductSummarizes= new ArrayList<>();
List<ZjkProductSummarize> zjkProductSummarizes = new ArrayList<>();
for (ZjkProductSummarizeExcelVO vo : vos) {
if(!productMap.containsKey(vo.getProductName())){
if (!productMap.containsKey(vo.getProductName())) {
continue;
}
ZjkProductVo zjkProductVo = productMap.get(vo.getProductName());
Long productId = zjkProductVo.getId();
String reviewSn = vo.getReviewSn();
ZjkProductSummarize zjkProductSummarize = BeanUtil.copyProperties(vo, ZjkProductSummarize.class);
ZjkProductSummarize zjkProductSummarize = BeanUtil.copyProperties(vo, ZjkProductSummarize.class);
zjkProductSummarize.setProductId(productId);
List<ZjkReviewPhaseVo> collect1 = zjkReviewPhaseVos.stream().filter(s -> s.getReviewSn().equals(reviewSn) && s.getItemId().equals(productId)).collect(Collectors.toList());
if(CollectionUtil.isEmpty(collect1)){
if (CollectionUtil.isEmpty(collect1)) {
throw new ServiceException("无效项目阶段,请修改");
}
for (ZjkReviewPhaseVo zjkReviewPhaseVo : collect1) {
if(zjkProductSummarizeVoMap.containsKey(zjkReviewPhaseVo.getId())){
throw new ServiceException(vo.getProductName()+
if (zjkProductSummarizeVoMap.containsKey(zjkReviewPhaseVo.getId())) {
throw new ServiceException(vo.getProductName() +
ReviewSnEnum.getByCode(zjkReviewPhaseVo.getReviewSn()).getDesc()
+"阶段 已总结");
+ "阶段 已总结");
}
zjkProductSummarize.setReviewId(zjkReviewPhaseVo.getId());
......@@ -376,7 +364,7 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi
zjkProductSummarizes.add(zjkProductSummarize);
}
baseMapper.insertBatch(zjkProductSummarizes);
baseMapper.insertBatch(zjkProductSummarizes);
List<ZjkProductSummarizeLog> zjkProductSummarizeLogs = BeanUtil.copyToList(zjkProductSummarizes, ZjkProductSummarizeLog.class);
for (ZjkProductSummarizeLog zjkProductSummarizeLog : zjkProductSummarizeLogs) {
......@@ -386,7 +374,7 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi
zjkProductSummarizeLogMapper.insertBatch(zjkProductSummarizeLogs);
Set<Long> reviewIds = zjkReviewPhaseVos.stream().map(ZjkReviewPhaseVo::getId).collect(Collectors.toSet());
//修改项目总结 导入代码
if(CollectionUtil.isNotEmpty(reviewIds)){
if (CollectionUtil.isNotEmpty(reviewIds)) {
zjkReviewPhaseMapper.updateByIds(reviewIds);
}
return true;
......
......@@ -6,21 +6,29 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.zjk.domain.ZjkReviewPhase;
import org.dromara.zjk.domain.bo.ZjkProductBo;
import org.dromara.zjk.domain.bo.ZjkReviewPhaseBo;
import org.dromara.zjk.domain.bo.ZjkReviewProductBo;
import org.dromara.zjk.domain.vo.ZjkExpertVo;
import org.dromara.zjk.domain.vo.ZjkProductVo;
import org.dromara.zjk.domain.vo.ZjkReviewPhaseVo;
import org.dromara.zjk.domain.vo.ZjkReviewProductVo;
import org.dromara.zjk.enums.ReviewSnEnum;
import org.dromara.zjk.mapper.ZjkExpertMapper;
import org.dromara.zjk.mapper.ZjkProductMapper;
import org.dromara.zjk.mapper.ZjkReviewPhaseMapper;
import org.dromara.zjk.service.IZjkReviewPhaseService;
import org.dromara.zjk.zwy.utils.StringCryptoUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
......@@ -41,7 +49,9 @@ public class ZjkReviewPhaseServiceImpl implements IZjkReviewPhaseService {
private final ZjkReviewPhaseMapper baseMapper;
private final ZjkProductMapper productMapper;
private final ZjkExpertMapper expertMapper;
@Autowired
private StringCryptoUtil stringCryptoUtil;
/**
* 查询抽取条件
*
......@@ -149,6 +159,24 @@ public class ZjkReviewPhaseServiceImpl implements IZjkReviewPhaseService {
@Override
public TableDataInfo<ZjkReviewProductVo> reviewProductList(ZjkReviewProductBo bo, PageQuery pageQuery) {
boolean contains = LoginHelper.getLoginUser().getRolePermission().contains(TenantConstants.EXPERT_ROLE_KEY);
boolean xmcontains = LoginHelper.getLoginUser().getRolePermission().contains(TenantConstants.XM_ROLE_KEY);
boolean jgcontains = LoginHelper.getLoginUser().getRolePermission().contains(TenantConstants.JG_ROLE_KEY);
bo.setUserId(LoginHelper.getUserId());
ZjkExpertVo zjkExpertVo = expertMapper.selectByUserId(LoginHelper.getUserId());
if(zjkExpertVo!=null){
bo.setExpertId(zjkExpertVo.getExpertId());
}
if (contains) {
bo.setIsExpert(1);
}else if(xmcontains){
bo.setIsExpert(0);
}else{
bo.setIsExpert(2);
}
//机构项目管理员
Page<ZjkReviewProductVo> result = baseMapper.reviewProductList(pageQuery.build(), bo);
return TableDataInfo.build(result);
}
......@@ -178,9 +206,26 @@ public class ZjkReviewPhaseServiceImpl implements IZjkReviewPhaseService {
@Override
public List<ZjkReviewProductVo> reviewExport(ZjkReviewProductBo bo) {
List<ZjkReviewProductVo> result = baseMapper.reviewExport( bo);
boolean contains = LoginHelper.getLoginUser().getRolePermission().contains(TenantConstants.EXPERT_ROLE_KEY);
boolean xmcontains = LoginHelper.getLoginUser().getRolePermission().contains(TenantConstants.XM_ROLE_KEY);
bo.setUserId(LoginHelper.getUserId());
ZjkExpertVo zjkExpertVo = expertMapper.selectByUserId(LoginHelper.getUserId());
if(zjkExpertVo!=null){
bo.setExpertId(zjkExpertVo.getExpertId());
}
if (contains) {
bo.setIsExpert(1);
}else if(xmcontains){
bo.setIsExpert(0);
}else{
bo.setIsExpert(2);
}
List<ZjkReviewProductVo> result = baseMapper.reviewProductListForExport(bo);
if(!CollectionUtil.isEmpty(result)){
for (ZjkReviewProductVo zjkReviewProductVo : result) {
zjkReviewProductVo.setUnitConcat(stringCryptoUtil.decryptField(zjkReviewProductVo.getUnitConcat()));
String reviewSn = zjkReviewProductVo.getReviewSn();
ReviewSnEnum byCode = ReviewSnEnum.getByCode(reviewSn);
if(byCode!=null){
......@@ -209,6 +254,12 @@ public class ZjkReviewPhaseServiceImpl implements IZjkReviewPhaseService {
return baseMapper.getReviewProductCountByExpertId(expertId);
}
@Override
public R<List<ZjkProductBo>> invoiceProductList() {
List<ZjkProductBo> res = baseMapper.getInvoiceProductList();
return R.ok(res);
}
private List<String> getReviewSn(String reviewSn) {
List<String> list = new ArrayList<>();
if(reviewSn.equals(ReviewSnEnum.FINAL_ACCEPTANCE.getCode())){
......
......@@ -78,6 +78,7 @@ public class ZjkSmsInfoServiceImpl extends ServiceImpl<ZjkSmsInfoMapper, ZjkSmsI
info.setSmsContent(content);
info.setParamJson(dto.getParamJson().toJSONString());
info.setTemplateId(dto.getTemplateId());
//TODO 短信发送暂定我的手机
info.setReceivePhone(contact);
return info;
}).collect(Collectors.toList());
......
......@@ -32,10 +32,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.*;
import java.util.*;
import java.util.stream.Collectors;
......@@ -118,9 +115,16 @@ public class ZjkMoneyStatementServiceImpl implements IZjkMoneyStatementService {
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo() {
Date[] currentMonthDateRange = DateUtils.getLastMonthDateRange(LocalDate.now());
Date startTime = currentMonthDateRange[0];
Date endTime = currentMonthDateRange[1];
// 获取当月第一天和最后一天的 Date
// 获取当前日期
LocalDate now = LocalDate.now();
Date startTime = Date.from(now.withDayOfMonth(1).atStartOfDay(ZoneId.systemDefault()).toInstant());
Date endTime = Date.from(now.withDayOfMonth(now.lengthOfMonth()).atStartOfDay(ZoneId.systemDefault()).toInstant());
// Date startTime = currentMonthDateRange[0];
// Date endTime = currentMonthDateRange[1];
List<String> tenantIds = expertMoneyInfoMapper.selectTenantIds();
if(CollectionUtil.isEmpty(tenantIds)){
return true;
......@@ -171,8 +175,17 @@ public class ZjkMoneyStatementServiceImpl implements IZjkMoneyStatementService {
@Override
public Boolean addYear() {
Date[] currentMonthDateRange = DateUtils.getLastYearDateRange(LocalDate.now());
Date startTime = currentMonthDateRange[0];
Date endTime = currentMonthDateRange[1];
LocalDate now = LocalDate.now();
// 当年第一天 00:00:00
Date startTime = Date.from(now.withDayOfYear(1).atStartOfDay(ZoneId.systemDefault()).toInstant());
// 当年最后一天 23:59:59
LocalDateTime endDateTime = now.withDayOfYear(now.lengthOfYear()).atTime(23, 59, 59);
Date endTime = Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant());
// Date startTime = currentMonthDateRange[0];
// Date endTime = currentMonthDateRange[1];
List<String> tenantIds = expertMoneyInfoMapper.selectTenantIds();
if(CollectionUtil.isEmpty(tenantIds)){
return true;
......@@ -224,12 +237,17 @@ public class ZjkMoneyStatementServiceImpl implements IZjkMoneyStatementService {
zjkMoneyExpertStatement.setStatementId(moneyStatement.getId());
zjkMoneyExpertStatement.setMoneyCycle(zjkExpertMoneyInfoVO.getMoneyCycle());
zjkMoneyExpertStatement.setExpertType(zjkExpertMoneyInfoVO.getExpertType());
zjkMoneyExpertStatement.setTenantId(tenantId);
zjkMoneyExpertStatementList.add(zjkMoneyExpertStatement);
}
}
//汇总
// 在分组前检查列表是否为空
if (CollectionUtil.isEmpty(zjkExpertMoneyInfoList)) {
// 处理空列表的情况
return; // 或其他适当的处理
}
Map<String, List<ZjkExpertMoneyInfoVO>> moneyCycleMap = zjkExpertMoneyInfoList.stream().collect(Collectors.groupingBy(ZjkExpertMoneyInfoVO::getMoneyCycle));
List<ZjkMoneyCollectStatement> zjkMoneyCollectStatements = new ArrayList<>();
for (String moneyCycle : moneyCycleMap.keySet()) {
......@@ -249,6 +267,7 @@ public class ZjkMoneyStatementServiceImpl implements IZjkMoneyStatementService {
zjkMoneyCollectStatement.setPayMoney(payMoney);
zjkMoneyCollectStatement.setNoPayMoney(noPayMoney);
zjkMoneyCollectStatement.setSumFee(expertTypeMoneyFee);
zjkMoneyCollectStatement.setTenantId(tenantId);
zjkMoneyCollectStatements.add(zjkMoneyCollectStatement);
}
}
......@@ -296,6 +315,7 @@ public class ZjkMoneyStatementServiceImpl implements IZjkMoneyStatementService {
zjkMoneyAnalyseStatement.setProportion(percentage);
zjkMoneyAnalyseStatement.setExpertType(expertType);
zjkMoneyAnalyseStatement.setStatementId(moneyStatement.getId());
zjkMoneyAnalyseStatement.setTenantId(tenantId);
zjkMoneyAnalyseStatementList.add(zjkMoneyAnalyseStatement);
}
}
......
......@@ -48,7 +48,6 @@ public class DynamicCronTask implements SchedulingConfigurer {
private ZjkInvoiceReportService zjkInvoiceReportService;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
//ivs会话保活
taskRegistrar.addTriggerTask(() -> {
zjkPointUserService.handleWaitCheckPointStatus();
}, triggerContext -> new CronTrigger(config.refreshCheckPoint).nextExecutionTime(triggerContext).toInstant());
......
package org.dromara.zjk.utils;
/**
* api线程变量
* @author : yanguohua
* @version : 1.0
* @date : 2025/8/26 15:29
*/
public class ApiThreadLocal {
private ApiThreadLocal() {
}
private static final ThreadLocal<String> ak = new ThreadLocal<>();
public static String getAk() {
return ak.get();
}
public static void putAk(String aks) {
ak.set(aks);
}
}
......@@ -55,5 +55,9 @@ public class IdCardValidator {
int mod = sum % 11;
return idCard.charAt(17) == checkCode[mod];
}
public static void main(String[] args) {
System.out.println(isValid("142322199301218011"));
}
}
......@@ -26,6 +26,7 @@ public class SensitiveEncryptAspect {
@Pointcut("@annotation(org.dromara.zjk.zwy.annotation.DecryptOperation)")
public void decryptPointcut() {}
/** 加密执行前 */
@Before("encryptPointcut()")
public void beforeEncrypt(JoinPoint joinPoint) {
......
......@@ -69,7 +69,7 @@ public class DecryptClient {
return plaintext;
} catch (Exception e) {
log.error("调用解密服务失败,密文 hash: {}", ciphertextBlob != null ? ciphertextBlob.hashCode() : "null", e);
throw new RuntimeException("调用解密服务失败", e);
return ciphertextBlob;
}
}
......@@ -99,5 +99,14 @@ public class DecryptClient {
return headers;
}
public static void main(String[] args) {
String nonce = UUID.randomUUID().toString().replaceAll("-", "").substring(0, 32);
System.out.println(nonce);
System.out.println(String.valueOf(System.currentTimeMillis()));
String str="MTgzMTExMTExMTE=";
System.out.println(new String(Base64.getDecoder().decode(str)));
String plaintext = new String(Base64.getDecoder().decode(str), StandardCharsets.UTF_8);
System.out.println(plaintext);
}
}
......@@ -62,7 +62,7 @@ public class EncryptClient {
return cipherText;
} catch (Exception e) {
log.error("调用加密服务失败,明文内容:{}", plainText, e);
throw new RuntimeException("调用加密服务失败", e);
return plainText;
}
}
......
......@@ -121,5 +121,4 @@ public class SensitiveDataService {
Number.class.isAssignableFrom(clazz) ||
clazz.getName().startsWith("java.time.");
}
}
......@@ -38,13 +38,15 @@ cron:
activity-start-check-point: ${ACTIVITY_START_CHECK_POINT:0 */1 * * * ?}
activity-end-check-point: ${ACTIVITY_END_CHECK_POINT:0 */1 * * * ?}
refresh-expert-chart: ${REFRESH_EXPERT_CHART:0 */1 * * * ?}
annual-Inspection: ${ANNUAL_INSPECTION:0 0 1 12 * ?}
annual-Inspection: ${ANNUAL_INSPECTION:0 50 23 31 12 ?}
# annual-Inspection: ${ANNUAL_INSPECTION:0 45 10 * * ?}
statement-Year-Inspection: ${STATEMENT_YEAR_INSPECTION:0 0 1 1 * ?}
statement-Inspection: ${STATEMENT_YEAR_INSPECTION:0 0 1 * * ?}
cancel-Expert-Inspection: ${CANCEL-EXPERT-INSPECTION:0 */1 * * * ?}
#每月1日的凌晨1点执行
invoice-report-month: ${INVOICE_REPORT_MONTH:0 53 14 * * ?}
#每年1月1日的凌晨2点执行
invoice-report-year: ${INVOICE_REPORT_YEAR:0 51 14 * * ?}
# 每月1日的凌晨2点执行
invoice-report-month: ${INVOICE_REPORT_MONTH:0 0 2 1 * ?}
# 每年1月1日的凌晨3点执行
invoice-report-year: ${INVOICE_REPORT_YEAR:0 0 3 1 1 ?}
......@@ -20,27 +20,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="bo.annualInspectionStatus != null">
and zai.annual_inspection_status = #{bo.annualInspectionStatus}
</if>
<if test="bo.searchValue != null and bo.searchValue !=''">
AND (zai.annual_inspection_name like '%' || #{bo.searchValue} || '%' or zai.annual_inspection_sn like '%' || #{bo.searchValue} || '%')
<if test="bo.annualInspectionSn != null">
and zai.annual_inspection_sn like '%' || #{bo.annualInspectionSn} || '%'
</if>
<if test="bo.annualInspectionName != null and bo.annualInspectionName !=''">
AND zai.annual_inspection_name like '%' || #{bo.annualInspectionName} || '%'
</if>
<if test="bo.contact != null and bo.contact !=''">
and zp.contact = #{bo.contact}
</if>
<if test="bo.beginAuditTime != null and bo.endAuditTime != null">
AND audit_time &gt;= TO_DATE(#{bo.beginAuditTime}, 'YYYY-MM-DD')
AND audit_time &lt;= TO_DATE(#{bo.endAuditTime}, 'YYYY-MM-DD')
<if test="bo.start != null and bo.end != null">
AND audit_time &gt;= TO_DATE(#{bo.start}, 'YYYY-MM-DD')
AND audit_time &lt; TO_DATE(#{bo.end}, 'YYYY-MM-DD') + INTERVAL '1 day'
</if>
</where>
ORDER BY zai.create_time desc
</select>
<select id="selectApprovalByUserId" resultType="java.lang.String">
select nick_name from sys_user where user_id=#{updateBy}
</select>
<update id="batchAnnualInspection">
UPDATE zjk_annual_inspection
SET
annual_inspection_status = #{annualInspectionStatus},
audit_time = #{auditTime},
update_time = #{updateTime},
update_by = #{updateBy}
<if test="reason != null and reason != ''">
reason = #{reason}
,reason = #{reason}
</if>
WHERE id IN
<foreach item="id" collection="ids" open="(" separator="," close=")">
......
......@@ -17,6 +17,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LEFT JOIN zjk_expert zp ON zp.expert_id = zai.expert_id and zp.status =2 and zp.delete_flag = 0
<where>
zai.del_flag = 0
<if test="bo.recordsSn != null">
and zai.records_sn like '%' || #{bo.recordsSn} || '%'
</if>
<if test="bo.annualInspectionName != null and bo.annualInspectionName !=''">
AND zai.annual_inspection_name like '%' || #{bo.annualInspectionName} || '%'
</if>
<if test="bo.annualInspectionStatus != null and bo.annualInspectionStatus!=''">
and zai.annual_inspection_status = #{bo.annualInspectionStatus}
</if>
......
......@@ -181,7 +181,7 @@
</if>
<if test="bo.status != null and bo.status != ''">
<if test="bo.status == 0">
and dd.flag is null
and dd.flag = 0
</if>
<if test="bo.status != 0">
and dd.flag = #{bo.status}
......@@ -252,6 +252,7 @@
left join zjk_expert zee on aa.expert_id = zee.expert_id
left join zjk_product zp on aa.item_id = zp.id and zp.user_id=#{bo.userId}
left join sys_dict_data sdd on sdd.dict_value=aa.review_sn and sdd.dict_type='item_stage'
where zp.CREATE_BY = #{bo.userId}
)dd
<where>
dd.userId is not null and dd.expert_id is not null
......
......@@ -35,15 +35,23 @@
expert_money_file,product_id,product_type,
product_name
</sql>
<select id="selectMoneyInfoList" resultType="org.dromara.zjk.domain.vo.ZjkExpertMoneyInfoVO">
select zemi.*
from zjk_expert_money_info zemi
<select id="selectMoneyInfoList" resultType="org.dromara.zjk.domain.ZjkExpertMoneyInfo">
select zemi.money_id,zemi.expert_type,zemi.expert_id,
zemi.expert_money,zemi.expert_name,zemi.expert_unit,
zemi.tenant_id,zemi.ASSIGN_ID,zemi.create_dept,
zemi.create_by,zemi.create_time,zemi.update_by,
zemi.update_time,zemi.remark,zemi.expert_money_flag,
zemi.expert_money_file,zemi.product_id,zemi.product_type,zemi.product_name,
zemi.review_date,zemi.settlement_date,zemi.settlement_sn,zemi.pay_sn,zemi.status,
zemi.expert_type_money_fee,zemi.review_count,zemi.expert_no_pay_money,zemi.expert_pay_money,
zemi.money_cycle,zemi.pay_method,ze.contact as expert_contact,ze.id_card as expert_idcard
from zjk_expert_money_info zemi left join zjk_expert ze on ze.expert_id = zemi.expert_id
where zemi."ASSIGN_ID" = 0
<if test="bo.expertIdcard != null and bo.expertIdcard != '' ">
and bo.id_card like '%' || #{bo.expertIdcard} ||'%'
and ze.id_card like '%' || #{bo.expertIdcard} ||'%'
</if>
<if test="bo.expertContact != null and bo.expertContact != '' ">
and bo.contact like '%' || #{bo.expertContact} || '%'
and ze.contact like '%' || #{bo.expertContact} || '%'
</if>
<if test="bo.expertMoneyFlag != null and bo.expertMoneyFlag != '' ">
and zemi.expert_money_flag = #{bo.expertMoneyFlag}
......@@ -56,7 +64,7 @@
</if>
</select>
<select id="selectListByMonth" resultType="org.dromara.zjk.domain.vo.ZjkExpertMoneyInfoVO">
select zemi.*,ze.expert_name,zemc.money_type,zemc.money_cycle
select zemi.*
from zjk_expert_money_info zemi
inner join zjk_expert ze on ze.expert_id = zemi.expert_id
inner join zjk_expert_money_config zemc on ze.position_title_level = zemc.money_id
......@@ -75,15 +83,61 @@
</select>
<select id="getExpertList" resultType="org.dromara.zjk.domain.vo.ZjkExpertVo">
select DISTINCT ze.expert_id,
ze.expert_name,
ze.contact,
ze.work_unit
ze.expert_name,
ze.contact,
ze.id_card,
ze.position_title_level,
ze.work_unit
from zjk_expert_money_info zem
left join zjk_expert ze ON zem.expert_id = ze.expert_id
where zem.status = 1
--取支付或支付的专家进行开票
and zem.expert_money_flag != 1
and zem.product_id = #{productId}
and zem.product_type =#{reviewSn}
and zem.product_type = #{reviewSn}
</select>
<select id="getExpertListForSettle" resultType="org.dromara.zjk.domain.vo.ZjkExpertVo">
select distinct ze.expert_id,
ze.expert_name,
ze.contact,
ze.id_card as idcard,
zrp.review_sn,
zei.item_id as product_id,
ze.work_unit
from zjk_expert_item zei
left join zjk_expert ze on zei.expert_id = ze.expert_id
left join zjk_review_phase zrp on zrp.id = zei.review_id
where zrp.effective = 1
and zei.accept_status = '1'
and zei.leave_status = '0'
and zei.item_id = #{productId}
and zrp.review_sn = #{reviewSn}
and ze.expert_id not in (SELECT expert_name
FROM zjk_invoice zemi
WHERE zemi.product_id = #{productId} AND zemi.review_sn = #{reviewSn})
</select>
<select id="selectByIdEx" resultType="org.dromara.zjk.domain.ZjkExpertMoneyInfo">
select zemi.money_id,zemi.expert_type,zemi.expert_id,
zemi.expert_money,zemi.expert_name,zemi.expert_unit,
zemi.tenant_id,zemi.create_dept,
zemi.create_by,zemi.create_time,zemi.update_by,
zemi.update_time,zemi.remark,zemi.expert_money_flag,
zemi.expert_money_file,zemi.product_id,zemi.product_type,zemi.product_name,
zemi.review_date,zemi.settlement_date,zemi.settlement_sn,zemi.pay_sn,zemi.status,
zemi.expert_type_money_fee,zemi.review_count,
zemi.money_cycle,zemi.pay_method,ze.contact as expert_contact,ze.id_card as expert_idcard
from zjk_expert_money_info zemi left join zjk_expert ze on ze.expert_id = zemi.expert_id
where zemi.money_id = #{moneyId}
</select>
<select id="selectJsList" resultType="org.dromara.zjk.domain.ZjkExpertMoneyInfo">
select zemi.money_id, zemi.settlement_sn
from zjk_expert_money_info zemi
where zemi.status = 1
and zemi.product_id = #{productId}
and zemi.product_type = #{reviewSn}
and zemi.expert_id = #{expertId}
and not EXISTS(select 1
from zjk_invoice zi
where zi.settle_id = zemi.money_id)
</select>
</mapper>
......@@ -26,7 +26,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LEFT JOIN zjk_expert_money_config zemc ON zemc.money_id = zi.expert_title_level and zemc.ASSIGN_ID =0 <!--逻辑删除标志,0为正常 -->
<where>
<if test="bo.expertName != null and bo.expertName != ''">
and zi.expert_name like '%' || #{bo.expertName} || '%'
and ze.expert_name like '%' || #{bo.expertName} || '%'
</if>
<if test="bo.expertPhone != null and bo.expertPhone != ''">
and zi.expert_phone like '%' || #{bo.expertPhone} || '%'
......@@ -47,20 +47,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
zi.*,
zemc.money_type as expertTitleLevel,
so.original_name AS invoiceAttachedName,
so.url AS invoiceAttachedAddr
so.url AS invoiceAttachedAddr,
zemi.settlement_sn as settleIdName
FROM
zjk_invoice zi
LEFT JOIN sys_oss so ON so.oss_id = zi.invoice_attached
LEFT JOIN zjk_expert_money_config zemc ON zemc.money_id = zi.expert_title_level AND zemc.ASSIGN_ID =0 <!--逻辑删除标志,0为正常 -->
left join zjk_expert_money_info zemi on zi.settle_id=zemi.money_id
WHERE zi.id = #{id}
</select>
<select id="selectTotalMoney" resultType="java.math.BigDecimal">
SELECT
SUM(invoice_money) as totalMoney
FROM
zjk_invoice
SELECT SUM(invoice_money) as totalMoney
FROM zjk_invoice
WHERE invoice_money IS NOT NULL
</select>
<select id="checkIfImport" resultType="org.dromara.zjk.domain.ZjkExpertMoneyInfo">
select zemi.product_id,zemi.money_id from zjk_expert_money_info zemi LEFT JOIN zjk_product zp on zemi.product_id=zp.id
where zp.product_name=#{productName} and zemi.product_type=#{reviewSn} and zemi.expert_name=#{expertName} and zemi.settlement_sn=#{settleNo}
</select>
</mapper>
......@@ -33,7 +33,12 @@
case when report_type = 0 then '每月' else '每年' end as typeDesc,
TO_CHAR(date_range_start, 'YYYY/MM/DD') || '~' || TO_CHAR(date_range_end, 'YYYY/MM/DD')
AS date_range
FROM zjk_invoice_report order by "CREATE_TIME" desc
FROM zjk_invoice_report
where 1=1
<if test="reportType != null and reportType != null">
and report_type = #{reportType}
</if>
order by "CREATE_TIME" desc
</select>
<select id="getInfoList" resultType="org.dromara.zjk.domain.vo.FpReportInVO">
select pp.* from (
......
......@@ -106,6 +106,12 @@
LEFT JOIN zjk_expert ze ON ze.user_id = ZL.create_by
where
1=1
<if test="bo.createByStr != null and bo.createByStr != ''">
and su.nick_name like '%' || #{bo.createByStr} || '%'
</if>
<if test="bo.gid != null and bo.gid != ''">
and ZL.GID like '%' || #{bo.gid} || '%'
</if>
<if test="bo.createBy != null and bo.createBy != ''">
and zl.create_by = #{bo.createBy}
</if>
......
......@@ -32,6 +32,6 @@
UPDATE_TIME
</sql>
<select id="getAbleReward" resultType="org.dromara.zjk.domain.ZjkPointReward">
select * from zjk_point_reward where status=1 and (is_forever=1 or reward_until >= CURRENT_DATE)
select * from zjk_point_reward where status=1 and (is_forever=1 or reward_until >= CURRENT_TIMESTAMP)
</select>
</mapper>
......@@ -43,6 +43,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="bo.idCard != null and bo.idCard !=''">
and zp.id_card = #{bo.idCard}
</if>
<if test="bo.expertStatus != null and bo.expertStatus !=''">
and zrr.expert_status = #{bo.expertStatus}
</if>
</where>
ORDER BY zrr.create_time desc
</select>
......
......@@ -23,11 +23,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="getByProductIds" resultType="org.dromara.zjk.domain.vo.ZjkExpertItemVo">
select *
from zjk_expert_item
where accept_status in (0,1) and item_id in
from zjk_expert_item zei
where zei.accept_status in (0,1) and zei.item_id in
<foreach collection="ids" open="(" separator="," close=")" item="id">
#{id}
</foreach>
and EXISTS(select 1 from zjk_review_phase zrp where zrp.id=zei.review_id and zrp.effective=1)
</select>
<select id="selectDataList" resultType="java.lang.String">
......@@ -74,11 +75,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND zei.confirm_code = #{confirmCode}
</when>
<otherwise>
AND zei.refuse_code = #{confirmCode}
AND zei.refuse_code = #{refuseCode}
</otherwise>
</choose>
</if>
ORDER BY zei.review_id DESC LIMIT 1
</select>
<select id="selectCancle" resultType="org.dromara.zjk.domain.vo.ZjkExpertItemVo">
SELECT zei.id as id ,zrp.review_time, zei.*,zie.id as item_extreation_id
......@@ -115,7 +116,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND e.contact = #{phone}
AND i.is_sure = 1
AND e.delete_flag = 0
ORDER BY i.create_time DESC
ORDER BY i.review_id DESC
LIMIT 1
</select>
<select id="getCheckZjAccetpt" resultType="org.dromara.zjk.domain.ZjkExpertItem">
......
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.zjk.mapper.ZjkExpertMapper">
<select id="selectExistingIdCards" resultType="String">
......@@ -62,12 +62,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
e.approval_type,
e.unit_type,
e.id_card,
e.is_classified,
e.scope_of_activity,
e.origin
FROM zjk_expert e
LEFT JOIN zjk_expert_major em on em.expert_id = e.expert_id
LEFT JOIN zjk_expert_professional ep on ep.expert_id = e.expert_id
<where>
e.delete_flag='0'
not EXISTS(select 1 from zjk_credit_user zcu where zcu.expert_id=e.expert_id and zcu.reward_id in (4,5,6))
and e.delete_flag='0'
<if test="bo.status== null ">
AND e.status NOT IN (0, 4, 5)
</if>
......@@ -110,7 +113,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectByUserIds" resultType="org.dromara.zjk.domain.vo.ZjkExpertVo">
select su.nick_name user_name ,su.user_id user_id,dept_name ,ze.*,so.url as avatar
from sys_user su
from sys_user su
left join zjk_expert ze on ze.user_id = su.user_id
left join sys_dept sd on su.dept_id = sd.dept_id
left join sys_oss so on su.avatar = so.oss_id
......@@ -139,19 +142,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectExpertAllList" resultType="org.dromara.zjk.domain.ZjkExpert">
SELECT
e.*,
zcu.credit_count
FROM
zjk_expert e
LEFT JOIN zjk_credit_user zcu ON zcu.expert_id = e.expert_id
WHERE
status = 2
SELECT e.*,
zcu.credit_count
FROM zjk_expert e
LEFT JOIN zjk_credit_user zcu ON zcu.expert_id = e.expert_id
WHERE status = 2
AND delete_flag = 0
</select>
<select id="selectDataWorkId" resultType="java.lang.String">
select dict_label from sys_dict_data where dict_type = 'perform_work_type' and dict_value = #{value} and tenant_id = #{tandId}
select dict_label
from sys_dict_data
where dict_type = 'perform_work_type'
and dict_value = #{value}
and tenant_id = #{tandId}
</select>
<select id="expertList" resultType="org.dromara.zjk.domain.vo.ZjkExpertVo">
......@@ -194,6 +198,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
e.unit_type,
e.id_card,
e.origin,
e.is_classified,
e.scope_of_activity,
zcu.reward_id,
zcr.reward_type,
e.expert_sources,
e.position_title_level
......@@ -214,110 +221,102 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="bo.contact != null and bo.contact !=''">
AND e.contact like '%' || #{bo.contact} || '%'
</if>
<if test="bo.idCard != null and bo.idCard !=''">
AND e.id_card like '%' || #{bo.idCard} || '%'
</if>
<if test="bo.workProfessialYear != null">
AND e.work_professial_year = #{bo.workProfessialYear}
</if>
<if test="bo.unitType != null">
and e.unit_type=#{bo.unitType}
</if>
order by e.update_time desc
</where>
order by e.update_time desc
</select>
<select id="getExpertBaseInfo" resultType="org.dromara.zjk.domain.ExpertBaseInfo">
SELECT
ze.expert_name,
ze.work_unit,
ze.duty,
ze.status,
zpu.point_count,
zcl.credit_name,
ze.perform_work_id
FROM
zjk_expert ze
LEFT JOIN zjk_point_user zpu on zpu.expert_id = ze.expert_id
LEFT JOIN zjk_credit_user zcu on zcu.expert_id = ze.expert_id
LEFT JOIN zjk_credit_lv zcl on zcl."id" = zcu.lv_id
SELECT ze.expert_name,
ze.work_unit,
ze.duty,
ze.status,
zpu.point_count,
zcl.credit_name,
ze.perform_work_id
FROM zjk_expert ze
LEFT JOIN zjk_point_user zpu on zpu.expert_id = ze.expert_id
LEFT JOIN zjk_credit_user zcu on zcu.expert_id = ze.expert_id
LEFT JOIN zjk_credit_lv zcl on zcl."id" = zcu.lv_id
WHERE ze.user_id = #{userId}
</select>
<select id="getExpertPerformWorkCount" resultType="org.dromara.zjk.domain.vo.ExpertPerformWorkCountVO">
SELECT
CAST(perform_work_id AS INTEGER) AS performWork,
COUNT(*) AS COUNT
CAST(perform_work_id AS INTEGER) AS performWork,
COUNT(*) AS COUNT
FROM (
SELECT
tenant_id,
TRIM(VALUE) AS perform_work_id,
update_time
FROM
zjk_expert,
UNNEST(string_to_array(perform_work_id, ',')) AS VALUE
<where>
status = 2
<if test="startDate != null and endDate != null">
and update_time BETWEEN #{startDate} AND #{endDate}
</if>
</where>
) AS split_values
SELECT
tenant_id,
TRIM(VALUE) AS perform_work_id,
update_time
FROM
zjk_expert,
UNNEST(string_to_array(perform_work_id, ',')) AS VALUE
<where>
status = 2
<if test="startDate != null and endDate != null">
and update_time BETWEEN #{startDate} AND #{endDate}
</if>
</where>
) AS split_values
GROUP BY
perform_work_id
perform_work_id
ORDER BY
performWork ASC;
performWork ASC;
</select>
<select id="getAgeRangeStatistics" resultType="java.util.Map">
SELECT
CASE
WHEN age BETWEEN 20 AND 24 THEN '20-25'
WHEN age BETWEEN 25 AND 29 THEN '25-30'
WHEN age BETWEEN 30 AND 34 THEN '30-35'
WHEN age BETWEEN 35 AND 39 THEN '35-40'
WHEN age BETWEEN 40 AND 44 THEN '40-45'
WHEN age BETWEEN 45 AND 49 THEN '45-50'
WHEN age BETWEEN 50 AND 54 THEN '50-55'
WHEN age BETWEEN 55 AND 59 THEN '55-60'
WHEN age BETWEEN 60 AND 64 THEN '60-65'
WHEN age BETWEEN 65 AND 70 THEN '65-70'
ELSE '其他'
END AS age_range,
COUNT(*) AS count
FROM (
SELECT
FLOOR(EXTRACT(YEAR FROM age(birth_date))) AS age
FROM zjk_expert
WHERE birth_date IS NOT NULL
AND status = 2
) t
SELECT CASE
WHEN age BETWEEN 20 AND 24 THEN '20-25'
WHEN age BETWEEN 25 AND 29 THEN '25-30'
WHEN age BETWEEN 30 AND 34 THEN '30-35'
WHEN age BETWEEN 35 AND 39 THEN '35-40'
WHEN age BETWEEN 40 AND 44 THEN '40-45'
WHEN age BETWEEN 45 AND 49 THEN '45-50'
WHEN age BETWEEN 50 AND 54 THEN '50-55'
WHEN age BETWEEN 55 AND 59 THEN '55-60'
WHEN age BETWEEN 60 AND 64 THEN '60-65'
WHEN age BETWEEN 65 AND 70 THEN '65-70'
ELSE '其他'
END AS age_range,
COUNT(*) AS count
FROM (SELECT FLOOR(EXTRACT(YEAR FROM age(birth_date))) AS age
FROM zjk_expert
WHERE birth_date IS NOT NULL
AND status = 2) t
GROUP BY age_range
ORDER BY age_range;
</select>
<select id="getUnitCount" resultType="org.dromara.zjk.domain.vo.ExpertPerformWorkCountVO">
SELECT
ifnull(unit_type,0)as unit_type,
COUNT(1) AS count,
SUM(COUNT(1)) OVER () AS total_count -- 计算总和
FROM
zjk_expert
where status = 2
GROUP BY
unit_type;
SELECT ifnull(unit_type, 0) as unit_type,
COUNT(1) AS count,
SUM(COUNT(1)) OVER () AS total_count -- 计算总和
FROM zjk_expert
where status = 2
GROUP BY unit_type;
</select>
<select id="getPoliticsCount" resultType="org.dromara.zjk.domain.vo.ExpertPerformWorkCountVO">
SELECT
politics,
COUNT( 1 )
FROM
zjk_expert
WHERE
politics IS NOT NULL AND status = 2
GROUP BY
politics
SELECT politics,
COUNT(1)
FROM zjk_expert
WHERE politics IS NOT NULL
AND status = 2
GROUP BY politics
</select>
<select id="workProfessialYear" resultType="java.util.Map">
SELECT ifnull(work_professial_year,0) as work_professial_year ,count(1)
SELECT ifnull(work_professial_year, 0) as work_professial_year, count(1)
FROM zjk_expert
WHERE status = 2
GROUP BY work_professial_year
......@@ -325,11 +324,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getApprovalTimeAnalysis" resultType="java.util.Map">
SELECT
TO_CHAR( approval_time, 'YYYY-MM-DD' ) AS approval_date,-- 格式化审批时间为日期
COUNT( * ) AS approval_count -- 统计每天的记录数
TO_CHAR( approval_time, 'YYYY-MM-DD' ) AS approval_date,-- 格式化审批时间为日期
COUNT( * ) AS approval_count -- 统计每天的记录数
FROM
zjk_expert
zjk_expert
<where>
status = 2
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
......@@ -337,27 +336,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if>
</where>
GROUP BY
TO_CHAR( approval_time, 'YYYY-MM-DD' ) -- 按天分组
TO_CHAR( approval_time, 'YYYY-MM-DD' ) -- 按天分组
ORDER BY
approval_date;-- 按日期排序
approval_date;-- 按日期排序
</select>
<select id="selectByUserId" resultType="org.dromara.zjk.domain.vo.ZjkExpertVo">
select su.nick_name user_name ,su.user_id user_id,dept_name ,ze.*,so.url as avatar
from sys_user su
left join zjk_expert ze on ze.user_id = su.user_id
left join sys_dept sd on su.dept_id = sd.dept_id
left join sys_oss so on su.avatar = so.oss_id
where su.user_id = #{id}
select su.nick_name user_name, su.user_id user_id, dept_name, ze.*, so.url as avatar
from sys_user su
left join zjk_expert ze on ze.user_id = su.user_id
left join sys_dept sd on su.dept_id = sd.dept_id
left join sys_oss so on su.avatar = so.oss_id
where su.user_id = #{id}
</select>
<select id="selectZjkExpertVo" resultType="org.dromara.zjk.domain.vo.ZjkExpertVo">
SELECT
ze.*,
zemc.money_type as positionTitleLevelStr
ze.*,
zemc.money_type as positionTitleLevelStr
FROM
zjk_expert ze
LEFT JOIN zjk_expert_money_config zemc ON zemc.money_id = ze.position_title_level
zjk_expert ze
LEFT JOIN zjk_expert_money_config zemc ON zemc.money_id = ze.position_title_level
<where>
ze.delete_flag = '0'
<if test="userId != null">
......@@ -370,28 +369,92 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="getApprovalTimeCountThisYear" resultType="java.lang.Long">
SELECT
COUNT(*)
FROM
"zjk_expert"
WHERE
EXTRACT(YEAR FROM "approval_time") = EXTRACT(YEAR FROM CURRENT_DATE);
SELECT COUNT(*)
FROM "zjk_expert"
WHERE EXTRACT(YEAR FROM "approval_time") = EXTRACT(YEAR FROM CURRENT_DATE);
</select>
<select id="getPhonesById" resultType="org.dromara.zjk.domain.ZjkExpert">
select user_id,contact from zjk_expert where 1=1
<if test="receiveUserIds != null and receiveUserIds.size() > 0">
AND user_id IN
AND user_id IN
<foreach collection="receiveUserIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
</select>
<select id="getUserIdByPhone" resultType="java.lang.Long">
select user_id from zjk_expert where contact=#{tel}
select user_id
from zjk_expert
where contact = #{tel}
</select>
<select id="selectIdsByName" resultType="java.lang.Long">
select user_id from zjk_expert where expert_name like '%' || #{expertName} || '%'
select user_id
from zjk_expert
where expert_name like '%' || #{expertName} || '%'
</select>
<select id="getConcatenatedExpert" resultType="org.dromara.zjk.domain.vo.ZjkExpertVo">
select z.*
from zjk_expert z
where z.status = 2
and not EXISTS (select 1
from zjk_credit_user zcu
where zcu.expert_id = z.expert_id
and zcu.reward_id in ('4', '5', '6'))
and z.expert_name like '%' || #{name} || '%'
</select>
<select id="getAreaByNameAndCityId" resultType="java.lang.String">
select areaid
from sys_areas
where cityid = #{city}
and area like '%' || #{area} || '%'
limit 1
</select>
<select id="getProvinceByName" resultType="java.lang.String">
select provinceid
from sys_provinces
where province like '%' || #{province} || '%'
limit 1
</select>
<select id="getCityByNameAndProvinceId" resultType="java.lang.String">
select cityid
from sys_cities
where city like '%' || #{city} || '%'
and provinceid = #{province}
limit 1
</select>
<select id="getStageExperts" resultType="org.dromara.zjk.domain.vo.ZjkExpertVo">
select distinct ze.expert_id,
ze.expert_name,
ze.contact,
ze.id_card as idcard,
zrp.review_sn,
zei.item_id as product_id,
zei.accept_status,
ze.work_unit
from zjk_expert_item zei
left join zjk_expert ze on zei.expert_id = ze.expert_id
left join zjk_review_phase zrp on zrp.id = zei.review_id
where zrp.effective = 1
and zei.accept_status in (0, 1)
and zei.leave_status = '0'
and zei.item_id = #{productId}
and zrp.review_sn = #{reviewSn}
</select>
<select id="getWorkperformIdByName" resultType="java.util.Map">
select dict_value value,
dict_label label
from sys_dict_data
where dict_type = 'perform_work_type'
</select>
<select id="selectExistingNameAndIdCardPairs" resultType="string">
SELECT nick_name || '|' || user_name AS combined_key
FROM sys_user
WHERE nick_name || '|' || user_name IN
<foreach collection="checkKeys" item="key" open="(" separator="," close=")">
#{key}
</foreach>
</select>
<update id="updateHmac">
UPDATE zjk_expert
......@@ -402,4 +465,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</set>
WHERE expert_id = #{expertId}
</update>
<update id="handleClassified">
UPDATE zjk_expert
set is_classified = #{isClassified}
WHERE expert_id = #{expertId}
</update>
</mapper>
......@@ -19,7 +19,8 @@
</select>
<select id="selectExtreationList" resultType="org.dromara.zjk.domain.vo.ZjkItemExtreationVo">
SELECT
zie.* ,zp.*,zrp.*,zrp.id as reviewId
zie.extraction_sn,zie.extraction_count,zie.extracted_sum,zie.extraction_user,zp.product_name,zie.item_id,zie.id,zie.extraction_status,
zrp."CREATE_TIME" as extractionTime,zie.expert_sum,zrp.id as reviewId
FROM
zjk_item_extreation zie
LEFT JOIN zjk_product zp ON zp.ID = zie.item_id
......@@ -41,11 +42,14 @@
and zp.product_sn like '%' || #{bo.itemCode} || '%'
</if>
<if test="bo.itemName != null and bo.itemName != '' ">
and zp.product_name like '%' || #{bo.itemName}
and zp.product_name like '%' || #{bo.itemName} || '%'
</if>
<if test="bo.reviewSn != null and bo.reviewSn != '' ">
and zrp.review_sn = #{bo.reviewSn}
</if>
<if test="bo.extractionSn != null and bo.extractionSn != '' ">
and zie.extraction_sn like '%' || #{bo.extractionSn} || '%'
</if>
</where>
order by zie.extraction_time desc
</select>
......
......@@ -12,46 +12,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</update>
<select id="reviewProductList" resultType="org.dromara.zjk.domain.vo.ZjkReviewProductVo">
SELECT
zp.product_name,
select zp.product_name,zrp.review_sn,zp.id,
zp.product_sn,
zp.product_unit,
zp.unit_by,
zp.unit_concat,
zvp.review_sn,
zvp.review_time,
zp.id AS product_id
FROM zjk_expert_item zei
INNER JOIN zjk_review_phase zvp ON zei.review_id = zvp.id
INNER JOIN zjk_product zp ON zp.id = zei.item_id
WHERE 1 = 1
AND effective = 1
<if test="bo.reviewSn != null and bo.reviewSn != ''">
AND zvp.review_sn = #{bo.reviewSn}
zrp.review_time,
zp.id AS product_id from zjk_review_phase zrp LEFT JOIN zjk_product zp ON zp.id = zrp.item_id and zrp.effective=1
WHERE zp.id is not null and zrp.review_time <![CDATA[ < ]]> CURRENT_TIMESTAMP
<if test="bo.isExpert==1">
and EXISTS( select 1 from zjk_expert_item zei where zei.review_id = zrp.id and zei.accept_status=1 and zei.is_sure=1 and zei.expert_id=#{bo.expertId})
</if>
<if test="bo.isExpert==0">
and zp.user_id = #{bo.userId}
</if>
<if test="bo.reviewSn != null and bo.reviewSn != ''">
AND zrp.review_sn = #{bo.reviewSn}
</if>
<if test="bo.search != null and bo.search != ''">
AND (zp.product_name LIKE CONCAT('%', #{bo.search}, '%')
OR zp.product_sn LIKE CONCAT('%', #{bo.search}, '%'))
AND (zp.product_name like '%' || #{bo.search} || '%'
OR zp.product_sn like '%' || #{bo.search} || '%' )
</if>
<if test="bo.startTime != null">
AND zvp.review_time &gt;= #{bo.startTime}
AND zrp.review_time &gt;= #{bo.startTime}
</if>
<if test="bo.endTime != null">
AND zvp.review_time &lt;= #{bo.endTime}
AND zrp.review_time &lt;= #{bo.endTime}
</if>
GROUP BY
zp.product_name,
zp.product_sn,
zp.product_unit,
zp.unit_by,
zp.unit_concat,
zvp.review_sn,
zvp.review_time,
zp.id
</select>
<select id="getByProductId" resultType="java.lang.Long">
......@@ -70,10 +59,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
Max(zvp.review_sn) as review_sn,
Max(zvp.review_time) as review_time,
Max(zp.id) as product_id
from zjk_expert_item zei
from zjk_expert_item zei
inner JOIN zjk_review_phase zvp on zei.review_id = zvp.id
inner JOIN zjk_product zp on zp.id = zei.item_id
WHERE 1=1
WHERE zvp.effective = 1 and zvp.review_time <![CDATA[ > ]]> CURRENT_TIMESTAMP
<if test="bo.search != null and bo.search!= '' ">
and (zp.product_name like '%' || #{bo.search} ||'%' or zp.product_sn like '%' || #{bo.search} ||'%' )
</if>
......@@ -250,4 +240,81 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where zrp.item_extreation_id = #{extractionId}
order by zrp.CREATE_TIME desc
</select>
<select id="getProductList" resultType="org.dromara.zjk.domain.vo.ZjkReviewProductVo">
SELECT
zp.product_name,
zp.product_sn,
zp.product_unit,
zp.unit_by,
zp.unit_concat,
zvp.review_sn,
zvp.review_time,
zp.id AS product_id
FROM zjk_expert_item zei
INNER JOIN zjk_review_phase zvp ON zei.review_id = zvp.id
INNER JOIN zjk_product zp ON zp.id = zei.item_id
WHERE 1 = 1
AND effective = 1
<if test="bo.reviewSn != null and bo.reviewSn != ''">
AND zvp.review_sn = #{bo.reviewSn}
</if>
<if test="bo.search != null and bo.search != ''">
AND (zp.product_name LIKE CONCAT('%', #{bo.search}, '%')
OR zp.product_sn LIKE CONCAT('%', #{bo.search}, '%'))
</if>
<if test="bo.startTime != null">
AND zvp.review_time &gt;= #{bo.startTime}
</if>
<if test="bo.endTime != null">
AND zvp.review_time &lt;= #{bo.endTime}
</if>
GROUP BY
zp.product_name,
zp.product_sn,
zp.product_unit,
zp.unit_by,
zp.unit_concat,
zvp.review_sn,
zvp.review_time,
zp.id
</select>
<select id="reviewProductListForExport" resultType="org.dromara.zjk.domain.vo.ZjkReviewProductVo">
select zp.product_name,zrp.review_sn,zp.id,
zp.product_sn,
zp.product_unit,
zp.unit_by,
zp.unit_concat,
zrp.review_time,
zp.id AS product_id from zjk_review_phase zrp LEFT JOIN zjk_product zp ON zp.id = zrp.item_id and zrp.effective=1
WHERE zp.id is not null and zrp.review_time <![CDATA[ < ]]> CURRENT_TIMESTAMP
<if test="bo.isExpert==1">
and EXISTS( select 1 from zjk_expert_item zei where zei.review_id = zrp.id and zei.accept_status=1 and zei.is_sure=1 and zei.expert_id=#{bo.expertId})
</if>
<if test="bo.isExpert==0">
and zp.user_id = #{bo.userId}
</if>
<if test="bo.reviewSn != null and bo.reviewSn != ''">
AND zrp.review_sn = #{bo.reviewSn}
</if>
<if test="bo.search != null and bo.search != ''">
AND (zp.product_name like '%' || #{bo.search} || '%'
OR zp.product_sn like '%' || #{bo.search} || '%' )
</if>
<if test="bo.startTime != null">
AND zrp.review_time &gt;= #{bo.startTime}
</if>
<if test="bo.endTime != null">
AND zrp.review_time &lt;= #{bo.endTime}
</if>
</select>
<select id="getInvoiceProductList" resultType="org.dromara.zjk.domain.bo.ZjkProductBo">
select DISTINCT zp.id, zp.product_name from zjk_review_phase zrp LEFT JOIN zjk_product zp ON zp.id = zrp.item_id and zrp.effective=1
WHERE zp.id is not null and zrp.review_time <![CDATA[ < ]]> CURRENT_TIMESTAMP
</select>
</mapper>
......@@ -55,8 +55,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
SELECT original_name FROM sys_oss where oss_id= #{invFileId}
</select>
<select id="getCheckNo" resultType="java.lang.String">
SELECT 'DZ' || TO_CHAR(NOW(), 'YYYYMMDD') || '-' || (
SELECT COUNT(1) + 1
FROM zjk_inout_check)
SELECT 'DZ' || TO_CHAR(NOW(), 'YYYYMMDD') || '-' || LPAD(FLOOR(RANDOM() * 90000 + 10000)::text, 5, '0') as id
</select>
<select id="selectUserNameById" resultType="java.lang.String">
select user_name from sys_user where user_id=#{createBy}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.zjk.mapper.ZjkCreditMapper">
<select id="queryPointList" resultType="org.dromara.zjk.domain.vo.CreditShowVO">
......@@ -23,10 +23,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<where>
1=1
<if test="bo.startTime !=null ">
and ze.approval_time >= #{bo.startTime}
and ze.approval_time >= #{bo.startTime}
</if>
<if test="bo.endTime !=null ">
and ze.approval_time &lt;= #{bo.endTime}
and ze.approval_time &lt;= #{bo.endTime}
</if>
<if test="bo.expertName != null and bo.expertName != ''">
and ze.expert_name like '%' || #{bo.expertName} || '%'
......@@ -42,5 +42,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ORDER BY credit_count DESC
</select>
<select id="getPointCount" resultType="java.lang.Integer">
SELECT
count(1)
FROM
zjk_credit_user zpu
inner JOIN zjk_expert ze ON zpu.expert_id = ze.expert_id
inner JOIN zjk_credit_lv lv ON zpu.lv_id = lv.ID
<where>
1=1
<if test="bo.startTime !=null ">
and ze.approval_time >= #{bo.startTime}
</if>
<if test="bo.endTime !=null ">
and ze.approval_time <![CDATA[ <=]]> #{bo.endTime}
</if>
<if test="bo.expertName != null and bo.expertName != ''">
and ze.expert_name like '%' || #{bo.expertName} || '%'
</if>
<if test="bo.workUnit != null and bo.workUnit != ''">
and ze.work_unit like '%' || #{bo.workUnit} || '%'
</if>
<if test="bo.credtieGe != null and bo.crediteLe != null ">
and zpu.credit_count <![CDATA[ <=]]> #{bo.credtieGe}
and zpu.credit_count >= #{bo.crediteLe}
</if>
</where>
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.zjk.mapper.ZjkCreditRuleMapper">
<select id="selectCreditInfo" resultType="org.dromara.zjk.domain.vo.ZjkCreditRuleVo">
select zc.update_time, zc.credit_id as dataNumber, zc.credit eachScore, zcr.rule_name pointReason
from zjk_credit zc
left join zjk_credit_rule zcr on zc.rule_id = zcr.id
WHERE zcr.id is not null and zc.expert_id=#{bo.expertId}
<if test="bo.integralReason != null and bo.integralReason != ''">
and zcr.rule_name like '%' || #{bo.integralReason} || '%'
</if>
<if test="bo.startTime != null and bo.endTime != ''">
AND zc."CREATE_TIME" &gt;= TO_DATE(#{bo.startTime}, 'YYYY-MM-DD')
AND zc."CREATE_TIME" &lt; TO_DATE(#{bo.endTime}, 'YYYY-MM-DD') + INTERVAL '1 day'
</if>
order by zc.create_time desc
</select>
</mapper>
......@@ -28,4 +28,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and zlc.information_id = #{bo.informationId}
</if>
</select>
<select id="selectCommonList" resultType="org.dromara.zjk.learning_world.domain.vo.ZjkLearningCommontVo">
select zlc.*,zli.information_title
from Zjk_learning_commont zlc
inner join zjk_learning_information zli on zlc.information_id = zli.id
where zlc.del_flag = 0 and zli.del_flag = 0
<if test="bo.startTime != null ">
and zlc.comment_time >= #{bo.startTime}
</if>
<if test="bo.endTime != null ">
and zlc.comment_time &lt;= #{bo.endTime}
</if>
<if test="bo.comment != null and bo.comment != '' ">
and zlc.comment like '%' || #{bo.comment} || '%'
</if>
<if test="bo.status != null and bo.status != '' ">
and zlc.status = #{bo.status}
</if>
<if test="bo.parentId != null ">
and zlc.parent_id = #{bo.parentId}
</if>
<if test="bo.informationId != null ">
and zlc.information_id = #{bo.informationId}
</if>
</select>
</mapper>
......@@ -19,9 +19,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
zlc.course_brief,
zlc.perform_work_id,
so.original_name,
so.url
so.url,
su.nick_name createBy,
zlc.create_time
FROM
zjk_learning_course zlc
left join sys_user su on zlc.create_by = su.user_id
LEFT JOIN sys_oss so on so.oss_id = zlc.course_attachment
<where>
<if test="id != null">
......
......@@ -3,6 +3,12 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.zjk.learning_world.mapper.ZjkLearningToolMapper">
<delete id="deleteTool">
delete from zjk_learning_tool where id in
<foreach item="item" collection="ids" separator="," open="(" close=")">
#{item}
</foreach>
</delete>
<select id="queryById" resultType="org.dromara.zjk.learning_world.domain.vo.ZjkLearningToolVo">
SELECT
zlt."id",
......@@ -37,6 +43,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="bo.name != null and bo.name !=''">
and zlt."name" like '%' || #{bo.name} || '%'
</if>
<if test="bo.status != null and bo.status !=''">
and zlt.status = #{bo.status}
</if>
</where>
</select>
</mapper>
......@@ -44,7 +44,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
FROM zjk_product zp
left JOIN zjk_review_phase zrp on zp.id=zrp.item_id
LEFT JOIN zjk_expert ze on ze.user_id = zp.user_id
WHERE zp.del_flag = 0
WHERE zp.del_flag = 0 and zp.approval_status = 1
<if test="bo.productName != null and bo.productName !='' ">
and zp.product_name like '%' || #{bo.productName} || '%'
</if>
......@@ -90,6 +90,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="bo.productName != null and bo.getProductName != '' ">
and zp.product_name like '%' || #{bo.productName} || '%'
</if>
<if test="bo.userId != null and bo.userId != '' ">
and zp.user_id = #{bo.userId}
</if>
</select>
<select id="getProductTypeCountReport" resultType="org.dromara.zjk.domain.ProductCountReport">
......@@ -143,10 +146,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<where>
del_flag = 0
<if test="bo.productSn !=null and bo.productSn != '' ">
and product_sn like '||' #{bo.productSn} '||'
and product_sn like '%' || #{bo.productSn} || '%'
</if>
<if test="bo.productName !=null and bo.productName != '' ">
and product_name like '||' #{bo.productName} '||'
and product_name like '%' || #{bo.productName} || '%'
</if>
<if test="bo.productType !=null and bo.productType != '' ">
and product_type = #{bo.productType}
</if>
ORDER BY create_time DESC
</where>
......@@ -158,4 +164,43 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
left join sys_dept sd on sd.dept_id = zp.create_dept
where zp.del_flag = 0
</select>
<select id="getProductList" resultType="org.dromara.zjk.domain.vo.ProductPanoramaVo">
select DISTINCT zp.id, zp.product_name,zp.product_type,zrp.review_time,zrp.review_sn,zp.product_scale,zp.product_scale,zp.id product_id,zrp.id review_id,zp.create_time from zjk_review_phase zrp LEFT JOIN zjk_product zp ON zp.id = zrp.item_id and zrp.effective=1
WHERE zp.id is not null and zp.del_flag = 0 and zp.approval_status = 1 and zrp.review_time <![CDATA[ < ]]> CURRENT_TIMESTAMP
<if test="bo.productName != null and bo.productName !='' ">
and zp.product_name like '%' || #{bo.productName} || '%'
</if>
<if test="bo.startTime != null ">
and zrp.review_time >= #{bo.startTime}
</if>
<if test="bo.endTime != null ">
and zrp.review_time &lt;= #{bo.endTime}
</if>
<choose>
<when test="bo.reviewSn !=null and bo.reviewSn == '0'">
and zrp.review_sn ISNULL
</when>
<when test="bo.reviewSn !=null">
and zrp.review_sn = #{bo.reviewSn}
</when>
</choose>
</select>
<select id="selectProdoctForApi" resultType="org.dromara.zjk.domain.vo.ZjkProductVo">
select *
from zjk_product
<where>
del_flag = 0
<if test="bo.productSn !=null and bo.productSn != '' ">
and product_sn like '%' || #{bo.productSn} || '%'
</if>
<if test="bo.productName !=null and bo.productName != '' ">
and product_name like '%' || #{bo.productName} || '%'
</if>
<if test="bo.productType !=null and bo.productType != '' ">
and product_type = #{bo.productType}
</if>
ORDER BY create_time DESC
</where>
</select>
</mapper>
......@@ -21,6 +21,9 @@
<if test="bo.fileName != null and bo.fileName != ''">
and a.original_name like '%' || #{bo.fileName} || '%'
</if>
<if test="bo.userId != null and bo.userId != '' ">
and zp.user_id = #{bo.userId}
</if>
</where>
</select>
<select id="selectVoByProductIdReviewSn" resultType="org.dromara.zjk.domain.ZjkProductReviewsn">
......
......@@ -62,7 +62,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="bo.statusList != null and bo.statusList.size > 0 ">
and zps.status in
<foreach collection="bo.statusList" open="(" separator="," close=")" item="status">
#{bo.status}
#{status}
</foreach>
</if>
<if test="bo.ids != null and bo.ids.size > 0 ">
and zps.id in
<foreach collection="bo.ids" open="(" separator="," close=")" item="pid">
#{pid}
</foreach>
</if>
</select>
......
......@@ -29,24 +29,11 @@ public class WebSecurityConfigurer {
@Bean
public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl(adminContextPath + "/");
return httpSecurity
.headers((header) ->
header.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable))
.authorizeHttpRequests((authorize) ->
authorize.requestMatchers(
new AntPathRequestMatcher(adminContextPath + "/assets/**"),
new AntPathRequestMatcher(adminContextPath + "/login")
).permitAll()
.anyRequest().authenticated())
.formLogin((formLogin) ->
formLogin.loginPage(adminContextPath + "/login").successHandler(successHandler))
.logout((logout) ->
logout.logoutUrl(adminContextPath + "/logout"))
.httpBasic(Customizer.withDefaults())
authorize.anyRequest().permitAll()) // 允许所有请求
.csrf(AbstractHttpConfigurer::disable)
.build();
}
......
......@@ -13,6 +13,17 @@ spring:
--- # nacos 配置
spring:
security:
user:
name: ruoyi
password: 123456
boot:
admin:
ui:
title: RuoYi-Cloud-Plus服务监控中心
discovery:
# seata 不具有健康检查的能力 防止报错排除掉
ignored-services: ruoyi-seata-server
cloud:
nacos:
# nacos 服务地址
......
......@@ -22,7 +22,6 @@ server.servlet.contextPath=/nacos
server.error.include-message=ALWAYS
### Default web server port:
server.port=8848
#*************** Network Related Configurations ***************#
### If prefer hostname over ip for Nacos server addresses in cluster.conf:
# nacos.inetutils.prefer-hostname-over-ip=false
......@@ -93,7 +92,7 @@ spring.boot.admin.client.instance.metadata.userpassword: ${spring.boot.admin.cli
### Metrics for prometheus
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,heapdump,threaddump,mappings
### Metrics for elastic search
management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost:9200
......@@ -138,7 +137,7 @@ nacos.core.auth.plugin.nacos.token.expire.seconds=18000
### The default token (Base64 string):
#nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
### 此处为token密钥 需要自行修改
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
nacos.core.auth.plugin.nacos.token.secret.key=kgWJdwbRw74PfD2gPHa2pYZ6nqu9L5Cur/m9qFuji/E=
### worked when nacos.core.auth.system.type=ldap,{0} is Placeholder,replace login username
#nacos.core.auth.ldap.url=ldap://localhost:389
......@@ -192,7 +191,6 @@ nacos.istio.mcp.server.enabled=false
# nacos.core.member.meta.site=
# nacos.core.member.meta.adweight=
# nacos.core.member.meta.weight=
### MemberLookup
### Addressing pattern category, If set, the priority is highest
# nacos.core.member.lookup.type=[file,address-server]
......
@startuml
class ZjkLearningCreditRecord {
- {static} long serialVersionUID
- Long id
- Long revision
- Long userId
- Long learningId
- Date viewingTime
- Long delFalg
}
class ZjkDataChangesLogs {
- {static} long serialVersionUID
- Long id
- String changeType
- String businessType
- String beforeOper
- String afterOper
- String operIp
- Long delFlag
}
class ZjkProductReviewsn {
- {static} long serialVersionUID
- Long id
- Long productId
- String reviewSn
- String status
- String remark
- Long delFlag
}
class ZjkApprovalProcessLogs {
- {static} long serialVersionUID
- Long id
- String actionItem
- String actionContent
- String approvalOpinions
- Long delFlag
}
class ZjkProjectEvaluation {
- {static} long serialVersionUID
- Long id
- Long productSummarizeId
- Long goalAchievement
- Long deliveryQuality
- Long costControl
- Long riskManagement
- Long projectValue
- String evaluateFile
- String projectSummaryEvaluation
- String appraiser
- Date appraiserTime
}
class ZjkExpertHistory {
- {static} long serialVersionUID
- Long id
- String oldData
- String newData
- String modifiedFields
- String remark
- Long deleteFlag
- Long expectId
}
class ZjkProductSummarizeLog {
- {static} long serialVersionUID
- Long id
- Long summarizeId
- Long reviewId
- String productSummarizeName
- String productSummarizeType
- String productGeneral
- String reviewScope
- String reviewConclusion
- String feedback
- String subsequent
- String attachment
- String expertIds
- String status
- String remark
- Long delFlag
- String auditStatus
- String auditRemark
- Long auditBy
- Date auditTime
- Long productId
- String reviewSn
- Integer isEvaluate
}
class ZjkCredit {
- {static} long serialVersionUID
- Long creditId
- Long credit
- Long ruleId
- Long expertId
- Long userId
- Long creditCount
}
class ZjkExpertMoneyConfig {
- {static} long serialVersionUID
- Long moneyId
- String moneyType
- String moneyCycle
- String moneyMethod
- BigDecimal moneyNumber
- Long assignId
- String remark
}
class ZjkPointReward {
- String id
- String rewardName
- Integer rewardType
- String rewardContent
- Integer rewardObj
- Integer effectFlag
- BigDecimal effectStandard
- Date rewardUntil
- Integer isForever
- Integer status
- {static} long serialVersionUID
}
class ZjkCreditRule {
- {static} long serialVersionUID
- Long ID
- String ruleName
- Date expireTime
- Long isForever
- Long status
- Long eachScore
- String ruleKey
- String pointReason
}
class ZjkItemExtreation {
- {static} long serialVersionUID
- Long id
- Long itemId
- Integer expertSum
- Integer extractionCount
- Integer extractedSum
- Integer extractionStatus
- Date extractionTime
- String extractionUser
- String extractionSn
- Long reviewId
- Long isSure
}
class ZjkLeave {
- String gid
- String leaveType
- Date startDate
- Date endDate
- Long leaveDays
- String leaveReason
- String status
- String approvalUser
- String tenantId
- String approvalMsg
- Integer leaveResource
- Long createDept
- Long createBy
- Date createTime
- Long updateBy
- Date updateTime
- {static} long serialVersionUID
}
class ZjkPointRule {
- Long id
- String ruleName
- Date expireTime
- Long isForever
- String ruleKey
- Object status
- BigDecimal eachScore
- {static} long serialVersionUID
}
class ZjkPointUser {
- String id
- Long userId
- Long expertId
- String rewardId
- String rewardTitle
- BigDecimal pointCount
- Integer checkStatus
- String remark
- Date checkTime
- Date changeTime
- {static} long serialVersionUID
}
class ZjkExpertLog {
- {static} long serialVersionUID
- Long id
- String name
- String contactInfo
- String organization
- String position
- Integer entryResult
- Date applicationTime
- String rejectionReason
- Long expertId
}
class ZjkLeaveRule {
- String gid
- Long leaveDay
- String beforeDay
- String proBeforeHour
- String tenantId
- {static} long serialVersionUID
}
class ZjkEvaluate {
- String id
- Long evaluateUser
- String expertPost
- String isPresent
- String itemId
- Integer itemStage
- BigDecimal busLevelScore
- BigDecimal workAttitudeScore
- BigDecimal rightApprovalScore
- String expertComment
- String evaluateFile
- Integer status
- String tenantId
- Integer sourceRole
- {static} long serialVersionUID
}
class ZjkPoint {
- Long id
- BigDecimal points
- Long ruleId
- Long userId
- Long expertId
- String evaluateId
- {static} long serialVersionUID
}
class ZjkProductSummarize {
- {static} long serialVersionUID
- Long id
- Long reviewId
- String productSummarizeName
- String productSummarizeType
- String productGeneral
- String reviewScope
- String reviewConclusion
- String feedback
- String subsequent
- String attachment
- String expertIds
- String status
- String remark
- Long delFlag
- Date auditTime
- String auditStatus
- String auditRemark
- Long auditBy
- Long productId
- String reviewSn
}
class ZjkProduct {
- {static} long serialVersionUID
- Long id
- String productSn
- String productName
- String productType
- Integer productScale
- String productUnit
- String unitBy
- String unitConcat
- String productBrief
- String productDataUrl
- Long status
- Long delFlag
- String remark
- Long userId
}
class ZjkSmsInfo {
- Long id
- Integer sendStatus
- String templateId
- String smsContent
- Integer sendNum
- String statusId
- String returnMsg
- String returnCode
- String batchNum
- Integer batchType
- Long receiveUserId
- Long sendBy
- String paramJson
- String receivePhone
- {static} long serialVersionUID
}
class ZjkExpertItem {
- {static} long serialVersionUID
- Long id
- Long expertId
- Long itemId
- Long userId
- Long deptId
- String leaveStatus
- String acceptStatus
- Long reviewId
- Integer isSure
- Integer isSource
- Integer extractionStatus
- Integer smsIsSuer
- String confirmCode
- String refuseCode
}
class ZjkExpertMajor {
- {static} long serialVersionUID
- Long id
- Long userId
- Long expertId
- String major
- Integer degree
- Integer status
- String remark
}
class ZjkCreditReward {
- {static} long serialVersionUID
- String ID
- String rewardName
- Long rewardType
- String rewardContent
- Long rewardObj
- String effectFlag
- Long effectStandard
- Date rewardUntil
- Long isForever
- Long status
}
class ZjkCreditLv {
- {static} long serialVersionUID
- Long id
- String creditName
- Long creditSectionLe
- Long creditSectionGe
}
class ZjkCreditUser {
- {static} long serialVersionUID
- String ID
- Long userId
- Long expertId
- String rewardId
- String rewardTitle
- Long creditCount
- Date changeTime
- Long lvId
}
class ZjkSmsTemplate {
- Long id
- String tmlType
- String tmlContent
- Integer startFlag
- String title
}
class ZjkSmsUp {
- Long id
- String content
- Long userId
- String mobile
- Date sendTime
- String loginName
- Date createTime
- Integer upType
- {static} long serialVersionUID
}
class ZjkExpert {
- {static} long serialVersionUID
- Long expertId
- String expertName
- Long sex
- Date birthDate
- String contact
- String workUnit
- String duty
- String politics
- String graduateSchool
- String major
- String email
- String professional
- Date professionalAcquisitionDate
- String workProfessial
- Integer workProfessialYear
- String photograph
- String performWorkId
- String otherDescribe
- String workExperience
- String workPluralistic
- String achievement
- String paperpath
- String patentpath
- String remark
- Integer deleteFlag
- String tenantId
- Long createDept
- Integer useFlag
- Integer status
- Integer isRecommend
- String expertSources
- Long userId
- Long createBy
- Date createTime
- Long updateBy
- Date updateTime
- Integer approvalType
- String unitType
- String idCard
- String province
- String city
- String area
- String address
- List<ZjkExpertMajor> majorList
- List<ZjkExpertProfessional> professionalList
- List<ZjkExpertAwards> zjkExpertAwardsList
- List<ZjkExpertPaper> zjkExpertPaperList
- List<ZjkExpertPatent> zjkExpertPatentList
- String annualInspectionStatus
- String annualInspectionTime
- Date approvalTime
- Integer creditCount
- String otherPath
- Date retirementTime
- Long positionTitleLevel
- String origin
- String unitTypeDescribe
}
class ZjkLearningMaterials {
- {static} long serialVersionUID
- Long id
- Long revision
- String materialsId
- String materialsName
- String materialsCount
- String status
- String delFalg
- String materialsUrl
}
class ZjkExpertProfessional {
- {static} long serialVersionUID
- Long id
- Long userId
- Long expertId
- String professional
- Date professionalDate
- Integer status
- String remark
}
class ZjkInvoice {
- {static} long serialVersionUID
- Long id
- Long invoiceNumber
- BigDecimal invoiceMoney
- Date startDate
- String expertName
- String expertPhone
- String expertIdNumber
- String expertTitleLevel
- String invoiceAttached
- Long createBy
- Date createTime
- Long updateBy
- Date updateTime
- Long createDept
- String tenantId
}
class ZjkReviewPhase {
- {static} long serialVersionUID
- Long id
- Long revision
- String reviewSn
- Date reviewTime
- String reviewPlace
- Integer plannedIntake
- String extractionMode
- String extractioRestriction
- String avoidanceExpert
- String avoidanceUnit
- Long itemId
- Long itemExtreationId
- String designatedNumber
- String area
- Integer effective
- String causeRepum
- Long parentId
- String extractArea
- Integer source
- Long isSummarize
- String confirmCode
- String refuseCode
}
class ZjkExpertChart {
- String id
- Long expertId
- Long userId
- Object scorePerformWork
- Object scorePaper
- Object scorePatent
- Object scoreWorkYear
- Object scoreAwards
- Object scoreEvaluate
- Object scoreJoinTime
- Object scoreCredit
- String createDept
- String tenantId
- Long createBy
- Date createTime
- Long updateBy
- Date updateTime
- {static} long serialVersionUID
}
class ZjkExpertMoneyInfo {
- Long moneyId
- String expertType
- String expertId
- BigDecimal expertMoney
- BigDecimal expertNoPayMoney
- BigDecimal expertPayMoney
- String expertName
- String expertUnit
- String tenantId
- Object assignId
- String remark
- String expertMoneyFlag
- String expertMoneyFile
- String productId
- String productType
- String productName
- Date reviewDate
- Date settlementDate
- String settlementSn
- String paySn
- String status
- BigDecimal expertTypeMoneyFee
- String expertIdcard
- String expertContact
- String reviewCount
- String moneyCycle
- String payMethod
- {static} long serialVersionUID
}
TenantEntity <|-- ZjkLearningCreditRecord
TenantEntity <|-- ZjkDataChangesLogs
TenantEntity <|-- ZjkProductReviewsn
TenantEntity <|-- ZjkApprovalProcessLogs
TenantEntity <|-- ZjkProjectEvaluation
TenantEntity <|-- ZjkExpertHistory
TenantEntity <|-- ZjkProductSummarizeLog
TenantEntity <|-- ZjkCredit
TenantEntity <|-- ZjkExpertMoneyConfig
Serializable <|.. ZjkPointReward
BaseEntity <|-- ZjkPointReward
TenantEntity <|-- ZjkCreditRule
BaseEntity <|-- ZjkItemExtreation
Serializable <|.. ZjkLeave
BaseEntity <|-- ZjkPointRule
BaseEntity <|-- ZjkPointUser
TenantEntity <|-- ZjkExpertLog
Serializable <|.. ZjkLeaveRule
BaseEntity <|-- ZjkLeaveRule
Serializable <|.. ZjkEvaluate
BaseEntity <|-- ZjkEvaluate
BaseEntity <|-- ZjkPoint
TenantEntity <|-- ZjkProductSummarize
TenantEntity <|-- ZjkProduct
Serializable <|.. ZjkSmsInfo
BaseEntity <|-- ZjkSmsInfo
BaseEntity <|-- ZjkExpertItem
TenantEntity <|-- ZjkExpertMajor
TenantEntity <|-- ZjkCreditReward
TenantEntity <|-- ZjkCreditLv
TenantEntity <|-- ZjkCreditUser
Serializable <|.. ZjkSmsTemplate
BaseEntity <|-- ZjkSmsTemplate
Serializable <|.. ZjkSmsUp
BaseEntity <|-- ZjkExpert
TenantEntity <|-- ZjkLearningMaterials
TenantEntity <|-- ZjkExpertProfessional
BaseEntity <|-- ZjkInvoice
TenantEntity <|-- ZjkReviewPhase
Serializable <|.. ZjkExpertChart
TenantEntity <|-- ZjkExpertMoneyInfo
@enduml
\ No newline at end of file
@startuml
class org.dromara.zjk.controller.ZjkExpertHistoryController {
- IZjkExpertHistoryService zjkExpertHistoryService
+ TableDataInfo<ZjkExpertHistoryVo> list(ZjkExpertHistoryBo,PageQuery)
+ void export(ZjkExpertHistoryBo,HttpServletResponse)
+ R<ZjkExpertHistoryVo> getInfo(Long)
+ R<Void> add(ZjkExpertHistoryBo)
+ R<Void> edit(ZjkExpertHistoryBo)
+ R<Void> remove(Long[])
}
class org.dromara.zjk.controller.ZjkInvoiceController {
- IZjkInvoiceService zjkInvoiceService
+ TableDataInfo<ZjkInvoiceVo> list(ZjkInvoiceBo,PageQuery)
+ R<ZjkInvoiceVo> getInfo(Long)
+ R<Void> add(ZjkInvoiceBo)
+ R<Void> edit(ZjkInvoiceBo)
+ R<Void> remove(Long[])
+ void downloadExcel(HttpServletResponse)
+ R<Void> imports(MultipartFile)
+ R<Void> audit(MultipartFile)
+ R<InvoiceStatisticsVO> statistics()
}
class org.dromara.zjk.controller.ZjkCreditRewardController {
- IZjkCreditRewardService zjkCreditRewardService
+ List<ZjkCreditRewardVo> list(String)
+ void export(ZjkCreditRewardBo,HttpServletResponse)
+ R<ZjkCreditRewardVo> getInfo(String)
+ R<Void> add(ZjkCreditRewardBo)
+ R<Void> edit(ZjkCreditRewardBo)
+ R<Void> remove(String[])
+ R<List<ZjkCreditRuleVo>> ruleList(ZjkCreditRuleBo)
+ List<ZjkCreditRewardVo> queryRewardlist(String)
}
class org.dromara.zjk.controller.ZjkLearningMaterialsController {
- IZjkLearningMaterialsService zjkLearningMaterialsService
+ TableDataInfo<ZjkLearningMaterialsVo> list(ZjkLearningMaterialsBo,PageQuery)
+ void export(ZjkLearningMaterialsBo,HttpServletResponse)
+ R<ZjkLearningMaterialsVo> getInfo(Long)
+ R<Void> add(ZjkLearningMaterialsBo)
+ R<Void> edit(ZjkLearningMaterialsBo)
+ R<Void> remove(Long[])
}
class org.dromara.zjk.controller.ZjkProductSummarizeLogController {
- IZjkProductSummarizeLogService zjkProductSummarizeLogService
+ TableDataInfo<ZjkProductSummarizeLogVo> list(ZjkProductSummarizeLogBo,PageQuery)
+ void export(ZjkProductSummarizeLogBo,HttpServletResponse)
+ R<ZjkProductSummarizeLogVo> getInfo(Long)
+ R<Void> add(ZjkProductSummarizeLogBo)
+ R<Void> edit(ZjkProductSummarizeLogBo)
+ R<Void> remove(Long[])
+ R<Void> edit(AuditVo)
}
class org.dromara.zjk.controller.ZjkEvaluateController {
- ZjkEvaluateService zjkEvaluateService
+ TableDataInfo<ZjkEvaluateVO> listToZj(ZjkEvaluateVO,PageQuery)
+ TableDataInfo<ZjkEvaluateVO> listToOrg(ZjkEvaluateVO,PageQuery)
+ TableDataInfo<ZjkEvaluateVO> listToXm(ZjkEvaluateVO,PageQuery)
+ R<Void> addComment(ZjkEvaluateVO)
+ R<ZjkEvaluateVO> getInfo(String)
+ TableDataInfo<ZjkEvaluateVO> getEvaluateListByExpert(ZjkEvaluateVO,PageQuery)
+ R<StsEvaluateNumVO> getStsNum()
+ R<StsEvaluateVO> stsChart(Integer)
+ TableDataInfo<StsListVO> getStsList(ZjkEvaluateVO,PageQuery)
+ void export(ZjkEvaluateVO,HttpServletResponse)
}
class org.dromara.zjk.controller.ZjkExpertItemController {
- IZjkExpertItemService zjkExpertItemService
+ TableDataInfo<ZjkItemExtreationVo> list(ZjkItemExtreationBo,PageQuery)
+ void export(ZjkExpertItemBo,HttpServletResponse)
+ R<ZjkExpertItemVo> getInfo(Long)
+ R<Void> add(ZjkExpertItemBo)
+ R<Void> edit(ZjkExpertItemBo)
+ R<Void> remove(Long[])
+ R<Long> expertltem(String)
+ R<List<ZjkExpertVo>> concatenated(String)
+ R<Set<String>> unitList(String)
+ R<Void> cancel(ZjkProjectExpertItemBo)
+ R<List<ZjkExpertItemVo>> expertTop5(String)
+ R<List<ZjkExpertItemVo>> getByReviewId(Long)
+ R<String> handleSmsReply(SmsUpEventDto)
}
class org.dromara.zjk.controller.ZjkJgHomeController {
- ZjkJgHomeService zjkJgHomeService
+ R<JgStatisticsVO> getJgStatistics()
}
class org.dromara.zjk.controller.ZjkProductController {
- IZjkProductService zjkProductService
+ TableDataInfo<ZjkProductVo> list(ZjkProductBo,PageQuery)
+ TableDataInfo<ZjkProductVo> getProduct(PageQuery,Long)
+ List<ZjkReviewProductVo> getProduct_redirectView(Long)
+ ItemVO getItemId(Long,Long)
+ TableDataInfo<ZjkProduct> queryByList()
+ void export(ZjkProductBo,HttpServletResponse)
+ R<ZjkProductVo> getInfo(Long)
+ R<Void> add(ZjkProductBo)
+ R<Void> edit(ZjkProductBo)
+ R<Void> remove(Long[])
+ R<Set<ProductPanoramaDeptVo>> productPanoramaDept()
+ TableDataInfo<ProductPanoramaVo> productPanorama(ProductPanoramaVo,PageQuery)
+ R<List<ProductPanoramaDetailVo>> getProductPanoramaById(Long)
+ R<Long> getProductPanoramaCount()
+ R<List<ProductCountReport>> getProductTypeCountReport()
+ R<List<ProjectSummaryStatisticsVo>> getReviewStageSummary()
+ R<List<ZjkProductVo>> listByName(ZjkProductBo)
+ R<Void> addBo(ZjkProductBo)
+ R<Void> productReviewUpdate(ZjkProductBo)
+ TableDataInfo<ZjkProductVo> selectList(ZjkProductBo,PageQuery)
+ R<ZjkProductVo> selectProductId(Long)
+ R removeByProductId(Long)
+ R<ProjectSummaryStatistics> projectSummaryStatistics()
}
class org.dromara.zjk.controller.ZjkProductSummarizeController {
- IZjkProductSummarizeService zjkProductSummarizeService
+ TableDataInfo<ZjkProductSummarizeVo> list(ZjkProductSummarizeBo,PageQuery)
+ void export(ZjkProductSummarizeBo,HttpServletResponse)
+ void exportTemplate(HttpServletResponse)
+ R exportImport(MultipartFile)
+ R<ZjkProductSummarizeVo> getInfo(Long)
+ R<List<ZjkExpert>> getExpertByReviewId(Long)
+ R<Void> add(ZjkProductSummarizeBo)
+ R<Void> edit(ZjkProductSummarizeBo)
+ R<Void> remove(Long[])
+ R<Void> projectEvaluation(ZjkProductSummarizeBo)
+ R<Long> getProductSummarizeCount()
}
class org.dromara.zjk.controller.ZjkExpertLogController {
- IZjkExpertLogService zjkExpertLogService
+ TableDataInfo<ZjkExpertLogVo> list(ZjkExpertLogBo,PageQuery)
+ void export(ZjkExpertLogBo,HttpServletResponse)
+ R<ZjkExpertLogVo> getInfo(Long)
+ R<Void> add(ZjkExpertLogBo)
+ R<Void> edit(ZjkExpertLogBo)
+ R<Void> remove(Long[])
+ R<List<Map<String,Object>>> getApplicationResults(String,String)
}
class org.dromara.zjk.controller.ZjkExpertMoneyInfoController {
- ZjkExpertMoneyInfoService zjkExpertMoneyInfoService
+ TableDataInfo<ZjkExpertMoneyInfoVO> page(ZjkExpertMoneyInfoBo,PageQuery)
+ R updateSettlement(ZjkExpertMoneyInfoBo)
+ R update(ZjkExpertMoneyInfoBo)
+ void export(ZjkExpertMoneyInfoBo,HttpServletResponse)
+ R<ZjkExpertMoneyInfo> getInfo(Long)
+ R<Void> add(ZjkExpertMoneyInfoBo)
+ R<Void> edit(ZjkExpertMoneyInfoBo)
+ R<Void> remove(Long[])
}
class org.dromara.zjk.controller.SmsUpController {
- ZjkSmsInfoService zjkSmsInfoService
- DynamicTask dynamicTask
+ String handleUpData(SmsUpDto)
+ R<Void> sendData(SmsSendDto)
}
class org.dromara.zjk.controller.ZjkItemExtreationController {
- IZjkItemExtreationService zjkItemExtreationService
+ TableDataInfo<ZjkItemExtreationVo> list(ZjkItemExtreationBo,PageQuery)
+ R<ZjkItemExtreationVo> getInfo1(Long)
+ void export(ZjkItemExtreationBo,HttpServletResponse)
+ R<ZjkItemExtreationVo> getInfo(Long)
+ R<Void> add(ZjkItemExtreationBo)
+ R<Void> edit(ZjkItemExtreationBo)
+ R<ZjkItemExtreationVo> queryOne(Long)
}
class org.dromara.zjk.controller.ZjkReviewPhaseController {
- IZjkReviewPhaseService zjkReviewPhaseService
+ TableDataInfo<ZjkReviewPhaseVo> list(ZjkReviewPhaseBo,PageQuery)
+ void export(ZjkReviewPhaseBo,HttpServletResponse)
+ R<ZjkReviewPhaseVo> getInfo(String)
+ R<Void> add(ZjkReviewPhaseBo)
+ R<Void> edit(ZjkReviewPhaseBo)
+ R<Void> remove(String[])
+ TableDataInfo<ZjkReviewProductVo> reviewProductList(ZjkReviewProductBo,PageQuery)
+ void reviewExport(ZjkReviewProductBo,HttpServletResponse)
+ R<ZjkReviewProductVo> getInfo(Long)
+ TableDataInfo<ZjkReviewProductVo> getReviewProductListByExpert(ZjkReviewProductBo,PageQuery)
+ R getReviewCount()
}
class org.dromara.zjk.controller.ApiController {
- {static} String DEFAULT_SECRET_KEY
- RemoteConfigService remoteConfigService
- IZjkExpertService zjkExpertService
+ R<String> getEncryptedExpertData(String)
+ String decryptData(String,String)
}
class org.dromara.zjk.controller.ZjkExpertController {
- IZjkExpertService zjkExpertService
+ TableDataInfo<ZjkExpertVo> expertList(ZjkExpertBo,PageQuery)
+ TableDataInfo<ZjkExpertVo> pendingApproval(ZjkExpertBo,PageQuery)
+ TableDataInfo<ZjkExpertVo> list(ZjkExpertBo,PageQuery)
+ TableDataInfo<ZjkExpertVo> expertInquiry(ZjkExpertBo,PageQuery)
+ TableDataInfo<ZjkExpertVo> querylist()
+ void export(ZjkExpertBo,HttpServletResponse)
+ R<Void> imports(MultipartFile)
+ R<ZjkExpertVo> getInfo(Long)
+ R<Void> save(ZjkExpertBo)
+ R<Void> sub(ZjkExpertBo)
+ R<Void> approval(ApprovalCommonBo)
+ R<Void> edit(ZjkExpertBo)
+ R<Void> remove(Long[])
+ R<ZjkExpertVo> getInfoByUserId()
+ R<ZjkExpertVo> getInfoByUserIdAndExpertId(ZjkExpertBo)
+ R<Void> expertQuash()
+ R<Long> getExpertCount()
+ R<ExpertBaseInfo> getExpertBaseInfo()
+ R<List<ExpertPerformWorkCountVO>> getExpertPerformWorkCount(Integer)
+ R<List<ExpertPerformWorkCountVO>> getUnitCount()
+ R<List<ExpertPerformWorkCountVO>> getPoliticsCount()
+ R<List<Map<String,Integer>>> getAgeRangeStatistics()
+ R<List<Map<String,Integer>>> workProfessialYear()
+ R<List<Map<String,Integer>>> getApprovalTimeAnalysis(String,String)
+ R<Long> getApprovalTimeCountThisYear()
+ R<Void> fetchRemoteProfessors()
}
class org.dromara.zjk.controller.ZjkPointController {
- ZjkPointRuleService zjkPointRuleService
- ZjkPointRewardService zjkPointRewardService
- ZjkPointUserService zjkPointUserService
- RemoteUserService remoteUserService
+ void initBinder(WebDataBinder)
+ R<List<ZjkPointRule>> pointRule(PointReqDto)
+ R<List<ZjkPointRewardVO>> rewardList(PointReqDto)
+ R<Void> addReward(ZjkPointReward)
+ R<Void> updateReward(ZjkPointReward)
+ R<Void> updateRewardStatus(ZjkPointReward)
+ R<Void> updateRuleStatus(PointReqDto)
+ R<Void> deleteRecord(String)
+ R<ZjkPointReward> getRewardInfo(String)
+ TableDataInfo<PointShowVO> pointList(PointReqDto,PageQuery)
+ TableDataInfo<PointShowVO> checkPointList(PointReqDto,PageQuery)
+ TableDataInfo<ZjkPointVO> pointDetail(PointReqDto,PageQuery)
+ R<Void> deleteRecord(Long,String)
+ R<PointTrendVO> pointTrend(String,String)
+ R<Void> pointCheck(ZjkPointUser)
+ R<ZjkPointUser> pointCheckDetail(String)
+ R<PointBaseVO> pointBase()
+ R<PointExpertRankVO> expertPointRank(Integer)
}
class org.dromara.zjk.controller.ZjkProjectEvaluationController {
- IZjkProjectEvaluationService zjkProjectEvaluationService
+ TableDataInfo<ZjkProjectEvaluationVo> list(ZjkProjectEvaluationBo,PageQuery)
+ void export(ZjkProjectEvaluationBo,HttpServletResponse)
+ R<ZjkProjectEvaluationVo> getInfo(Long)
+ R<Void> add(ZjkProjectEvaluationBo)
+ R<Void> edit(ZjkProjectEvaluationBo)
+ R<Void> remove(Long[])
}
class org.dromara.zjk.controller.ZjkExpertMajorController {
- IZjkExpertMajorService zjkExpertMajorService
+ TableDataInfo<ZjkExpertMajorVo> list(ZjkExpertMajorBo,PageQuery)
+ void export(ZjkExpertMajorBo,HttpServletResponse)
+ R<ZjkExpertMajorVo> getInfo(Long)
+ R<Void> add(ZjkExpertMajorBo)
+ R<Void> edit(ZjkExpertMajorBo)
+ R<Void> remove(Long[])
+ R<List<Map<Integer,Integer>>> getExpertMajorCount()
}
class org.dromara.zjk.controller.ZjkApprovalProcessLogsController {
- IZjkApprovalProcessLogsService zjkApprovalProcessLogsService
+ TableDataInfo<ZjkApprovalProcessLogsVo> list(ZjkApprovalProcessLogsBo,PageQuery)
+ void export(ZjkApprovalProcessLogsBo,HttpServletResponse)
+ R<ZjkApprovalProcessLogsVo> getInfo(Long)
+ R<Void> add(ZjkApprovalProcessLogsBo)
+ R<Void> edit(ZjkApprovalProcessLogsBo)
+ R<Void> remove(Long[])
}
class org.dromara.zjk.controller.ZjkChartController {
- ZjkExpertChartService zjkExpertChartService
+ R<ChartBaseVO> getChartBase(Long)
+ R<List<SimpleExpertDto>> getExperts()
+ R<ChartRelExpertVO> getSameOtherData(Long)
}
class org.dromara.zjk.controller.ZjkDataChangesLogsController {
- IZjkDataChangesLogsService zjkDataChangesLogsService
+ TableDataInfo<ZjkDataChangesLogsVo> list(ZjkDataChangesLogsBo,PageQuery)
+ void export(ZjkDataChangesLogsBo,HttpServletResponse)
+ R<ZjkDataChangesLogsDetailVo> getInfo(Long)
+ R<Void> add(ZjkDataChangesLogsBo)
+ R<Void> edit(ZjkDataChangesLogsBo)
+ R<Void> remove(Long[])
}
class org.dromara.zjk.controller.ZjkLearningCreditRecordController {
- IZjkLearningCreditRecordService zjkLearningCreditRecordService
+ TableDataInfo<ZjkLearningCreditRecordVo> list(ZjkLearningCreditRecordBo,PageQuery)
+ void export(ZjkLearningCreditRecordBo,HttpServletResponse)
+ R<List<ZjkLearningCreditRecordVo>> getInfo(Long)
+ R<Void> add(ZjkLearningCreditRecordBo)
+ R<Void> edit(ZjkLearningCreditRecordBo)
+ R<Void> remove(Long[])
}
class org.dromara.zjk.controller.ZjkCreditLvController {
- IZjkCreditLvService zjkCreditLvService
+ R<List<ZjkCreditLvVo>> list()
+ void export(ZjkCreditLvBo,HttpServletResponse)
+ R<ZjkCreditLvVo> getInfo(Long)
+ R<Void> add(ZjkCreditLvBo)
+ R<Void> edit(ZjkCreditLvBo)
+ R<Void> remove(Long[])
+ List<ZjkCreditUserVo> countReson(ZjkCreditLvVo)
}
class org.dromara.zjk.controller.ZjkCreditController {
- IZjkCreditService zjkCreditService
+ TableDataInfo<ZjkCreditVo> list(ZjkCreditBo,PageQuery)
+ void export(ZjkCreditBo,HttpServletResponse)
+ R<ZjkCreditVo> getInfo(Long)
+ R<Void> add(ZjkCreditBo)
+ R<Void> edit(ZjkCreditBo)
+ R<Void> remove(Long[])
+ R<PointExpertRankVO> expertPointRankUser()
+ TableDataInfo<CreditShowVO> creditList(CreditReqDto,PageQuery)
+ R<ChartBaseCreditVO> pointBase()
+ R<ChartBaseCreditVO> synchronization()
}
class org.dromara.zjk.controller.ZjkLeaveController {
- IZjkLeaveService zjkLeaveService
- IZjkLeaveRuleService zjkLeaveRuleService
+ void initBinder(WebDataBinder)
+ TableDataInfo<ZjkEvaluateVO> getLeavePros()
+ TableDataInfo<ZjkEvaluateVO> getProsForAccept()
+ TableDataInfo<ZjkEvaluateVO> getProsForJoin()
+ R<Void> leaveForPro(ZjkEvaluateVO)
+ R<Void> setAccept(ZjkEvaluateVO)
+ TableDataInfo<ZjkLeaveVo> list(ZjkLeaveBo,PageQuery)
+ TableDataInfo<ZjkLeaveVo> adminList(ZjkLeaveBo,PageQuery)
+ TableDataInfo<ZjkLeaveVo> splist(ZjkLeaveBo,PageQuery)
+ R<ZjkLeaveVo> getInfo(String)
+ R<ZjkLeaveRuleVo> getLeavelRule()
+ R<Void> edit(ZjkLeaveRuleBo)
+ R<Void> add(ZjkLeaveBo)
+ R<Void> edit(ZjkLeaveBo)
+ R<StsNumVO> stsNum()
+ R<StsLeaveVO> stsChart(Integer)
}
class org.dromara.zjk.controller.ZjkExpertProfessionalController {
- IZjkExpertProfessionalService zjkExpertProfessionalService
+ TableDataInfo<ZjkExpertProfessionalVo> list(ZjkExpertProfessionalBo,PageQuery)
+ void export(ZjkExpertProfessionalBo,HttpServletResponse)
+ R<ZjkExpertProfessionalVo> getInfo(Long)
+ R<Void> add(ZjkExpertProfessionalBo)
+ R<Void> edit(ZjkExpertProfessionalBo)
+ R<Void> remove(Long[])
+ R<List<String>> professionalList()
}
class org.dromara.zjk.controller.ZjkProductReviewsnController {
- IZjkProductReviewsnService zjkProductReviewsnService
+ TableDataInfo<ZjkProductReviewsnVo> list(ZjkProductReviewsnBo,PageQuery)
+ void export(ZjkProductReviewsnBo,HttpServletResponse)
+ R<ZjkProductReviewsnVo> getInfo(Long)
+ R<Void> add(ZjkProductReviewsnBo)
+ R<Void> edit(ZjkProductReviewsnBo)
+ R<Void> remove(Long[])
}
class org.dromara.zjk.controller.ZjkCreditUserController {
- IZjkCreditUserService zjkCreditUserService
+ TableDataInfo<ZjkCreditUserVo> list(ZjkCreditUserBo,PageQuery)
+ void export(ZjkCreditUserBo,HttpServletResponse)
+ R<ZjkCreditUserVo> getInfo(String)
+ R<Void> add(ZjkCreditUserBo)
+ R<Void> edit(ZjkCreditUserBo)
+ R<Void> remove(String[])
+ R<CreditExpertRankVO> expertPointRank(Integer)
+ R<List<ZjkCreditRuleVo>> expertPointRanks(ZjkCreditBo,PageQuery)
+ R<List<ChartBaseCreditVO>> blacklist(ZjkCreditBo)
+ R<List<ChartBaseCreditVO>> outCreditId(Long)
+ R<Void> moveToBlacklist(ZjkCreditUserBo)
+ R<Void> removeTheBlacklist(ZjkCreditUserBo)
+ R<Long> getBlacklistCount()
+ R<Long> getCount()
}
class org.dromara.zjk.controller.ZjkExpertMoneyConfigController {
- IZjkExpertMoneyConfigService zjkExpertMoneyConfigService
+ TableDataInfo<ZjkExpertMoneyConfigVo> list(ZjkExpertMoneyConfigBo,PageQuery)
+ void export(ZjkExpertMoneyConfigBo,HttpServletResponse)
+ void exportTemplate(HttpServletResponse)
+ R imports(MultipartFile)
+ R<ZjkExpertMoneyConfigVo> getInfo(Long)
+ R<Void> add(ZjkExpertMoneyConfigBo)
+ R<Void> edit(ZjkExpertMoneyConfigBo)
+ R<Void> remove(Long[])
+ R<List<SelectOptionVo>> getExpertMoneyConfig()
}
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkExpertHistoryController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkInvoiceController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkCreditRewardController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkLearningMaterialsController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkProductSummarizeLogController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkEvaluateController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkExpertItemController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkProductController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkProductSummarizeController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkExpertLogController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkExpertMoneyInfoController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkItemExtreationController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkReviewPhaseController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkExpertController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkPointController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkProjectEvaluationController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkExpertMajorController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkApprovalProcessLogsController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkChartController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkDataChangesLogsController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkLearningCreditRecordController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkCreditLvController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkCreditController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkLeaveController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkExpertProfessionalController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkProductReviewsnController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkCreditUserController
org.dromara.common.web.core.BaseController <|-- org.dromara.zjk.controller.ZjkExpertMoneyConfigController
@enduml
\ No newline at end of file
@startuml
class ZjkExpertHistoryController {
- IZjkExpertHistoryService zjkExpertHistoryService
+ TableDataInfo<ZjkExpertHistoryVo> list(ZjkExpertHistoryBo,PageQuery)
+ void export(ZjkExpertHistoryBo,HttpServletResponse)
+ R<ZjkExpertHistoryVo> getInfo(Long)
+ R<Void> add(ZjkExpertHistoryBo)
+ R<Void> edit(ZjkExpertHistoryBo)
+ R<Void> remove(Long[])
}
note top of ZjkExpertHistoryController
* 专家记录变更历史表
* 前端访问路由地址为:/expert/expertHistory
*
* @author zhangzhou
* @date 2024-11-02
end note
note left of ZjkExpertHistoryController::list(ZjkExpertHistoryBo,PageQuery)
* 查询专家记录变更历史表列表
end note
note right of ZjkExpertHistoryController::export(ZjkExpertHistoryBo,HttpServletResponse)
* 导出专家记录变更历史表列表
end note
note left of ZjkExpertHistoryController::getInfo(Long)
* 获取专家记录变更历史表详细信息
*
* @param id 主键
end note
note right of ZjkExpertHistoryController::add(ZjkExpertHistoryBo)
* 新增专家记录变更历史表
end note
note left of ZjkExpertHistoryController::edit(ZjkExpertHistoryBo)
* 修改专家记录变更历史表
end note
note right of ZjkExpertHistoryController::remove(Long[])
* 删除专家记录变更历史表
*
* @param ids 主键串
end note
class ZjkInvoiceController {
- IZjkInvoiceService zjkInvoiceService
+ TableDataInfo<ZjkInvoiceVo> list(ZjkInvoiceBo,PageQuery)
+ R<ZjkInvoiceVo> getInfo(Long)
+ R<Void> add(ZjkInvoiceBo)
+ R<Void> edit(ZjkInvoiceBo)
+ R<Void> remove(Long[])
+ void downloadExcel(HttpServletResponse)
+ R<Void> imports(MultipartFile)
+ R<Void> audit(MultipartFile)
+ R<InvoiceStatisticsVO> statistics()
}
note top of ZjkInvoiceController
* 发票
*财务管理》》发票管理
* @author mzx
* @date 2024-12-09
end note
note left of ZjkInvoiceController::list(ZjkInvoiceBo,PageQuery)
* 查询发票列表
*
end note
note right of ZjkInvoiceController::getInfo(Long)
* 获取发票详细信息
*
* @param id 主键
end note
note left of ZjkInvoiceController::add(ZjkInvoiceBo)
* 新增发票
end note
note right of ZjkInvoiceController::edit(ZjkInvoiceBo)
* 修改发票
end note
note left of ZjkInvoiceController::remove(Long[])
* 删除发票
*
* @param ids 主键串
end note
note right of ZjkInvoiceController::downloadExcel(HttpServletResponse)
* 下载excel模板
*
* @param
end note
note left of ZjkInvoiceController::imports(MultipartFile)
@SaCheckPermission("zjk:invoice:import")
end note
note right of ZjkInvoiceController::audit(MultipartFile)
* 发票信息审核
*
* @param file
* @return
end note
note left of ZjkInvoiceController::statistics()
* 发票统计和报表
*
* @param
* @return
end note
class ZjkCreditRewardController {
- IZjkCreditRewardService zjkCreditRewardService
+ List<ZjkCreditRewardVo> list(String)
+ void export(ZjkCreditRewardBo,HttpServletResponse)
+ R<ZjkCreditRewardVo> getInfo(String)
+ R<Void> add(ZjkCreditRewardBo)
+ R<Void> edit(ZjkCreditRewardBo)
+ R<Void> remove(String[])
+ R<List<ZjkCreditRuleVo>> ruleList(ZjkCreditRuleBo)
+ List<ZjkCreditRewardVo> queryRewardlist(String)
}
note top of ZjkCreditRewardController
* 信用奖励
* 前端访问路由地址为:/zjk/creditReward
*
* @author ygh
* @date 2024-11-11
end note
note left of ZjkCreditRewardController::list(String)
@SaCheckPermission("zjk:creditReward:list")
end note
note right of ZjkCreditRewardController::export(ZjkCreditRewardBo,HttpServletResponse)
* 导出信用奖励列表
end note
note left of ZjkCreditRewardController::getInfo(String)
* 获取信用奖励详细信息
*
* @param ID 主键
end note
note right of ZjkCreditRewardController::add(ZjkCreditRewardBo)
* 新增信用奖励
end note
note left of ZjkCreditRewardController::edit(ZjkCreditRewardBo)
* 修改信用奖励
end note
note right of ZjkCreditRewardController::remove(String[])
* 删除信用奖励
*
* @param IDs 主键串
end note
note left of ZjkCreditRewardController::ruleList(ZjkCreditRuleBo)
*信用规则列表
end note
note right of ZjkCreditRewardController::queryRewardlist(String)
*信用规则列表
end note
class ZjkLearningMaterialsController {
- IZjkLearningMaterialsService zjkLearningMaterialsService
+ TableDataInfo<ZjkLearningMaterialsVo> list(ZjkLearningMaterialsBo,PageQuery)
+ void export(ZjkLearningMaterialsBo,HttpServletResponse)
+ R<ZjkLearningMaterialsVo> getInfo(Long)
+ R<Void> add(ZjkLearningMaterialsBo)
+ R<Void> edit(ZjkLearningMaterialsBo)
+ R<Void> remove(Long[])
}
note top of ZjkLearningMaterialsController
* 信用资料
* 前端访问路由地址为:/jyk/learningMaterials
*
* @author ygh
* @date 2024-11-26
end note
note left of ZjkLearningMaterialsController::list(ZjkLearningMaterialsBo,PageQuery)
},mode = SaMode.OR)
end note
note right of ZjkLearningMaterialsController::export(ZjkLearningMaterialsBo,HttpServletResponse)
},mode = SaMode.OR)
end note
note left of ZjkLearningMaterialsController::getInfo(Long)
},mode = SaMode.OR)
end note
note right of ZjkLearningMaterialsController::add(ZjkLearningMaterialsBo)
},mode = SaMode.OR)
end note
note left of ZjkLearningMaterialsController::edit(ZjkLearningMaterialsBo)
},mode = SaMode.OR)
end note
note right of ZjkLearningMaterialsController::remove(Long[])
},mode = SaMode.OR)
end note
class ZjkProductSummarizeLogController {
- IZjkProductSummarizeLogService zjkProductSummarizeLogService
+ TableDataInfo<ZjkProductSummarizeLogVo> list(ZjkProductSummarizeLogBo,PageQuery)
+ void export(ZjkProductSummarizeLogBo,HttpServletResponse)
+ R<ZjkProductSummarizeLogVo> getInfo(Long)
+ R<Void> add(ZjkProductSummarizeLogBo)
+ R<Void> edit(ZjkProductSummarizeLogBo)
+ R<Void> remove(Long[])
+ R<Void> edit(AuditVo)
}
note top of ZjkProductSummarizeLogController
* 总结日志表
* 前端访问路由地址为:/zjk/productSummarizeLog
*
* @author ygh
* @date 2024-11-04
end note
note left of ZjkProductSummarizeLogController::list(ZjkProductSummarizeLogBo,PageQuery)
* 查询总结日志表列表
end note
note right of ZjkProductSummarizeLogController::export(ZjkProductSummarizeLogBo,HttpServletResponse)
* 导出总结日志表列表
end note
note left of ZjkProductSummarizeLogController::getInfo(Long)
* 获取总结日志表详细信息
*
* @param id 主键
end note
note right of ZjkProductSummarizeLogController::add(ZjkProductSummarizeLogBo)
* 新增总结日志表
end note
note left of ZjkProductSummarizeLogController::edit(ZjkProductSummarizeLogBo)
* 修改总结日志表
end note
note right of ZjkProductSummarizeLogController::remove(Long[])
* 删除总结日志表
*
* @param ids 主键串
end note
class ZjkEvaluateController {
- ZjkEvaluateService zjkEvaluateService
+ TableDataInfo<ZjkEvaluateVO> listToZj(ZjkEvaluateVO,PageQuery)
+ TableDataInfo<ZjkEvaluateVO> listToOrg(ZjkEvaluateVO,PageQuery)
+ TableDataInfo<ZjkEvaluateVO> listToXm(ZjkEvaluateVO,PageQuery)
+ R<Void> addComment(ZjkEvaluateVO)
+ R<ZjkEvaluateVO> getInfo(String)
+ TableDataInfo<ZjkEvaluateVO> getEvaluateListByExpert(ZjkEvaluateVO,PageQuery)
+ R<StsEvaluateNumVO> getStsNum()
+ R<StsEvaluateVO> stsChart(Integer)
+ TableDataInfo<StsListVO> getStsList(ZjkEvaluateVO,PageQuery)
+ void export(ZjkEvaluateVO,HttpServletResponse)
}
note top of ZjkEvaluateController
* 专家库专家互评控制器
*
* @author : yanguohua
* @version : 1.0
* @date : 2024/10/30 16:57
end note
note left of ZjkEvaluateController::listToZj(ZjkEvaluateVO,PageQuery)
* 查询专家评价列表-专家
end note
note right of ZjkEvaluateController::listToOrg(ZjkEvaluateVO,PageQuery)
* 查询专家评价列表-管理员
end note
note left of ZjkEvaluateController::listToXm(ZjkEvaluateVO,PageQuery)
* 查询专家评价列表-项目管理员
end note
note right of ZjkEvaluateController::addComment(ZjkEvaluateVO)
* 专家评价新增
end note
note left of ZjkEvaluateController::getInfo(String)
* 获取专家评价详细信息
*
* @param gid 主键
end note
note right of ZjkEvaluateController::getEvaluateListByExpert(ZjkEvaluateVO,PageQuery)
* 评价反馈
end note
note left of ZjkEvaluateController::getStsNum()
* 获取评价统计次数
end note
note right of ZjkEvaluateController::stsChart(Integer)
* 专家互评图表统计
end note
note left of ZjkEvaluateController::getStsList(ZjkEvaluateVO,PageQuery)
* 互评统计列表-管理员
end note
note right of ZjkEvaluateController::export(ZjkEvaluateVO,HttpServletResponse)
* 互评统计导出
end note
class ZjkExpertItemController {
- IZjkExpertItemService zjkExpertItemService
+ TableDataInfo<ZjkItemExtreationVo> list(ZjkItemExtreationBo,PageQuery)
+ void export(ZjkExpertItemBo,HttpServletResponse)
+ R<ZjkExpertItemVo> getInfo(Long)
+ R<Void> add(ZjkExpertItemBo)
+ R<Void> edit(ZjkExpertItemBo)
+ R<Void> remove(Long[])
+ R<Long> expertltem(String)
+ R<List<ZjkExpertVo>> concatenated(String)
+ R<Set<String>> unitList(String)
+ R<Void> cancel(ZjkProjectExpertItemBo)
+ R<List<ZjkExpertItemVo>> expertTop5(String)
+ R<List<ZjkExpertItemVo>> getByReviewId(Long)
+ R<String> handleSmsReply(SmsUpEventDto)
}
note top of ZjkExpertItemController
*专家抽取记录
* 前端访问路由地址为:/jyk/expertItem
*
* @author ygh
* @date 2024-10-29
end note
note left of ZjkExpertItemController::list(ZjkItemExtreationBo,PageQuery)
* 查询专家列表
end note
note right of ZjkExpertItemController::export(ZjkExpertItemBo,HttpServletResponse)
* 导出专家抽取列表
end note
note left of ZjkExpertItemController::getInfo(Long)
@SaCheckPermission("jyk:expertItem:query")
end note
note right of ZjkExpertItemController::add(ZjkExpertItemBo)
* 新增专家抽取
end note
note left of ZjkExpertItemController::edit(ZjkExpertItemBo)
* 修改专家抽取
end note
note right of ZjkExpertItemController::remove(Long[])
* 删除专家抽取
*
* @param ids 主键串
end note
note left of ZjkExpertItemController::expertltem(String)
* 专家抽取
*
* @param zjkProjectExpertItemBo 抽取设置
end note
note right of ZjkExpertItemController::concatenated(String)
专家级联查询
end note
note left of ZjkExpertItemController::getByReviewId(Long)
* 通过 记录id 查询专家
* @param reviewId
* @return
end note
note right of ZjkExpertItemController::handleSmsReply(SmsUpEventDto)
* 专家短信息回复回调接口
* @param smsUpEventDto
* @return
end note
class ZjkJgHomeController {
- ZjkJgHomeService zjkJgHomeService
+ R<JgStatisticsVO> getJgStatistics()
}
note top of ZjkJgHomeController
* 机构管理员首页接口
* 前端访问路由地址为:/zjkHome
end note
note left of ZjkJgHomeController::getJgStatistics()
* 获取机构管理员首页统计数据
* @return
end note
class ZjkProductController {
- IZjkProductService zjkProductService
+ TableDataInfo<ZjkProductVo> list(ZjkProductBo,PageQuery)
+ TableDataInfo<ZjkProductVo> getProduct(PageQuery,Long)
+ List<ZjkReviewProductVo> getProduct_redirectView(Long)
+ ItemVO getItemId(Long,Long)
+ TableDataInfo<ZjkProduct> queryByList()
+ void export(ZjkProductBo,HttpServletResponse)
+ R<ZjkProductVo> getInfo(Long)
+ R<Void> add(ZjkProductBo)
+ R<Void> edit(ZjkProductBo)
+ R<Void> remove(Long[])
+ R<Set<ProductPanoramaDeptVo>> productPanoramaDept()
+ TableDataInfo<ProductPanoramaVo> productPanorama(ProductPanoramaVo,PageQuery)
+ R<List<ProductPanoramaDetailVo>> getProductPanoramaById(Long)
+ R<Long> getProductPanoramaCount()
+ R<List<ProductCountReport>> getProductTypeCountReport()
+ R<List<ProjectSummaryStatisticsVo>> getReviewStageSummary()
+ R<List<ZjkProductVo>> listByName(ZjkProductBo)
+ R<Void> addBo(ZjkProductBo)
+ R<Void> productReviewUpdate(ZjkProductBo)
+ TableDataInfo<ZjkProductVo> selectList(ZjkProductBo,PageQuery)
+ R<ZjkProductVo> selectProductId(Long)
+ R removeByProductId(Long)
+ R<ProjectSummaryStatistics> projectSummaryStatistics()
}
note top of ZjkProductController
* 项目管理
* 前端访问路由地址为:/zjk/product
*
* @author ygh
* @date 2024-11-01
end note
note left of ZjkProductController::list(ZjkProductBo,PageQuery)
* 查询项目管理列表
end note
note right of ZjkProductController::queryByList()
* 查询项目管理列表
end note
note left of ZjkProductController::export(ZjkProductBo,HttpServletResponse)
* 导出项目管理列表
end note
note right of ZjkProductController::getInfo(Long)
* 获取项目管理详细信息
*
* @param id 主键
end note
note left of ZjkProductController::add(ZjkProductBo)
* 新增项目管理
end note
note right of ZjkProductController::edit(ZjkProductBo)
* 修改项目管理
end note
note left of ZjkProductController::remove(Long[])
* 删除项目管理
*
* @param ids 主键串
end note
note right of ZjkProductController::productPanoramaDept()
* 获取项目全景 部门
* @return
end note
note left of ZjkProductController::getProductPanoramaCount()
* 获取项目总数
* @return
end note
note right of ZjkProductController::getProductTypeCountReport()
* 各项目类型数量统计
* @return
end note
note left of ZjkProductController::getReviewStageSummary()
* 各评审阶段总结数量统计
* @return
end note
note right of ZjkProductController::listByName(ZjkProductBo)
* 查询项目 项目名称动态查询
end note
note left of ZjkProductController::addBo(ZjkProductBo)
* 新增项目文档
end note
note right of ZjkProductController::productReviewUpdate(ZjkProductBo)
* 修改项目文档
end note
note left of ZjkProductController::selectProductId(Long)
* 获取 项目文档 通过项目id
* @param productReviewId
* @return
end note
note right of ZjkProductController::removeByProductId(Long)
* 删除 项目文档 项目id
* @param productReviewId
* @return
end note
note left of ZjkProductController::projectSummaryStatistics()
* 项目总结统计信息
*
end note
class ZjkProductSummarizeController {
- IZjkProductSummarizeService zjkProductSummarizeService
+ TableDataInfo<ZjkProductSummarizeVo> list(ZjkProductSummarizeBo,PageQuery)
+ void export(ZjkProductSummarizeBo,HttpServletResponse)
+ void exportTemplate(HttpServletResponse)
+ R exportImport(MultipartFile)
+ R<ZjkProductSummarizeVo> getInfo(Long)
+ R<List<ZjkExpert>> getExpertByReviewId(Long)
+ R<Void> add(ZjkProductSummarizeBo)
+ R<Void> edit(ZjkProductSummarizeBo)
+ R<Void> remove(Long[])
+ R<Void> projectEvaluation(ZjkProductSummarizeBo)
+ R<Long> getProductSummarizeCount()
}
note top of ZjkProductSummarizeController
* 项目总结
* 前端访问路由地址为:/zjk/productSummarize
*
* @author ygh
* @date 2024-11-02
end note
note left of ZjkProductSummarizeController::list(ZjkProductSummarizeBo,PageQuery)
* 查询项目总结列表
end note
note right of ZjkProductSummarizeController::export(ZjkProductSummarizeBo,HttpServletResponse)
* 导出项目总结列表
end note
note left of ZjkProductSummarizeController::exportTemplate(HttpServletResponse)
* 导出项目总结列表
end note
note right of ZjkProductSummarizeController::exportImport(MultipartFile)
* 导出项目总结列表
end note
note left of ZjkProductSummarizeController::getInfo(Long)
* 获取项目总结详细信息
*
* @param id 主键
end note
note right of ZjkProductSummarizeController::add(ZjkProductSummarizeBo)
* 新增项目总结
end note
note left of ZjkProductSummarizeController::edit(ZjkProductSummarizeBo)
* 修改项目总结
end note
note right of ZjkProductSummarizeController::remove(Long[])
* 删除项目总结
*
* @param ids 主键串
end note
note left of ZjkProductSummarizeController::projectEvaluation(ZjkProductSummarizeBo)
* 修改项目总结
end note
class ZjkExpertLogController {
- IZjkExpertLogService zjkExpertLogService
+ TableDataInfo<ZjkExpertLogVo> list(ZjkExpertLogBo,PageQuery)
+ void export(ZjkExpertLogBo,HttpServletResponse)
+ R<ZjkExpertLogVo> getInfo(Long)
+ R<Void> add(ZjkExpertLogBo)
+ R<Void> edit(ZjkExpertLogBo)
+ R<Void> remove(Long[])
+ R<List<Map<String,Object>>> getApplicationResults(String,String)
}
note top of ZjkExpertLogController
* 入库记录
* 前端访问路由地址为:/expert/expertLog
*
* @author zhangzhou
* @date 2024-10-31
end note
note left of ZjkExpertLogController::list(ZjkExpertLogBo,PageQuery)
* 查询入库记录列表
end note
note right of ZjkExpertLogController::export(ZjkExpertLogBo,HttpServletResponse)
* 导出入库记录列表
end note
note left of ZjkExpertLogController::getInfo(Long)
* 获取入库记录详细信息
*
* @param id 主键
end note
note right of ZjkExpertLogController::add(ZjkExpertLogBo)
* 新增入库记录
end note
note left of ZjkExpertLogController::edit(ZjkExpertLogBo)
* 修改入库记录
end note
note right of ZjkExpertLogController::remove(Long[])
* 删除入库记录
*
* @param ids 主键串
end note
note left of ZjkExpertLogController::getApplicationResults(String,String)
* 趋势分析
* @return
end note
class ZjkExpertMoneyInfoController {
- ZjkExpertMoneyInfoService zjkExpertMoneyInfoService
+ TableDataInfo<ZjkExpertMoneyInfoVO> page(ZjkExpertMoneyInfoBo,PageQuery)
+ R updateSettlement(ZjkExpertMoneyInfoBo)
+ R update(ZjkExpertMoneyInfoBo)
+ void export(ZjkExpertMoneyInfoBo,HttpServletResponse)
+ R<ZjkExpertMoneyInfo> getInfo(Long)
+ R<Void> add(ZjkExpertMoneyInfoBo)
+ R<Void> edit(ZjkExpertMoneyInfoBo)
+ R<Void> remove(Long[])
}
note top of ZjkExpertMoneyInfoController
* 专家费用
*
* @author : yanguohua
* @version : 1.0
* @date : 2024/10/30 16:57
end note
note left of ZjkExpertMoneyInfoController::page(ZjkExpertMoneyInfoBo,PageQuery)
* 专家费用列表
end note
note right of ZjkExpertMoneyInfoController::updateSettlement(ZjkExpertMoneyInfoBo)
* 结算
* @param bo
* @return
end note
note left of ZjkExpertMoneyInfoController::update(ZjkExpertMoneyInfoBo)
* 支付
* @param bo
* @return
end note
note right of ZjkExpertMoneyInfoController::export(ZjkExpertMoneyInfoBo,HttpServletResponse)
* 导出【请填写功能名称】列表
end note
note left of ZjkExpertMoneyInfoController::getInfo(Long)
* 获取【请填写功能名称】详细信息
*
* @param moneyId 主键
end note
note right of ZjkExpertMoneyInfoController::add(ZjkExpertMoneyInfoBo)
* 新增【请填写功能名称】
end note
note left of ZjkExpertMoneyInfoController::edit(ZjkExpertMoneyInfoBo)
* 修改【请填写功能名称】
end note
note right of ZjkExpertMoneyInfoController::remove(Long[])
* 删除【请填写功能名称】
*
* @param moneyIds 主键串
end note
class SmsUpController {
- ZjkSmsInfoService zjkSmsInfoService
- DynamicTask dynamicTask
+ String handleUpData(SmsUpDto)
+ R<Void> sendData(SmsSendDto)
}
note top of SmsUpController
* 短信上行服务
*
* @author : yanguohua
* @version : 1.0
* @date : 2024/12/24 9:38
end note
class ZjkItemExtreationController {
- IZjkItemExtreationService zjkItemExtreationService
+ TableDataInfo<ZjkItemExtreationVo> list(ZjkItemExtreationBo,PageQuery)
+ R<ZjkItemExtreationVo> getInfo1(Long)
+ void export(ZjkItemExtreationBo,HttpServletResponse)
+ R<ZjkItemExtreationVo> getInfo(Long)
+ R<Void> add(ZjkItemExtreationBo)
+ R<Void> edit(ZjkItemExtreationBo)
+ R<ZjkItemExtreationVo> queryOne(Long)
}
note top of ZjkItemExtreationController
* 抽取
* 前端访问路由地址为:/jyk/itemExtreation
*
* @author ygh
* @date 2024-10-29
end note
note left of ZjkItemExtreationController::list(ZjkItemExtreationBo,PageQuery)
* 查询抽取列表
end note
note right of ZjkItemExtreationController::getInfo1(Long)
* 通过规则查询 抽取记录
* @param id
* @return
end note
note left of ZjkItemExtreationController::export(ZjkItemExtreationBo,HttpServletResponse)
* 导出抽取列表
end note
note right of ZjkItemExtreationController::getInfo(Long)
* 获取抽取详细信息
*
* @param id 主键
end note
note left of ZjkItemExtreationController::add(ZjkItemExtreationBo)
* 新增【请填写功能名称】
end note
note right of ZjkItemExtreationController::edit(ZjkItemExtreationBo)
* 抽取确认
end note
note left of ZjkItemExtreationController::queryOne(Long)
* 获取抽取详情
*
* @param id 主键
end note
class ZjkReviewPhaseController {
- IZjkReviewPhaseService zjkReviewPhaseService
+ TableDataInfo<ZjkReviewPhaseVo> list(ZjkReviewPhaseBo,PageQuery)
+ void export(ZjkReviewPhaseBo,HttpServletResponse)
+ R<ZjkReviewPhaseVo> getInfo(String)
+ R<Void> add(ZjkReviewPhaseBo)
+ R<Void> edit(ZjkReviewPhaseBo)
+ R<Void> remove(String[])
+ TableDataInfo<ZjkReviewProductVo> reviewProductList(ZjkReviewProductBo,PageQuery)
+ void reviewExport(ZjkReviewProductBo,HttpServletResponse)
+ R<ZjkReviewProductVo> getInfo(Long)
+ TableDataInfo<ZjkReviewProductVo> getReviewProductListByExpert(ZjkReviewProductBo,PageQuery)
+ R getReviewCount()
}
note top of ZjkReviewPhaseController
* 抽取条件
* 前端访问路由地址为:/jyk/reviewPhase
*
* @author ygh
* @date 2024-11-01
end note
note left of ZjkReviewPhaseController::list(ZjkReviewPhaseBo,PageQuery)
* 查询抽取条件列表
end note
note right of ZjkReviewPhaseController::export(ZjkReviewPhaseBo,HttpServletResponse)
* 导出抽取条件列表
end note
note left of ZjkReviewPhaseController::getInfo(String)
* 获取抽取条件详细信息
*
* @param tenantId 主键
end note
note right of ZjkReviewPhaseController::add(ZjkReviewPhaseBo)
* 新增抽取条件
end note
note left of ZjkReviewPhaseController::edit(ZjkReviewPhaseBo)
* 修改抽取条件
end note
note right of ZjkReviewPhaseController::remove(String[])
* 删除抽取条件
*
* @param tenantIds 主键串
end note
note left of ZjkReviewPhaseController::getReviewProductListByExpert(ZjkReviewProductBo,PageQuery)
* 根据专家 id 获取合作项目信息
* @param bo
* @param pageQuery
* @return
end note
class ApiController {
- {static} String DEFAULT_SECRET_KEY
- RemoteConfigService remoteConfigService
- IZjkExpertService zjkExpertService
+ R<String> getEncryptedExpertData(String)
+ String decryptData(String,String)
}
note left of ApiController::DEFAULT_SECRET_KEY
默认的密钥常量
end note
note left of ApiController::getEncryptedExpertData(String)
* 专家库数据获取
* @param authorizationCode
* @return
end note
note right of ApiController::decryptData(String,String)
解密接口 (用于调试或者需要解密的地方)
end note
class ZjkExpertController {
- IZjkExpertService zjkExpertService
+ TableDataInfo<ZjkExpertVo> expertList(ZjkExpertBo,PageQuery)
+ TableDataInfo<ZjkExpertVo> pendingApproval(ZjkExpertBo,PageQuery)
+ TableDataInfo<ZjkExpertVo> list(ZjkExpertBo,PageQuery)
+ TableDataInfo<ZjkExpertVo> expertInquiry(ZjkExpertBo,PageQuery)
+ TableDataInfo<ZjkExpertVo> querylist()
+ void export(ZjkExpertBo,HttpServletResponse)
+ R<Void> imports(MultipartFile)
+ R<ZjkExpertVo> getInfo(Long)
+ R<Void> save(ZjkExpertBo)
+ R<Void> sub(ZjkExpertBo)
+ R<Void> approval(ApprovalCommonBo)
+ R<Void> edit(ZjkExpertBo)
+ R<Void> remove(Long[])
+ R<ZjkExpertVo> getInfoByUserId()
+ R<ZjkExpertVo> getInfoByUserIdAndExpertId(ZjkExpertBo)
+ R<Void> expertQuash()
+ R<Long> getExpertCount()
+ R<ExpertBaseInfo> getExpertBaseInfo()
+ R<List<ExpertPerformWorkCountVO>> getExpertPerformWorkCount(Integer)
+ R<List<ExpertPerformWorkCountVO>> getUnitCount()
+ R<List<ExpertPerformWorkCountVO>> getPoliticsCount()
+ R<List<Map<String,Integer>>> getAgeRangeStatistics()
+ R<List<Map<String,Integer>>> workProfessialYear()
+ R<List<Map<String,Integer>>> getApprovalTimeAnalysis(String,String)
+ R<Long> getApprovalTimeCountThisYear()
+ R<Void> fetchRemoteProfessors()
}
note top of ZjkExpertController
* 专家库
* 前端访问路由地址为:/expert/expert
*
* @author wangtong
* @date 2024-10-24
end note
note left of ZjkExpertController::expertList(ZjkExpertBo,PageQuery)
* 查询专家库列表信息
* @param bo
* @param pageQuery
* @return
end note
note right of ZjkExpertController::pendingApproval(ZjkExpertBo,PageQuery)
* 待审批专家列表
* @param bo
* @param pageQuery
* @return
end note
note left of ZjkExpertController::list(ZjkExpertBo,PageQuery)
* 查询专家审批列表信息
* @param bo
* @param pageQuery
* @return
end note
note right of ZjkExpertController::expertInquiry(ZjkExpertBo,PageQuery)
* 专家查询列表信息
* @param bo
* @param pageQuery
* @return
end note
note left of ZjkExpertController::querylist()
* 查询全部在库专家列表
end note
note right of ZjkExpertController::export(ZjkExpertBo,HttpServletResponse)
* 专家信息导出
* @param bo
* @param response
end note
note left of ZjkExpertController::imports(MultipartFile)
* 专家信息导入
* @param file
* @return
end note
note right of ZjkExpertController::getInfo(Long)
* 获取专家信息详情
* @param id
* @return
end note
note left of ZjkExpertController::save(ZjkExpertBo)
* 专家信息暂存 申请
* @param bo
* @return
end note
note right of ZjkExpertController::sub(ZjkExpertBo)
* 提交
end note
note left of ZjkExpertController::approval(ApprovalCommonBo)
* 审批操作
* @param approvalCommonBo
* @return
end note
note right of ZjkExpertController::edit(ZjkExpertBo)
* 修改expert/停用/启用
end note
note left of ZjkExpertController::remove(Long[])
* 删除expert
* @param ids 主键串
end note
note right of ZjkExpertController::getInfoByUserId()
* 根据用户 id 获取专家详细信息
* @return
end note
note left of ZjkExpertController::getInfoByUserIdAndExpertId(ZjkExpertBo)
* 根据用户 id 获取专家详细信息
* @return
end note
note right of ZjkExpertController::expertQuash()
* 撤销申请
* @return
end note
note left of ZjkExpertController::getExpertCount()
* 获取专家总数
* @return
end note
note right of ZjkExpertController::getExpertBaseInfo()
* 获取专家基本信息
* @return
end note
note left of ZjkExpertController::getExpertPerformWorkCount(Integer)
* 专家各领域人数
* @return
end note
note right of ZjkExpertController::getUnitCount()
* 专家单位类型统计
* @return
end note
note left of ZjkExpertController::getPoliticsCount()
* 专家政治面貌统计
* @return
end note
note right of ZjkExpertController::getAgeRangeStatistics()
* 专家各个年龄区间段的人数
* @return
end note
note left of ZjkExpertController::workProfessialYear()
* 专家工作年限
* @return
end note
note right of ZjkExpertController::getApprovalTimeAnalysis(String,String)
* 专家入库时间分析
* @return
end note
note left of ZjkExpertController::getApprovalTimeCountThisYear()
* 当前年入库专家总数
* @return
end note
note right of ZjkExpertController::fetchRemoteProfessors()
* 远程调用获取专家信息
* @return
end note
class ZjkPointController {
- ZjkPointRuleService zjkPointRuleService
- ZjkPointRewardService zjkPointRewardService
- ZjkPointUserService zjkPointUserService
- RemoteUserService remoteUserService
+ void initBinder(WebDataBinder)
+ R<List<ZjkPointRule>> pointRule(PointReqDto)
+ R<List<ZjkPointRewardVO>> rewardList(PointReqDto)
+ R<Void> addReward(ZjkPointReward)
+ R<Void> updateReward(ZjkPointReward)
+ R<Void> updateRewardStatus(ZjkPointReward)
+ R<Void> updateRuleStatus(PointReqDto)
+ R<Void> deleteRecord(String)
+ R<ZjkPointReward> getRewardInfo(String)
+ TableDataInfo<PointShowVO> pointList(PointReqDto,PageQuery)
+ TableDataInfo<PointShowVO> checkPointList(PointReqDto,PageQuery)
+ TableDataInfo<ZjkPointVO> pointDetail(PointReqDto,PageQuery)
+ R<Void> deleteRecord(Long,String)
+ R<PointTrendVO> pointTrend(String,String)
+ R<Void> pointCheck(ZjkPointUser)
+ R<ZjkPointUser> pointCheckDetail(String)
+ R<PointBaseVO> pointBase()
+ R<PointExpertRankVO> expertPointRank(Integer)
}
note top of ZjkPointController
* 专家库请假控制器
*
* @author : yanguohua
* @version : 1.0
* @date : 2024/10/30 16:57
end note
note left of ZjkPointController::pointRule(PointReqDto)
* 查询列表-积分规则定义
end note
note right of ZjkPointController::rewardList(PointReqDto)
* 查询列表-积分奖励
end note
note left of ZjkPointController::addReward(ZjkPointReward)
* 新增奖励
end note
note right of ZjkPointController::updateReward(ZjkPointReward)
* 奖励修改
end note
note left of ZjkPointController::updateRewardStatus(ZjkPointReward)
* 奖励修改
end note
note right of ZjkPointController::updateRuleStatus(PointReqDto)
* 积分规则修改
end note
note left of ZjkPointController::getRewardInfo(String)
* 奖励详情
*
* @param gid 主键
end note
note right of ZjkPointController::pointList(PointReqDto,PageQuery)
* 专家积分列表
end note
note left of ZjkPointController::checkPointList(PointReqDto,PageQuery)
* 积分复核列表
end note
note right of ZjkPointController::pointDetail(PointReqDto,PageQuery)
* 积分历史记录列表
end note
note left of ZjkPointController::deleteRecord(Long,String)
* 积分记录删除
end note
note right of ZjkPointController::pointTrend(String,String)
* 积分趋势分析
end note
note left of ZjkPointController::pointCheck(ZjkPointUser)
* 积分复核接口
end note
note right of ZjkPointController::pointCheckDetail(String)
* 积分复核详情
end note
note left of ZjkPointController::pointBase()
* 专家积分榜基本信息
end note
note right of ZjkPointController::expertPointRank(Integer)
* 专家积分榜基本信息
end note
class ZjkProjectEvaluationController {
- IZjkProjectEvaluationService zjkProjectEvaluationService
+ TableDataInfo<ZjkProjectEvaluationVo> list(ZjkProjectEvaluationBo,PageQuery)
+ void export(ZjkProjectEvaluationBo,HttpServletResponse)
+ R<ZjkProjectEvaluationVo> getInfo(Long)
+ R<Void> add(ZjkProjectEvaluationBo)
+ R<Void> edit(ZjkProjectEvaluationBo)
+ R<Void> remove(Long[])
}
note top of ZjkProjectEvaluationController
* 项目总结评价
* 前端访问路由地址为:/jyk/projectEvaluation
*
* @author ygh
* @date 2024-11-08
end note
note left of ZjkProjectEvaluationController::list(ZjkProjectEvaluationBo,PageQuery)
* 查询项目总结评价列表
end note
note right of ZjkProjectEvaluationController::export(ZjkProjectEvaluationBo,HttpServletResponse)
* 导出项目总结评价列表
end note
note left of ZjkProjectEvaluationController::getInfo(Long)
* 获取项目总结评价详细信息
*
* @param id 主键
end note
note right of ZjkProjectEvaluationController::add(ZjkProjectEvaluationBo)
* 新增项目总结评价
end note
note left of ZjkProjectEvaluationController::edit(ZjkProjectEvaluationBo)
* 修改项目总结评价
end note
note right of ZjkProjectEvaluationController::remove(Long[])
* 删除项目总结评价
*
* @param ids 主键串
end note
class ZjkExpertMajorController {
- IZjkExpertMajorService zjkExpertMajorService
+ TableDataInfo<ZjkExpertMajorVo> list(ZjkExpertMajorBo,PageQuery)
+ void export(ZjkExpertMajorBo,HttpServletResponse)
+ R<ZjkExpertMajorVo> getInfo(Long)
+ R<Void> add(ZjkExpertMajorBo)
+ R<Void> edit(ZjkExpertMajorBo)
+ R<Void> remove(Long[])
+ R<List<Map<Integer,Integer>>> getExpertMajorCount()
}
note top of ZjkExpertMajorController
* 专家库 专业关系表
* 前端访问路由地址为:/expert/expertMajor
*
* @author ygh
* @date 2024-11-01
end note
note left of ZjkExpertMajorController::list(ZjkExpertMajorBo,PageQuery)
* 查询专家库 专业关系表列表
end note
note right of ZjkExpertMajorController::export(ZjkExpertMajorBo,HttpServletResponse)
* 导出专家库 专业关系表列表
end note
note left of ZjkExpertMajorController::getInfo(Long)
* 获取专家库 专业关系表详细信息
*
* @param id 主键
end note
note right of ZjkExpertMajorController::add(ZjkExpertMajorBo)
* 新增专家库 专业关系表
end note
note left of ZjkExpertMajorController::edit(ZjkExpertMajorBo)
* 修改专家库 专业关系表
end note
note right of ZjkExpertMajorController::remove(Long[])
* 删除专家库 专业关系表
*
* @param ids 主键串
end note
note left of ZjkExpertMajorController::getExpertMajorCount()
* 获取专家各个学历的人数
* @return
end note
class ZjkApprovalProcessLogsController {
- IZjkApprovalProcessLogsService zjkApprovalProcessLogsService
+ TableDataInfo<ZjkApprovalProcessLogsVo> list(ZjkApprovalProcessLogsBo,PageQuery)
+ void export(ZjkApprovalProcessLogsBo,HttpServletResponse)
+ R<ZjkApprovalProcessLogsVo> getInfo(Long)
+ R<Void> add(ZjkApprovalProcessLogsBo)
+ R<Void> edit(ZjkApprovalProcessLogsBo)
+ R<Void> remove(Long[])
}
note top of ZjkApprovalProcessLogsController
* 审批流程记录
* 前端访问路由地址为:/traceManagement/approvalProcessLogs
*
* @author zhangzhou
* @date 2024-11-06
end note
note left of ZjkApprovalProcessLogsController::list(ZjkApprovalProcessLogsBo,PageQuery)
* 查询审批流程记录列表
end note
note right of ZjkApprovalProcessLogsController::export(ZjkApprovalProcessLogsBo,HttpServletResponse)
* 导出审批流程记录列表
end note
note left of ZjkApprovalProcessLogsController::getInfo(Long)
* 获取审批流程记录详细信息
*
* @param id 主键
end note
note right of ZjkApprovalProcessLogsController::add(ZjkApprovalProcessLogsBo)
* 新增审批流程记录
end note
note left of ZjkApprovalProcessLogsController::edit(ZjkApprovalProcessLogsBo)
* 修改审批流程记录
end note
note right of ZjkApprovalProcessLogsController::remove(Long[])
* 删除审批流程记录
*
* @param ids 主键串
end note
class ZjkChartController {
- ZjkExpertChartService zjkExpertChartService
+ R<ChartBaseVO> getChartBase(Long)
+ R<List<SimpleExpertDto>> getExperts()
+ R<ChartRelExpertVO> getSameOtherData(Long)
}
note top of ZjkChartController
* 专家库画像控制器
*
* @author : yanguohua
* @version : 1.0
* @date : 2024/10/30 16:57
end note
note left of ZjkChartController::getChartBase(Long)
* 专家画像榜基本信息
end note
note right of ZjkChartController::getSameOtherData(Long)
* 专家知识图谱
end note
class ZjkDataChangesLogsController {
- IZjkDataChangesLogsService zjkDataChangesLogsService
+ TableDataInfo<ZjkDataChangesLogsVo> list(ZjkDataChangesLogsBo,PageQuery)
+ void export(ZjkDataChangesLogsBo,HttpServletResponse)
+ R<ZjkDataChangesLogsDetailVo> getInfo(Long)
+ R<Void> add(ZjkDataChangesLogsBo)
+ R<Void> edit(ZjkDataChangesLogsBo)
+ R<Void> remove(Long[])
}
note top of ZjkDataChangesLogsController
* 业务数据变更记录
* 前端访问路由地址为:/dataChangesLogs/dataChangesLogs
*
* @author ygh
* @date 2024-11-07
end note
note left of ZjkDataChangesLogsController::list(ZjkDataChangesLogsBo,PageQuery)
* 查询业务数据变更记录列表
end note
note right of ZjkDataChangesLogsController::export(ZjkDataChangesLogsBo,HttpServletResponse)
* 导出业务数据变更记录列表
end note
note left of ZjkDataChangesLogsController::getInfo(Long)
* 获取业务数据变更记录详细信息
*
* @param id 主键
end note
note right of ZjkDataChangesLogsController::add(ZjkDataChangesLogsBo)
* 新增业务数据变更记录
end note
note left of ZjkDataChangesLogsController::edit(ZjkDataChangesLogsBo)
* 修改业务数据变更记录
end note
note right of ZjkDataChangesLogsController::remove(Long[])
* 删除业务数据变更记录
*
* @param ids 主键串
end note
class ZjkLearningCreditRecordController {
- IZjkLearningCreditRecordService zjkLearningCreditRecordService
+ TableDataInfo<ZjkLearningCreditRecordVo> list(ZjkLearningCreditRecordBo,PageQuery)
+ void export(ZjkLearningCreditRecordBo,HttpServletResponse)
+ R<List<ZjkLearningCreditRecordVo>> getInfo(Long)
+ R<Void> add(ZjkLearningCreditRecordBo)
+ R<Void> edit(ZjkLearningCreditRecordBo)
+ R<Void> remove(Long[])
}
note top of ZjkLearningCreditRecordController
* 信用用户学习记录
* 前端访问路由地址为:/jyk/learningCreditRecord
*
* @author ygh
* @date 2024-11-26
end note
note left of ZjkLearningCreditRecordController::list(ZjkLearningCreditRecordBo,PageQuery)
* 查询信用用户学习记录列表
end note
note right of ZjkLearningCreditRecordController::export(ZjkLearningCreditRecordBo,HttpServletResponse)
* 导出信用用户学习记录列表
end note
note left of ZjkLearningCreditRecordController::getInfo(Long)
* 获取信用用户学习记录详细信息
*
* @param userId 用户id
end note
note right of ZjkLearningCreditRecordController::add(ZjkLearningCreditRecordBo)
* 新增信用用户学习记录
end note
note left of ZjkLearningCreditRecordController::edit(ZjkLearningCreditRecordBo)
* 修改信用用户学习记录
end note
note right of ZjkLearningCreditRecordController::remove(Long[])
* 删除信用用户学习记录
*
* @param ids 主键串
end note
class ZjkCreditLvController {
- IZjkCreditLvService zjkCreditLvService
+ R<List<ZjkCreditLvVo>> list()
+ void export(ZjkCreditLvBo,HttpServletResponse)
+ R<ZjkCreditLvVo> getInfo(Long)
+ R<Void> add(ZjkCreditLvBo)
+ R<Void> edit(ZjkCreditLvBo)
+ R<Void> remove(Long[])
+ List<ZjkCreditUserVo> countReson(ZjkCreditLvVo)
}
note top of ZjkCreditLvController
* 【请填写功能名称】
* 前端访问路由地址为:/jyk/creditLv
*
* @author ygh
* @date 2024-11-13
end note
note left of ZjkCreditLvController::list()
@SaCheckPermission("jyk:creditLv:list")
end note
note right of ZjkCreditLvController::export(ZjkCreditLvBo,HttpServletResponse)
* 导出【请填写功能名称】列表
end note
note left of ZjkCreditLvController::getInfo(Long)
* 获取【请填写功能名称】详细信息
*
* @param id 主键
end note
note right of ZjkCreditLvController::add(ZjkCreditLvBo)
* 新增【请填写功能名称】
end note
note left of ZjkCreditLvController::edit(ZjkCreditLvBo)
* 修改【请填写功能名称】
end note
note right of ZjkCreditLvController::remove(Long[])
* 删除【请填写功能名称】
*
* @param ids 主键串
end note
class ZjkCreditController {
- IZjkCreditService zjkCreditService
+ TableDataInfo<ZjkCreditVo> list(ZjkCreditBo,PageQuery)
+ void export(ZjkCreditBo,HttpServletResponse)
+ R<ZjkCreditVo> getInfo(Long)
+ R<Void> add(ZjkCreditBo)
+ R<Void> edit(ZjkCreditBo)
+ R<Void> remove(Long[])
+ R<PointExpertRankVO> expertPointRankUser()
+ TableDataInfo<CreditShowVO> creditList(CreditReqDto,PageQuery)
+ R<ChartBaseCreditVO> pointBase()
+ R<ChartBaseCreditVO> synchronization()
}
note top of ZjkCreditController
* 信用记录
* 前端访问路由地址为:/zjk/credit
*
* @author ygh
* @date 2024-11-11
end note
note left of ZjkCreditController::list(ZjkCreditBo,PageQuery)
@SaCheckPermission("zjk:credit:list")
end note
note right of ZjkCreditController::export(ZjkCreditBo,HttpServletResponse)
* 导出信用记录列表
end note
note left of ZjkCreditController::getInfo(Long)
* 获取信用记录详细信息
*
* @param ID 主键
end note
note right of ZjkCreditController::add(ZjkCreditBo)
* 新增信用记录
end note
note left of ZjkCreditController::edit(ZjkCreditBo)
* 修改信用记录
end note
note right of ZjkCreditController::remove(Long[])
* 删除信用记录
*
* @param IDs 主键串
end note
note left of ZjkCreditController::expertPointRankUser()
* 同步专家信息到信用用户记录表
end note
note right of ZjkCreditController::creditList(CreditReqDto,PageQuery)
* 专家信用管理列表
end note
note left of ZjkCreditController::pointBase()
* 专家信用榜基本信息
end note
note right of ZjkCreditController::synchronization()
同步到记录表中最初数据
end note
class ZjkLeaveController {
- IZjkLeaveService zjkLeaveService
- IZjkLeaveRuleService zjkLeaveRuleService
+ void initBinder(WebDataBinder)
+ TableDataInfo<ZjkEvaluateVO> getLeavePros()
+ TableDataInfo<ZjkEvaluateVO> getProsForAccept()
+ TableDataInfo<ZjkEvaluateVO> getProsForJoin()
+ R<Void> leaveForPro(ZjkEvaluateVO)
+ R<Void> setAccept(ZjkEvaluateVO)
+ TableDataInfo<ZjkLeaveVo> list(ZjkLeaveBo,PageQuery)
+ TableDataInfo<ZjkLeaveVo> adminList(ZjkLeaveBo,PageQuery)
+ TableDataInfo<ZjkLeaveVo> splist(ZjkLeaveBo,PageQuery)
+ R<ZjkLeaveVo> getInfo(String)
+ R<ZjkLeaveRuleVo> getLeavelRule()
+ R<Void> edit(ZjkLeaveRuleBo)
+ R<Void> add(ZjkLeaveBo)
+ R<Void> edit(ZjkLeaveBo)
+ R<StsNumVO> stsNum()
+ R<StsLeaveVO> stsChart(Integer)
}
note top of ZjkLeaveController
* 专家库请假控制器
*
* @author : yanguohua
* @version : 1.0
* @date : 2024/10/30 16:57
end note
note left of ZjkLeaveController::getProsForAccept()
* 待接受项目
* @return
end note
note right of ZjkLeaveController::getProsForJoin()
* 待参评项目
* @return
end note
note left of ZjkLeaveController::leaveForPro(ZjkEvaluateVO)
* 项目请假
*
* @return
end note
note right of ZjkLeaveController::setAccept(ZjkEvaluateVO)
* 项目接受
*
* @return
end note
note left of ZjkLeaveController::list(ZjkLeaveBo,PageQuery)
* 查询【请填写功能名称】列表
end note
note right of ZjkLeaveController::adminList(ZjkLeaveBo,PageQuery)
* 查询【请填写功能名称】列表
end note
note left of ZjkLeaveController::splist(ZjkLeaveBo,PageQuery)
* 机构管理员-请假审批
end note
note right of ZjkLeaveController::getInfo(String)
* 获取【请填写功能名称】详细信息
*
* @param gid 主键
end note
note left of ZjkLeaveController::getLeavelRule()
* 获取【请填写功能名称】详细信息
end note
note right of ZjkLeaveController::edit(ZjkLeaveRuleBo)
* 修改【请填写功能名称】
end note
note left of ZjkLeaveController::add(ZjkLeaveBo)
* 新增【请填写功能名称】
end note
note right of ZjkLeaveController::edit(ZjkLeaveBo)
* 修改【请填写功能名称】
end note
note left of ZjkLeaveController::stsNum()
* 请假次数统计
end note
note right of ZjkLeaveController::stsChart(Integer)
* 请假图表统计
end note
class ZjkExpertProfessionalController {
- IZjkExpertProfessionalService zjkExpertProfessionalService
+ TableDataInfo<ZjkExpertProfessionalVo> list(ZjkExpertProfessionalBo,PageQuery)
+ void export(ZjkExpertProfessionalBo,HttpServletResponse)
+ R<ZjkExpertProfessionalVo> getInfo(Long)
+ R<Void> add(ZjkExpertProfessionalBo)
+ R<Void> edit(ZjkExpertProfessionalBo)
+ R<Void> remove(Long[])
+ R<List<String>> professionalList()
}
note top of ZjkExpertProfessionalController
* 专家库技术资格关系表
* 前端访问路由地址为:/expert/expertProfessional
*
* @author zhangzhou
* @date 2024-11-01
end note
note left of ZjkExpertProfessionalController::list(ZjkExpertProfessionalBo,PageQuery)
* 查询专家库技术资格关系表列表
end note
note right of ZjkExpertProfessionalController::export(ZjkExpertProfessionalBo,HttpServletResponse)
* 导出专家库技术资格关系表列表
end note
note left of ZjkExpertProfessionalController::getInfo(Long)
* 获取专家库技术资格关系表详细信息
*
* @param id 主键
end note
note right of ZjkExpertProfessionalController::add(ZjkExpertProfessionalBo)
* 新增专家库技术资格关系表
end note
note left of ZjkExpertProfessionalController::edit(ZjkExpertProfessionalBo)
* 修改专家库技术资格关系表
end note
note right of ZjkExpertProfessionalController::remove(Long[])
* 删除专家库技术资格关系表
*
* @param ids 主键串
end note
class ZjkProductReviewsnController {
- IZjkProductReviewsnService zjkProductReviewsnService
+ TableDataInfo<ZjkProductReviewsnVo> list(ZjkProductReviewsnBo,PageQuery)
+ void export(ZjkProductReviewsnBo,HttpServletResponse)
+ R<ZjkProductReviewsnVo> getInfo(Long)
+ R<Void> add(ZjkProductReviewsnBo)
+ R<Void> edit(ZjkProductReviewsnBo)
+ R<Void> remove(Long[])
}
note top of ZjkProductReviewsnController
* 项目阶段文档管理
* 前端访问路由地址为:/zjk/productReviewsn
*
* @author wt
* @date 2024-11-22
end note
note left of ZjkProductReviewsnController::list(ZjkProductReviewsnBo,PageQuery)
* 查询项目阶段文档管理列表
end note
note right of ZjkProductReviewsnController::export(ZjkProductReviewsnBo,HttpServletResponse)
* 导出项目阶段文档管理列表
end note
note left of ZjkProductReviewsnController::getInfo(Long)
* 获取项目阶段文档管理详细信息
*
* @param id 主键
end note
note right of ZjkProductReviewsnController::add(ZjkProductReviewsnBo)
* 新增项目阶段文档管理
end note
note left of ZjkProductReviewsnController::edit(ZjkProductReviewsnBo)
* 修改项目阶段文档管理
end note
note right of ZjkProductReviewsnController::remove(Long[])
* 删除项目阶段文档管理
*
* @param ids 主键串
end note
class ZjkCreditUserController {
- IZjkCreditUserService zjkCreditUserService
+ TableDataInfo<ZjkCreditUserVo> list(ZjkCreditUserBo,PageQuery)
+ void export(ZjkCreditUserBo,HttpServletResponse)
+ R<ZjkCreditUserVo> getInfo(String)
+ R<Void> add(ZjkCreditUserBo)
+ R<Void> edit(ZjkCreditUserBo)
+ R<Void> remove(String[])
+ R<CreditExpertRankVO> expertPointRank(Integer)
+ R<List<ZjkCreditRuleVo>> expertPointRanks(ZjkCreditBo,PageQuery)
+ R<List<ChartBaseCreditVO>> blacklist(ZjkCreditBo)
+ R<List<ChartBaseCreditVO>> outCreditId(Long)
+ R<Void> moveToBlacklist(ZjkCreditUserBo)
+ R<Void> removeTheBlacklist(ZjkCreditUserBo)
+ R<Long> getBlacklistCount()
+ R<Long> getCount()
}
note top of ZjkCreditUserController
* 信用用户管理
* 前端访问路由地址为:/zjk/creditUser
*
* @author ygh
* @date 2024-11-11
end note
note left of ZjkCreditUserController::list(ZjkCreditUserBo,PageQuery)
@SaCheckPermission("zjk:creditUser:list")
end note
note right of ZjkCreditUserController::export(ZjkCreditUserBo,HttpServletResponse)
* 导出信用用户管理列表
end note
note left of ZjkCreditUserController::getInfo(String)
* 获取信用用户管理详细信息
*
* @param ID 主键
end note
note right of ZjkCreditUserController::add(ZjkCreditUserBo)
* 新增信用用户管理
end note
note left of ZjkCreditUserController::edit(ZjkCreditUserBo)
* 修改信用用户管理
end note
note right of ZjkCreditUserController::remove(String[])
* 删除信用用户管理
*
* @param IDs 主键串
end note
note left of ZjkCreditUserController::expertPointRank(Integer)
* 专家积分榜基本信息
end note
note right of ZjkCreditUserController::expertPointRanks(ZjkCreditBo,PageQuery)
专家信用详情
end note
note left of ZjkCreditUserController::blacklist(ZjkCreditBo)
黑名单
end note
note right of ZjkCreditUserController::outCreditId(Long)
出库
end note
note left of ZjkCreditUserController::moveToBlacklist(ZjkCreditUserBo)
* 手动移入黑名单
end note
note right of ZjkCreditUserController::removeTheBlacklist(ZjkCreditUserBo)
* 手动移出黑名单
end note
note left of ZjkCreditUserController::getBlacklistCount()
* 获取黑名单专家总人数
end note
note right of ZjkCreditUserController::getCount()
黑名单
end note
class ZjkExpertMoneyConfigController {
- IZjkExpertMoneyConfigService zjkExpertMoneyConfigService
+ TableDataInfo<ZjkExpertMoneyConfigVo> list(ZjkExpertMoneyConfigBo,PageQuery)
+ void export(ZjkExpertMoneyConfigBo,HttpServletResponse)
+ void exportTemplate(HttpServletResponse)
+ R imports(MultipartFile)
+ R<ZjkExpertMoneyConfigVo> getInfo(Long)
+ R<Void> add(ZjkExpertMoneyConfigBo)
+ R<Void> edit(ZjkExpertMoneyConfigBo)
+ R<Void> remove(Long[])
+ R<List<SelectOptionVo>> getExpertMoneyConfig()
}
note top of ZjkExpertMoneyConfigController
* 专家费用管理
* 前端访问路由地址为:/expert/expertMoneyConfig
*
* @author by
* @date 2024-11-25
end note
note left of ZjkExpertMoneyConfigController::list(ZjkExpertMoneyConfigBo,PageQuery)
* 查询专家费用管理列表
end note
note right of ZjkExpertMoneyConfigController::export(ZjkExpertMoneyConfigBo,HttpServletResponse)
* 导出专家费用管理列表
end note
note left of ZjkExpertMoneyConfigController::exportTemplate(HttpServletResponse)
* 模板导出
* @param response
end note
note right of ZjkExpertMoneyConfigController::imports(MultipartFile)
* 导入
* @param file
* @return
* @throws Exception
end note
note left of ZjkExpertMoneyConfigController::getInfo(Long)
* 获取专家费用管理详细信息
*
* @param moneyId 主键
end note
note right of ZjkExpertMoneyConfigController::add(ZjkExpertMoneyConfigBo)
* 新增专家费用管理
end note
note left of ZjkExpertMoneyConfigController::edit(ZjkExpertMoneyConfigBo)
* 修改专家费用管理
end note
note right of ZjkExpertMoneyConfigController::remove(Long[])
* 删除专家费用管理
*
* @param moneyIds 主键串
end note
note left of ZjkExpertMoneyConfigController::getExpertMoneyConfig()
* 获取职称等级下拉选项
end note
BaseController <|-- ZjkExpertHistoryController
BaseController <|-- ZjkInvoiceController
BaseController <|-- ZjkCreditRewardController
BaseController <|-- ZjkLearningMaterialsController
BaseController <|-- ZjkProductSummarizeLogController
BaseController <|-- ZjkEvaluateController
BaseController <|-- ZjkExpertItemController
BaseController <|-- ZjkProductController
BaseController <|-- ZjkProductSummarizeController
BaseController <|-- ZjkExpertLogController
BaseController <|-- ZjkExpertMoneyInfoController
BaseController <|-- ZjkItemExtreationController
BaseController <|-- ZjkReviewPhaseController
BaseController <|-- ZjkExpertController
BaseController <|-- ZjkPointController
BaseController <|-- ZjkProjectEvaluationController
BaseController <|-- ZjkExpertMajorController
BaseController <|-- ZjkApprovalProcessLogsController
BaseController <|-- ZjkChartController
BaseController <|-- ZjkDataChangesLogsController
BaseController <|-- ZjkLearningCreditRecordController
BaseController <|-- ZjkCreditLvController
BaseController <|-- ZjkCreditController
BaseController <|-- ZjkLeaveController
BaseController <|-- ZjkExpertProfessionalController
BaseController <|-- ZjkProductReviewsnController
BaseController <|-- ZjkCreditUserController
BaseController <|-- ZjkExpertMoneyConfigController
@enduml
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment