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

20251212专家库试运行定版

parent 767beba5
...@@ -27,9 +27,8 @@ steps: ...@@ -27,9 +27,8 @@ steps:
secret_key: secret_key:
from_secret: SECRET_KEY_MINIO from_secret: SECRET_KEY_MINIO
- name: build - 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: commands:
- mvn clean install -Dmaven.test.skip=true - mvn clean install -Dmaven.test.skip=true
...@@ -46,74 +45,74 @@ steps: ...@@ -46,74 +45,74 @@ steps:
from_secret: ACCESS_KEY_MINIO from_secret: ACCESS_KEY_MINIO
secret_key: secret_key:
from_secret: SECRET_KEY_MINIO from_secret: SECRET_KEY_MINIO
# - name: docker-system-amd64 # - name: docker-system-amd64
# image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0 # image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0
# volumes: # volumes:
# - name: docker-sock # - name: docker-sock
# path: /var/run/docker.sock # path: /var/run/docker.sock
# settings: # settings:
# base: registry.cn-qingdao.aliyuncs.com/wod/openjdk:11.0-jdk-amd64 # 基础镜像 # base: registry.cn-qingdao.aliyuncs.com/wod/openjdk:11.0-jdk-amd64 # 基础镜像
# dockerfile: .beagle/dockerfile.system # dockerfile: .beagle/dockerfile.system
# repo: zjk/system # repo: zjk/system
# version: "1.0" # version: "1.0"
# channel: amd64 # channel: amd64
# args: "TARGETOS=linux,TARGETARCH=amd64" # args: "TARGETOS=linux,TARGETARCH=amd64"
# registry: hub.wodcloud.com # registry: hub.wodcloud.com
# registry_user: # registry_user:
# from_secret: REGISTRY_USER # from_secret: REGISTRY_USER
# registry_password: # registry_password:
# from_secret: REGISTRY_PASSWORD # from_secret: REGISTRY_PASSWORD
# - name: docker-auth-amd64 # - name: docker-auth-amd64
# image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0 # image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0
# volumes: # volumes:
# - name: docker-sock # - name: docker-sock
# path: /var/run/docker.sock # path: /var/run/docker.sock
# settings: # settings:
# base: registry.cn-qingdao.aliyuncs.com/wod/openjdk:11.0-jdk-amd64 # 基础镜像 # base: registry.cn-qingdao.aliyuncs.com/wod/openjdk:11.0-jdk-amd64 # 基础镜像
# dockerfile: .beagle/dockerfile.auth # dockerfile: .beagle/dockerfile.auth
# repo: zjk/auth # repo: zjk/auth
# version: "1.0" # version: "1.0"
# channel: amd64 # channel: amd64
# args: "TARGETOS=linux,TARGETARCH=amd64" # args: "TARGETOS=linux,TARGETARCH=amd64"
# registry: hub.wodcloud.com # registry: hub.wodcloud.com
# registry_user: # registry_user:
# from_secret: REGISTRY_USER # from_secret: REGISTRY_USER
# registry_password: # registry_password:
# from_secret: REGISTRY_PASSWORD # from_secret: REGISTRY_PASSWORD
# - name: docker-resource-amd64 # - name: docker-resource-amd64
# image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0 # image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0
# volumes: # volumes:
# - name: docker-sock # - name: docker-sock
# path: /var/run/docker.sock # path: /var/run/docker.sock
# settings: # settings:
# base: registry.cn-qingdao.aliyuncs.com/wod/openjdk:11.0-jdk-amd64 # 基础镜像 # base: registry.cn-qingdao.aliyuncs.com/wod/openjdk:11.0-jdk-amd64 # 基础镜像
# dockerfile: .beagle/dockerfile.resource # dockerfile: .beagle/dockerfile.resource
# repo: zjk/resource # repo: zjk/resource
# version: "1.0" # version: "1.0"
# channel: amd64 # channel: amd64
# args: "TARGETOS=linux,TARGETARCH=amd64" # args: "TARGETOS=linux,TARGETARCH=amd64"
# registry: hub.wodcloud.com # registry: hub.wodcloud.com
# registry_user: # registry_user:
# from_secret: REGISTRY_USER # from_secret: REGISTRY_USER
# registry_password: # registry_password:
# from_secret: REGISTRY_PASSWORD # from_secret: REGISTRY_PASSWORD
# - name: docker-zjkapi-amd64 # - name: docker-zjkapi-amd64
# image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0 # image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0
# volumes: # volumes:
# - name: docker-sock # - name: docker-sock
# path: /var/run/docker.sock # path: /var/run/docker.sock
# settings: # settings:
# base: registry.cn-qingdao.aliyuncs.com/wod/openjdk:11.0-jdk-amd64 # 基础镜像 # base: registry.cn-qingdao.aliyuncs.com/wod/openjdk:11.0-jdk-amd64 # 基础镜像
# dockerfile: .beagle/dockerfile.zjkapi # dockerfile: .beagle/dockerfile.zjkapi
# repo: zjk/zjk-api # repo: zjk/zjk-api
# version: "1.0" # version: "1.0"
# channel: amd64 # channel: amd64
# args: "TARGETOS=linux,TARGETARCH=amd64" # args: "TARGETOS=linux,TARGETARCH=amd64"
# registry: hub.wodcloud.com # registry: hub.wodcloud.com
# registry_user: # registry_user:
# from_secret: REGISTRY_USER # from_secret: REGISTRY_USER
# registry_password: # registry_password:
# from_secret: REGISTRY_PASSWORD # from_secret: REGISTRY_PASSWORD
- name: docker-zjkapi-arm64 - name: docker-zjkapi-arm64
image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0 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: ...@@ -7,7 +7,7 @@ spring:
boot: boot:
admin: admin:
ui: ui:
title: RuoYi-Cloud-Plus服务监控中心 title: 专家库服务监控中心
discovery: discovery:
# seata 不具有健康检查的能力 防止报错排除掉 # seata 不具有健康检查的能力 防止报错排除掉
ignored-services: ruoyi-seata-server 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 { ...@@ -72,6 +72,7 @@ public interface RemoteUserService {
Boolean wbjregisterUserInfo(List<RemoteUserBo> remoteUserBo) throws UserException, ServiceException; Boolean wbjregisterUserInfo(List<RemoteUserBo> remoteUserBo) throws UserException, ServiceException;
Boolean expertRegisterUserInfo(List<RemoteUserBo> remoteUserBo,String tenantId) throws UserException, ServiceException; Boolean expertRegisterUserInfo(List<RemoteUserBo> remoteUserBo,String tenantId) throws UserException, ServiceException;
Boolean expertRegisterUserInfoForSpj(List<RemoteUserBo> remoteUserBo,String tenantId) throws UserException, ServiceException;
/** /**
* 通过userId查询用户账户 * 通过userId查询用户账户
......
...@@ -190,6 +190,7 @@ public class TokenController { ...@@ -190,6 +190,7 @@ public class TokenController {
} }
return R.ok(sxzwfwLoginService.sxzwfwUserInfo(null, clientId, accessLink, acctType, tenantId)); return R.ok(sxzwfwLoginService.sxzwfwUserInfo(null, clientId, accessLink, acctType, tenantId));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
throw new ServiceException("登陆失败请重试"+e.getMessage()); throw new ServiceException("登陆失败请重试"+e.getMessage());
} }
......
package org.dromara.common.core.config; package org.dromara.common.core.config;
import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync; 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; ...@@ -14,4 +19,15 @@ import org.springframework.scheduling.annotation.EnableAsync;
@EnableAsync(proxyTargetClass = true) @EnableAsync(proxyTargetClass = true)
public class ApplicationConfig { 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 @@ ...@@ -58,36 +58,26 @@
<groupId>com.tongweb.springboot</groupId> <groupId>com.tongweb.springboot</groupId>
<artifactId>tongweb-spring-boot-starter-3.x</artifactId> <artifactId>tongweb-spring-boot-starter-3.x</artifactId>
<version>${tw.starter.version}</version> <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>
<dependency> <dependency>
<groupId>com.tongweb.springboot</groupId> <groupId>com.tongweb.springboot</groupId>
<artifactId>tongweb-spring-boot-websocket-3.x</artifactId> <artifactId>tongweb-spring-boot-websocket-3.x</artifactId>
<version>${tw.starter.version}</version> <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>
<dependency> <dependency>
<groupId>com.tongweb</groupId> <groupId>com.tongweb</groupId>
<artifactId>tongweb-lic-sdk</artifactId> <artifactId>tongweb-lic-sdk</artifactId>
<version>4.5.0.0</version> <version>4.5.0.0</version>
<scope>system</scope>
<systemPath>${basedir}/libs/tongweb-lic-sdk-4.5.0.0.jar</systemPath>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.tongweb</groupId> <groupId>com.tongweb</groupId>
<artifactId>tongweb-embed-core</artifactId> <artifactId>tongweb-embed-core</artifactId>
<version>${tw.starter.version}</version> <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>
<dependency> <dependency>
<groupId>com.tongweb</groupId> <groupId>com.tongweb</groupId>
<artifactId>tongweb-embed-websocket</artifactId> <artifactId>tongweb-embed-websocket</artifactId>
<version>${tw.starter.version}</version> <version>${tw.starter.version}</version>
<scope>system</scope>
<systemPath>${basedir}/libs/tongweb-embed-websocket-3.x-7.0.E.6_P7.jar</systemPath>
</dependency> </dependency>
<!-- SpringBoot Actuator --> <!-- SpringBoot Actuator -->
<dependency> <dependency>
......
...@@ -21,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -21,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.UUID;
/** /**
* 文件请求处理 * 文件请求处理
...@@ -38,7 +39,6 @@ public class RemoteFileServiceImpl implements RemoteFileService { ...@@ -38,7 +39,6 @@ public class RemoteFileServiceImpl implements RemoteFileService {
/** /**
* 文件上传请求 * 文件上传请求
*/ */
@Transactional(rollbackFor = Exception.class)
@Override @Override
public RemoteFile upload(String name, String originalFilename, String contentType, byte[] file) throws ServiceException { public RemoteFile upload(String name, String originalFilename, String contentType, byte[] file) throws ServiceException {
try { try {
...@@ -61,7 +61,8 @@ public class RemoteFileServiceImpl implements RemoteFileService { ...@@ -61,7 +61,8 @@ public class RemoteFileServiceImpl implements RemoteFileService {
sysFile.setFileSuffix(suffix); sysFile.setFileSuffix(suffix);
return sysFile; return sysFile;
} catch (Exception e) { } catch (Exception e) {
log.error("上传文件失败", e); log.error("上传文件失败");
e.printStackTrace();
throw new ServiceException("上传文件失败"); throw new ServiceException("上传文件失败");
} }
} }
......
...@@ -56,6 +56,7 @@ public class SysProfileController extends BaseController { ...@@ -56,6 +56,7 @@ public class SysProfileController extends BaseController {
* 个人信息 * 个人信息
*/ */
@GetMapping @GetMapping
@DecryptOperation
public R<ProfileVo> profile() { public R<ProfileVo> profile() {
SysUserVo user = userService.selectUserById(LoginHelper.getUserId()); SysUserVo user = userService.selectUserById(LoginHelper.getUserId());
ProfileVo profileVo = new ProfileVo(); ProfileVo profileVo = new ProfileVo();
...@@ -68,6 +69,7 @@ public class SysProfileController extends BaseController { ...@@ -68,6 +69,7 @@ public class SysProfileController extends BaseController {
/** /**
* 修改用户信息 * 修改用户信息
*/ */
@DecryptOperation
@RepeatSubmit @RepeatSubmit
@Log(title = "个人信息", businessType = BusinessType.UPDATE) @Log(title = "个人信息", businessType = BusinessType.UPDATE)
@PutMapping @PutMapping
...@@ -125,7 +127,6 @@ public class SysProfileController extends BaseController { ...@@ -125,7 +127,6 @@ public class SysProfileController extends BaseController {
* @param avatarfile 用户头像 * @param avatarfile 用户头像
*/ */
@RepeatSubmit @RepeatSubmit
@GlobalTransactional(rollbackFor = Exception.class)
@Log(title = "用户头像", businessType = BusinessType.UPDATE) @Log(title = "用户头像", businessType = BusinessType.UPDATE)
@PostMapping(value = "/avatar", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @PostMapping(value = "/avatar", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<AvatarVo> avatar(@RequestPart("avatarfile") MultipartFile avatarfile) throws IOException { public R<AvatarVo> avatar(@RequestPart("avatarfile") MultipartFile avatarfile) throws IOException {
......
...@@ -5,12 +5,10 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; ...@@ -5,12 +5,10 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; 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.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.system.domain.SysDept; import org.dromara.system.domain.SysDept;
import org.dromara.system.zwy.annotation.EncryptSensitive;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
......
...@@ -225,19 +225,14 @@ public class RemoteUserServiceImpl implements RemoteUserService { ...@@ -225,19 +225,14 @@ public class RemoteUserServiceImpl implements RemoteUserService {
public Boolean expertRegisterUserInfo(List<RemoteUserBo> remoteUserBo,String tenantId) throws UserException, ServiceException { public Boolean expertRegisterUserInfo(List<RemoteUserBo> remoteUserBo,String tenantId) throws UserException, ServiceException {
// 将 RemoteUserBo 转换为 SysUserBo 列表 // 将 RemoteUserBo 转换为 SysUserBo 列表
List<SysUserBo> sysUserBoList = BeanUtil.copyToList(remoteUserBo, SysUserBo.class); List<SysUserBo> sysUserBoList = BeanUtil.copyToList(remoteUserBo, SysUserBo.class);
// 获取所有用户名 List<String> names = sysUserBoList.stream().map(item -> {
List<String> userNameList = sysUserBoList.stream() String name = userService.selectByIdcardAndNickName(item.getIdCard(), item.getNickName());
.map(SysUserBo::getUserName) return name;
.collect(Collectors.toList()); }).collect(Collectors.toList());
// 根据用户名列表查询已存在的用户
List<SysUser> existingSysUsers = userService.selectListByUserNames(userNameList); // 过滤掉已存在的用户
// 提取已存在用户的租户 ID
Set<String> existingTenantIds = existingSysUsers.stream()
.map(SysUser::getTenantId)
.collect(Collectors.toSet());
// 过滤掉租户 ID 已存在的用户
sysUserBoList = sysUserBoList.stream() sysUserBoList = sysUserBoList.stream()
.filter(sysUser -> !existingTenantIds.contains(sysUser.getTenantId())) .filter(sysUser -> !names.contains(sysUser.getNickName()))
.collect(Collectors.toList()); .collect(Collectors.toList());
// 如果过滤后的列表为空,则直接返回 true // 如果过滤后的列表为空,则直接返回 true
if (CollectionUtil.isEmpty(sysUserBoList)) { if (CollectionUtil.isEmpty(sysUserBoList)) {
...@@ -247,6 +242,14 @@ public class RemoteUserServiceImpl implements RemoteUserService { ...@@ -247,6 +242,14 @@ public class RemoteUserServiceImpl implements RemoteUserService {
return userService.registerExpertUser(sysUserBoList,tenantId); 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查询用户账户 * 通过用户ID查询用户账户
* *
......
...@@ -76,10 +76,6 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> { ...@@ -76,10 +76,6 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
long countUserById(Long userId); long countUserById(Long userId);
@Override @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); int update(@Param(Constants.ENTITY) SysUser user, @Param(Constants.WRAPPER) Wrapper<SysUser> updateWrapper);
@Override @Override
...@@ -105,4 +101,6 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> { ...@@ -105,4 +101,6 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
int updatePasswordById(@Param("userId") Long userId, @Param("password") String password); int updatePasswordById(@Param("userId") Long userId, @Param("password") String password);
void updateHmacById(SysUser update); void updateHmacById(SysUser update);
String selectByIdcardAndNickName(String idCard, String nickName);
} }
package org.dromara.system.service; 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.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUser;
...@@ -312,4 +314,6 @@ public interface ISysUserService { ...@@ -312,4 +314,6 @@ public interface ISysUserService {
Object selectSysUserById(Long id); Object selectSysUserById(Long id);
void updateUserHmac(SysUser update); void updateUserHmac(SysUser update);
String selectByIdcardAndNickName(String idCard, String nickName);
} }
...@@ -557,6 +557,12 @@ public class SysUserServiceImpl implements ISysUserService { ...@@ -557,6 +557,12 @@ public class SysUserServiceImpl implements ISysUserService {
baseMapper.updateHmacById(update); 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 { ...@@ -608,8 +614,7 @@ public class SysUserServiceImpl implements ISysUserService {
.set(SysUser::getEmail, user.getEmail()) .set(SysUser::getEmail, user.getEmail())
.set(SysUser::getSex, user.getSex()) .set(SysUser::getSex, user.getSex())
.eq(SysUser::getUserId, user.getUserId()) .eq(SysUser::getUserId, user.getUserId())
.set(SysUser::getPasswordUpdateTime, user.getPasswordUpdateTime()) .set(ObjectUtil.isNotNull(user.getPasswordUpdateTime()), SysUser::getPasswordUpdateTime, user.getPasswordUpdateTime()) .set(ObjectUtil.isNotNull(user.getBankName()), SysUser::getBankName, user.getBankName())
.set(ObjectUtil.isNotNull(user.getBankName()), SysUser::getBankName, user.getBankName())
.set(ObjectUtil.isNotNull(user.getBankCode()), SysUser::getBankCode, user.getBankCode()) .set(ObjectUtil.isNotNull(user.getBankCode()), SysUser::getBankCode, user.getBankCode())
.set(ObjectUtil.isNotNull(user.getBankAddr()), SysUser::getBankAddr, user.getBankAddr()) .set(ObjectUtil.isNotNull(user.getBankAddr()), SysUser::getBankAddr, user.getBankAddr())
); );
......
...@@ -101,6 +101,9 @@ ...@@ -101,6 +101,9 @@
AND del_flag = '0' AND del_flag = '0'
</select> </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 id="updatePasswordById">
UPDATE sys_user UPDATE sys_user
......
...@@ -112,9 +112,12 @@ ...@@ -112,9 +112,12 @@
<groupId>cn.bubi.sdk</groupId> <groupId>cn.bubi.sdk</groupId>
<artifactId>bubichain-sdk</artifactId> <artifactId>bubichain-sdk</artifactId>
<version>4.0.4</version> <version>4.0.4</version>
<scope>system</scope>
<systemPath>${basedir}/libs/bubichain-sdk-4.0.4.jar</systemPath>
</dependency> </dependency>
<dependency>
<groupId>cn.bubi.sdk</groupId>
<artifactId>bubichain-sdk</artifactId>
<version>4.0.4</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -3,6 +3,7 @@ package org.dromara.zjk.annualInspection.annualInspectionAudit.domain; ...@@ -3,6 +3,7 @@ package org.dromara.zjk.annualInspection.annualInspectionAudit.domain;
import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.dromara.common.tenant.core.TenantEntity; import org.dromara.common.tenant.core.TenantEntity;
import org.dromara.zjk.annotation.PropertyMsg; import org.dromara.zjk.annotation.PropertyMsg;
...@@ -86,5 +87,9 @@ public class ZjkAnnualInspection extends TenantEntity { ...@@ -86,5 +87,9 @@ public class ZjkAnnualInspection extends TenantEntity {
private String reason; private String reason;
private String hmac; private String hmac;
/**
* 更新人(年检审核人)
*/
@TableField(exist = false)
private String updateByStr;
} }
...@@ -91,4 +91,6 @@ public class ZjkAnnualInspectionBo extends BaseEntity { ...@@ -91,4 +91,6 @@ public class ZjkAnnualInspectionBo extends BaseEntity {
@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8") @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd")
private Date endAuditTime; private Date endAuditTime;
private String start;
private String end;
} }
...@@ -19,4 +19,5 @@ public interface ZjkAnnualInspectionMapper extends BaseMapperPlus<ZjkAnnualInspe ...@@ -19,4 +19,5 @@ public interface ZjkAnnualInspectionMapper extends BaseMapperPlus<ZjkAnnualInspe
void batchAnnualInspection(ZjkAnnualInspectionBo zjkAnnualInspectionBo); void batchAnnualInspection(ZjkAnnualInspectionBo zjkAnnualInspectionBo);
String selectApprovalByUserId(Long updateBy);
} }
...@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.satoken.utils.LoginHelper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.DateUtils;
...@@ -28,6 +29,7 @@ import org.dromara.zjk.utils.IdCardUtils; ...@@ -28,6 +29,7 @@ import org.dromara.zjk.utils.IdCardUtils;
import org.dromara.zjk.utils.NumberGenerator; import org.dromara.zjk.utils.NumberGenerator;
import org.dromara.zjk.zwy.client.HmacClient; import org.dromara.zjk.zwy.client.HmacClient;
import org.dromara.zjk.zwy.utils.ObjectHashGenerator; import org.dromara.zjk.zwy.utils.ObjectHashGenerator;
import org.dromara.zjk.zwy.utils.StringCryptoUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -55,7 +57,8 @@ public class ZjkAnnualInspectionServiceImpl implements IZjkAnnualInspectionServi ...@@ -55,7 +57,8 @@ public class ZjkAnnualInspectionServiceImpl implements IZjkAnnualInspectionServi
private IZjkExpertService zjkExpertService; private IZjkExpertService zjkExpertService;
private final HmacClient hmacClient; private final HmacClient hmacClient;
@Autowired
private StringCryptoUtil stringCryptoUtil;
/** /**
* 查询年检管理 * 查询年检管理
* *
...@@ -76,6 +79,16 @@ public class ZjkAnnualInspectionServiceImpl implements IZjkAnnualInspectionServi ...@@ -76,6 +79,16 @@ public class ZjkAnnualInspectionServiceImpl implements IZjkAnnualInspectionServi
*/ */
@Override @Override
public TableDataInfo<ZjkAnnualInspectionVo> queryPageList(ZjkAnnualInspectionBo bo, PageQuery pageQuery) { 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); Page<ZjkAnnualInspectionVo> result = zjkAnnualInspectionMapper.queryAnnualInspection(pageQuery.build(), bo);
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
...@@ -193,6 +206,8 @@ public class ZjkAnnualInspectionServiceImpl implements IZjkAnnualInspectionServi ...@@ -193,6 +206,8 @@ public class ZjkAnnualInspectionServiceImpl implements IZjkAnnualInspectionServi
} catch (Exception e) { } catch (Exception e) {
log.error("年检HMAC生成失败 expertId:{}", zjkExpert.getExpertId(), e); log.error("年检HMAC生成失败 expertId:{}", zjkExpert.getExpertId(), e);
} }
zjkAnnualInspectionBo.setUpdateBy(LoginHelper.getUserId());
zjkAnnualInspectionBo.setUpdateTime(new Date());
zjkAnnualInspectionMapper.batchAnnualInspection(zjkAnnualInspectionBo); 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; package org.dromara.zjk.config;
import cn.bubi.SDK; import cn.bubi.SDK;
import cn.bubi.common.Tools;
import cn.bubi.model.request.*; import cn.bubi.model.request.*;
import cn.bubi.model.request.operation.AccountSetMetadataOperation; import cn.bubi.model.request.operation.AccountSetMetadataOperation;
import cn.bubi.model.request.operation.BaseOperation; import cn.bubi.model.request.operation.BaseOperation;
...@@ -9,6 +8,7 @@ import cn.bubi.model.response.*; ...@@ -9,6 +8,7 @@ import cn.bubi.model.response.*;
import cn.bubi.model.response.result.data.Signature; import cn.bubi.model.response.result.data.Signature;
import cn.bubi.model.response.result.data.TransactionHistory; import cn.bubi.model.response.result.data.TransactionHistory;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
...@@ -20,43 +20,44 @@ public class OnChainUtils { ...@@ -20,43 +20,44 @@ public class OnChainUtils {
@Resource @Resource
private YsdpaasConfig ysdpaasConfig; private YsdpaasConfig ysdpaasConfig;
// 在 OnChainUtils 中添加异步方法
@Async
public void toChainAsync(String data, Long reviewId) {
toChain(data, reviewId);
}
// private static String address = "adxSqD9EdNMNYkfssD28YmSmgE1NLdm18Uhi9"; // private static String address = "adxSqD9EdNMNYkfssD28YmSmgE1NLdm18Uhi9";
// private static String privateKey = "privbynqzw8xmhim7LuwsLbkr4GVzkwn6CasJdbYEhVbFgFEcTWJ9Khq"; // private static String privateKey = "privbynqzw8xmhim7LuwsLbkr4GVzkwn6CasJdbYEhVbFgFEcTWJ9Khq";
public void toChain(String data, Long reviewId) { public void toChain(String data, Long reviewId) {
sdk = SDK.getInstance(ysdpaasConfig.getOnchainUrl()); long startTime = System.currentTimeMillis();
Long nonce = getAccountNonce(); try {
String key = "expert_cq_" + reviewId; log.info("开始上链操作,reviewId: {}", reviewId);
//String value = "{\"Plaintext\":{},\"Privacy\":{\"userId\":\"\",\"loginName\":\"\",\"phone\":\"\",\"userName\":\"\",\"source\":\"\",\"password\":\"\",\"userType\":\"\",\"isRegisterd\":\"\",\"caHash\":\"\",\"status\":\"\",\"updateTime\":\"\",\"company\":\"\"}}"; sdk = SDK.getInstance(ysdpaasConfig.getOnchainUrl());
BaseOperation[] operations = buildOperations(ysdpaasConfig.getOnchainAddress(), key, data); 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); String txHash = submitTransaction(tranBlob, signatures);
System.out.println(txHash); 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(); long endTime = System.currentTimeMillis();
if (endTime - startTime > 60000000) { log.error("上链操作异常,reviewId: {}, 耗时: {} ms", reviewId, endTime - startTime, e);
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.info("交易结束"); log.info("上链请求已完成,reviewId: {}", reviewId);
} }
public long getAccountNonce() { public long getAccountNonce() {
long nonce = 0; 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; package org.dromara.zjk.controller;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.domain.R; 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.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.system.api.RemoteConfigService;
import org.dromara.zjk.domain.bo.ZjkExpertBo; 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.ZjkExpertVo;
import org.dromara.zjk.domain.vo.ZjkProductVo;
import org.dromara.zjk.service.IZjkExpertService; 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.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 org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
/**
* 专家库对外api接口
*/
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@RequestMapping("/zjk") @RequestMapping("/api")
@Slf4j @Slf4j
public class ApiController { public class ApiController {
// 默认的密钥常量 // 默认的密钥常量
private static final String DEFAULT_SECRET_KEY = "k6psy7kafT%UaPd2"; private static final String DEFAULT_SECRET_KEY = "k6psy7kafT%UaPd2";
@DubboReference(timeout = 5000)
@DubboReference(timeout=5000)
private final RemoteConfigService remoteConfigService; private final RemoteConfigService remoteConfigService;
private final IZjkExpertService zjkExpertService; private final IZjkExpertService zjkExpertService;
@Autowired
private StringCryptoUtil stringCryptoUtil;
private final IZjkProductService zjkProductService;
private final ZjkExpertMoneyInfoService zjkExpertMoneyInfoService;
/** /**
* 专家库数据获取 * 专家库数据列表获取
* @param authorizationCode *
* @return * @return
*/ */
@PostMapping("/api/expert-data") @DecryptOperation
public R<String> getEncryptedExpertData(@RequestHeader("Authorization") String authorizationCode) { @GetMapping("/expertList")
public R<String> getExpertListData(ZjkExpertBo bo) {
try { try {
// 获取密钥配置 PageQuery pageQuery = new PageQuery();
String secretKey = remoteConfigService.selectConfigByKey("api.secret.key"); pageQuery.setPageNum(1);
if (StringUtils.isEmpty(secretKey)) { pageQuery.setPageSize(2000);
secretKey = DEFAULT_SECRET_KEY; if (StringUtils.isNotBlank(bo.getContact())) {
String phone = stringCryptoUtil.encryptField(bo.getContact());
bo.setContact(phone);
} }
if (StringUtils.isNotBlank(bo.getIdCard())) {
// 验证授权码是否为空 String idcard = stringCryptoUtil.encryptField(bo.getIdCard());
if (StringUtils.isEmpty(authorizationCode)) { bo.setIdCard(idcard);
log.warn("Authorization code is missing.");
throw new ServiceException("授权码为空,禁止访问");
} }
TableDataInfo<ZjkExpertVo> zjkExpertVoTableDataInfo = zjkExpertService.expertList(bo, pageQuery);
// 验证授权码是否匹配 List<ZjkExpertVo> rows = zjkExpertVoTableDataInfo.getRows();
if (!authorizationCode.equals(secretKey)) { if (CollectionUtils.isEmpty(rows)) {
log.warn("Invalid authorization code: {}", authorizationCode);
throw new ServiceException("授权码错误,禁止访问");
}
// 查询专家数据
List<ZjkExpertVo> zjkExpertVoList = zjkExpertService.exportList(new ZjkExpertBo());
if (zjkExpertVoList == null || zjkExpertVoList.isEmpty()) {
log.info("无可返回的数据");
return R.ok("无可返回的数据"); return R.ok("无可返回的数据");
} }
String data = JSON.toJSONString(zjkExpertVoList); String ak = ApiThreadLocal.getAk();
// 数据加密 String data = JSON.toJSONString(rows);
String encryptedData = EncryptionUtil.encrypt(data, secretKey); return R.ok("操作成功", data);
return R.ok("操作成功",encryptedData);
} catch (ServiceException e) {
log.error("Service exception occurred: {}", e.getMessage());
return R.fail(e.getMessage());
} catch (Exception e) { } catch (Exception e) {
log.error("Unexpected error occurred", e); log.error("Unexpected error occurred", e);
return R.fail("系统异常,请联系管理员"); 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( public String decryptData(
@RequestHeader("Authorization") String authorizationCode, @RequestHeader("Authorization") String authorizationCode,
@RequestBody String encryptedData) { @RequestBody String encryptedData) {
...@@ -102,4 +192,5 @@ public class ApiController { ...@@ -102,4 +192,5 @@ public class ApiController {
} }
} }
} }
...@@ -18,6 +18,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; ...@@ -18,6 +18,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.zjk.domain.bo.InoutCheckBo; 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.CheckSupportVo;
import org.dromara.zjk.domain.vo.InoutCheckVo; import org.dromara.zjk.domain.vo.InoutCheckVo;
import org.dromara.zjk.domain.vo.ProductPanoramaVo; import org.dromara.zjk.domain.vo.ProductPanoramaVo;
...@@ -120,12 +121,13 @@ public class InoutCheckController extends BaseController { ...@@ -120,12 +121,13 @@ public class InoutCheckController extends BaseController {
}, mode = SaMode.OR) }, mode = SaMode.OR)
@GetMapping("/productList") @GetMapping("/productList")
public TableDataInfo<ProductPanoramaVo> productPanorama(ProductPanoramaVo vo, PageQuery pageQuery) { public TableDataInfo<ProductPanoramaVo> productPanorama(ProductPanoramaVo vo, PageQuery pageQuery) {
return zjkProductService.productPanorama(vo, pageQuery); return zjkProductService.getProductList(vo, pageQuery);
} }
/** /**
* 财务审计支持-查看 * 财务审计支持-查看
*/ */
@DecryptOperation
@SaCheckRole(value = { @SaCheckRole(value = {
TenantConstants.JG_ROLE_KEY TenantConstants.JG_ROLE_KEY
}, mode = SaMode.OR) }, mode = SaMode.OR)
......
...@@ -44,7 +44,6 @@ public class LearningSuggestController extends BaseController { ...@@ -44,7 +44,6 @@ public class LearningSuggestController extends BaseController {
* 查询学习园地-学习推荐列表 * 查询学习园地-学习推荐列表
*/ */
@SaCheckRole(value = { @SaCheckRole(value = {
TenantConstants.JG_ROLE_KEY, TenantConstants.JG_ROLE_KEY,
TenantConstants.EXPERT_ROLE_KEY TenantConstants.EXPERT_ROLE_KEY
},mode = SaMode.OR) },mode = SaMode.OR)
......
...@@ -69,6 +69,7 @@ public class SmsUpController { ...@@ -69,6 +69,7 @@ public class SmsUpController {
@PostMapping("/receive") @PostMapping("/receive")
public String receiveUpSms(@RequestParam("deliver") String deliver) { public String receiveUpSms(@RequestParam("deliver") String deliver) {
try { try {
log.info("接收到上行数据: {}", deliver);
String[] records = deliver.split(";"); String[] records = deliver.split(";");
List<SmsUpEventDto> dtoList = new ArrayList<>(); List<SmsUpEventDto> dtoList = new ArrayList<>();
......
...@@ -57,7 +57,6 @@ public class ZjkApprovalProcessLogsController extends BaseController { ...@@ -57,7 +57,6 @@ public class ZjkApprovalProcessLogsController extends BaseController {
/** /**
* 导出审批流程记录列表 * 导出审批流程记录列表
*/ */
@SaCheckPermission("traceManagement:approvalProcessLogs:export")
@Log(title = "审批流程记录", businessType = BusinessType.EXPORT) @Log(title = "审批流程记录", businessType = BusinessType.EXPORT)
@PostMapping("/export") @PostMapping("/export")
public void export(ZjkApprovalProcessLogsBo bo, HttpServletResponse response) { public void export(ZjkApprovalProcessLogsBo bo, HttpServletResponse response) {
......
...@@ -36,6 +36,8 @@ public class ZjkChartController extends BaseController { ...@@ -36,6 +36,8 @@ public class ZjkChartController extends BaseController {
public R<ChartBaseVO> getChartBase(Long userId) { public R<ChartBaseVO> getChartBase(Long userId) {
return zjkExpertChartService.getChartBase(userId); return zjkExpertChartService.getChartBase(userId);
} }
@DecryptOperation
@GetMapping("/users") @GetMapping("/users")
public R<List<SimpleExpertDto>> getExperts() { public R<List<SimpleExpertDto>> getExperts() {
return zjkExpertChartService.getExperts(); return zjkExpertChartService.getExperts();
......
...@@ -122,8 +122,8 @@ public class ZjkCreditUserController extends BaseController { ...@@ -122,8 +122,8 @@ public class ZjkCreditUserController extends BaseController {
//专家信用详情 //专家信用详情
@GetMapping("/selectUserById") @GetMapping("/selectUserById")
public R<List<ZjkCreditRuleVo>> expertPointRanks(ZjkCreditBo creditId, PageQuery pageQuery) { public TableDataInfo<ZjkCreditRuleVo> expertPointRanks(ZjkCreditBo dto, PageQuery pageQuery) {
return zjkCreditUserService.selectUserById(creditId,pageQuery); return zjkCreditUserService.selectUserById(dto,pageQuery);
} }
//黑名单 //黑名单
......
...@@ -58,7 +58,6 @@ public class ZjkDataChangesLogsController extends BaseController { ...@@ -58,7 +58,6 @@ public class ZjkDataChangesLogsController extends BaseController {
/** /**
* 导出业务数据变更记录列表 * 导出业务数据变更记录列表
*/ */
@SaCheckPermission("dataChangesLogs:dataChangesLogs:export")
@Log(title = "业务数据变更记录", businessType = BusinessType.EXPORT) @Log(title = "业务数据变更记录", businessType = BusinessType.EXPORT)
@PostMapping("/export") @PostMapping("/export")
public void export(ZjkDataChangesLogsBo bo, HttpServletResponse response) { public void export(ZjkDataChangesLogsBo bo, HttpServletResponse response) {
......
...@@ -13,6 +13,7 @@ import org.dromara.common.core.utils.StringUtils; ...@@ -13,6 +13,7 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup; 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.excel.utils.ExcelUtil;
import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log; import org.dromara.common.log.annotation.Log;
...@@ -23,9 +24,12 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; ...@@ -23,9 +24,12 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.zjk.domain.ExpertBaseInfo; 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.ApprovalCommonBo;
import org.dromara.zjk.domain.bo.ZjkExpertBo; import org.dromara.zjk.domain.bo.ZjkExpertBo;
import org.dromara.zjk.domain.vo.ExpertPerformWorkCountVO; 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.domain.vo.ZjkExpertVo;
import org.dromara.zjk.enums.ResultTypeEnum; import org.dromara.zjk.enums.ResultTypeEnum;
import org.dromara.zjk.enums.ZjkExpertTypeEnum; import org.dromara.zjk.enums.ZjkExpertTypeEnum;
...@@ -39,6 +43,7 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -39,6 +43,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
/** /**
* 专家库 * 专家库
...@@ -158,8 +163,8 @@ public class ZjkExpertController extends BaseController { ...@@ -158,8 +163,8 @@ public class ZjkExpertController extends BaseController {
}, mode = SaMode.OR) }, mode = SaMode.OR)
public void export(@ModelAttribute ZjkExpertBo bo, HttpServletResponse response) { public void export(@ModelAttribute ZjkExpertBo bo, HttpServletResponse response) {
if (bo.getIsTemplate() == 0){ if (bo.getIsTemplate() == 0){
List<ZjkExpertVo> list = new ArrayList<>(); zjkExpertService.exportTml(response);
ExcelUtil.exportExcel(list, "专家库模板", ZjkExpertVo.class, response);
}else { }else {
List<ZjkExpertVo> list = zjkExpertService.exportList(bo); List<ZjkExpertVo> list = zjkExpertService.exportList(bo);
ExcelUtil.exportExcel(list, "专家库", ZjkExpertVo.class, response); ExcelUtil.exportExcel(list, "专家库", ZjkExpertVo.class, response);
...@@ -179,13 +184,7 @@ public class ZjkExpertController extends BaseController { ...@@ -179,13 +184,7 @@ public class ZjkExpertController extends BaseController {
TenantConstants.TENANT_ADMIN_ROLE_KEY TenantConstants.TENANT_ADMIN_ROLE_KEY
}, mode = SaMode.OR) }, mode = SaMode.OR)
public R<Void> imports(@RequestPart("file") MultipartFile file) { public R<Void> imports(@RequestPart("file") MultipartFile file) {
List<String> list = zjkExpertService.imports(file); return zjkExpertService.imports(file);
// 如果存在重复的身份证号则提示,剔除之后再次导入
if (!CollUtil.isEmpty(list)){
// 将身份证号列表转换为用逗号分隔的字符串
return R.fail("以下身份证号专家已经存在,请剔除后再次导入专家数据:" + String.join(", ", list));
}
return R.ok();
} }
/** /**
...@@ -218,7 +217,20 @@ public class ZjkExpertController extends BaseController { ...@@ -218,7 +217,20 @@ public class ZjkExpertController extends BaseController {
public R<Void> save(@Validated(AddGroup.class) @RequestBody ZjkExpertBo bo) { public R<Void> save(@Validated(AddGroup.class) @RequestBody ZjkExpertBo bo) {
return toAjax(zjkExpertService.insertByBo(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 { ...@@ -481,9 +493,8 @@ public class ZjkExpertController extends BaseController {
TenantConstants.TENANT_ADMIN_ROLE_KEY TenantConstants.TENANT_ADMIN_ROLE_KEY
},mode = SaMode.OR) },mode = SaMode.OR)
@GetMapping("/api/fetchRemoteProfessors") @GetMapping("/api/fetchRemoteProfessors")
public R<Void> fetchRemoteProfessors() { public R<SyncUserReturnVO> fetchRemoteProfessors() {
zjkExpertService.fetchRemoteProfessors(); return R.ok( zjkExpertService.fetchRemoteProfessors());
return R.ok();
} }
......
...@@ -50,7 +50,7 @@ public class ZjkExpertMoneyInfoController extends BaseController { ...@@ -50,7 +50,7 @@ public class ZjkExpertMoneyInfoController extends BaseController {
TenantConstants.TENANT_ADMIN_ROLE_KEY, TenantConstants.TENANT_ADMIN_ROLE_KEY,
TenantConstants.XM_ROLE_KEY, TenantConstants.XM_ROLE_KEY,
}, mode = SaMode.OR) }, mode = SaMode.OR)
public TableDataInfo<ZjkExpertMoneyInfoVO> page(ZjkExpertMoneyInfoBo bo, PageQuery query) { public TableDataInfo<ZjkExpertMoneyInfo> page(ZjkExpertMoneyInfoBo bo, PageQuery query) {
return zjkExpertMoneyInfoService.queryPageList(bo, query); return zjkExpertMoneyInfoService.queryPageList(bo, query);
} }
...@@ -197,15 +197,24 @@ public class ZjkExpertMoneyInfoController extends BaseController { ...@@ -197,15 +197,24 @@ public class ZjkExpertMoneyInfoController extends BaseController {
* 通过项目id和阶段获取参评专家列表 * 通过项目id和阶段获取参评专家列表
* @param productId * @param productId
* @param reviewSn * @param reviewSn
* @param toSettle 1:新增结算单带出的专家
* @return * @return
*/ */
@DecryptOperation
@SaCheckRole(value = { @SaCheckRole(value = {
TenantConstants.JG_ROLE_KEY TenantConstants.JG_ROLE_KEY
}, mode = SaMode.OR) }, mode = SaMode.OR)
@GetMapping("/expertList") @GetMapping("/expertList")
public R<List<ZjkExpertVo>> getExpertList(@NotNull(message = "项目不能为空") public R<List<ZjkExpertVo>> getExpertList(@NotNull(message = "项目不能为空")
Long productId, @NotNull(message = "阶段不能为空") Long productId, @NotNull(message = "阶段不能为空")
Integer reviewSn) { Integer reviewSn,String toSettle) {
return R.ok(zjkExpertMoneyInfoService.getExpertList(productId, reviewSn)); 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 { ...@@ -139,8 +139,7 @@ public class ZjkInvoiceController extends BaseController {
@Log(title = "发票", businessType = BusinessType.OTHER) @Log(title = "发票", businessType = BusinessType.OTHER)
@PostMapping("/downloadExcel") @PostMapping("/downloadExcel")
public void downloadExcel(HttpServletResponse response) { public void downloadExcel(HttpServletResponse response) {
List<ZjkInvoiceVo> list = new ArrayList<>(); zjkInvoiceService.downloadExcelTem(response);
ExcelUtil.exportExcel(list, "模板", ZjkInvoiceVo.class, response);
} }
...@@ -149,15 +148,13 @@ public class ZjkInvoiceController extends BaseController { ...@@ -149,15 +148,13 @@ public class ZjkInvoiceController extends BaseController {
* @param file * @param file
* @return * @return
*/ */
@EncryptOperation
@Log(title = "发票信息导入", businessType = BusinessType.IMPORT) @Log(title = "发票信息导入", businessType = BusinessType.IMPORT)
@PostMapping("/imports") @PostMapping("/imports")
@SaCheckRole(value = { @SaCheckRole(value = {
TenantConstants.JG_ROLE_KEY, TenantConstants.JG_ROLE_KEY,
}, mode = SaMode.OR) }, mode = SaMode.OR)
public R<Void> imports(@RequestPart("file") MultipartFile file) { public R<Void> imports(@RequestPart("file") MultipartFile file) {
zjkInvoiceService.imports(file); return zjkInvoiceService.imports(file);
return R.ok();
} }
......
...@@ -43,7 +43,7 @@ public class ZjkLeaveController extends BaseController { ...@@ -43,7 +43,7 @@ public class ZjkLeaveController extends BaseController {
private final IZjkLeaveRuleService zjkLeaveRuleService; private final IZjkLeaveRuleService zjkLeaveRuleService;
@InitBinder //解决前段传过来时间的字符串解析成时间报错问题 @InitBinder //解决前段传过来时间的字符串解析成时间报错问题
public void initBinder(WebDataBinder webDataBinder){ 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") @GetMapping("/pros")
......
...@@ -56,7 +56,7 @@ public class ZjkPointController extends BaseController { ...@@ -56,7 +56,7 @@ public class ZjkPointController extends BaseController {
private RemoteUserService remoteUserService; private RemoteUserService remoteUserService;
@InitBinder //解决前段传过来时间的字符串解析成时间报错问题 @InitBinder //解决前段传过来时间的字符串解析成时间报错问题
public void initBinder(WebDataBinder webDataBinder){ 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 { ...@@ -71,7 +71,7 @@ public class ZjkPointController extends BaseController {
},mode = SaMode.OR) },mode = SaMode.OR)
public R<List<ZjkPointRule>> pointRule(PointReqDto dto) { public R<List<ZjkPointRule>> pointRule(PointReqDto dto) {
QueryWrapper<ZjkPointRule> wq = new QueryWrapper<>(); 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()) .like(!StringUtils.isEmpty(dto.getRuleName()), ZjkPointRule::getRuleName, dto.getRuleName())
.between(dto.getStartDate() != null && dto.getEndDate() != null, ZjkPointRule::getCreateTime, .between(dto.getStartDate() != null && dto.getEndDate() != null, ZjkPointRule::getCreateTime,
dto.getStartDate(), dto.getEndDate()); dto.getStartDate(), dto.getEndDate());
...@@ -90,8 +90,8 @@ public class ZjkPointController extends BaseController { ...@@ -90,8 +90,8 @@ public class ZjkPointController extends BaseController {
},mode = SaMode.OR) },mode = SaMode.OR)
public R<List<ZjkPointRewardVO>> rewardList(PointReqDto dto) { public R<List<ZjkPointRewardVO>> rewardList(PointReqDto dto) {
QueryWrapper<ZjkPointReward> wq = new QueryWrapper<>(); QueryWrapper<ZjkPointReward> wq = new QueryWrapper<>();
wq.lambda().eq(!StringUtils.isEmpty(dto.getStartFlag()), ZjkPointReward::getStatus, dto.getStartFlag()) wq.lambda().eq(!StringUtils.isEmpty(dto.getStatus()), ZjkPointReward::getStatus, dto.getStatus())
.like(!StringUtils.isEmpty(dto.getRuleName()), ZjkPointReward::getRewardName, dto.getRuleName()) .like(!StringUtils.isEmpty(dto.getRewardName()), ZjkPointReward::getRewardName, dto.getRewardName())
.between(dto.getStartDate() != null && dto.getEndDate() != null, ZjkPointReward::getCreateTime, dto.getStartDate(), dto.getEndDate()); .between(dto.getStartDate() != null && dto.getEndDate() != null, ZjkPointReward::getCreateTime, dto.getStartDate(), dto.getEndDate());
List<ZjkPointReward> list = zjkPointRewardService.list(wq); List<ZjkPointReward> list = zjkPointRewardService.list(wq);
List<ZjkPointRewardVO> zjkPointRewardVOS = BeanUtil.copyToList(list, ZjkPointRewardVO.class); List<ZjkPointRewardVO> zjkPointRewardVOS = BeanUtil.copyToList(list, ZjkPointRewardVO.class);
......
...@@ -85,7 +85,7 @@ public class ZjkProductController extends BaseController { ...@@ -85,7 +85,7 @@ public class ZjkProductController extends BaseController {
/** /**
* 导出项目管理列表 * 导出项目管理列表
*/ */
// @DecryptOperation @DecryptOperation
@SaCheckRole(value={ @SaCheckRole(value={
TenantConstants.JG_ROLE_KEY, TenantConstants.JG_ROLE_KEY,
TenantConstants.SUPER_ADMIN_ROLE_KEY, TenantConstants.SUPER_ADMIN_ROLE_KEY,
......
...@@ -67,9 +67,8 @@ public class ZjkProductSummarizeController extends BaseController { ...@@ -67,9 +67,8 @@ public class ZjkProductSummarizeController extends BaseController {
@SaCheckPermission("zjk:productSummarize:export") @SaCheckPermission("zjk:productSummarize:export")
public void export(ZjkProductSummarizeBo bo, HttpServletResponse response) { public void export(ZjkProductSummarizeBo bo, HttpServletResponse response) {
List<ZjkProductSummarizeVo> list = zjkProductSummarizeService.queryList(bo); 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; ...@@ -8,6 +8,7 @@ import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.math3.stat.descriptive.summary.Product;
import org.dromara.common.core.constant.TenantConstants; import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
...@@ -19,6 +20,7 @@ import org.dromara.common.log.enums.BusinessType; ...@@ -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.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController; 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.ZjkReviewPhaseBo;
import org.dromara.zjk.domain.bo.ZjkReviewProductBo; import org.dromara.zjk.domain.bo.ZjkReviewProductBo;
import org.dromara.zjk.domain.vo.ZjkReviewExportVo; import org.dromara.zjk.domain.vo.ZjkReviewExportVo;
...@@ -125,14 +127,22 @@ public class ZjkReviewPhaseController extends BaseController { ...@@ -125,14 +127,22 @@ public class ZjkReviewPhaseController extends BaseController {
return zjkReviewPhaseService.reviewProductList(bo, pageQuery); return zjkReviewPhaseService.reviewProductList(bo, pageQuery);
} }
/**
* 发票/结算 获取项目列表
* @return
*/
@GetMapping("/invoice/productList")
public R<List<ZjkProductBo>> invoiceProductList() {
return zjkReviewPhaseService.invoiceProductList();
}
@DecryptOperation @DecryptOperation
@SaCheckPermission("zjk:reviewproduct:export") @SaCheckPermission("zjk:reviewproduct:export")
@PostMapping("/review/export") @PostMapping("/review/export")
public void reviewExport(ZjkReviewProductBo bo, HttpServletResponse response) { public void reviewExport(ZjkReviewProductBo bo, HttpServletResponse response) {
List<ZjkReviewProductVo> zjkReviewProductVos = zjkReviewPhaseService.reviewExport(bo); List<ZjkReviewProductVo> zjkReviewProductVos = zjkReviewPhaseService.reviewExport(bo);
List<ZjkReviewExportVo> zjkReviewExportVo = BeanUtil.copyToList(zjkReviewProductVos, ZjkReviewExportVo.class); //List<ZjkReviewExportVo> zjkReviewExportVo = BeanUtil.copyToList(zjkReviewProductVos, ZjkReviewExportVo.class);
ExcelUtil.exportExcel(zjkReviewExportVo, "评审项目", ZjkReviewExportVo.class, response); ExcelUtil.exportExcel(zjkReviewProductVos, "评审项目", ZjkReviewProductVo.class, response);
} }
......
...@@ -35,7 +35,11 @@ public class ZjkApprovalProcessLogs extends TenantEntity { ...@@ -35,7 +35,11 @@ public class ZjkApprovalProcessLogs extends TenantEntity {
* 操作内容 * 操作内容
*/ */
private String actionContent; private String actionContent;
/**
* 操作人
*/
@TableField(exist = false)
private String createByStr;
/** /**
* 审批意见 * 审批意见
*/ */
......
...@@ -360,5 +360,14 @@ public class ZjkExpert extends BaseEntity { ...@@ -360,5 +360,14 @@ public class ZjkExpert extends BaseEntity {
private String unitTypeDescribe; private String unitTypeDescribe;
private String hmac; private String hmac;
/**
* 活动范围
*/
private String scopeOfActivity;
/**
* 是否涉密
*/
private Integer isClassified;
} }
...@@ -6,11 +6,18 @@ import com.baomidou.mybatisplus.annotation.IdType; ...@@ -6,11 +6,18 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat; 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.Data;
import lombok.EqualsAndHashCode; 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.common.mybatis.core.domain.BaseEntity;
import org.dromara.zjk.annotation.PropertyMsg; import org.dromara.zjk.annotation.PropertyMsg;
import org.dromara.zjk.zwy.annotation.EncryptSensitive; import org.dromara.zjk.zwy.annotation.EncryptSensitive;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import java.io.Serial; import java.io.Serial;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -25,6 +32,7 @@ import java.util.Date; ...@@ -25,6 +32,7 @@ import java.util.Date;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@TableName("zjk_invoice") @TableName("zjk_invoice")
@ExcelIgnoreUnannotated
public class ZjkInvoice extends BaseEntity { public class ZjkInvoice extends BaseEntity {
@Serial @Serial
...@@ -35,21 +43,24 @@ public class ZjkInvoice extends BaseEntity { ...@@ -35,21 +43,24 @@ public class ZjkInvoice extends BaseEntity {
*/ */
@PropertyMsg(propertyName = "id") @PropertyMsg(propertyName = "id")
@TableId(type = IdType.ASSIGN_ID) @TableId(type = IdType.ASSIGN_ID)
@ExcelIgnore // 忽略该字段导出
private Long id; private Long id;
/** /**
* 发票号码 * 发票号码
*/ */
@PropertyMsg(propertyName = "invoice_number") @PropertyMsg(propertyName = "invoice_number")
@ExcelProperty(value = "发票号码") @ExcelProperty(value = "*发票号码")
private Long invoiceNumber; @NotBlank(message = "发票号码不能为空")
private String invoiceNumber;
/** /**
* 发票金额 * 发票金额
*/ */
@PropertyMsg(propertyName = "invoice_money") @PropertyMsg(propertyName = "invoice_money")
@ExcelProperty(value = "发票金额") @ExcelProperty(value = "*发票金额")
@JsonFormat(shape = JsonFormat.Shape.NUMBER) @JsonFormat(shape = JsonFormat.Shape.NUMBER)
@NotNull(message = "发票金额不能为空")
private BigDecimal invoiceMoney; private BigDecimal invoiceMoney;
/** /**
...@@ -58,16 +69,44 @@ public class ZjkInvoice extends BaseEntity { ...@@ -58,16 +69,44 @@ public class ZjkInvoice extends BaseEntity {
@PropertyMsg(propertyName = "start_date") @PropertyMsg(propertyName = "start_date")
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
@DateTimeFormat(value = "yyyy-MM-dd") @DateTimeFormat(value = "yyyy-MM-dd")
@ExcelProperty(value = "开票日期") @ExcelProperty(value = "*开票日期")
@NotNull(message = "开票日期不能为空")
private Date startDate; 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") @PropertyMsg(propertyName = "expert_name")
@ExcelProperty(value = "专家名称") @ExcelProperty(value = "*专家名称")
@NotBlank(message = "专家名称不能为空")
private String expertName; private String expertName;
/**
* 专家身份证号
*/
@PropertyMsg(propertyName = "expert_id_number")
@ExcelProperty(value = "*专家身份证号")
@NotBlank(message = "专家身份证号不能为空")
private String expertIdNumber;
/** /**
* 联系电话 * 联系电话
*/ */
...@@ -76,12 +115,6 @@ public class ZjkInvoice extends BaseEntity { ...@@ -76,12 +115,6 @@ public class ZjkInvoice extends BaseEntity {
@ExcelProperty(value = "联系电话") @ExcelProperty(value = "联系电话")
private String expertPhone; private String expertPhone;
/**
* 专家身份证号
*/
@PropertyMsg(propertyName = "expert_id_number")
@ExcelProperty(value = "专家身份证号")
private String expertIdNumber;
/** /**
* 职称等级 * 职称等级
...@@ -94,62 +127,31 @@ public class ZjkInvoice extends BaseEntity { ...@@ -94,62 +127,31 @@ public class ZjkInvoice extends BaseEntity {
* 电子发票附件相关 ,存储oss的id * 电子发票附件相关 ,存储oss的id
*/ */
@PropertyMsg(propertyName = "invoice_attached") @PropertyMsg(propertyName = "invoice_attached")
@ExcelIgnore // 忽略该字段导出
private String invoiceAttached; 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 * 项目id
*/ */
@PropertyMsg(propertyName = "product_id") @PropertyMsg(propertyName = "product_id")
@ExcelIgnore // 忽略该字段导出
private Long productId; private Long productId;
/**
* 项目阶段
*/
@PropertyMsg(propertyName = "reviewSn")
private Integer reviewSn;
/** /**
* 结算单id * 结算单id
*/ */
@PropertyMsg(propertyName = "settle_id") @PropertyMsg(propertyName = "settle_id")
@ExcelIgnore // 忽略该字段导出
private Long settleId; private Long settleId;
@TableField(exist = false)
@ExcelProperty(value = "*结算单号")
@NotBlank(message = "结算单号不能为空")
private String settleNo;
@ExcelIgnore // 忽略该字段导出
private String hmac; private String hmac;
/** /**
* 审核状态1:已审核 * 审核状态1:已审核
*/ */
@ExcelIgnore // 忽略该字段导出
private Integer checkStatus; private Integer checkStatus;
} }
package org.dromara.zjk.domain.bo; package org.dromara.zjk.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.zjk.domain.InoutCheck; import org.dromara.zjk.domain.InoutCheck;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date; import java.util.Date;
...@@ -32,11 +34,15 @@ public class InoutCheckBo extends BaseEntity { ...@@ -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; private Date checkRangeStart;
/** /**
* 时间范围结束 * 时间范围结束
*/ */
@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date checkRangeEnd; private Date checkRangeEnd;
/** /**
......
package org.dromara.zjk.domain.bo; package org.dromara.zjk.domain.bo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper; 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.Pattern;
import jakarta.validation.constraints.Size; import jakarta.validation.constraints.Size;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert; 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.common.mybatis.core.domain.BaseEntity;
import org.dromara.zjk.zwy.annotation.EncryptSensitive;
import org.dromara.zjk.annotation.PropertyMsg; import org.dromara.zjk.annotation.PropertyMsg;
import org.dromara.zjk.domain.ZjkExpert; import org.dromara.zjk.domain.ZjkExpert;
import org.dromara.zjk.domain.ZjkExpertMajor; import org.dromara.zjk.domain.ZjkExpertMajor;
...@@ -20,6 +22,7 @@ import org.dromara.zjk.domain.ZjkExpertProfessional; ...@@ -20,6 +22,7 @@ import org.dromara.zjk.domain.ZjkExpertProfessional;
import org.dromara.zjk.expert.expertAwards.domain.ZjkExpertAwards; import org.dromara.zjk.expert.expertAwards.domain.ZjkExpertAwards;
import org.dromara.zjk.expert.expertPaper.domain.ZjkExpertPaper; import org.dromara.zjk.expert.expertPaper.domain.ZjkExpertPaper;
import org.dromara.zjk.expert.expertPatent.domain.ZjkExpertPatent; import org.dromara.zjk.expert.expertPatent.domain.ZjkExpertPatent;
import org.dromara.zjk.zwy.annotation.EncryptSensitive;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date; import java.util.Date;
...@@ -33,6 +36,7 @@ import java.util.List; ...@@ -33,6 +36,7 @@ import java.util.List;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ExcelIgnoreUnannotated
@AutoMapper(target = ZjkExpert.class, reverseConvertGenerate = false) @AutoMapper(target = ZjkExpert.class, reverseConvertGenerate = false)
public class ZjkExpertBo extends BaseEntity { public class ZjkExpertBo extends BaseEntity {
...@@ -44,8 +48,9 @@ public class ZjkExpertBo extends BaseEntity { ...@@ -44,8 +48,9 @@ public class ZjkExpertBo extends BaseEntity {
/** /**
* 姓名 * 姓名
*/ */
@ExcelProperty(value = "姓名") @ExcelProperty(value = "*姓名")
@Size(max = 20, message = "推荐专家姓名长度不能超过20个字符",groups = { AddGroup.class}) @Size(max = 20, message = "推荐专家姓名长度不能超过20个字符", groups = {AddGroup.class})
@NotBlank(message = "姓名不能为空")
private String expertName; private String expertName;
/** /**
...@@ -53,20 +58,29 @@ public class ZjkExpertBo extends BaseEntity { ...@@ -53,20 +58,29 @@ public class ZjkExpertBo extends BaseEntity {
*/ */
@ExcelProperty(value = "性别", converter = ExcelDictConvert.class) @ExcelProperty(value = "性别", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "sys_user_sex") @ExcelDictFormat(dictType = "sys_user_sex")
@NotNull(message = "性别不能为空")
private Long sex; private Long sex;
/** /**
* 身份证号 * 身份证号
*/ */
@ExcelProperty(value = "身份证号") @ExcelProperty(value = "*身份证号")
@Pattern( @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]$", 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 = "身份证号格式不正确", message = "身份证号格式不正确",
groups = { AddGroup.class } groups = {AddGroup.class}
) )
@EncryptSensitive @EncryptSensitive
@NotBlank(message = "身份证号不能为空")
private String idCard; 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 { ...@@ -75,13 +89,7 @@ public class ZjkExpertBo extends BaseEntity {
@DateTimeFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthDate; 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 { ...@@ -92,7 +100,7 @@ public class ZjkExpertBo extends BaseEntity {
/** /**
* 单位类型 1企业,2高校,3政府单位 * 单位类型 1企业,2高校,3政府单位
*/ */
@ExcelProperty(value = "单位类型" ,converter = ExcelDictConvert.class) @ExcelProperty(value = "单位类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "unit_type") @ExcelDictFormat(dictType = "unit_type")
private String unitType; private String unitType;
...@@ -100,7 +108,7 @@ public class ZjkExpertBo extends BaseEntity { ...@@ -100,7 +108,7 @@ public class ZjkExpertBo extends BaseEntity {
/** /**
* 是否专家推荐 1 是 2 否 * 是否专家推荐 1 是 2 否
*/ */
@ExcelProperty(value = "是否专家推荐" ,converter = ExcelDictConvert.class) @ExcelProperty(value = "是否专家推荐", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "is_recommend") @ExcelDictFormat(dictType = "is_recommend")
private Integer isRecommend; private Integer isRecommend;
...@@ -113,7 +121,7 @@ public class ZjkExpertBo extends BaseEntity { ...@@ -113,7 +121,7 @@ public class ZjkExpertBo extends BaseEntity {
/** /**
* 政治面貌 * 政治面貌
*/ */
@ExcelProperty(value = "政治面貌" ,converter = ExcelDictConvert.class) @ExcelProperty(value = "政治面貌", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "politics") @ExcelDictFormat(dictType = "politics")
private String politics; private String politics;
...@@ -130,7 +138,7 @@ public class ZjkExpertBo extends BaseEntity { ...@@ -130,7 +138,7 @@ public class ZjkExpertBo extends BaseEntity {
private String major; private String major;
@ExcelProperty(value = "学历" ,converter = ExcelDictConvert.class) @ExcelProperty(value = "学历", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "degree_type") @ExcelDictFormat(dictType = "degree_type")
private String degree; private String degree;
...@@ -144,13 +152,11 @@ public class ZjkExpertBo extends BaseEntity { ...@@ -144,13 +152,11 @@ public class ZjkExpertBo extends BaseEntity {
/** /**
* 专业技术资格 * 专业技术资格
*/ */
@ExcelProperty(value = "专业技术资格")
private String professional; private String professional;
/** /**
* 专业技术资格取得时间 * 专业技术资格取得时间
*/ */
@ExcelProperty(value = "专业技术资格取得时间")
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
private Date professionalAcquisitionDate; private Date professionalAcquisitionDate;
...@@ -175,14 +181,13 @@ public class ZjkExpertBo extends BaseEntity { ...@@ -175,14 +181,13 @@ public class ZjkExpertBo extends BaseEntity {
/** /**
* 从事工作或研究领域 * 从事工作或研究领域
*/ */
@ExcelProperty(value = "从事工作或研究领域", converter = ExcelDictConvert.class) @ExcelProperty(value = "从事工作或研究领域", converter = MultiDictConvert.class)
@ExcelDictFormat(dictType = "perform_work_type") @ExcelDictFormat(dictType = "perform_work_type")
private String performWorkId; private String performWorkId;
/** /**
* 其他领域描述 * 其他领域描述
*/ */
@ExcelProperty(value = "其他领域描述")
private String otherDescribe; private String otherDescribe;
/** /**
...@@ -200,7 +205,6 @@ public class ZjkExpertBo extends BaseEntity { ...@@ -200,7 +205,6 @@ public class ZjkExpertBo extends BaseEntity {
/** /**
* 主要论著、业绩成果及获奖情况 * 主要论著、业绩成果及获奖情况
*/ */
@ExcelProperty(value = "主要论著、业绩成果及获奖情况")
private String achievement; private String achievement;
...@@ -267,21 +271,25 @@ public class ZjkExpertBo extends BaseEntity { ...@@ -267,21 +271,25 @@ public class ZjkExpertBo extends BaseEntity {
/** /**
* 省 * 省
*/ */
@ExcelProperty(value = "省")
private String province; private String province;
/** /**
* 市 * 市
*/ */
@ExcelProperty(value = "市")
private String city; private String city;
/** /**
* 区 * 区
*/ */
@ExcelProperty(value = "区")
private String area; private String area;
/** /**
* 详细地址 * 详细地址
*/ */
@ExcelProperty(value = "详细地址")
private String address; private String address;
...@@ -331,11 +339,27 @@ public class ZjkExpertBo extends BaseEntity { ...@@ -331,11 +339,27 @@ public class ZjkExpertBo extends BaseEntity {
*/ */
@PropertyMsg(propertyName = "职称等级") @PropertyMsg(propertyName = "职称等级")
private Long positionTitleLevel; private Long positionTitleLevel;
@ExcelProperty(value = "职称等级")
private String positionTitleLevelStr;
@PropertyMsg(propertyName = "籍贯") @PropertyMsg(propertyName = "籍贯")
@ExcelProperty(value = "籍贯")
private String origin; private String origin;
private String unitTypeDescribe; private String unitTypeDescribe;
private String expertIds; private String expertIds;
/**
* 审批局同步过来的专业领域对应的类型名称
*/
private String professorDeclareCategory;
/**
* 活动范围
*/
private String scopeOfActivity;
/**
* 是否涉密0:不涉密 1:涉密
*/
private Integer isClassified;
} }
...@@ -39,7 +39,7 @@ public class ZjkInvoiceBo extends BaseEntity { ...@@ -39,7 +39,7 @@ public class ZjkInvoiceBo extends BaseEntity {
*/ */
@NotNull(message = "发票号码不能为空", groups = { AddGroup.class, EditGroup.class }) @NotNull(message = "发票号码不能为空", groups = { AddGroup.class, EditGroup.class })
@JsonFormat(shape = JsonFormat.Shape.NUMBER) @JsonFormat(shape = JsonFormat.Shape.NUMBER)
private Long invoiceNumber; private String invoiceNumber;
/** /**
* 发票金额 * 发票金额
......
...@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; ...@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.zjk.domain.ZjkLeave; import org.dromara.zjk.domain.ZjkLeave;
...@@ -29,10 +30,12 @@ public class ZjkLeaveBo extends BaseEntity { ...@@ -29,10 +30,12 @@ public class ZjkLeaveBo extends BaseEntity {
* $column.columnComment * $column.columnComment
*/ */
private String leaveType; 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; 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; private Date endDate;
/** /**
...@@ -64,6 +67,8 @@ public class ZjkLeaveBo extends BaseEntity { ...@@ -64,6 +67,8 @@ public class ZjkLeaveBo extends BaseEntity {
* 租户ID * 租户ID
*/ */
private String tenantId; private String tenantId;
/**
* 创建人
*/
private String createByStr;
} }
...@@ -33,11 +33,11 @@ public class ZjkProductSummarizeBo extends BaseEntity { ...@@ -33,11 +33,11 @@ public class ZjkProductSummarizeBo extends BaseEntity {
private String search; private String search;
private String reviewSn; private String reviewSn;
@DateTimeFormat(pattern = "YYYY-MM-dd hh:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@JsonFormat(pattern = "YYYY-MM-dd hh:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date startTime; private Date startTime;
@DateTimeFormat(pattern = "YYYY-MM-dd hh:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@JsonFormat(pattern = "YYYY-MM-dd hh:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date endTime; private Date endTime;
...@@ -116,4 +116,5 @@ public class ZjkProductSummarizeBo extends BaseEntity { ...@@ -116,4 +116,5 @@ public class ZjkProductSummarizeBo extends BaseEntity {
private List<String> statusList; private List<String> statusList;
private List<Long> productIds; private List<Long> productIds;
private List<Long> ids;
} }
...@@ -33,5 +33,6 @@ public class ZjkReviewProductBo implements Serializable { ...@@ -33,5 +33,6 @@ public class ZjkReviewProductBo implements Serializable {
private Date endTime; private Date endTime;
private Long expertId; private Long expertId;
private Long userId;
private Integer isExpert;
} }
...@@ -13,6 +13,7 @@ import java.util.Date; ...@@ -13,6 +13,7 @@ import java.util.Date;
public class PointReqDto { public class PointReqDto {
private Long id; private Long id;
private String ruleName; private String ruleName;
private String rewardName;
private Date startDate; private Date startDate;
......
...@@ -15,7 +15,7 @@ public class ZjkProductSummarizeExcelVO { ...@@ -15,7 +15,7 @@ public class ZjkProductSummarizeExcelVO {
@ExcelProperty(value = "所属项目") @ExcelProperty(value = "所属项目")
private String productName; private String productName;
@ExcelProperty(value = "项目总结总结名称") @ExcelProperty(value = "项目总结名称")
private String productSummarizeName; private String productSummarizeName;
@ExcelProperty(value = "项目总结分类",converter = ExcelDictConvert.class) @ExcelProperty(value = "项目总结分类",converter = ExcelDictConvert.class)
......
...@@ -5,6 +5,7 @@ import com.alibaba.excel.annotation.ExcelProperty; ...@@ -5,6 +5,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import org.dromara.zjk.domain.InoutCheck; import org.dromara.zjk.domain.InoutCheck;
import org.dromara.zjk.zwy.annotation.EncryptSensitive;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
...@@ -38,11 +39,13 @@ public class CheckSupportVo implements Serializable { ...@@ -38,11 +39,13 @@ public class CheckSupportVo implements Serializable {
* 联系电话 * 联系电话
*/ */
@ExcelProperty(value = "联系电话") @ExcelProperty(value = "联系电话")
@EncryptSensitive
private String contact; private String contact;
/** /**
* 身份证号 * 身份证号
*/ */
@ExcelProperty(value = "身份证号") @ExcelProperty(value = "身份证号")
@EncryptSensitive
private String idcard; private String idcard;
/** /**
* 评审阶段 * 评审阶段
......
...@@ -46,12 +46,14 @@ public class InoutCheckVo implements Serializable { ...@@ -46,12 +46,14 @@ public class InoutCheckVo implements Serializable {
* 时间范围开始 * 时间范围开始
*/ */
@ExcelProperty(value = "时间范围开始") @ExcelProperty(value = "时间范围开始")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date checkRangeStart; private Date checkRangeStart;
/** /**
* 时间范围结束 * 时间范围结束
*/ */
@ExcelProperty(value = "时间范围结束") @ExcelProperty(value = "时间范围结束")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date checkRangeEnd; private Date checkRangeEnd;
/** /**
...@@ -63,9 +65,12 @@ public class InoutCheckVo implements Serializable { ...@@ -63,9 +65,12 @@ public class InoutCheckVo implements Serializable {
/** /**
* 创建人 * 创建人
*/ */
@ExcelProperty(value = "创建人")
private Long createBy; 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 { ...@@ -56,9 +56,12 @@ public class ZjkApprovalProcessLogsVo implements Serializable {
/** /**
* 创建人 * 创建人
*/ */
@ExcelProperty(value = "操作人")
private Long createBy; private Long createBy;
/**
* 创建人
*/
@ExcelProperty(value = "操作人")
private String createByStr;
/** /**
* 创建时间 * 创建时间
*/ */
......
...@@ -2,6 +2,7 @@ package org.dromara.zjk.domain.vo; ...@@ -2,6 +2,7 @@ package org.dromara.zjk.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.annotation.ExcelDictFormat;
...@@ -70,7 +71,11 @@ public class ZjkDataChangesLogsVo implements Serializable { ...@@ -70,7 +71,11 @@ public class ZjkDataChangesLogsVo implements Serializable {
* 操作人 * 操作人
*/ */
private Long createBy; private Long createBy;
/**
* 操作人
*/
@ExcelProperty(value = "操作人")
private String createByStr;
/** /**
* 操作时间 * 操作时间
......
...@@ -145,6 +145,10 @@ public class ZjkEvaluateVO implements Serializable { ...@@ -145,6 +145,10 @@ public class ZjkEvaluateVO implements Serializable {
* 1.正常评价,不进行控制 * 1.正常评价,不进行控制
*/ */
private Integer xmEvaluateStatus; private Integer xmEvaluateStatus;
/**
* 项目管理员id
*/
private String productCreateBy;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
} }
...@@ -63,8 +63,10 @@ public class ZjkExpertLogVo implements Serializable { ...@@ -63,8 +63,10 @@ public class ZjkExpertLogVo implements Serializable {
/** /**
* 入库结果 * 入库结果
*/ */
@ExcelProperty(value = "入库结果")
private Integer entryResult; private Integer entryResult;
@ExcelProperty(value = "入库结果")
private String entryResultStr;
/** /**
* 申请时间 * 申请时间
......
...@@ -6,13 +6,10 @@ import io.github.linpeilie.annotations.AutoMapper; ...@@ -6,13 +6,10 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.common.sensitive.annotation.Sensitive; import org.dromara.common.excel.convert.MultiDictConvert;
import org.dromara.common.sensitive.core.SensitiveStrategy;
import org.dromara.resource.api.domain.RemoteFile; import org.dromara.resource.api.domain.RemoteFile;
import org.dromara.zjk.zwy.annotation.EncryptSensitive;
import org.dromara.zjk.annotation.PropertyMsg; import org.dromara.zjk.annotation.PropertyMsg;
import org.dromara.zjk.annualInspection.annualInspectionAudit.domain.ZjkAnnualInspection; import org.dromara.zjk.annualInspection.annualInspectionAudit.domain.ZjkAnnualInspection;
import org.dromara.zjk.domain.ZjkExpert; import org.dromara.zjk.domain.ZjkExpert;
...@@ -21,6 +18,7 @@ import org.dromara.zjk.domain.ZjkExpertProfessional; ...@@ -21,6 +18,7 @@ import org.dromara.zjk.domain.ZjkExpertProfessional;
import org.dromara.zjk.expert.expertAwards.domain.ZjkExpertAwards; import org.dromara.zjk.expert.expertAwards.domain.ZjkExpertAwards;
import org.dromara.zjk.expert.expertPaper.domain.ZjkExpertPaper; import org.dromara.zjk.expert.expertPaper.domain.ZjkExpertPaper;
import org.dromara.zjk.expert.expertPatent.domain.ZjkExpertPatent; import org.dromara.zjk.expert.expertPatent.domain.ZjkExpertPatent;
import org.dromara.zjk.zwy.annotation.EncryptSensitive;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
...@@ -72,8 +70,6 @@ public class ZjkExpertVo implements Serializable { ...@@ -72,8 +70,6 @@ public class ZjkExpertVo implements Serializable {
/** /**
* 身份证号 * 身份证号
*/ */
@ExcelProperty(value = "身份证号")
@EncryptSensitive @EncryptSensitive
private String idCard; private String idCard;
...@@ -82,7 +78,6 @@ public class ZjkExpertVo implements Serializable { ...@@ -82,7 +78,6 @@ public class ZjkExpertVo implements Serializable {
*/ */
@ExcelProperty(value = "联系方式") @ExcelProperty(value = "联系方式")
@EncryptSensitive @EncryptSensitive
private String contact; private String contact;
/** /**
...@@ -90,6 +85,10 @@ public class ZjkExpertVo implements Serializable { ...@@ -90,6 +85,10 @@ public class ZjkExpertVo implements Serializable {
*/ */
@ExcelProperty(value = "工作单位") @ExcelProperty(value = "工作单位")
private String workUnit; private String workUnit;
/**
* 详细地址
*/
private String address;
/** /**
* 职务 * 职务
...@@ -100,14 +99,11 @@ public class ZjkExpertVo implements Serializable { ...@@ -100,14 +99,11 @@ public class ZjkExpertVo implements Serializable {
/** /**
* 政治面貌 * 政治面貌
*/ */
@ExcelProperty(value = "政治面貌", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "politics")
private String politics; private String politics;
/** /**
* 毕业学校 * 毕业学校
*/ */
@ExcelProperty(value = "毕业学校")
private String graduateSchool; private String graduateSchool;
/** /**
...@@ -118,11 +114,11 @@ public class ZjkExpertVo implements Serializable { ...@@ -118,11 +114,11 @@ public class ZjkExpertVo implements Serializable {
/** /**
* 邮箱 * 邮箱
*/ */
@ExcelProperty(value = "邮箱")
@EncryptSensitive @EncryptSensitive
private String email; private String email;
@ExcelDictFormat(dictType = "degree_type")
private String degree;
/** /**
* 专业技术资格 * 专业技术资格
*/ */
...@@ -136,14 +132,11 @@ public class ZjkExpertVo implements Serializable { ...@@ -136,14 +132,11 @@ public class ZjkExpertVo implements Serializable {
/** /**
* 从事专业 * 从事专业
*/ */
@ExcelProperty(value = "从事专业")
private String workProfessial; private String workProfessial;
/** /**
* 从事专业年限 * 从事专业年限
*/ */
@ExcelProperty(value = "从事专业年限", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "work_professial_year")
private Integer workProfessialYear; private Integer workProfessialYear;
/** /**
...@@ -164,13 +157,11 @@ public class ZjkExpertVo implements Serializable { ...@@ -164,13 +157,11 @@ public class ZjkExpertVo implements Serializable {
/** /**
* 主要工作经历 * 主要工作经历
*/ */
@ExcelProperty(value = "主要工作经历")
private String workExperience; private String workExperience;
/** /**
* 社会兼职情况 * 社会兼职情况
*/ */
@ExcelProperty(value = "社会兼职情况")
private String workPluralistic; private String workPluralistic;
/** /**
...@@ -236,23 +227,17 @@ public class ZjkExpertVo implements Serializable { ...@@ -236,23 +227,17 @@ public class ZjkExpertVo implements Serializable {
/** /**
* 审批类型 0 专家申请 1 信息变更 * 审批类型 0 专家申请 1 信息变更
*/ */
@ExcelProperty(value = "审批类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "approval_type")
private Integer approvalType; private Integer approvalType;
/** /**
* 单位类型 1企业,2高校,3政府单位 * 单位类型 1企业,2高校,3政府单位
*/ */
@ExcelProperty(value = "单位类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "unit_type")
private String unitType; private String unitType;
/** /**
* 是否专家推荐 1 是 2 否 * 是否专家推荐 1 是 2 否
*/ */
@ExcelProperty(value = "是否专家推荐", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "is_recommend")
private Integer isRecommend; private Integer isRecommend;
/** /**
...@@ -270,10 +255,6 @@ public class ZjkExpertVo implements Serializable { ...@@ -270,10 +255,6 @@ public class ZjkExpertVo implements Serializable {
*/ */
private String area; private String area;
/**
* 详细地址
*/
private String address;
/** /**
* 专业关系表对象 * 专业关系表对象
...@@ -304,7 +285,9 @@ public class ZjkExpertVo implements Serializable { ...@@ -304,7 +285,9 @@ public class ZjkExpertVo implements Serializable {
* 发生变化的字段 * 发生变化的字段
*/ */
private String modifiedFields; private String modifiedFields;
/**
* 接受状态(1:已接受;0:未接受;2:拒绝; 4:取消)
*/
private Integer acceptStatus; private Integer acceptStatus;
/** /**
...@@ -353,6 +336,8 @@ public class ZjkExpertVo implements Serializable { ...@@ -353,6 +336,8 @@ public class ZjkExpertVo implements Serializable {
private ZjkAnnualInspection zjkAnnualInspection; private ZjkAnnualInspection zjkAnnualInspection;
private String rewardType; private String rewardType;
private String rewardId;
/** /**
* 其他附件集合 * 其他附件集合
*/ */
...@@ -370,8 +355,8 @@ public class ZjkExpertVo implements Serializable { ...@@ -370,8 +355,8 @@ public class ZjkExpertVo implements Serializable {
private String positionTitleLevelStr; private String positionTitleLevelStr;
/* /*
* 抽取的数据来源 * 抽取的数据来源
* */ * */
private Integer isSource; private Integer isSource;
//2024/12/3 add返回字段 抽取状态(0:取消,1:确认,2:重抽) 页面进行显示 枚举类ExtractionStatusEnum //2024/12/3 add返回字段 抽取状态(0:取消,1:确认,2:重抽) 页面进行显示 枚举类ExtractionStatusEnum
...@@ -383,10 +368,19 @@ public class ZjkExpertVo implements Serializable { ...@@ -383,10 +368,19 @@ public class ZjkExpertVo implements Serializable {
} }
return Arrays.asList(performWorkId.split(",")); return Arrays.asList(performWorkId.split(","));
} }
@PropertyMsg(propertyName = "籍贯") @PropertyMsg(propertyName = "籍贯")
private String origin; private String origin;
private String unitTypeDescribe; private String unitTypeDescribe;
private String hmac; private String hmac;
/**
* 活动范围
*/
private String scopeOfActivity;
/**
* 是否涉密0:不涉密 1:涉密
*/
private Integer isClassified;
} }
...@@ -37,7 +37,7 @@ public class ZjkInvoiceVo implements Serializable { ...@@ -37,7 +37,7 @@ public class ZjkInvoiceVo implements Serializable {
* 发票号码 * 发票号码
*/ */
@ExcelProperty(value = "发票号码") @ExcelProperty(value = "发票号码")
private Long invoiceNumber; private String invoiceNumber;
/** /**
* 发票金额 * 发票金额
...@@ -103,6 +103,10 @@ public class ZjkInvoiceVo implements Serializable { ...@@ -103,6 +103,10 @@ public class ZjkInvoiceVo implements Serializable {
* 结算单id * 结算单id
*/ */
private Long settleId; private Long settleId;
/**
* 结算单id
*/
private String settleIdName;
/** /**
* 审核状态1:已审核 * 审核状态1:已审核
*/ */
......
...@@ -48,6 +48,7 @@ public class ZjkLeaveVo implements Serializable { ...@@ -48,6 +48,7 @@ public class ZjkLeaveVo implements Serializable {
*/ */
@ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class) @ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "$column.readConverterExp()") @ExcelDictFormat(readConverterExp = "$column.readConverterExp()")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date startDate; private Date startDate;
/** /**
...@@ -55,6 +56,7 @@ public class ZjkLeaveVo implements Serializable { ...@@ -55,6 +56,7 @@ public class ZjkLeaveVo implements Serializable {
*/ */
@ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class) @ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "$column.readConverterExp()") @ExcelDictFormat(readConverterExp = "$column.readConverterExp()")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date endDate; private Date endDate;
/** /**
......
...@@ -36,96 +36,89 @@ public class ZjkProductSummarizeVo implements Serializable { ...@@ -36,96 +36,89 @@ public class ZjkProductSummarizeVo implements Serializable {
/** /**
* id * id
*/ */
@ExcelProperty(value = "id", converter = ExcelDictConvert.class) @ExcelProperty(value = "项目总结编号")
private Long id; private Long id;
/** /**
* 专家抽取id * 专家抽取id
*/ */
@ExcelProperty(value = "专家抽取id", converter = ExcelDictConvert.class)
private Long reviewId; private Long reviewId;
/** /**
* 总结名称 * 总结名称
*/ */
@ExcelProperty(value = "总结名称", converter = ExcelDictConvert.class) @ExcelProperty(value = "总结名称")
private String productSummarizeName; private String productSummarizeName;
/** /**
* 总结类型 * 总结类型
*/ */
@ExcelProperty(value = "总结类型", converter = ExcelDictConvert.class) @ExcelProperty(value = "总结分类", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "summarize_classify")
private String productSummarizeType; 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; private String productSummarizeTypeName;
/** /**
* 项目概况 * 项目概况
*/ */
@ExcelProperty(value = "项目概况", converter = ExcelDictConvert.class)
private String productGeneral; private String productGeneral;
/** /**
* 评审范围 * 评审范围
*/ */
@ExcelProperty(value = "评审范围", converter = ExcelDictConvert.class)
private String reviewScope; private String reviewScope;
/** /**
* 评审结论 * 评审结论
*/ */
@ExcelProperty(value = "评审结论", converter = ExcelDictConvert.class)
private String reviewConclusion; private String reviewConclusion;
/** /**
* 反馈 * 反馈
*/ */
@ExcelProperty(value = "反馈", converter = ExcelDictConvert.class)
private String feedback; private String feedback;
/** /**
* 后续改进措施 * 后续改进措施
*/ */
@ExcelProperty(value = "后续改进措施", converter = ExcelDictConvert.class)
private String subsequent; private String subsequent;
/** /**
* 附件 * 附件
*/ */
@ExcelProperty(value = "附件", converter = ExcelDictConvert.class)
@ExcelIgnore
private String attachment; private String attachment;
/** /**
* 专家id * 专家id
*/ */
@ExcelIgnore
private String expertIds; 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; private Date reviewTime;
@ExcelIgnore @ExcelIgnore
private List<ZjkExpertVo> zjkExpertList; private List<ZjkExpertVo> zjkExpertList;
@ExcelIgnore
private String productName;
private Long productId; private Long productId;
......
...@@ -105,7 +105,6 @@ public class ZjkProductVo implements Serializable { ...@@ -105,7 +105,6 @@ public class ZjkProductVo implements Serializable {
/** /**
* $column.columnComment * $column.columnComment
*/ */
@ExcelProperty(value = "备注")
private String remark; private String remark;
private Long reviewId; private Long reviewId;
......
...@@ -2,10 +2,14 @@ package org.dromara.zjk.domain.vo; ...@@ -2,10 +2,14 @@ package org.dromara.zjk.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data; import lombok.Data;
import org.dromara.zjk.zwy.annotation.EncryptSensitive;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
import java.util.List; import java.util.List;
...@@ -49,6 +53,7 @@ public class ZjkReviewExportVo implements Serializable { ...@@ -49,6 +53,7 @@ public class ZjkReviewExportVo implements Serializable {
/** /**
* 联系方式 * 联系方式
*/ */
@EncryptSensitive
@ExcelProperty(value = "联系方式") @ExcelProperty(value = "联系方式")
private String unitConcat; private String unitConcat;
...@@ -61,6 +66,11 @@ public class ZjkReviewExportVo implements Serializable { ...@@ -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 = "评审时间") @ExcelProperty(value = "评审时间")
private String reviewTime; private Date reviewTime;
} }
package org.dromara.zjk.domain.vo; package org.dromara.zjk.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data; import lombok.Data;
...@@ -22,6 +23,7 @@ import java.util.List; ...@@ -22,6 +23,7 @@ import java.util.List;
* @date 2024-10-29 * @date 2024-10-29
*/ */
@Data @Data
@ExcelIgnoreUnannotated
public class ZjkReviewProductVo implements Serializable { public class ZjkReviewProductVo implements Serializable {
@Serial @Serial
...@@ -37,18 +39,6 @@ public class ZjkReviewProductVo implements Serializable { ...@@ -37,18 +39,6 @@ public class ZjkReviewProductVo implements Serializable {
*/ */
private Long expertId; 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 * 规则id
*/ */
...@@ -67,19 +57,6 @@ public class ZjkReviewProductVo implements Serializable { ...@@ -67,19 +57,6 @@ public class ZjkReviewProductVo implements Serializable {
*/ */
@ExcelProperty(value = "项目名称") @ExcelProperty(value = "项目名称")
private String productName; private String productName;
/**
* 项目类型
*/
@ExcelProperty(value = "项目类型")
private String productType;
/**
* 项目规则
*/
@ExcelProperty(value = "项目规模")
private Integer productScale;
/** /**
* 项目单位 * 项目单位
*/ */
...@@ -99,11 +76,36 @@ public class ZjkReviewProductVo implements Serializable { ...@@ -99,11 +76,36 @@ public class ZjkReviewProductVo implements Serializable {
@EncryptSensitive @EncryptSensitive
@ExcelProperty(value = "联系方式") @ExcelProperty(value = "联系方式")
private String unitConcat; 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; private String productBrief;
/** /**
...@@ -120,7 +122,6 @@ public class ZjkReviewProductVo implements Serializable { ...@@ -120,7 +122,6 @@ public class ZjkReviewProductVo implements Serializable {
/** /**
* 备注 * 备注
*/ */
@ExcelProperty(value = "备注")
private String remark; private String remark;
private Long productId; private Long productId;
......
...@@ -22,7 +22,28 @@ public enum ReviewSnEnum { ...@@ -22,7 +22,28 @@ public enum ReviewSnEnum {
* 描述 * 描述
*/ */
private final String desc; 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) { public static ReviewSnEnum getByCode(String code) {
for (ReviewSnEnum status : ReviewSnEnum.values()) { for (ReviewSnEnum status : ReviewSnEnum.values()) {
if (status.getCode().equals( code)) { if (status.getCode().equals( code)) {
......
...@@ -9,8 +9,7 @@ public enum SourceTypeEnum implements BaseCodeEnum { ...@@ -9,8 +9,7 @@ public enum SourceTypeEnum implements BaseCodeEnum {
ACADEMIC_TYPE("1","政务信息"), ACADEMIC_TYPE("1","政务信息"),
RESEARCH_REPORTS("2","政务信息"), RESEARCH_REPORTS("2","政务服务");
ACADEMIC_CONFERENCES("3","政务信息");
private String code; private String code;
private String name; 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; ...@@ -9,6 +9,7 @@ import org.dromara.zjk.event.OnchainEvent;
import org.dromara.zjk.service.IZjkExpertItemService; import org.dromara.zjk.service.IZjkExpertItemService;
import org.springframework.context.ApplicationListener; import org.springframework.context.ApplicationListener;
import org.springframework.context.event.EventListener; import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -32,12 +33,18 @@ public class OnchainListener implements ApplicationListener<OnchainEvent> { ...@@ -32,12 +33,18 @@ public class OnchainListener implements ApplicationListener<OnchainEvent> {
* 保存系统日志记录 * 保存系统日志记录
*/ */
@EventListener @EventListener
@Async("smsTaskExecutor")
public void sendChainInfo(OnchainDto onchainDto) { public void sendChainInfo(OnchainDto onchainDto) {
log.info("规则id为{},抽取的专家上区块链开始", onchainDto.getReviewId()); log.info("规则id为{},抽取的专家上区块链开始", onchainDto.getReviewId());
List<ZjkExpertItemVo> data = zjkExpertItemService.getByReviewId(onchainDto.getReviewId()); try {
if (!CollectionUtils.isEmpty(data)) { List<ZjkExpertItemVo> data = zjkExpertItemService.getByReviewId(onchainDto.getReviewId());
String jsonStr = JSONUtil.toJsonStr(data); if (!CollectionUtils.isEmpty(data)) {
onChainUtils.toChain(jsonStr, onchainDto.getReviewId()); 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()); log.info("规则id为{},抽取的专家上区块链结束", onchainDto.getReviewId());
} }
......
...@@ -9,6 +9,7 @@ import org.dromara.zjk.event.SmsSendEvent; ...@@ -9,6 +9,7 @@ import org.dromara.zjk.event.SmsSendEvent;
import org.dromara.zjk.mapper.ZjkSmsInfoMapper; import org.dromara.zjk.mapper.ZjkSmsInfoMapper;
import org.springframework.context.ApplicationListener; import org.springframework.context.ApplicationListener;
import org.springframework.context.event.EventListener; import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
...@@ -40,15 +41,28 @@ public class SmsSendListener implements ApplicationListener<SmsSendEvent> { ...@@ -40,15 +41,28 @@ public class SmsSendListener implements ApplicationListener<SmsSendEvent> {
* 保存系统日志记录 * 保存系统日志记录
*/ */
@EventListener @EventListener
@Async("smsTaskExecutor")
public void sendSms(SmsSendYsdDto dto) { public void sendSms(SmsSendYsdDto dto) {
List<Map<String, String>> data = dto.getReceiveUserTels().stream().map(item -> { try {
Map<String, String> stringStringMap = remoteSmsService.sendYsdSingleSms(dto.getContent(), item); // 设置整体处理超时时间
return stringStringMap; List<Map<String, String>> data = dto.getReceiveUserTels().parallelStream().map(item -> {
}).collect(Collectors.toList()); try {
//数据库信息回改 // 为单个短信发送设置超时
handleData(data, dto); 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) { private void handleData(List<Map<String, String>> data, SmsSendYsdDto dto) {
//发送短信后的数据入库 //发送短信后的数据入库
List<ZjkSmsInfo> collect = data.stream().map(item -> { List<ZjkSmsInfo> collect = data.stream().map(item -> {
......
...@@ -24,6 +24,8 @@ import org.dromara.zjk.expert.expertRecommend.service.IZjkExpertRecommendService ...@@ -24,6 +24,8 @@ import org.dromara.zjk.expert.expertRecommend.service.IZjkExpertRecommendService
import org.dromara.zjk.mapper.ZjkExpertMapper; import org.dromara.zjk.mapper.ZjkExpertMapper;
import org.dromara.zjk.zwy.client.HmacClient; import org.dromara.zjk.zwy.client.HmacClient;
import org.dromara.zjk.zwy.utils.ObjectHashGenerator; 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.stereotype.Service;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
...@@ -45,7 +47,8 @@ public class ZjkExpertRecommendServiceImpl implements IZjkExpertRecommendService ...@@ -45,7 +47,8 @@ public class ZjkExpertRecommendServiceImpl implements IZjkExpertRecommendService
private final ZjkExpertMapper zjkExpertMapper; private final ZjkExpertMapper zjkExpertMapper;
private final HmacClient hmacClient; private final HmacClient hmacClient;
@Autowired
private StringCryptoUtil stringCryptoUtil;
/** /**
* 查询专家推荐信息 * 查询专家推荐信息
* *
...@@ -67,6 +70,10 @@ public class ZjkExpertRecommendServiceImpl implements IZjkExpertRecommendService ...@@ -67,6 +70,10 @@ public class ZjkExpertRecommendServiceImpl implements IZjkExpertRecommendService
@Override @Override
public TableDataInfo<ZjkExpertRecommendVo> queryPageList(ZjkExpertRecommendBo bo, PageQuery pageQuery) { public TableDataInfo<ZjkExpertRecommendVo> queryPageList(ZjkExpertRecommendBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ZjkExpertRecommend> lqw = buildQueryWrapper(bo); 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); Page<ZjkExpertRecommendVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
...@@ -86,6 +93,8 @@ public class ZjkExpertRecommendServiceImpl implements IZjkExpertRecommendService ...@@ -86,6 +93,8 @@ public class ZjkExpertRecommendServiceImpl implements IZjkExpertRecommendService
} }
bo.setExpertId(existingExpert.getExpertId()); bo.setExpertId(existingExpert.getExpertId());
} }
bo.getExpertPhone();
LambdaQueryWrapper<ZjkExpertRecommend> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<ZjkExpertRecommend> lqw = buildQueryWrapper(bo);
Page<ZjkExpertRecommendVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<ZjkExpertRecommendVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result); return TableDataInfo.build(result);
...@@ -109,7 +118,6 @@ public class ZjkExpertRecommendServiceImpl implements IZjkExpertRecommendService ...@@ -109,7 +118,6 @@ public class ZjkExpertRecommendServiceImpl implements IZjkExpertRecommendService
lqw.eq(bo.getExpertId() != null, ZjkExpertRecommend::getExpertId, bo.getExpertId()); lqw.eq(bo.getExpertId() != null, ZjkExpertRecommend::getExpertId, bo.getExpertId());
lqw.eq(bo.getUserId() != null, ZjkExpertRecommend::getUserId, bo.getUserId()); lqw.eq(bo.getUserId() != null, ZjkExpertRecommend::getUserId, bo.getUserId());
lqw.like(StringUtils.isNotBlank(bo.getExpertName()), ZjkExpertRecommend::getExpertName, bo.getExpertName()); 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.getReason()), ZjkExpertRecommend::getReason, bo.getReason());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), ZjkExpertRecommend::getStatus, bo.getStatus()); lqw.eq(StringUtils.isNotBlank(bo.getStatus()), ZjkExpertRecommend::getStatus, bo.getStatus());
lqw.orderByDesc(ZjkExpertRecommend::getCreateTime); lqw.orderByDesc(ZjkExpertRecommend::getCreateTime);
......
...@@ -21,6 +21,9 @@ import org.dromara.common.web.core.BaseController; ...@@ -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.bo.ZjkRetirementRecordsBo;
import org.dromara.zjk.expert.retirementRecords.domain.vo.ZjkRetirementRecordsVo; import org.dromara.zjk.expert.retirementRecords.domain.vo.ZjkRetirementRecordsVo;
import org.dromara.zjk.expert.retirementRecords.service.IZjkRetirementRecordsService; 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.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -41,6 +44,9 @@ public class ZjkRetirementRecordsController extends BaseController { ...@@ -41,6 +44,9 @@ public class ZjkRetirementRecordsController extends BaseController {
private final IZjkRetirementRecordsService zjkRetirementRecordsService; private final IZjkRetirementRecordsService zjkRetirementRecordsService;
@Autowired
private StringCryptoUtil stringCryptoUtil;
/** /**
* 查询专家退休记录列表 * 查询专家退休记录列表
*/ */
...@@ -49,8 +55,16 @@ public class ZjkRetirementRecordsController extends BaseController { ...@@ -49,8 +55,16 @@ public class ZjkRetirementRecordsController extends BaseController {
TenantConstants.TENANT_ADMIN_ROLE_KEY, TenantConstants.TENANT_ADMIN_ROLE_KEY,
TenantConstants.SUPER_ADMIN_ROLE_KEY TenantConstants.SUPER_ADMIN_ROLE_KEY
}, mode = SaMode.OR) }, mode = SaMode.OR)
@DecryptOperation
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<ZjkRetirementRecordsVo> list(ZjkRetirementRecordsBo bo, PageQuery pageQuery) { 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); return zjkRetirementRecordsService.queryPageList(bo, pageQuery);
} }
...@@ -76,6 +90,7 @@ public class ZjkRetirementRecordsController extends BaseController { ...@@ -76,6 +90,7 @@ public class ZjkRetirementRecordsController extends BaseController {
TenantConstants.SUPER_ADMIN_ROLE_KEY TenantConstants.SUPER_ADMIN_ROLE_KEY
}, mode = SaMode.OR) }, mode = SaMode.OR)
@SaCheckPermission("expert:retirementRecords:query") @SaCheckPermission("expert:retirementRecords:query")
@DecryptOperation
@GetMapping("/{id}") @GetMapping("/{id}")
public R<ZjkRetirementRecordsVo> getInfo(@NotNull(message = "主键不能为空") public R<ZjkRetirementRecordsVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) { @PathVariable Long id) {
......
...@@ -78,6 +78,7 @@ public class ZjkRetirementRecordsVo implements Serializable { ...@@ -78,6 +78,7 @@ public class ZjkRetirementRecordsVo implements Serializable {
private String expertName; private String expertName;
@ExcelProperty(value = "联系方式") @ExcelProperty(value = "联系方式")
@EncryptSensitive
private String contact; private String contact;
@ExcelProperty(value = "身份证号") @ExcelProperty(value = "身份证号")
......
...@@ -5,6 +5,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; ...@@ -5,6 +5,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.zjk.expert.retirementRecords.domain.bo.ZjkRetirementRecordsBo; import org.dromara.zjk.expert.retirementRecords.domain.bo.ZjkRetirementRecordsBo;
import org.dromara.zjk.expert.retirementRecords.domain.vo.ZjkRetirementRecordsVo; import org.dromara.zjk.expert.retirementRecords.domain.vo.ZjkRetirementRecordsVo;
import org.dromara.zjk.zwy.annotation.DecryptOperation;
import java.util.Collection; import java.util.Collection;
import java.util.List; 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; ...@@ -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.bo.ZjkLearningCommontBo;
import org.dromara.zjk.learning_world.domain.vo.ZjkLearningCommontVo; import org.dromara.zjk.learning_world.domain.vo.ZjkLearningCommontVo;
import org.dromara.zjk.learning_world.service.IZjkLearningCommontService; import org.dromara.zjk.learning_world.service.IZjkLearningCommontService;
import org.dromara.zjk.zwy.annotation.DecryptOperation;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -62,7 +63,7 @@ public class ZjkLearningCommontController extends BaseController { ...@@ -62,7 +63,7 @@ public class ZjkLearningCommontController extends BaseController {
TenantConstants.SUPER_ADMIN_ROLE_KEY, TenantConstants.SUPER_ADMIN_ROLE_KEY,
TenantConstants.TENANT_ADMIN_ROLE_KEY, TenantConstants.TENANT_ADMIN_ROLE_KEY,
},mode = SaMode.OR) },mode = SaMode.OR)
@Log(title = "评论", businessType = BusinessType.EXPORT) @DecryptOperation
@PostMapping("/export") @PostMapping("/export")
public void export(ZjkLearningCommontBo bo, HttpServletResponse response) { public void export(ZjkLearningCommontBo bo, HttpServletResponse response) {
List<ZjkLearningCommontVo> list = zjkLearningCommontService.queryList(bo); List<ZjkLearningCommontVo> list = zjkLearningCommontService.queryList(bo);
......
package org.dromara.zjk.learning_world.domain.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.zjk.learning_world.domain.entity.ZjkLearningActivity;
import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
...@@ -8,6 +9,8 @@ import io.github.linpeilie.annotations.AutoMapper; ...@@ -8,6 +9,8 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date; import java.util.Date;
/** /**
...@@ -43,11 +46,15 @@ public class ZjkLearningActivityBo extends BaseEntity { ...@@ -43,11 +46,15 @@ public class ZjkLearningActivityBo extends BaseEntity {
* 活动时间 * 活动时间
*/ */
@NotNull(message = "活动开始时间不能为空", groups = { AddGroup.class}) @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; private Date activityStartTime;
/** /**
* 活动时间 * 活动时间
*/ */
@NotNull(message = "活动结束时间不能为空", groups = { AddGroup.class}) @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; private Date activityEndTime;
/** /**
......
...@@ -19,6 +19,7 @@ import java.util.Date; ...@@ -19,6 +19,7 @@ import java.util.Date;
* @date 2024-11-08 * @date 2024-11-08
*/ */
@Data @Data
@ExcelIgnoreUnannotated
public class ZjkLearningActivityExcel { public class ZjkLearningActivityExcel {
...@@ -32,13 +33,12 @@ public class ZjkLearningActivityExcel { ...@@ -32,13 +33,12 @@ public class ZjkLearningActivityExcel {
/** /**
* 活动分类 * 活动分类
*/ */
@ExcelIgnore @ExcelProperty(value = "活动分类")
private String activityClassify; private String activityClassify;
/** /**
* 活动分类 * 活动分类
*/ */
@ExcelProperty(value = "活动分类")
private String activityClassifyName; private String activityClassifyName;
/** /**
...@@ -73,7 +73,6 @@ public class ZjkLearningActivityExcel { ...@@ -73,7 +73,6 @@ public class ZjkLearningActivityExcel {
/** /**
* 状态 * 状态
*/ */
@ExcelProperty(value = "发布状态")
private String status; private String status;
/** /**
...@@ -85,13 +84,12 @@ public class ZjkLearningActivityExcel { ...@@ -85,13 +84,12 @@ public class ZjkLearningActivityExcel {
/** /**
* 活动状态 * 活动状态
*/ */
@ExcelProperty(value = "活动状态") @ExcelProperty(value = "发布状态")
private String activityStatusName; private String activityStatusName;
/** /**
* 备注 * 备注
*/ */
@ExcelProperty(value = "备注")
private String remark; private String remark;
......
...@@ -2,7 +2,10 @@ package org.dromara.zjk.learning_world.domain.excel; ...@@ -2,7 +2,10 @@ package org.dromara.zjk.learning_world.domain.excel;
import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import lombok.Data; import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import java.util.Date; import java.util.Date;
...@@ -24,14 +27,13 @@ public class ZjkLearningResourceExcel { ...@@ -24,14 +27,13 @@ public class ZjkLearningResourceExcel {
@ExcelProperty(value = "资源编号") @ExcelProperty(value = "资源编号")
private String resourceName; private String resourceName;
@ExcelProperty(value = "资源类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "source_type")
private String resourceClassify;
/** /**
* 资源分类 * 资源分类
*/ */
@ExcelIgnore @ExcelIgnore
private String resourceClassify; /**
* 资源分类
*/
@ExcelProperty(value = "资源分类")
private String resourceClassifyName; private String resourceClassifyName;
/** /**
...@@ -42,7 +44,7 @@ public class ZjkLearningResourceExcel { ...@@ -42,7 +44,7 @@ public class ZjkLearningResourceExcel {
/** /**
* 资源类型 * 资源类型
*/ */
@ExcelProperty(value = "资源类型") @ExcelProperty(value = "资源分类")
private String resourceTypeName; private String resourceTypeName;
/** /**
...@@ -55,6 +57,7 @@ public class ZjkLearningResourceExcel { ...@@ -55,6 +57,7 @@ public class ZjkLearningResourceExcel {
* 发布时间 * 发布时间
*/ */
@ExcelProperty(value = "发布时间") @ExcelProperty(value = "发布时间")
@DateTimeFormat("yyyy-MM-dd")
private Date resourceTime; private Date resourceTime;
/** /**
......
...@@ -5,6 +5,8 @@ import com.alibaba.excel.annotation.ExcelProperty; ...@@ -5,6 +5,8 @@ import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; 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.dromara.zjk.learning_world.domain.entity.ZjkLearningCommont;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
...@@ -31,35 +33,41 @@ public class ZjkLearningCommontVo implements Serializable { ...@@ -31,35 +33,41 @@ public class ZjkLearningCommontVo implements Serializable {
/** /**
* id * id
*/ */
@ExcelProperty(value = "id") @ExcelProperty(value = "评论记录编号")
private Long id; private Long id;
/** /**
* 资讯id * 评论
*/ */
@ExcelProperty(value = "资讯id") @ExcelProperty(value = "评论内容")
private Long informationId; private String comment;
@ExcelProperty(value = "所属帖子")
@ExcelProperty(value = "资讯Title")
private String informationTitle; private String informationTitle;
/**
* 状态
*/
@ExcelProperty(value = "评论状态",converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "is_publish")
private String status;
/** /**
* 评论人 * 评论人
*/ */
@ExcelProperty(value = "评论人") @ExcelProperty(value = "评论人")
private String reviewer;
private Long reviewerId; private Long reviewerId;
/**
* 资讯id
*/
private Long informationId;
/** /**
* 被回复人ID * 被回复人ID
*/ */
@ExcelProperty(value = "被回复人ID")
private Long replyId; private Long replyId;
/**
* 评论
*/
@ExcelProperty(value = "评论")
private String comment;
/** /**
* 评论时间 * 评论时间
...@@ -69,16 +77,11 @@ public class ZjkLearningCommontVo implements Serializable { ...@@ -69,16 +77,11 @@ public class ZjkLearningCommontVo implements Serializable {
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date commentTime; private Date commentTime;
/**
* 状态
*/
@ExcelProperty(value = "状态")
private String status;
/** /**
* 备注 * 备注
*/ */
@ExcelProperty(value = "备注")
private String remark; private String remark;
/** /**
...@@ -89,24 +92,17 @@ public class ZjkLearningCommontVo implements Serializable { ...@@ -89,24 +92,17 @@ public class ZjkLearningCommontVo implements Serializable {
@ExcelProperty(value = "撤销时间") @ExcelProperty(value = "撤销时间")
private Date takedownTime; private Date takedownTime;
@ExcelProperty(value = "上级")
private Long parentId; private Long parentId;
@ExcelProperty(value = "专家名称")
private String expertName; private String expertName;
@ExcelProperty(value = "专家头像")
private String expertPhotograph; private String expertPhotograph;
@ExcelProperty(value = "部门名称")
private String deptName; private String deptName;
@ExcelProperty(value = "被回复人名称")
private String replyName; private String replyName;
@ExcelProperty(value = "被回复人头像")
private String replyPhotograph; private String replyPhotograph;
@ExcelProperty(value = "部门名称")
private String replyDeptName; private String replyDeptName;
/** /**
......
...@@ -90,4 +90,6 @@ public class ZjkLearningCourseVo implements Serializable { ...@@ -90,4 +90,6 @@ public class ZjkLearningCourseVo implements Serializable {
* 附件名称 * 附件名称
*/ */
private String originalName; private String originalName;
private String createBy;
private Date createTime;
} }
...@@ -8,7 +8,20 @@ import org.dromara.zjk.enums.BaseCodeEnum; ...@@ -8,7 +8,20 @@ import org.dromara.zjk.enums.BaseCodeEnum;
@AllArgsConstructor @AllArgsConstructor
public enum ActivityTypeEnum implements BaseCodeEnum { public enum ActivityTypeEnum implements BaseCodeEnum {
GOVERNMENT_INFORMATION("1","政务信息"); /**
* 老年活动
*/
SENIOR_ACTIVITY("1", "老年活动"),
/**
* 线下运动
*/
OFFLINE_SPORTS("2", "线下运动"),
/**
* 阅读
*/
READING("3", "阅读");
private String code; private String code;
......
...@@ -8,7 +8,8 @@ import org.dromara.zjk.enums.BaseCodeEnum; ...@@ -8,7 +8,8 @@ import org.dromara.zjk.enums.BaseCodeEnum;
@AllArgsConstructor @AllArgsConstructor
public enum CourseTypeEnum implements BaseCodeEnum { public enum CourseTypeEnum implements BaseCodeEnum {
GOVERNMENT_INFORMATION("1","政务信息"); GOVERNMENT_INFORMATION("1","政务信息"),
GOVERNMENT_SERVICE("2","政务服务");
private String code; private String code;
......
package org.dromara.zjk.learning_world.mapper; package org.dromara.zjk.learning_world.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.bo.ZjkLearningCommontBo;
import org.dromara.zjk.learning_world.domain.entity.ZjkLearningCommont; import org.dromara.zjk.learning_world.domain.entity.ZjkLearningCommont;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.zjk.learning_world.domain.vo.ZjkLearningCommontVo; import org.dromara.zjk.learning_world.domain.vo.ZjkLearningCommontVo;
import java.util.List;
/** /**
* 评论Mapper接口 * 评论Mapper接口
* *
...@@ -15,4 +18,6 @@ import org.dromara.zjk.learning_world.domain.vo.ZjkLearningCommontVo; ...@@ -15,4 +18,6 @@ import org.dromara.zjk.learning_world.domain.vo.ZjkLearningCommontVo;
public interface ZjkLearningCommontMapper extends BaseMapperPlus<ZjkLearningCommont, ZjkLearningCommontVo> { public interface ZjkLearningCommontMapper extends BaseMapperPlus<ZjkLearningCommont, ZjkLearningCommontVo> {
Page<ZjkLearningCommontVo> selectCommonPage(Page<Object> build, ZjkLearningCommontBo bo); 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; ...@@ -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.entity.ZjkLearningTool;
import org.dromara.zjk.learning_world.domain.vo.ZjkLearningToolVo; import org.dromara.zjk.learning_world.domain.vo.ZjkLearningToolVo;
import java.util.Collection;
/** /**
* 学习工具管理Mapper接口 * 学习工具管理Mapper接口
* *
...@@ -20,5 +22,5 @@ public interface ZjkLearningToolMapper extends BaseMapperPlus<ZjkLearningTool, Z ...@@ -20,5 +22,5 @@ public interface ZjkLearningToolMapper extends BaseMapperPlus<ZjkLearningTool, Z
Page<ZjkLearningToolVo> selectByAll(@Param("page") Page<ZjkLearningToolVo> page, @Param("bo") ZjkLearningToolBo zjkLearningToolBo); 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 ...@@ -155,10 +155,6 @@ public class ZjkLearningActivityServiceImpl implements IZjkLearningActivityServi
if (zjkLearningActivityVo == null) { if (zjkLearningActivityVo == null) {
return false; return false;
} }
String activityStatus = zjkLearningActivityVo.getActivityStatus();
if (!activityStatus.equals(ActivityStatusEnum.DIDN_T_START.getCode())) {
throw new ServiceException("活动无法修改,请确认活动状态");
}
return baseMapper.updateById(update) > 0; return baseMapper.updateById(update) > 0;
} }
...@@ -195,12 +191,12 @@ public class ZjkLearningActivityServiceImpl implements IZjkLearningActivityServi ...@@ -195,12 +191,12 @@ public class ZjkLearningActivityServiceImpl implements IZjkLearningActivityServi
String activityStatus = excel.getActivityStatus(); String activityStatus = excel.getActivityStatus();
String nameByCode = EnumUtil.getNameByCode(ActivityStatusEnum.class, activityStatus); String nameByCode = EnumUtil.getNameByCode(ActivityStatusEnum.class, activityStatus);
if (StringUtils.isNotBlank(nameByCode)) { if (StringUtils.isNotBlank(nameByCode)) {
excel.setActivityStatus(nameByCode); excel.setActivityStatusName(nameByCode);
} }
String activityClassify = excel.getActivityClassify(); String activityClassify = excel.getActivityClassify();
String classifyByCode = EnumUtil.getNameByCode(ActivityTypeEnum.class, activityClassify); String classifyByCode = EnumUtil.getNameByCode(ActivityTypeEnum.class, activityClassify);
if (StringUtils.isNotBlank(classifyByCode)) { if (StringUtils.isNotBlank(classifyByCode)) {
excel.setActivityStatusName(classifyByCode); excel.setActivityClassify(classifyByCode);
} }
} }
......
...@@ -13,6 +13,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; ...@@ -13,6 +13,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.model.LoginUser; 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.domain.vo.ZjkExpertVo;
import org.dromara.zjk.learning_world.domain.bo.ZjkLearningCommontBo; import org.dromara.zjk.learning_world.domain.bo.ZjkLearningCommontBo;
import org.dromara.zjk.learning_world.domain.entity.ZjkLearningCommont; import org.dromara.zjk.learning_world.domain.entity.ZjkLearningCommont;
...@@ -43,6 +44,7 @@ public class ZjkLearningCommontServiceImpl implements IZjkLearningCommontService ...@@ -43,6 +44,7 @@ public class ZjkLearningCommontServiceImpl implements IZjkLearningCommontService
private final ZjkLearningInformationMapper zjkLearningInformationMapper; private final ZjkLearningInformationMapper zjkLearningInformationMapper;
private final ZjkExpertMapper zjkExpertMapper; private final ZjkExpertMapper zjkExpertMapper;
private final ZjkAnnualInspectionMapper zjkAnnualInspectionMapper;
/** /**
* 查询评论 * 查询评论
...@@ -80,11 +82,9 @@ public class ZjkLearningCommontServiceImpl implements IZjkLearningCommontService ...@@ -80,11 +82,9 @@ public class ZjkLearningCommontServiceImpl implements IZjkLearningCommontService
if (null == zjkLearningInformation) { if (null == zjkLearningInformation) {
throw new ServiceException("无效帖子ID"); 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); Page<ZjkLearningCommontVo> result = baseMapper.selectCommonPage(pageQuery.build(), bo);
List<ZjkLearningCommontVo> records = result.getRecords(); List<ZjkLearningCommontVo> records = result.getRecords();
if (CollectionUtil.isEmpty(records)) { if (CollectionUtil.isEmpty(records)) {
...@@ -100,7 +100,7 @@ public class ZjkLearningCommontServiceImpl implements IZjkLearningCommontService ...@@ -100,7 +100,7 @@ public class ZjkLearningCommontServiceImpl implements IZjkLearningCommontService
Map<Long, ZjkExpertVo> getExpertMap = zjkExpertVos.stream().collect(Collectors.toMap(ZjkExpertVo::getUserId, v -> v)); Map<Long, ZjkExpertVo> getExpertMap = zjkExpertVos.stream().collect(Collectors.toMap(ZjkExpertVo::getUserId, v -> v));
for (ZjkLearningCommontVo record : records) { for (ZjkLearningCommontVo record : records) {
ZjkExpertVo zjkExpertVo = getExpertMap.get(record.getReviewerId()); ZjkExpertVo zjkExpertVo = getExpertMap.get(record.getReviewerId());
record.setExpertName(zjkExpertVo.getExpertName()); record.setExpertName(zjkExpertVo.getUserName());
record.setExpertPhotograph(zjkExpertVo.getPhotograph()); record.setExpertPhotograph(zjkExpertVo.getPhotograph());
boolean flag = LoginHelper.getUserId().equals(userId); boolean flag = LoginHelper.getUserId().equals(userId);
record.setReply(flag); record.setReply(flag);
...@@ -158,8 +158,13 @@ public class ZjkLearningCommontServiceImpl implements IZjkLearningCommontService ...@@ -158,8 +158,13 @@ public class ZjkLearningCommontServiceImpl implements IZjkLearningCommontService
*/ */
@Override @Override
public List<ZjkLearningCommontVo> queryList(ZjkLearningCommontBo bo) { public List<ZjkLearningCommontVo> queryList(ZjkLearningCommontBo bo) {
LambdaQueryWrapper<ZjkLearningCommont> lqw = buildQueryWrapper(bo); List<ZjkLearningCommontVo> zjkLearningCommontVos = baseMapper.selectCommonList(bo);
return baseMapper.selectVoList(lqw); 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) { private LambdaQueryWrapper<ZjkLearningCommont> buildQueryWrapper(ZjkLearningCommontBo bo) {
...@@ -285,7 +290,6 @@ public class ZjkLearningCommontServiceImpl implements IZjkLearningCommontService ...@@ -285,7 +290,6 @@ public class ZjkLearningCommontServiceImpl implements IZjkLearningCommontService
} }
@Override @Override
public int updateStatuso(ZjkLearningCommontBo bo) { public int updateStatuso(ZjkLearningCommontBo bo) {
Long id = bo.getId(); Long id = bo.getId();
......
...@@ -166,14 +166,14 @@ public class ZjkLearningResourceServiceImpl implements IZjkLearningResourceServi ...@@ -166,14 +166,14 @@ public class ZjkLearningResourceServiceImpl implements IZjkLearningResourceServi
String statusByCode = EnumUtil.getNameByCode(PublishStatusEnum.class, status); String statusByCode = EnumUtil.getNameByCode(PublishStatusEnum.class, status);
zjkLearningResourceExcel.setStatusName(statusByCode); zjkLearningResourceExcel.setStatusName(statusByCode);
} }
String resourceClassify = zjkLearningResourceExcel.getResourceClassify(); // String resourceClassify = zjkLearningResourceExcel.getResourceClassify();
if (StringUtils.isNotBlank(resourceClassify)) { // if (StringUtils.isNotBlank(resourceClassify)) {
String resourceClassifyByCode = EnumUtil.getNameByCode(SourceClassifyEnum.class, resourceClassify); // String resourceClassifyByCode = EnumUtil.getNameByCode(SourceClassifyEnum.class, resourceClassify);
zjkLearningResourceExcel.setResourceClassifyName(resourceClassifyByCode); // zjkLearningResourceExcel.setResourceClassifyName(resourceClassifyByCode);
} // }
} }
return List.of(); return zjkLearningResourceExcels;
} }
@Override @Override
......
...@@ -129,7 +129,8 @@ public class ZjkLearningToolServiceImpl implements IZjkLearningToolService { ...@@ -129,7 +129,8 @@ public class ZjkLearningToolServiceImpl implements IZjkLearningToolService {
if(isValid){ if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验 //TODO 做一些业务上的校验,判断是否需要校验
} }
return baseMapper.deleteByIds(ids) > 0; baseMapper.deleteTool(ids);
return true;
} }
@Override @Override
......
...@@ -24,4 +24,6 @@ public interface InoutCheckMapper extends BaseMapperPlus<InoutCheck, InoutCheckV ...@@ -24,4 +24,6 @@ public interface InoutCheckMapper extends BaseMapperPlus<InoutCheck, InoutCheckV
String getInvFileNameById(String invFileId); String getInvFileNameById(String invFileId);
String getCheckNo(); String getCheckNo();
String selectUserNameById(Long createBy);
} }
...@@ -18,4 +18,5 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; ...@@ -18,4 +18,5 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
public interface ZjkCreditMapper extends BaseMapperPlus<ZjkCredit, ZjkCreditVo> { public interface ZjkCreditMapper extends BaseMapperPlus<ZjkCredit, ZjkCreditVo> {
IPage<CreditShowVO> queryPointList(Page<Object> build, @Param("bo") CreditReqDto bo); IPage<CreditShowVO> queryPointList(Page<Object> build, @Param("bo") CreditReqDto bo);
Integer getPointCount(@Param("bo") CreditReqDto bo);
} }
package org.dromara.zjk.mapper; 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.zjk.domain.ZjkCreditRule;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.zjk.domain.bo.ZjkCreditBo;
import org.dromara.zjk.domain.vo.ZjkCreditRuleVo; import org.dromara.zjk.domain.vo.ZjkCreditRuleVo;
/** /**
...@@ -12,4 +15,5 @@ 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> { 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; ...@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param; 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.ZjkEvaluate;
import org.dromara.zjk.domain.dto.LeaveStsDto; import org.dromara.zjk.domain.dto.LeaveStsDto;
import org.dromara.zjk.domain.dto.SelExpertRuleDto; import org.dromara.zjk.domain.dto.SelExpertRuleDto;
......
...@@ -72,5 +72,20 @@ public interface ZjkExpertMapper extends BaseMapperPlus<ZjkExpert, ZjkExpertVo> ...@@ -72,5 +72,20 @@ public interface ZjkExpertMapper extends BaseMapperPlus<ZjkExpert, ZjkExpertVo>
int updateHmac(ZjkExpert update); int updateHmac(ZjkExpert update);
List<Long> selectIdsByName(String expertName); 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; ...@@ -19,13 +19,19 @@ import java.util.List;
*/ */
public interface ZjkExpertMoneyInfoMapper extends BaseMapperPlus<ZjkExpertMoneyInfo, ZjkExpertMoneyInfoVO> { 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<ZjkExpertMoneyInfoVO> selectListByMonth(@Param("startTime") Date startTime ,@Param("endTime") Date endTime,@Param("tenantId") String tenantId);
List<String> selectTenantIds(); List<String> selectTenantIds();
List<ZjkExpertVo> getExpertList(Long productId, Integer reviewSn); 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; ...@@ -6,12 +6,11 @@ import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.zjk.domain.ZjkInvoice; import org.dromara.zjk.domain.ZjkInvoice;
import org.dromara.zjk.domain.bo.ZjkInvoiceBo; 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.ZjkExpertVo;
import org.dromara.zjk.domain.vo.ZjkInvoiceVo; import org.dromara.zjk.domain.vo.ZjkInvoiceVo;
import org.dromara.zjk.domain.ZjkExpertMoneyInfo;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Map;
/** /**
* 发票Mapper接口 * 发票Mapper接口
...@@ -37,4 +36,6 @@ public interface ZjkInvoiceMapper extends BaseMapperPlus<ZjkInvoice, ZjkInvoiceV ...@@ -37,4 +36,6 @@ public interface ZjkInvoiceMapper extends BaseMapperPlus<ZjkInvoice, ZjkInvoiceV
* @return * @return
*/ */
BigDecimal selectTotalMoney(); BigDecimal selectTotalMoney();
ZjkExpertMoneyInfo checkIfImport(String productName, Integer reviewSn, String expertName, String settleNo);
} }
...@@ -51,6 +51,7 @@ public interface ZjkProductMapper extends BaseMapperPlus<ZjkProduct, ZjkProductV ...@@ -51,6 +51,7 @@ public interface ZjkProductMapper extends BaseMapperPlus<ZjkProduct, ZjkProductV
@DataColumn(key = "deptName", value = "create_dept"), @DataColumn(key = "deptName", value = "create_dept"),
}) })
Page<ZjkProductVo> selectProdoctPage(Page<ZjkProduct> build, ZjkProductBo bo); Page<ZjkProductVo> selectProdoctPage(Page<ZjkProduct> build, ZjkProductBo bo);
List<ZjkProductVo> selectProdoctForApi(@Param("bo") ZjkProductBo bo);
@DataPermission({ @DataPermission({
@DataColumn(key = "xmUserName", value = "zp.user_id"), @DataColumn(key = "xmUserName", value = "zp.user_id"),
...@@ -59,4 +60,6 @@ public interface ZjkProductMapper extends BaseMapperPlus<ZjkProduct, ZjkProductV ...@@ -59,4 +60,6 @@ public interface ZjkProductMapper extends BaseMapperPlus<ZjkProduct, ZjkProductV
Set<ProductPanoramaDeptVo> productPanoramaDept(); Set<ProductPanoramaDeptVo> productPanoramaDept();
void updateProductByApproval(Long id, Integer approvalStatus, String approvalReason); 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; ...@@ -6,6 +6,7 @@ import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.zjk.domain.ZjkReviewPhase; 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.bo.ZjkReviewProductBo;
import org.dromara.zjk.domain.vo.ZjkReviewPhaseVo; import org.dromara.zjk.domain.vo.ZjkReviewPhaseVo;
import org.dromara.zjk.domain.vo.ZjkReviewProductVo; import org.dromara.zjk.domain.vo.ZjkReviewProductVo;
...@@ -21,18 +22,17 @@ import java.util.List; ...@@ -21,18 +22,17 @@ import java.util.List;
*/ */
public interface ZjkReviewPhaseMapper extends BaseMapperPlus<ZjkReviewPhase, ZjkReviewPhaseVo> { 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); Page<ZjkReviewProductVo> reviewProductList(Page<ZjkReviewProductVo> build, ZjkReviewProductBo bo);
List<ZjkReviewProductVo> reviewProductListForExport(@Param("bo") ZjkReviewProductBo bo);
@DataPermission({ @DataPermission({
@DataColumn(key = "deptName", value = "zei.dept_id"), @DataColumn(key = "deptName", value = "zei.dept_id"),
@DataColumn(key = "xmUserName", value = "zrp.create_by"), @DataColumn(key = "xmUserName", value = "zrp.create_by"),
@DataColumn(key = "userName", value = "zei.user_id") @DataColumn(key = "userName", value = "zei.user_id")
}) })
List<Long> getByProductId(@Param("productId")Long id); List<Long> getByProductId(@Param("productId") Long id);
@DataPermission({ @DataPermission({
@DataColumn(key = "deptName", value = "zei.dept_id"), @DataColumn(key = "deptName", value = "zei.dept_id"),
...@@ -41,19 +41,19 @@ public interface ZjkReviewPhaseMapper extends BaseMapperPlus<ZjkReviewPhase, Zjk ...@@ -41,19 +41,19 @@ public interface ZjkReviewPhaseMapper extends BaseMapperPlus<ZjkReviewPhase, Zjk
}) })
List<ZjkReviewProductVo> reviewExport(@Param("bo") ZjkReviewProductBo bo); List<ZjkReviewProductVo> reviewExport(@Param("bo") ZjkReviewProductBo bo);
List<ZjkReviewProductVo> getProductList();
List<ZjkReviewProductVo> getByProductIds(@Param("productIds") Collection<Long> id); 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); ZjkReviewPhase selectVoListByLimit(Long id);
Long getReviewProductCountByExpertId(Long expertId); 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); List<ZjkReviewPhaseVo> selectUpdateZjkItemExpert(Long itemid, String reviewSn);
...@@ -65,4 +65,5 @@ public interface ZjkReviewPhaseMapper extends BaseMapperPlus<ZjkReviewPhase, Zjk ...@@ -65,4 +65,5 @@ public interface ZjkReviewPhaseMapper extends BaseMapperPlus<ZjkReviewPhase, Zjk
List<ZjkReviewPhaseVo> selectVoByExtreationId(@Param("extractionId") Long extractionId); List<ZjkReviewPhaseVo> selectVoByExtreationId(@Param("extractionId") Long extractionId);
List<ZjkProductBo> getInvoiceProductList();
} }
...@@ -76,7 +76,7 @@ public interface IZjkCreditUserService { ...@@ -76,7 +76,7 @@ public interface IZjkCreditUserService {
R<CreditExpertRankVO> getExpertPointRank(Integer rangeDay); 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); R<List<ChartBaseCreditVO>> blacklist(ZjkCreditBo creditBo);
......
...@@ -17,7 +17,7 @@ import java.util.Map; ...@@ -17,7 +17,7 @@ import java.util.Map;
* @date 2024-11-01 * @date 2024-11-01
*/ */
public interface IZjkExpertMajorService { public interface IZjkExpertMajorService {
void saveBatch(List<ZjkExpertMajor> zjkExpertMajorList);
/** /**
* 查询专家库 专业关系表 * 查询专家库 专业关系表
* *
......
package org.dromara.zjk.service; package org.dromara.zjk.service;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotNull;
import org.apache.ibatis.annotations.Param; 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.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.zjk.domain.ExpertBaseInfo; import org.dromara.zjk.domain.ExpertBaseInfo;
...@@ -9,8 +12,8 @@ import org.dromara.zjk.domain.ZjkExpertItem; ...@@ -9,8 +12,8 @@ import org.dromara.zjk.domain.ZjkExpertItem;
import org.dromara.zjk.domain.bo.ZjkExpertBo; import org.dromara.zjk.domain.bo.ZjkExpertBo;
import org.dromara.zjk.domain.bo.ZjkProjectExpertItemBo; import org.dromara.zjk.domain.bo.ZjkProjectExpertItemBo;
import org.dromara.zjk.domain.vo.ExpertPerformWorkCountVO; 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.domain.vo.ZjkExpertVo;
import org.dromara.zjk.zwy.annotation.DecryptOperation;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.Collection; import java.util.Collection;
...@@ -145,7 +148,7 @@ public interface IZjkExpertService { ...@@ -145,7 +148,7 @@ public interface IZjkExpertService {
*/ */
Boolean expertQuash(Integer type,String businessKey); Boolean expertQuash(Integer type,String businessKey);
List<String> imports(MultipartFile file); R<Void> imports(MultipartFile file);
Long getExpertCount(); Long getExpertCount();
...@@ -171,5 +174,11 @@ public interface IZjkExpertService { ...@@ -171,5 +174,11 @@ public interface IZjkExpertService {
Long getUserIdByPhone(String tel); 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; ...@@ -2,6 +2,7 @@ package org.dromara.zjk.service;
import jakarta.servlet.http.HttpServletResponse; 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.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.zjk.domain.bo.ZjkInvoiceBo; import org.dromara.zjk.domain.bo.ZjkInvoiceBo;
...@@ -12,7 +13,6 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -12,7 +13,6 @@ import org.springframework.web.multipart.MultipartFile;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 发票Service接口 * 发票Service接口
...@@ -74,9 +74,11 @@ public interface IZjkInvoiceService { ...@@ -74,9 +74,11 @@ public interface IZjkInvoiceService {
/** /**
* 导入信息excel * 导入信息excel
*
* @param file * @param file
* @return
*/ */
void imports(MultipartFile file); R<Void> imports(MultipartFile file);
/** /**
* ,包括发票的数量、金额、开票单位等, * ,包括发票的数量、金额、开票单位等,
...@@ -87,4 +89,6 @@ public interface IZjkInvoiceService { ...@@ -87,4 +89,6 @@ public interface IZjkInvoiceService {
Boolean check(Long moneyId); Boolean check(Long moneyId);
CheckSupportVo getInvByProductInfo(String productId, String reviewSn, String expertId); CheckSupportVo getInvByProductInfo(String productId, String reviewSn, String expertId);
void downloadExcelTem(HttpServletResponse response);
} }
...@@ -36,6 +36,7 @@ public interface IZjkProductService { ...@@ -36,6 +36,7 @@ public interface IZjkProductService {
* @return 项目管理分页列表 * @return 项目管理分页列表
*/ */
TableDataInfo<ZjkProductVo> queryPageList(ZjkProductBo bo, PageQuery pageQuery); TableDataInfo<ZjkProductVo> queryPageList(ZjkProductBo bo, PageQuery pageQuery);
List<ZjkProductVo> queryListForApi(ZjkProductBo bo);
/** /**
* 查询符合条件的项目管理列表 * 查询符合条件的项目管理列表
...@@ -105,4 +106,6 @@ public interface IZjkProductService { ...@@ -105,4 +106,6 @@ public interface IZjkProductService {
Set<ProductPanoramaDeptVo> productPanoramaDept(); Set<ProductPanoramaDeptVo> productPanoramaDept();
Boolean approval(ZjkProductBo bo); Boolean approval(ZjkProductBo bo);
TableDataInfo<ProductPanoramaVo> getProductList(ProductPanoramaVo vo, PageQuery pageQuery);
} }
package org.dromara.zjk.service; 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.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; 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.ZjkReviewPhaseBo;
import org.dromara.zjk.domain.bo.ZjkReviewProductBo; import org.dromara.zjk.domain.bo.ZjkReviewProductBo;
import org.dromara.zjk.domain.vo.ZjkReviewPhaseVo; import org.dromara.zjk.domain.vo.ZjkReviewPhaseVo;
...@@ -79,4 +81,6 @@ public interface IZjkReviewPhaseService { ...@@ -79,4 +81,6 @@ public interface IZjkReviewPhaseService {
Long getReviewCount(); Long getReviewCount();
Long getReviewProductCountByExpertId(Long expertId); Long getReviewProductCountByExpertId(Long expertId);
R<List<ZjkProductBo>> invoiceProductList();
} }
...@@ -33,7 +33,7 @@ public interface ZjkExpertMoneyInfoService extends IService<ZjkExpertMoneyInfo> ...@@ -33,7 +33,7 @@ public interface ZjkExpertMoneyInfoService extends IService<ZjkExpertMoneyInfo>
* @param pageQuery 分页参数 * @param pageQuery 分页参数
* @return 专家费用管理分页列表 * @return 专家费用管理分页列表
*/ */
TableDataInfo<ZjkExpertMoneyInfoVO> queryPageList(ZjkExpertMoneyInfoBo bo, PageQuery pageQuery); TableDataInfo<ZjkExpertMoneyInfo> queryPageList(ZjkExpertMoneyInfoBo bo, PageQuery pageQuery);
boolean updateMoneyInfo(ZjkExpertMoneyInfoBo bo); boolean updateMoneyInfo(ZjkExpertMoneyInfoBo bo);
...@@ -75,4 +75,6 @@ public interface ZjkExpertMoneyInfoService extends IService<ZjkExpertMoneyInfo> ...@@ -75,4 +75,6 @@ public interface ZjkExpertMoneyInfoService extends IService<ZjkExpertMoneyInfo>
List<ZjkExpertMoneyInfo> getJsList(@NotNull(message = "项目不能为空") Long productId, @NotNull(message = "阶段不能为空") Integer reviewSn, String expertId); 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> 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; ...@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; 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.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
...@@ -14,6 +15,7 @@ import org.dromara.zjk.domain.bo.InoutCheckBo; ...@@ -14,6 +15,7 @@ import org.dromara.zjk.domain.bo.InoutCheckBo;
import org.dromara.zjk.domain.vo.CheckSupportVo; import org.dromara.zjk.domain.vo.CheckSupportVo;
import org.dromara.zjk.domain.vo.InoutCheckVo; import org.dromara.zjk.domain.vo.InoutCheckVo;
import org.dromara.zjk.mapper.InoutCheckMapper; import org.dromara.zjk.mapper.InoutCheckMapper;
import org.dromara.zjk.mapper.ZjkExpertMapper;
import org.dromara.zjk.service.IInoutCheckService; import org.dromara.zjk.service.IInoutCheckService;
import org.dromara.zjk.service.IZjkInvoiceService; import org.dromara.zjk.service.IZjkInvoiceService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -64,6 +66,9 @@ public class InoutCheckServiceImpl implements IInoutCheckService { ...@@ -64,6 +66,9 @@ public class InoutCheckServiceImpl implements IInoutCheckService {
public TableDataInfo<InoutCheckVo> queryPageList(InoutCheckBo bo, PageQuery pageQuery) { public TableDataInfo<InoutCheckVo> queryPageList(InoutCheckBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<InoutCheck> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<InoutCheck> lqw = buildQueryWrapper(bo);
Page<InoutCheckVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<InoutCheckVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().stream().forEach(item->{
item.setCreateByStr(baseMapper.selectUserNameById(item.getCreateBy()));
});
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
......
...@@ -2,29 +2,27 @@ package org.dromara.zjk.service.impl; ...@@ -2,29 +2,27 @@ package org.dromara.zjk.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil; 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.constant.TenantConstants;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.dromara.common.mybatis.core.page.TableDataInfo;
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.common.satoken.utils.LoginHelper;
import org.dromara.zjk.domain.LearningEvaluate; import org.dromara.zjk.domain.LearningBack;
import org.dromara.zjk.domain.LearningSuggest;
import org.dromara.zjk.mapper.ZjkExpertMapper;
import org.springframework.stereotype.Service;
import org.dromara.zjk.domain.bo.LearningBackBo; import org.dromara.zjk.domain.bo.LearningBackBo;
import org.dromara.zjk.domain.vo.LearningBackVo; import org.dromara.zjk.domain.vo.LearningBackVo;
import org.dromara.zjk.domain.LearningBack;
import org.dromara.zjk.mapper.LearningBackMapper; import org.dromara.zjk.mapper.LearningBackMapper;
import org.dromara.zjk.mapper.ZjkExpertMapper;
import org.dromara.zjk.service.ILearningBackService; import org.dromara.zjk.service.ILearningBackService;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection;
/** /**
* 【请填写功能名称】Service业务层处理 * 【请填写功能名称】Service业务层处理
...@@ -38,6 +36,7 @@ public class LearningBackServiceImpl implements ILearningBackService { ...@@ -38,6 +36,7 @@ public class LearningBackServiceImpl implements ILearningBackService {
private final LearningBackMapper baseMapper; private final LearningBackMapper baseMapper;
private final ZjkExpertMapper zjkExpertMapper; private final ZjkExpertMapper zjkExpertMapper;
/** /**
* 查询【请填写功能名称】 * 查询【请填写功能名称】
* *
...@@ -45,7 +44,7 @@ public class LearningBackServiceImpl implements ILearningBackService { ...@@ -45,7 +44,7 @@ public class LearningBackServiceImpl implements ILearningBackService {
* @return 【请填写功能名称】 * @return 【请填写功能名称】
*/ */
@Override @Override
public LearningBackVo queryById(String ID){ public LearningBackVo queryById(String ID) {
return baseMapper.selectVoById(ID); return baseMapper.selectVoById(ID);
} }
...@@ -62,17 +61,19 @@ public class LearningBackServiceImpl implements ILearningBackService { ...@@ -62,17 +61,19 @@ public class LearningBackServiceImpl implements ILearningBackService {
if (contains) { if (contains) {
bo.setCreateBy(LoginHelper.getUserId()); bo.setCreateBy(LoginHelper.getUserId());
} }
Page<LearningBackVo> result = new Page<>();
LambdaQueryWrapper<LearningBack> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<LearningBack> lqw = buildQueryWrapper(bo);
if(!StringUtils.isEmpty(bo.getExpertName())){ if (!StringUtils.isEmpty(bo.getExpertName())) {
List<Long> uids = zjkExpertMapper.selectIdsByName(bo.getExpertName()); List<Long> uids = zjkExpertMapper.selectIdsByName(bo.getExpertName());
if(!CollectionUtil.isEmpty(uids)){ if (!CollectionUtil.isEmpty(uids)) {
lqw.in(LearningBack::getCreateBy, uids); lqw.in(LearningBack::getCreateBy, uids);
}else{
return TableDataInfo.build(result);
} }
} }
lqw.orderByDesc(LearningBack::getCreateTime); lqw.orderByDesc(LearningBack::getCreateTime);
Page<LearningBackVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().stream().forEach(o ->{ result.getRecords().stream().forEach(o -> {
o.setExpertName(zjkExpertMapper.selectByUserId(o.getCreateBy()).getExpertName()); o.setExpertName(zjkExpertMapper.selectByUserId(o.getCreateBy()).getExpertName());
}); });
...@@ -138,7 +139,7 @@ public class LearningBackServiceImpl implements ILearningBackService { ...@@ -138,7 +139,7 @@ public class LearningBackServiceImpl implements ILearningBackService {
/** /**
* 保存前的数据校验 * 保存前的数据校验
*/ */
private void validEntityBeforeSave(LearningBack entity){ private void validEntityBeforeSave(LearningBack entity) {
//TODO 做一些数据校验,如唯一约束 //TODO 做一些数据校验,如唯一约束
// 如果ID为空,生成新的ID // 如果ID为空,生成新的ID
if (StringUtils.isBlank(entity.getID())) { if (StringUtils.isBlank(entity.getID())) {
...@@ -155,7 +156,7 @@ public class LearningBackServiceImpl implements ILearningBackService { ...@@ -155,7 +156,7 @@ public class LearningBackServiceImpl implements ILearningBackService {
*/ */
@Override @Override
public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) {
if(isValid){ if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验 //TODO 做一些业务上的校验,判断是否需要校验
} }
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
......
...@@ -2,28 +2,30 @@ package org.dromara.zjk.service.impl; ...@@ -2,28 +2,30 @@ package org.dromara.zjk.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil; 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.constant.TenantConstants;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; 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.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.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.bo.LearningEvaluateBo;
import org.dromara.zjk.domain.vo.LearningEvaluateVo; 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.LearningEvaluateMapper;
import org.dromara.zjk.mapper.ZjkExpertMapper;
import org.dromara.zjk.service.ILearningEvaluateService; import org.dromara.zjk.service.ILearningEvaluateService;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection;
/** /**
* 【请填写功能名称】Service业务层处理 * 【请填写功能名称】Service业务层处理
...@@ -38,7 +40,6 @@ public class LearningEvaluateServiceImpl implements ILearningEvaluateService { ...@@ -38,7 +40,6 @@ public class LearningEvaluateServiceImpl implements ILearningEvaluateService {
private final LearningEvaluateMapper baseMapper; private final LearningEvaluateMapper baseMapper;
private final ZjkExpertMapper zjkExpertMapper; private final ZjkExpertMapper zjkExpertMapper;
private final ZjkLearningCourseMapper zjkLearningCourseMapper; private final ZjkLearningCourseMapper zjkLearningCourseMapper;
/** /**
* 查询【请填写功能名称】 * 查询【请填写功能名称】
* *
...@@ -46,9 +47,9 @@ public class LearningEvaluateServiceImpl implements ILearningEvaluateService { ...@@ -46,9 +47,9 @@ public class LearningEvaluateServiceImpl implements ILearningEvaluateService {
* @return 【请填写功能名称】 * @return 【请填写功能名称】
*/ */
@Override @Override
public LearningEvaluateVo queryById(String ID) { public LearningEvaluateVo queryById(String ID){
LearningEvaluateVo res = baseMapper.selectVoById(ID); LearningEvaluateVo res = baseMapper.selectVoById(ID);
if (res.getCourseId() != null) { if(res.getCourseId()!=null){
res.setCourseName(zjkLearningCourseMapper.selectById(res.getCourseId()).getCourseName()); res.setCourseName(zjkLearningCourseMapper.selectById(res.getCourseId()).getCourseName());
} }
return res; return res;
...@@ -68,21 +69,26 @@ public class LearningEvaluateServiceImpl implements ILearningEvaluateService { ...@@ -68,21 +69,26 @@ public class LearningEvaluateServiceImpl implements ILearningEvaluateService {
if (contains) { if (contains) {
lqw.in(LearningEvaluate::getCreateBy, LoginHelper.getUserId()); 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()); List<Long> uids = zjkExpertMapper.selectIdsByName(bo.getExpertName());
if (!CollectionUtil.isEmpty(uids)) { if(!CollectionUtil.isEmpty(uids)){
lqw.in(LearningEvaluate::getCreateBy, 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()); List<Long> cids = zjkLearningCourseMapper.selectIdsByName(bo.getCourseName());
if (!CollectionUtil.isEmpty(cids)) { if(!CollectionUtil.isEmpty(cids)){
lqw.in(LearningEvaluate::getCourseId, cids); lqw.in(LearningEvaluate::getCourseId, cids);
}else{
return TableDataInfo.build(result);
} }
} }
lqw.orderByDesc(LearningEvaluate::getCreateTime); lqw.orderByDesc(LearningEvaluate::getCreateTime);
Page<LearningEvaluateVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().stream().forEach(o -> { result.getRecords().stream().forEach(o ->{
o.setExpertName(zjkExpertMapper.selectByUserId(o.getCreateBy()).getExpertName()); o.setExpertName(zjkExpertMapper.selectByUserId(o.getCreateBy()).getExpertName());
o.setCourseName(zjkLearningCourseMapper.selectById(o.getCourseId()).getCourseName()); o.setCourseName(zjkLearningCourseMapper.selectById(o.getCourseId()).getCourseName());
}); });
...@@ -149,7 +155,7 @@ public class LearningEvaluateServiceImpl implements ILearningEvaluateService { ...@@ -149,7 +155,7 @@ public class LearningEvaluateServiceImpl implements ILearningEvaluateService {
/** /**
* 保存前的数据校验 * 保存前的数据校验
*/ */
private void validEntityBeforeSave(LearningEvaluate entity) { private void validEntityBeforeSave(LearningEvaluate entity){
//TODO 做一些数据校验,如唯一约束 //TODO 做一些数据校验,如唯一约束
if (StringUtils.isBlank(entity.getID())) { if (StringUtils.isBlank(entity.getID())) {
entity.setID(IdUtil.simpleUUID()); // 或使用其他ID生成方式 entity.setID(IdUtil.simpleUUID()); // 或使用其他ID生成方式
...@@ -165,7 +171,7 @@ public class LearningEvaluateServiceImpl implements ILearningEvaluateService { ...@@ -165,7 +171,7 @@ public class LearningEvaluateServiceImpl implements ILearningEvaluateService {
*/ */
@Override @Override
public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) {
if (isValid) { if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验 //TODO 做一些业务上的校验,判断是否需要校验
} }
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
......
package org.dromara.zjk.service.impl; package org.dromara.zjk.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
...@@ -19,8 +18,8 @@ import org.dromara.zjk.domain.vo.LearningSuggestVo; ...@@ -19,8 +18,8 @@ import org.dromara.zjk.domain.vo.LearningSuggestVo;
import org.dromara.zjk.domain.LearningSuggest; import org.dromara.zjk.domain.LearningSuggest;
import org.dromara.zjk.mapper.LearningSuggestMapper; import org.dromara.zjk.mapper.LearningSuggestMapper;
import org.dromara.zjk.service.ILearningSuggestService; import org.dromara.zjk.service.ILearningSuggestService;
import cn.hutool.core.collection.CollectionUtil;
import javax.annotation.Resource;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
...@@ -61,13 +60,16 @@ public class LearningSuggestServiceImpl implements ILearningSuggestService { ...@@ -61,13 +60,16 @@ public class LearningSuggestServiceImpl implements ILearningSuggestService {
@Override @Override
public TableDataInfo<LearningSuggestVo> queryPageList(LearningSuggestBo bo, PageQuery pageQuery) { public TableDataInfo<LearningSuggestVo> queryPageList(LearningSuggestBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<LearningSuggest> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<LearningSuggest> lqw = buildQueryWrapper(bo);
Page<LearningSuggestVo> result = new Page<>();
if(!StringUtils.isEmpty(bo.getExpertName())){ if(!StringUtils.isEmpty(bo.getExpertName())){
List<Long> uids = zjkExpertMapper.selectIdsByName(bo.getExpertName()); List<Long> uids = zjkExpertMapper.selectIdsByName(bo.getExpertName());
if(!CollectionUtil.isEmpty(uids)){ if(!CollectionUtil.isEmpty(uids)){
lqw.in(LearningSuggest::getCreateBy, 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 ->{ result.getRecords().stream().forEach(o ->{
o.setExpertName(zjkExpertMapper.selectByUserId(o.getCreateBy()).getExpertName()); o.setExpertName(zjkExpertMapper.selectByUserId(o.getCreateBy()).getExpertName());
}); });
......
...@@ -11,7 +11,9 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; ...@@ -11,7 +11,9 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.zjk.domain.ZjkApprovalProcessLogs; import org.dromara.zjk.domain.ZjkApprovalProcessLogs;
import org.dromara.zjk.domain.bo.ZjkApprovalProcessLogsBo; import org.dromara.zjk.domain.bo.ZjkApprovalProcessLogsBo;
import org.dromara.zjk.domain.vo.ZjkApprovalProcessLogsVo; 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.ZjkApprovalProcessLogsMapper;
import org.dromara.zjk.mapper.ZjkLearningMaterialsMapper;
import org.dromara.zjk.service.IZjkApprovalProcessLogsService; import org.dromara.zjk.service.IZjkApprovalProcessLogsService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -30,7 +32,7 @@ import java.util.Map; ...@@ -30,7 +32,7 @@ import java.util.Map;
public class ZjkApprovalProcessLogsServiceImpl implements IZjkApprovalProcessLogsService { public class ZjkApprovalProcessLogsServiceImpl implements IZjkApprovalProcessLogsService {
private final ZjkApprovalProcessLogsMapper baseMapper; private final ZjkApprovalProcessLogsMapper baseMapper;
private final ZjkLearningMaterialsMapper zjkLearningMaterialsMapper;
/** /**
* 查询审批流程记录 * 查询审批流程记录
* *
...@@ -53,6 +55,7 @@ public class ZjkApprovalProcessLogsServiceImpl implements IZjkApprovalProcessLog ...@@ -53,6 +55,7 @@ public class ZjkApprovalProcessLogsServiceImpl implements IZjkApprovalProcessLog
public TableDataInfo<ZjkApprovalProcessLogsVo> queryPageList(ZjkApprovalProcessLogsBo bo, PageQuery pageQuery) { public TableDataInfo<ZjkApprovalProcessLogsVo> queryPageList(ZjkApprovalProcessLogsBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ZjkApprovalProcessLogs> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<ZjkApprovalProcessLogs> lqw = buildQueryWrapper(bo);
Page<ZjkApprovalProcessLogsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<ZjkApprovalProcessLogsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().forEach(r -> r.setCreateByStr(zjkLearningMaterialsMapper.selectVoByUserId(r.getCreateBy())));
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
...@@ -65,7 +68,9 @@ public class ZjkApprovalProcessLogsServiceImpl implements IZjkApprovalProcessLog ...@@ -65,7 +68,9 @@ public class ZjkApprovalProcessLogsServiceImpl implements IZjkApprovalProcessLog
@Override @Override
public List<ZjkApprovalProcessLogsVo> queryList(ZjkApprovalProcessLogsBo bo) { public List<ZjkApprovalProcessLogsVo> queryList(ZjkApprovalProcessLogsBo bo) {
LambdaQueryWrapper<ZjkApprovalProcessLogs> lqw = buildQueryWrapper(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) { private LambdaQueryWrapper<ZjkApprovalProcessLogs> buildQueryWrapper(ZjkApprovalProcessLogsBo bo) {
......
...@@ -10,7 +10,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -10,7 +10,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.zjk.domain.ZjkCreditUser; import org.dromara.zjk.domain.ZjkCreditUser;
import org.dromara.zjk.domain.dto.CreditReqDto;
import org.dromara.zjk.domain.vo.ZjkCreditUserVo; import org.dromara.zjk.domain.vo.ZjkCreditUserVo;
import org.dromara.zjk.mapper.ZjkCreditMapper;
import org.dromara.zjk.mapper.ZjkCreditUserMapper; import org.dromara.zjk.mapper.ZjkCreditUserMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.dromara.zjk.domain.bo.ZjkCreditLvBo; import org.dromara.zjk.domain.bo.ZjkCreditLvBo;
...@@ -36,7 +38,7 @@ public class ZjkCreditLvServiceImpl implements IZjkCreditLvService { ...@@ -36,7 +38,7 @@ public class ZjkCreditLvServiceImpl implements IZjkCreditLvService {
private final ZjkCreditLvMapper baseMapper; private final ZjkCreditLvMapper baseMapper;
private final ZjkCreditUserMapper zjkCreditUserMapper; private final ZjkCreditUserMapper zjkCreditUserMapper;
private final ZjkCreditMapper zjkCreditMapper;
/** /**
* 查询【请填写功能名称】 * 查询【请填写功能名称】
* *
...@@ -63,11 +65,11 @@ public class ZjkCreditLvServiceImpl implements IZjkCreditLvService { ...@@ -63,11 +65,11 @@ public class ZjkCreditLvServiceImpl implements IZjkCreditLvService {
for (ZjkCreditLvVo zjkCreditLv : zjkCreditLvs) { for (ZjkCreditLvVo zjkCreditLv : zjkCreditLvs) {
Long creditSectionGe = zjkCreditLv.getCreditSectionGe(); Long creditSectionGe = zjkCreditLv.getCreditSectionGe();
Long creditSectionLe = zjkCreditLv.getCreditSectionLe(); Long creditSectionLe = zjkCreditLv.getCreditSectionLe();
LambdaQueryWrapper<ZjkCreditUser> lambdaQueryWrapper = new LambdaQueryWrapper<>(); CreditReqDto creditReqDto = new CreditReqDto();
lambdaQueryWrapper.le(ZjkCreditUser::getCreditCount,creditSectionGe); creditReqDto.setCredtieGe(creditSectionGe);
lambdaQueryWrapper.ge(ZjkCreditUser::getCreditCount,creditSectionLe); creditReqDto.setCrediteLe(creditSectionLe);
Long count = zjkCreditUserMapper.selectCount(lambdaQueryWrapper); Integer pointCount = zjkCreditMapper.getPointCount(creditReqDto);
zjkCreditLv.setPersonSum(count); zjkCreditLv.setPersonSum(Long.valueOf(pointCount));
} }
return zjkCreditLvs; return zjkCreditLvs;
} }
......
...@@ -174,7 +174,6 @@ public class ZjkCreditUserServiceImpl implements IZjkCreditUserService { ...@@ -174,7 +174,6 @@ public class ZjkCreditUserServiceImpl implements IZjkCreditUserService {
lambdaQueryWrapper.orderBy(true,true,ZjkCreditUser::getUpdateTime).last("Limit 1"); lambdaQueryWrapper.orderBy(true,true,ZjkCreditUser::getUpdateTime).last("Limit 1");
ZjkCreditUser zjkCreditUser = baseMapper.selectOne(lambdaQueryWrapper); ZjkCreditUser zjkCreditUser = baseMapper.selectOne(lambdaQueryWrapper);
if(zjkCreditUser!=null){ if(zjkCreditUser!=null){
//修改用户总信用 //修改用户总信用
zjkCreditUser.setExpertId(creditInfoDto.getExpertId()); zjkCreditUser.setExpertId(creditInfoDto.getExpertId());
zjkCreditUser.setUserId(creditInfoDto.getUserId()); zjkCreditUser.setUserId(creditInfoDto.getUserId());
...@@ -331,52 +330,9 @@ public class ZjkCreditUserServiceImpl implements IZjkCreditUserService { ...@@ -331,52 +330,9 @@ public class ZjkCreditUserServiceImpl implements IZjkCreditUserService {
} }
@Override @Override
public R<List<ZjkCreditRuleVo>> selectUserById(ZjkCreditBo zjkCreditBo, PageQuery pageQuery) { public TableDataInfo<ZjkCreditRuleVo> selectUserById(ZjkCreditBo dto, PageQuery pageQuery) {
try { Page<ZjkCreditRuleVo> result = zjkCreditRuleMapper.selectCreditInfo(pageQuery.build(),dto);
int count = 0; return TableDataInfo.build(result);
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();
}
} }
@Override @Override
...@@ -407,7 +363,7 @@ public class ZjkCreditUserServiceImpl implements IZjkCreditUserService { ...@@ -407,7 +363,7 @@ public class ZjkCreditUserServiceImpl implements IZjkCreditUserService {
} }
//获取所有行用分低于 //获取所有行用分低于
LambdaQueryWrapper<ZjkCreditUser> lambdaQueryWrapper = new LambdaQueryWrapper<>(); 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){ if(collect1!=null&&collect1.size()>0){
lambdaQueryWrapper.in(ZjkCreditUser::getExpertId,collect1); lambdaQueryWrapper.in(ZjkCreditUser::getExpertId,collect1);
} }
......
...@@ -15,6 +15,7 @@ import org.dromara.zjk.domain.bo.ZjkDataChangesLogsBo; ...@@ -15,6 +15,7 @@ import org.dromara.zjk.domain.bo.ZjkDataChangesLogsBo;
import org.dromara.zjk.domain.vo.ZjkDataChangesLogsDetailVo; import org.dromara.zjk.domain.vo.ZjkDataChangesLogsDetailVo;
import org.dromara.zjk.domain.vo.ZjkDataChangesLogsVo; import org.dromara.zjk.domain.vo.ZjkDataChangesLogsVo;
import org.dromara.zjk.mapper.ZjkDataChangesLogsMapper; import org.dromara.zjk.mapper.ZjkDataChangesLogsMapper;
import org.dromara.zjk.mapper.ZjkLearningMaterialsMapper;
import org.dromara.zjk.service.IZjkDataChangesLogsService; import org.dromara.zjk.service.IZjkDataChangesLogsService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -33,7 +34,7 @@ import java.util.Map; ...@@ -33,7 +34,7 @@ import java.util.Map;
public class ZjkDataChangesLogsServiceImpl implements IZjkDataChangesLogsService { public class ZjkDataChangesLogsServiceImpl implements IZjkDataChangesLogsService {
private final ZjkDataChangesLogsMapper baseMapper; private final ZjkDataChangesLogsMapper baseMapper;
private final ZjkLearningMaterialsMapper zjkLearningMaterialsMapper;
/** /**
* 查询业务数据变更记录 * 查询业务数据变更记录
* *
...@@ -73,6 +74,7 @@ public class ZjkDataChangesLogsServiceImpl implements IZjkDataChangesLogsService ...@@ -73,6 +74,7 @@ public class ZjkDataChangesLogsServiceImpl implements IZjkDataChangesLogsService
public TableDataInfo<ZjkDataChangesLogsVo> queryPageList(ZjkDataChangesLogsBo bo, PageQuery pageQuery) { public TableDataInfo<ZjkDataChangesLogsVo> queryPageList(ZjkDataChangesLogsBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ZjkDataChangesLogs> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<ZjkDataChangesLogs> lqw = buildQueryWrapper(bo);
Page<ZjkDataChangesLogsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<ZjkDataChangesLogsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().forEach(r -> r.setCreateByStr(zjkLearningMaterialsMapper.selectVoByUserId(r.getCreateBy())));
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
...@@ -85,7 +87,9 @@ public class ZjkDataChangesLogsServiceImpl implements IZjkDataChangesLogsService ...@@ -85,7 +87,9 @@ public class ZjkDataChangesLogsServiceImpl implements IZjkDataChangesLogsService
@Override @Override
public List<ZjkDataChangesLogsVo> queryList(ZjkDataChangesLogsBo bo) { public List<ZjkDataChangesLogsVo> queryList(ZjkDataChangesLogsBo bo) {
LambdaQueryWrapper<ZjkDataChangesLogs> lqw = buildQueryWrapper(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) { private LambdaQueryWrapper<ZjkDataChangesLogs> buildQueryWrapper(ZjkDataChangesLogsBo bo) {
......
...@@ -7,13 +7,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -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.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.TenantConstants;
import org.dromara.common.core.constant.UserConstants; import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.RemoteDictService;
import org.dromara.system.api.model.RoleDTO; import org.dromara.system.api.model.RoleDTO;
import org.dromara.zjk.domain.*; import org.dromara.zjk.domain.*;
import org.dromara.zjk.domain.dto.CreditInfoDto; import org.dromara.zjk.domain.dto.CreditInfoDto;
...@@ -22,6 +22,7 @@ import org.dromara.zjk.domain.dto.PointInfoDto; ...@@ -22,6 +22,7 @@ import org.dromara.zjk.domain.dto.PointInfoDto;
import org.dromara.zjk.domain.dto.SelExpertRuleDto; import org.dromara.zjk.domain.dto.SelExpertRuleDto;
import org.dromara.zjk.domain.vo.*; import org.dromara.zjk.domain.vo.*;
import org.dromara.zjk.mapper.*; import org.dromara.zjk.mapper.*;
import org.dromara.zjk.service.IZjkReviewPhaseService;
import org.dromara.zjk.service.ZjkEvaluateService; import org.dromara.zjk.service.ZjkEvaluateService;
import org.dromara.zjk.utils.DateRangUtils; import org.dromara.zjk.utils.DateRangUtils;
import org.dromara.zjk.utils.NumberGenerator; import org.dromara.zjk.utils.NumberGenerator;
...@@ -31,7 +32,6 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -31,7 +32,6 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -44,6 +44,7 @@ import java.util.stream.Collectors; ...@@ -44,6 +44,7 @@ import java.util.stream.Collectors;
* @createDate 2024-11-01 10:11:52 * @createDate 2024-11-01 10:11:52
*/ */
@Service @Service
@Slf4j
public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEvaluate> public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEvaluate>
implements ZjkEvaluateService { implements ZjkEvaluateService {
@Resource @Resource
...@@ -52,7 +53,6 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv ...@@ -52,7 +53,6 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
private ApplicationEventPublisher eventPublisher; private ApplicationEventPublisher eventPublisher;
@Resource @Resource
private ZjkExpertMapper zjkExpertMapper; private ZjkExpertMapper zjkExpertMapper;
private RemoteDictService remoteDictService;
@Resource @Resource
private ZjkCreditRuleMapper zjkCreditRuleMapper; private ZjkCreditRuleMapper zjkCreditRuleMapper;
@Resource @Resource
...@@ -65,7 +65,10 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv ...@@ -65,7 +65,10 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
private ZjkReviewPhaseMapper zjkReviewPhaseMapper; private ZjkReviewPhaseMapper zjkReviewPhaseMapper;
@Resource @Resource
private ZjkPointMapper zjkPointMapper; private ZjkPointMapper zjkPointMapper;
@Resource
private IZjkReviewPhaseService zjkReviewPhaseService;
@Resource
private ZjkPointUserMapper zjkPointUserMapper;
@Override @Override
public TableDataInfo<ZjkEvaluateVO> getListToZj(ZjkEvaluateVO bo, PageQuery pageQuery) { public TableDataInfo<ZjkEvaluateVO> getListToZj(ZjkEvaluateVO bo, PageQuery pageQuery) {
Long userId = LoginHelper.getUserId(); Long userId = LoginHelper.getUserId();
...@@ -87,7 +90,7 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv ...@@ -87,7 +90,7 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
List<String> exUserIds = usersId.stream().distinct().collect(Collectors.toList()); List<String> exUserIds = usersId.stream().distinct().collect(Collectors.toList());
bo.setUserId(String.valueOf(userId)); bo.setUserId(String.valueOf(userId));
IPage<ZjkEvaluateVO> result = baseMapper.getListToZj(pageQuery.build(), exUserIds, ruleIds, bo); IPage<ZjkEvaluateVO> result = baseMapper.getListToZj(pageQuery.build(), exUserIds, ruleIds, bo);
result.getRecords().stream().forEach(item->{ result.getRecords().stream().forEach(item -> {
item.setXmEvaluateStatus(checkStatu(item)); item.setXmEvaluateStatus(checkStatu(item));
}); });
//setTrans(result.getRecords()); //setTrans(result.getRecords());
...@@ -136,13 +139,13 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv ...@@ -136,13 +139,13 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
if (zjkEvaluate.getSourceRole() != null && zjkEvaluate.getSourceRole() == 2 && zjkEvaluate.getIsPresent().equals("0")) { if (zjkEvaluate.getSourceRole() != null && zjkEvaluate.getSourceRole() == 2 && zjkEvaluate.getIsPresent().equals("0")) {
List<String> evaIds = baseMapper.updateOtherInfoToUnPresent(zjkEvaluate); List<String> evaIds = baseMapper.updateOtherInfoToUnPresent(zjkEvaluate);
//更新对应积分 //更新对应积分
if(!CollectionUtils.isEmpty(evaIds)){ if (!CollectionUtils.isEmpty(evaIds)) {
//清除未出席积分记录为0 //清除未出席积分记录为0
zjkPointMapper.clearUnPresentData(evaIds); zjkPointMapper.clearUnPresentData(evaIds);
} }
} }
baseMapper.insert(zjkEvaluate); baseMapper.insert(zjkEvaluate);
//已出席,项目管理员评审专家后,需给财务打款记录表插入数据 //已出席,项目管理员评审专家后,需给财务打款记录表插入数据
try { try {
if (zjkEvaluate.getSourceRole() != null && zjkEvaluate.getSourceRole() == 2 && zjkEvaluate.getIsPresent().equals("1")) { if (zjkEvaluate.getSourceRole() != null && zjkEvaluate.getSourceRole() == 2 && zjkEvaluate.getIsPresent().equals("1")) {
...@@ -152,11 +155,13 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv ...@@ -152,11 +155,13 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
moneyInfo.setExpertId(bo.getEvaluateUser()); moneyInfo.setExpertId(bo.getEvaluateUser());
moneyInfo.setExpertName(zjkExpert.getExpertName()); moneyInfo.setExpertName(zjkExpert.getExpertName());
moneyInfo.setExpertUnit(zjkExpert.getWorkUnit()); moneyInfo.setExpertUnit(zjkExpert.getWorkUnit());
moneyInfo.setPaySn(NumberGenerator.generateUniqueNumber("fee",8)); moneyInfo.setPaySn(NumberGenerator.generateUniqueNumber("fee", 8));
moneyInfo.setAssignId(0); 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()); ZjkProduct zjkProduct = zjkProductMapper.selectById(zjkEvaluate.getItemId());
if (zjkExpert != null) { if (zjkProduct != null) {
moneyInfo.setProductId(zjkEvaluate.getItemId()); moneyInfo.setProductId(zjkEvaluate.getItemId());
moneyInfo.setProductType(String.valueOf(zjkEvaluate.getItemStage())); moneyInfo.setProductType(String.valueOf(zjkEvaluate.getItemStage()));
moneyInfo.setProductName(zjkProduct.getProductName()); moneyInfo.setProductName(zjkProduct.getProductName());
...@@ -174,9 +179,22 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv ...@@ -174,9 +179,22 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
moneyInfo.setExpertType(con.getMoneyType()); moneyInfo.setExpertType(con.getMoneyType());
moneyInfo.setExpertTypeMoneyFee(con.getMoneyNumber()); moneyInfo.setExpertTypeMoneyFee(con.getMoneyNumber());
moneyInfo.setExpertNoPayMoney(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 ...@@ -189,18 +207,25 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
QueryWrapper<ZjkExpert> wq = null; QueryWrapper<ZjkExpert> wq = null;
ZjkExpert zjkExpert = null; ZjkExpert zjkExpert = null;
try { try {
PointInfoDto pointInfoEvent = new PointInfoDto(); //对未积分冻结得用户进行积分新增录入
pointInfoEvent.setEvaluateId(zjkEvaluate.getId()); QueryWrapper<ZjkPointUser> wqw = new QueryWrapper<>();
pointInfoEvent.setRuleKey(UserConstants.POINT_EVALUATE_KEY); wqw.lambda().eq(ZjkPointUser::getCheckStatus, 1).eq(ZjkPointUser::getExpertId, Long.valueOf(bo.getEvaluateUser()));
pointInfoEvent.setExpertId(Long.valueOf(bo.getEvaluateUser())); List<ZjkPointUser> zjkPointUsers = zjkPointUserMapper.selectList(wqw);
pointInfoEvent.setPoints(bo.getBusLevelScore().add(bo.getWorkAttitudeScore()).add(bo.getRightApprovalScore())); if(CollectionUtils.isEmpty(zjkPointUsers)){
wq = new QueryWrapper<>(); PointInfoDto pointInfoEvent = new PointInfoDto();
wq.lambda().eq(ZjkExpert::getExpertId, bo.getEvaluateUser()); pointInfoEvent.setEvaluateId(zjkEvaluate.getId());
zjkExpert = zjkExpertMapper.selectOne(wq); pointInfoEvent.setRuleKey(UserConstants.POINT_EVALUATE_KEY);
if (zjkExpert != null) { pointInfoEvent.setExpertId(Long.valueOf(bo.getEvaluateUser()));
pointInfoEvent.setUserId(zjkExpert.getUserId()); 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) { } catch (Exception e) {
log.error("发布完成评价的积分事件异常"); log.error("发布完成评价的积分事件异常");
e.printStackTrace(); e.printStackTrace();
...@@ -208,37 +233,39 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv ...@@ -208,37 +233,39 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
//更新信用分 //更新信用分
//去过机构管理员 项目管理员 评价为缺席就扣减 //去过机构管理员 项目管理员 评价为缺席就扣减
try { try {
if (zjkEvaluate.getIsPresent().equals("0") && zjkEvaluate.getSourceRole()==2) { if(zjkEvaluate.getSourceRole() == 2){
//发布完成评价的信用事件 if (zjkEvaluate.getIsPresent().equals("0")) {
CreditInfoDto creditInfoDto = new CreditInfoDto(); //未出席,且是项目管理员进行的评价,信用分进行扣减
//获取信用规则 CreditInfoDto creditInfoDto = new CreditInfoDto();
LambdaQueryWrapper<ZjkCreditRule> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //获取信用规则
lambdaQueryWrapper.eq(ZjkCreditRule::getRuleKey, 3).last("Limit 1"); LambdaQueryWrapper<ZjkCreditRule> lambdaQueryWrapper = new LambdaQueryWrapper<>();
ZjkCreditRuleVo zjkCreditRuleVo = zjkCreditRuleMapper.selectVoOne(lambdaQueryWrapper); lambdaQueryWrapper.eq(ZjkCreditRule::getRuleKey, 3).last("Limit 1");
creditInfoDto.setRuleKey(UserConstants.CREDIT_ABSENCE_KEY); ZjkCreditRuleVo zjkCreditRuleVo = zjkCreditRuleMapper.selectVoOne(lambdaQueryWrapper);
creditInfoDto.setExpertId(Long.valueOf(bo.getEvaluateUser())); creditInfoDto.setRuleKey(UserConstants.CREDIT_ABSENCE_KEY);
creditInfoDto.setCreditSum(zjkCreditRuleVo.getEachScore()); creditInfoDto.setExpertId(Long.valueOf(bo.getEvaluateUser()));
wq.lambda().eq(ZjkExpert::getExpertId, bo.getEvaluateUser()); creditInfoDto.setCreditSum(zjkCreditRuleVo.getEachScore());
if (zjkExpert != null) { wq.lambda().eq(ZjkExpert::getExpertId, bo.getEvaluateUser());
creditInfoDto.setUserId(zjkExpert.getUserId()); if (zjkExpert != null) {
} creditInfoDto.setUserId(zjkExpert.getUserId());
eventPublisher.publishEvent(creditInfoDto); }
//如果机构管理员评价为参评就增加 eventPublisher.publishEvent(creditInfoDto);
} else { }else{
//发布完成评价的信用事件 //发布完成评价的信用事件
CreditInfoDto creditInfoDto = new CreditInfoDto(); CreditInfoDto creditInfoDto = new CreditInfoDto();
//获取信用规则 //获取信用规则
LambdaQueryWrapper<ZjkCreditRule> lambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ZjkCreditRule> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ZjkCreditRule::getRuleKey, 1).last("Limit 1"); lambdaQueryWrapper.eq(ZjkCreditRule::getRuleKey, 1).last("Limit 1");
ZjkCreditRuleVo zjkCreditRuleVo = zjkCreditRuleMapper.selectVoOne(lambdaQueryWrapper); ZjkCreditRuleVo zjkCreditRuleVo = zjkCreditRuleMapper.selectVoOne(lambdaQueryWrapper);
creditInfoDto.setRuleKey(UserConstants.CREDIT_REVIEW_KEY); creditInfoDto.setRuleKey(UserConstants.CREDIT_REVIEW_KEY);
creditInfoDto.setExpertId(Long.valueOf(bo.getEvaluateUser())); creditInfoDto.setExpertId(Long.valueOf(bo.getEvaluateUser()));
creditInfoDto.setCreditSum(zjkCreditRuleVo.getEachScore()); creditInfoDto.setCreditSum(zjkCreditRuleVo.getEachScore());
wq.lambda().eq(ZjkExpert::getExpertId, bo.getEvaluateUser()); wq.lambda().eq(ZjkExpert::getExpertId, bo.getEvaluateUser());
if (zjkExpert != null) { if (zjkExpert != null) {
creditInfoDto.setUserId(zjkExpert.getUserId()); creditInfoDto.setUserId(zjkExpert.getUserId());
} }
eventPublisher.publishEvent(creditInfoDto); eventPublisher.publishEvent(creditInfoDto);
}
} }
} catch (Exception e) { } catch (Exception e) {
log.error("发布完成评价的信用事件异常"); log.error("发布完成评价的信用事件异常");
...@@ -272,6 +299,7 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv ...@@ -272,6 +299,7 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
List<String> usersId = new ArrayList<>(); List<String> usersId = new ArrayList<>();
//限定我参与的项目 //限定我参与的项目
usersId.add(String.valueOf(userId)); usersId.add(String.valueOf(userId));
//限定项目管理员权限
bo.setUserId(String.valueOf(userId)); bo.setUserId(String.valueOf(userId));
IPage<ZjkEvaluateVO> result = baseMapper.getListToXm(pageQuery.build(), usersId, null, bo); IPage<ZjkEvaluateVO> result = baseMapper.getListToXm(pageQuery.build(), usersId, null, bo);
return TableDataInfo.build(result); return TableDataInfo.build(result);
...@@ -330,14 +358,14 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv ...@@ -330,14 +358,14 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
public Integer checkStatu(ZjkEvaluateVO vo) { public Integer checkStatu(ZjkEvaluateVO vo) {
Integer status = baseMapper.checkIsPresentStatus(vo); Integer status = baseMapper.checkIsPresentStatus(vo);
if(status!=null && 0==status){ if (status != null && 0 == status) {
//未出席 //未出席
return status; return status;
}else{ } else {
return 1; return 1;
} }
} }
private List<String> getYdataByMonth(Map<Integer, Long> data, List<String> monthsRange) { private List<String> getYdataByMonth(Map<Integer, Long> data, List<String> monthsRange) {
...@@ -351,6 +379,8 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv ...@@ -351,6 +379,8 @@ public class ZjkEvaluateServiceImpl extends ServiceImpl<ZjkEvaluateMapper, ZjkEv
return res; return res;
} }
} }
......
...@@ -11,7 +11,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -11,7 +11,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboReference; 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.exception.ServiceException;
import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.DynamicTask; import org.dromara.common.core.utils.DynamicTask;
...@@ -22,16 +21,15 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; ...@@ -22,16 +21,15 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.resource.api.RemoteMessageService; import org.dromara.resource.api.RemoteMessageService;
import org.dromara.system.api.RemoteConfigService; import org.dromara.system.api.RemoteConfigService;
import org.dromara.zjk.config.OnChainUtils;
import org.dromara.zjk.domain.*; import org.dromara.zjk.domain.*;
import org.dromara.zjk.domain.bo.ZjkExpertItemBo; import org.dromara.zjk.domain.bo.ZjkExpertItemBo;
import org.dromara.zjk.domain.bo.ZjkItemExtreationBo; import org.dromara.zjk.domain.bo.ZjkItemExtreationBo;
import org.dromara.zjk.domain.bo.ZjkProjectExpertItemBo; 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.SmsSendDto;
import org.dromara.zjk.domain.dto.SmsUpEventDto; import org.dromara.zjk.domain.dto.SmsUpEventDto;
import org.dromara.zjk.domain.vo.*; import org.dromara.zjk.domain.vo.*;
import org.dromara.zjk.enums.*; import org.dromara.zjk.enums.*;
import org.dromara.zjk.event.OnchainEvent;
import org.dromara.zjk.mapper.*; import org.dromara.zjk.mapper.*;
import org.dromara.zjk.service.IZjkExpertItemService; import org.dromara.zjk.service.IZjkExpertItemService;
import org.dromara.zjk.service.IZjkExpertService; import org.dromara.zjk.service.IZjkExpertService;
...@@ -45,6 +43,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -45,6 +43,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
...@@ -62,7 +61,6 @@ import java.util.stream.Collectors; ...@@ -62,7 +61,6 @@ import java.util.stream.Collectors;
* @date 2024-10-29 * @date 2024-10-29
*/ */
@RequiredArgsConstructor @RequiredArgsConstructor
@Transactional
@Service @Service
public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
private static final Logger log = LoggerFactory.getLogger(ZjkExpertItemServiceImpl.class); private static final Logger log = LoggerFactory.getLogger(ZjkExpertItemServiceImpl.class);
...@@ -99,10 +97,12 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -99,10 +97,12 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
@Resource @Resource
private DynamicTask dynamicTask; private DynamicTask dynamicTask;
private final ApplicationEventPublisher eventPublisher; private final ApplicationEventPublisher eventPublisher;
@Resource
private OnChainUtils onChainUtils;
@Autowired @Autowired
private StringCryptoUtil stringCryptoUtil; private StringCryptoUtil stringCryptoUtil;
/** /**
* 查询专家抽取 * 查询专家抽取
* *
...@@ -203,201 +203,270 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -203,201 +203,270 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
* @param b 专家抽取 * @param b 专家抽取
* @return 是否修改成功 * @return 是否修改成功
*/ */
@Transactional(rollbackFor = Exception.class)
@Override @Override
public Boolean updateByBo(ZjkExpertItemBo b) { public Boolean updateByBo(ZjkExpertItemBo b) {
ZjkReviewPhase zjkReviewPhase1 = zjkReviewPhaseMapper.selectById(b.getReviewId()); long startTime = System.currentTimeMillis();
//专家确认的截至时间 log.info("开始执行updateByBo方法,参数b.id={}", b.getReviewId());
Date noticeTime = zjkReviewPhase1.getNoticeTime();
int compare = DateUtil.compare(noticeTime, new Date()); try {
if(compare<0){ ZjkReviewPhase zjkReviewPhase1 = zjkReviewPhaseMapper.selectById(b.getReviewId());
throw new ServiceException("当前时间已超过专家确认截止时间,请修改抽取规则"); log.info("查询ZjkReviewPhase耗时: {}ms", System.currentTimeMillis() - startTime);
}
Long reviewId = zjkReviewPhase1.getId(); //专家确认的截至时间
if (zjkReviewPhase1.getParentId() != 0L) { Date noticeTime = zjkReviewPhase1.getNoticeTime();
reviewId = zjkReviewPhase1.getParentId(); int compare = DateUtil.compare(noticeTime, new Date());
} if (compare < 0) {
//根据规则获取所有项目id,阶段,已发送的 throw new ServiceException("当前时间已超过专家确认截止时间,请修改抽取规则");
Long zjkItemExtreationId = zjkReviewPhaseMapper.selectListByItem(reviewId); }
//修改之前的项目数据为失效
ZjkItemExtreation zjkItemExtreation = zjkItemExtreationMapper.selectById(zjkItemExtreationId); Long reviewId = zjkReviewPhase1.getId();
if (zjkReviewPhase1.getParentId() != 0L) {
ZjkProduct zjkProduct = zjkProductMapper.selectById(zjkItemExtreation.getItemId()); reviewId = zjkReviewPhase1.getParentId();
}
zjkItemExtreation.setIsSure(1L);
zjkItemExtreation.setExtractionStatus(ItemExpertTypeEnum.EXTRACTION_SUCCESS_TYPE.getCode()); //根据规则获取所有项目id,阶段,已发送的
//修改规则为有效 Long zjkItemExtreationId = zjkReviewPhaseMapper.selectListByItem(reviewId);
ZjkReviewPhase zjkReviewPhase = new ZjkReviewPhase(); log.info("selectListByItem耗时: {}ms", System.currentTimeMillis() - startTime);
zjkReviewPhase.setId(b.getReviewId());
zjkReviewPhase.setEffective(ReviewTypeEnum.REVIEW_LOSE_TYPE.getCode()); //修改之前的项目数据为失效
//完成按钮 把重抽原因清除 ZjkItemExtreation zjkItemExtreation = zjkItemExtreationMapper.selectById(zjkItemExtreationId);
zjkReviewPhase.setCauseRepum(null); log.info("selectById ZjkItemExtreation耗时: {}ms", System.currentTimeMillis() - startTime);
// 拿到这次的抽取记录
List<ZjkExpertItem> zjkExpertItemList = baseMapper.selectList(new LambdaQueryWrapper<ZjkExpertItem>() ZjkProduct zjkProduct = zjkProductMapper.selectById(zjkItemExtreation.getItemId());
.eq(ZjkExpertItem::getReviewId, b.getReviewId())); log.info("selectById ZjkProduct耗时: {}ms", System.currentTimeMillis() - startTime);
zjkItemExtreation.setExpertSum(zjkExpertItemList.size());
zjkItemExtreation.setReviewId(b.getReviewId()); zjkItemExtreation.setIsSure(1L);
zjkItemExtreationMapper.updateById(zjkItemExtreation); zjkItemExtreation.setExtractionStatus(ItemExpertTypeEnum.EXTRACTION_SUCCESS_TYPE.getCode());
// 根据这次的规则拿到上次的规则 //修改规则为有效
ZjkReviewPhase beforZjkReviewPhase = zjkReviewPhaseMapper.selectOne(new LambdaQueryWrapper<ZjkReviewPhase>() ZjkReviewPhase zjkReviewPhase = new ZjkReviewPhase();
.eq(ZjkReviewPhase::getReviewSn,zjkReviewPhase1.getReviewSn()) zjkReviewPhase.setId(b.getReviewId());
.eq(ZjkReviewPhase::getItemId,zjkReviewPhase1.getItemId()) zjkReviewPhase.setEffective(ReviewTypeEnum.REVIEW_LOSE_TYPE.getCode());
.orderByDesc(ZjkReviewPhase::getId) // 按 id 降序排序 //完成按钮 把重抽原因清除
.last("LIMIT 1") // 只取一条记录 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 log.info("查询beforZjkReviewPhase耗时: {}ms", System.currentTimeMillis() - queryStartTime);
List<Long> expertIds = zjkExpertItemList.stream()
.map(ZjkExpertItem::getExpertId) // 提取所有 userId
.collect(Collectors.toList()); queryStartTime = System.currentTimeMillis();
List<ZjkExpert> zjkExpertList = zjkExpertMapper.selectList(new LambdaQueryWrapper<ZjkExpert>().in(ZjkExpert::getExpertId,expertIds)); List<Long> expertIds = zjkExpertItemList.stream()
Map<Long, ZjkExpert> groupedByUserId = zjkExpertList.stream() .map(ZjkExpertItem::getExpertId)
.collect(Collectors.toMap( .collect(Collectors.toList());
ZjkExpert::getUserId, List<ZjkExpert> zjkExpertList = zjkExpertMapper.selectList(new LambdaQueryWrapper<ZjkExpert>().in(ZjkExpert::getExpertId, expertIds));
expert -> expert, log.info("查询ZjkExpertList耗时: {}ms, 结果数量: {}", System.currentTimeMillis() - queryStartTime, zjkExpertList.size());
(existing, replacement) -> existing));
if (beforZjkReviewPhase != null) { Map<Long, ZjkExpert> groupedByUserId = zjkExpertList.stream()
// 根据上次的规则拿到上次的抽取记录 .collect(Collectors.toMap(
List<ZjkExpertItem> beforeZjkExpertItemList = baseMapper.selectList(new LambdaQueryWrapper<ZjkExpertItem>() ZjkExpert::getUserId,
.eq(ZjkExpertItem::getReviewId, beforZjkReviewPhase.getId())); expert -> expert,
// 循环更新状态 (existing, replacement) -> existing));
Map<Long, ZjkExpertItem> beforeItemMap = beforeZjkExpertItemList.stream()
.collect(Collectors.toMap(ZjkExpertItem::getExpertId, item -> item)); if (beforZjkReviewPhase != null) {
// 遍历 zjkExpertItemList,更新匹配记录 log.info("处理历史数据逻辑开始");
for (ZjkExpertItem currentItem : zjkExpertItemList) { // 根据上次的规则拿到上次的抽取记录
ZjkExpertItem beforeItem = beforeItemMap.get(currentItem.getExpertId()); queryStartTime = System.currentTimeMillis();
if (beforeItem != null && (beforeItem.getAcceptStatus().equals("1")|| beforeItem.getAcceptStatus().equals("0"))) { List<ZjkExpertItem> beforeZjkExpertItemList = baseMapper.selectList(new LambdaQueryWrapper<ZjkExpertItem>()
currentItem.setAcceptStatus(beforeItem.getAcceptStatus()); .eq(ZjkExpertItem::getReviewId, beforZjkReviewPhase.getId()));
currentItem.setConfirmCode(beforeItem.getConfirmCode()); log.info("查询beforeZjkExpertItemList耗时: {}ms, 结果数量: {}", System.currentTimeMillis() - queryStartTime, beforeZjkExpertItemList.size());
currentItem.setRefuseCode(beforeItem.getRefuseCode());
} else { // 循环更新状态
// 新数据为待接受 Map<Long, ZjkExpertItem> beforeItemMap = beforeZjkExpertItemList.stream()
currentItem.setAcceptStatus(String.valueOf(ExpertItemTypeEnum.EXPERTITEM_NOTAFFIRM_TYPE.getCode())); .collect(Collectors.toMap(ZjkExpertItem::getExpertId, item -> item));
//获取每个被抽取到的专家的userid;发送消息 // 遍历 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(() -> { 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); }, 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); SmsSendDto smsSendDto = buildSmsSendDto(currentItem, groupedByUserId, zjkReviewPhase1, zjkProduct);
try { try {
long smsStartTime = System.currentTimeMillis();
zjkSmsInfoService.sendSms(smsSendDto); zjkSmsInfoService.sendSms(smsSendDto);
log.debug("发送短信给用户{}耗时: {}ms", currentItem.getUserId(), System.currentTimeMillis() - smsStartTime);
} catch (Exception smsException) { } catch (Exception smsException) {
log.error("短信发送异常,发送参数:{}",smsSendDto); log.error("短信发送异常,发送参数:{}, 耗时: {}ms", smsSendDto, System.currentTimeMillis() - processStartTime, smsException);
smsException.printStackTrace(); // 记录日志或做其他处理
} }
} }
//2024/12/3 add操作 确认时改变zjkExpertItem 记录的接受状态为确认(1) 借用枚举内的1 log.info("首次确认逻辑完成,耗时: {}ms", System.currentTimeMillis() - processStartTime);
currentItem.setExtractionStatus(ExtractionStautsEnum.CONFIRM.getCode());
currentItem.setIsSure(1);
baseMapper.updateById(currentItem);
} }
} else {
// 首次确认 进行随机码构建 zjkReviewPhaseMapper.updateById(zjkReviewPhase);
for (ZjkExpertItem currentItem : zjkExpertItemList) {
// 异步发送站内消息 //到达该时间后需要向项目管理员发送专家确认的情况
scheduledExecutorService.schedule(() -> long between = DateUtil.between(noticeTime, new Date(), DateUnit.SECOND);
remoteMessageService.publishMessage(currentItem.getUserId(), "您有新的评审任务,请尽快确认"), String key = "zjcq_" + zjkReviewPhase1.getId();
3, TimeUnit.SECONDS dynamicTask.startDelay(key, () -> sendConfirmSmsToXmManager(zjkReviewPhase1, zjkProduct), 1000 * between);
); //专家抽取结果数据上区块链
currentItem.setConfirmCode(NumberGenerator.generateRandomNumber(4)+"1"); log.info("规则id为{},抽取的专家上区块链开始", reviewId);
currentItem.setRefuseCode(NumberGenerator.generateRandomNumber(4)+"0"); try {
// 更新当前条目的状态 List<ZjkExpertItemVo> data = this.getByReviewId(reviewId);
currentItem.setIsSure(1); if (!CollectionUtils.isEmpty(data)) {
currentItem.setAcceptStatus(String.valueOf(ExpertItemTypeEnum.EXPERTITEM_NOTAFFIRM_TYPE.getCode())); String jsonStr = JSONUtil.toJsonStr(data);
baseMapper.updateById(currentItem); onChainUtils.toChainAsync(jsonStr, reviewId);
// 构建短信参数
SmsSendDto smsSendDto = buildSmsSendDto(currentItem, groupedByUserId, zjkReviewPhase1, zjkProduct);
try {
zjkSmsInfoService.sendSms(smsSendDto);
} catch (Exception smsException) {
log.error("短信发送异常,发送参数:{}",smsSendDto);
smsException.printStackTrace(); // 记录日志或做其他处理
} }
} 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 phase
* @param zjkProduct * @param zjkProduct
*/ */
private void sendConfirmSmsToXmManager(ZjkReviewPhase phase, ZjkProduct zjkProduct){ private void sendConfirmSmsToXmManager(ZjkReviewPhase phase, ZjkProduct zjkProduct) {
List<ZjkExpertItem> zjs= baseMapper.getCheckZjAccetpt(phase.getId()); List<ZjkExpertItem> zjs = baseMapper.getCheckZjAccetpt(phase.getId());
if (!CollectionUtil.isEmpty(zjs)) { if (!CollectionUtil.isEmpty(zjs)) {
Integer size=zjs.size(); Integer size = zjs.size();
//获取项目管理员的用户id //获取项目管理员的用户id
Long createBy = zjs.get(0).getCreateBy(); Long createBy = zjs.get(0).getCreateBy();
String phone = baseMapper.checkUserPhoneExist(createBy); String phone = baseMapper.checkUserPhoneExist(createBy);
if(!StringUtils.isEmpty(phone)){ if (!StringUtils.isEmpty(phone)) {
int acceptedCount = (int) zjs.stream() int acceptedCount = (int) zjs.stream()
.filter(zjkExpertItem -> ZjkExpertItemAcceptStatus.accept.getValue().equals(zjkExpertItem.getAcceptStatus())) .filter(zjkExpertItem -> ZjkExpertItemAcceptStatus.accept.getValue().equals(zjkExpertItem.getAcceptStatus()))
.count(); .count();
int unacceptedCount = (int) zjs.stream() int unacceptedCount = (int) zjs.stream()
.filter(zjkExpertItem -> ZjkExpertItemAcceptStatus.no_accept.getValue().equals(zjkExpertItem.getAcceptStatus())) .filter(zjkExpertItem -> ZjkExpertItemAcceptStatus.no_accept.getValue().equals(zjkExpertItem.getAcceptStatus()))
.count(); .count();
int rejectedCount = (int) zjs.stream() int rejectedCount = (int) zjs.stream()
.filter(zjkExpertItem -> ZjkExpertItemAcceptStatus.reject.getValue().equals(zjkExpertItem.getAcceptStatus())) .filter(zjkExpertItem -> ZjkExpertItemAcceptStatus.reject.getValue().equals(zjkExpertItem.getAcceptStatus()))
.count(); .count();
int canceledCount = (int) zjs.stream() int canceledCount = (int) zjs.stream()
.filter(zjkExpertItem -> ZjkExpertItemAcceptStatus.cancel.getValue().equals(zjkExpertItem.getAcceptStatus())) .filter(zjkExpertItem -> ZjkExpertItemAcceptStatus.cancel.getValue().equals(zjkExpertItem.getAcceptStatus()))
.count(); .count();
SmsSendDto smsSendDto = new SmsSendDto(); SmsSendDto smsSendDto = new SmsSendDto();
smsSendDto.setBatchType(1); smsSendDto.setBatchType(1);
smsSendDto.setReceiveUserIds(Arrays.asList(createBy)); smsSendDto.setReceiveUserIds(Arrays.asList(createBy));
smsSendDto.setSendBy(createBy); smsSendDto.setSendBy(createBy);
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
String reviewSnDesc = ReviewSnEnum.getByCode(phase.getReviewSn()).getDesc(); String reviewSnDesc = ReviewSnEnum.getByCode(phase.getReviewSn()).getDesc();
jsonObject.put("productName", zjkProduct.getProductName()); jsonObject.put("productName", zjkProduct.getProductName());
jsonObject.put("reviewSn", reviewSnDesc != null ? reviewSnDesc : ""); jsonObject.put("reviewSn", reviewSnDesc != null ? reviewSnDesc : "");
jsonObject.put("num", size); jsonObject.put("num", size);
if(size==acceptedCount){ if (size == acceptedCount) {
//全部接收 //全部接收
smsSendDto.setTemplateId(SmsTemplateEnum.SMS_NOTICE_ACCEPT.getCode()); smsSendDto.setTemplateId(SmsTemplateEnum.SMS_NOTICE_ACCEPT.getCode());
}else{ } else {
//部分接收 //部分接收
smsSendDto.setTemplateId(SmsTemplateEnum.SMS_NOTICE_NO_ACCEPT.getCode()); smsSendDto.setTemplateId(SmsTemplateEnum.SMS_NOTICE_NO_ACCEPT.getCode());
jsonObject.put("noAcceptNum", unacceptedCount); jsonObject.put("noAcceptNum", unacceptedCount);
jsonObject.put("rejectNum", rejectedCount); jsonObject.put("rejectNum", rejectedCount);
jsonObject.put("acceptNum", acceptedCount); jsonObject.put("acceptNum", acceptedCount);
//部分接收修改抽取状态 //部分接收修改抽取状态
// 更新抽取人数 // 更新抽取人数
ZjkItemExtreation zjkItemExtreation =zjkItemExtreationMapper.selectOne(new LambdaQueryWrapper<ZjkItemExtreation>() ZjkItemExtreation zjkItemExtreation = zjkItemExtreationMapper.selectOne(new LambdaQueryWrapper<ZjkItemExtreation>()
.eq(ZjkItemExtreation::getId,phase.getItemExtreationId())); .eq(ZjkItemExtreation::getId, phase.getItemExtreationId()));
if (zjkItemExtreation != null){ if (zjkItemExtreation != null) {
zjkItemExtreation.setExtractedSum(zjkItemExtreation.getExtractedSum()-unacceptedCount-rejectedCount); zjkItemExtreation.setExtractedSum((zjkItemExtreation.getExtractedSum() - unacceptedCount - rejectedCount) < 0 ? 0 : zjkItemExtreation.getExtractedSum() - unacceptedCount - rejectedCount);
zjkItemExtreation.setExtractionStatus(1); zjkItemExtreation.setExtractionStatus(1);
zjkItemExtreationMapper.updateById(zjkItemExtreation); 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 { ...@@ -423,9 +492,11 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
String reviewSnDesc = ReviewSnEnum.getByCode(zjkReviewPhase1.getReviewSn()).getDesc(); String reviewSnDesc = ReviewSnEnum.getByCode(zjkReviewPhase1.getReviewSn()).getDesc();
jsonObject.put("reviewSn", reviewSnDesc != null ? reviewSnDesc : ""); jsonObject.put("reviewSn", reviewSnDesc != null ? reviewSnDesc : "");
jsonObject.put("reviewPlace", zjkReviewPhase1.getReviewPlace()); 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("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); smsSendDto.setParamJson(jsonObject);
return smsSendDto; return smsSendDto;
} }
...@@ -572,6 +643,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -572,6 +643,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
zjkProjectExpertItemBo.setReviewPlace(zjkReviewPhaseVo.getReviewPlace()); zjkProjectExpertItemBo.setReviewPlace(zjkReviewPhaseVo.getReviewPlace());
zjkProjectExpertItemBo.setReviewTime(zjkReviewPhaseVo.getReviewTime()); zjkProjectExpertItemBo.setReviewTime(zjkReviewPhaseVo.getReviewTime());
zjkProjectExpertItemBo.setItemid(zjkReviewPhaseVo.getItemId()); zjkProjectExpertItemBo.setItemid(zjkReviewPhaseVo.getItemId());
zjkProjectExpertItemBo.setNoticeTime(zjkReviewPhaseVo.getNoticeTime());
// 每个领域需要抽多少人 // 每个领域需要抽多少人
if (zjkReviewPhaseVo.getArea() != null && zjkReviewPhaseVo.getArea() != "") { if (zjkReviewPhaseVo.getArea() != null && zjkReviewPhaseVo.getArea() != "") {
String[] pairs = zjkReviewPhaseVo.getArea().split(","); String[] pairs = zjkReviewPhaseVo.getArea().split(",");
...@@ -852,7 +924,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -852,7 +924,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
case "random": case "random":
zjkProjectExpertItemBo.setZjkReviewPhase(zjkReviewPhase); zjkProjectExpertItemBo.setZjkReviewPhase(zjkReviewPhase);
// 随机抽取获取满足条件的专家 id // 随机抽取获取满足条件的专家 id
List<Long> randomed = random(zjkProjectExpertItemBo, remoZjkExpertItems,new ArrayList<>()); List<Long> randomed = random(zjkProjectExpertItemBo, remoZjkExpertItems, new ArrayList<>());
if (CollectionUtil.isEmpty(randomed)) { if (CollectionUtil.isEmpty(randomed)) {
//抽取失败 //抽取失败
throw new ServiceException("抽取失败"); throw new ServiceException("抽取失败");
...@@ -991,7 +1063,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -991,7 +1063,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
} }
zjkProjectExpertItemBo.setExpertIds(nameList); zjkProjectExpertItemBo.setExpertIds(nameList);
List<Long> specifiedExpertList = zjkProjectExpertItemBo.getExpertsId(); List<Long> specifiedExpertList = zjkProjectExpertItemBo.getExpertsId();
List<Long> random = random(zjkProjectExpertItemBo, remoZjkExpertItems,specifiedExpertList); List<Long> random = random(zjkProjectExpertItemBo, remoZjkExpertItems, specifiedExpertList);
if (random == null) { if (random == null) {
//抽取失败 //抽取失败
throw new ServiceException("抽取失败"); throw new ServiceException("抽取失败");
...@@ -1158,12 +1230,12 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -1158,12 +1230,12 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
public List<ZjkExpertVo> concatenated(String name) { public List<ZjkExpertVo> concatenated(String name) {
//获取字典中的所有领域名称 //获取字典中的所有领域名称
LambdaQueryWrapper<ZjkExpert> lambdaQueryWrapper = new LambdaQueryWrapper(); // LambdaQueryWrapper<ZjkExpert> lambdaQueryWrapper = new LambdaQueryWrapper();
if (name != null) { // if (name != null) {
lambdaQueryWrapper.like(ZjkExpert::getExpertName, name); // lambdaQueryWrapper.like(ZjkExpert::getExpertName, name);
} // }
lambdaQueryWrapper.eq(ZjkExpert::getStatus, 2); // lambdaQueryWrapper.eq(ZjkExpert::getStatus, 2);
List<ZjkExpertVo> zjkExpertVos = zjkExpertMapper.selectVoList(lambdaQueryWrapper); List<ZjkExpertVo> zjkExpertVos = zjkExpertMapper.getConcatenatedExpert(name);
return zjkExpertVos; return zjkExpertVos;
} }
...@@ -1203,7 +1275,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -1203,7 +1275,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
Integer extractedSum = zjkItemExtreation.getExpertSum(); Integer extractedSum = zjkItemExtreation.getExpertSum();
Integer extractionCount = zjkReviewPhase1.getPlannedIntake(); Integer extractionCount = zjkReviewPhase1.getPlannedIntake();
Integer i = extractedSum - extractionCount; Integer i = extractedSum - extractionCount;
zjkItemExtreation.setExtractedSum(i); zjkItemExtreation.setExtractedSum(i < 0 ? 0 : i);
zjkItemExtreationMapper.updateById(zjkItemExtreation); zjkItemExtreationMapper.updateById(zjkItemExtreation);
} else { } else {
//修改记录表状态 //修改记录表状态
...@@ -1211,7 +1283,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -1211,7 +1283,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
Integer extractedSum = zjkItemExtreation.getExpertSum(); Integer extractedSum = zjkItemExtreation.getExpertSum();
Integer extractionCount = zjkReviewPhase1.getPlannedIntake(); Integer extractionCount = zjkReviewPhase1.getPlannedIntake();
Integer i = extractedSum - extractionCount; Integer i = extractedSum - extractionCount;
zjkItemExtreation.setExtractedSum(i); zjkItemExtreation.setExtractedSum(i < 0 ? 0 : i);
zjkItemExtreationMapper.updateById(zjkItemExtreation); zjkItemExtreationMapper.updateById(zjkItemExtreation);
} }
// 获取规则下的专家信息 // 获取规则下的专家信息
...@@ -1305,7 +1377,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -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; int count = 0;
// 补抽人数逻辑 // 补抽人数逻辑
if (zjkProjectExpertItemBo.getRedraw() && zjkProjectExpertItemBo.getSupplementNum() != null) { if (zjkProjectExpertItemBo.getRedraw() && zjkProjectExpertItemBo.getSupplementNum() != null) {
...@@ -1319,7 +1391,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -1319,7 +1391,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
zjkProjectExpertItemBo.setCount((int) (zjkProjectExpertItemBo.getSupplementNum() - expertsCout)); 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); log.info("排除条件后 查询专家结果集{}", zjkExpertVos);
if (CollectionUtil.isEmpty(zjkExpertVos)) { if (CollectionUtil.isEmpty(zjkExpertVos)) {
log.info("不存在符合抽取条件的专家"); log.info("不存在符合抽取条件的专家");
...@@ -1670,6 +1742,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -1670,6 +1742,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
} }
} }
} }
private Long lastUnfulfilledArea = null; // 保存最后一个不满足条件的领域 private Long lastUnfulfilledArea = null; // 保存最后一个不满足条件的领域
private boolean assignExperts( private boolean assignExperts(
...@@ -1718,7 +1791,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -1718,7 +1791,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
return backtrackCombination( return backtrackCombination(
availableExperts, combination, 0, requiredCount, expert -> { availableExperts, combination, 0, requiredCount, expert -> {
assignedExperts.add(expert); assignedExperts.add(expert);
if(concurrence){ if (concurrence) {
assignedUnits.add(expert.getWorkUnit()); assignedUnits.add(expert.getWorkUnit());
} }
...@@ -1726,7 +1799,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -1726,7 +1799,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
}, },
expert -> { expert -> {
assignedExperts.remove(expert); assignedExperts.remove(expert);
if(concurrence){ if (concurrence) {
assignedUnits.remove(expert.getWorkUnit()); assignedUnits.remove(expert.getWorkUnit());
} }
result.get(currentArea).remove(expert); result.get(currentArea).remove(expert);
...@@ -1789,7 +1862,6 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -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) { private static void generateCombinations(List<ZjkExpertVo> experts, Long n, int start, List<ZjkExpertVo> current, List<List<ZjkExpertVo>> result) {
if (current.size() == n) { if (current.size() == n) {
result.add(new ArrayList<>(current)); result.add(new ArrayList<>(current));
...@@ -1806,7 +1878,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -1806,7 +1878,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
private static Map<Long, List<ZjkExpertVo>> getAreaToExpertsMap(List<ZjkExpertVo> experts) { private static Map<Long, List<ZjkExpertVo>> getAreaToExpertsMap(List<ZjkExpertVo> experts) {
Map<Long, List<ZjkExpertVo>> areaToExpertsMap = new HashMap<>(); Map<Long, List<ZjkExpertVo>> areaToExpertsMap = new HashMap<>();
for (ZjkExpertVo expert : experts) { for (ZjkExpertVo expert : experts) {
if(StringUtils.isNotBlank(expert.getPerformWorkId())){ if (StringUtils.isNotBlank(expert.getPerformWorkId())) {
for (String area : expert.getAreaList()) { for (String area : expert.getAreaList()) {
areaToExpertsMap.computeIfAbsent(Long.parseLong(area), k -> new ArrayList<>()).add(expert); areaToExpertsMap.computeIfAbsent(Long.parseLong(area), k -> new ArrayList<>()).add(expert);
} }
...@@ -1824,10 +1896,10 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -1824,10 +1896,10 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
Map<Long, List<ZjkExpertVo>> areaToExperts = getAreaToExpertsMap(allExperts); Map<Long, List<ZjkExpertVo>> areaToExperts = getAreaToExpertsMap(allExperts);
log.info("全部专家集合====================================================="); log.info("全部专家集合=====================================================");
for (Long area1 : areaToExperts.keySet()) { for (Long area1 : areaToExperts.keySet()) {
log.info("领域: {}" , area1); log.info("领域: {}", area1);
List<ZjkExpertVo> zjkExpertVos = areaToExperts.get(area1); List<ZjkExpertVo> zjkExpertVos = areaToExperts.get(area1);
for (ZjkExpertVo expert : zjkExpertVos) { for (ZjkExpertVo expert : zjkExpertVos) {
log.info("专家姓名:{}——专家单位:{}",expert.getExpertName() , expert.getWorkUnit()); log.info("专家姓名:{}——专家单位:{}", expert.getExpertName(), expert.getWorkUnit());
} }
} }
log.info("全部专家集合结束====================================================="); log.info("全部专家集合结束=====================================================");
...@@ -1844,13 +1916,13 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -1844,13 +1916,13 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
boolean success = assignExperts(areaList, areaToExperts, new HashSet<>(), assignedUnits, result, 0, concurrence); boolean success = assignExperts(areaList, areaToExperts, new HashSet<>(), assignedUnits, result, 0, concurrence);
if (success) { if (success) {
log.info("领域: {}","领域分配成功"); log.info("领域: {}", "领域分配成功");
Set<Long> areaMap = result.keySet(); Set<Long> areaMap = result.keySet();
for (Long area : areaMap) { for (Long area : areaMap) {
log.info("领域: {}",area); log.info("领域: {}", area);
List<ZjkExpertVo> zjkExpertVos = result.get(area); List<ZjkExpertVo> zjkExpertVos = result.get(area);
for (ZjkExpertVo expert : zjkExpertVos) { for (ZjkExpertVo expert : zjkExpertVos) {
log.info("专家姓名:{},专家单位{}",expert.getExpertName(),expert.getWorkUnit()); log.info("专家姓名:{},专家单位{}", expert.getExpertName(), expert.getWorkUnit());
} }
} }
} else { } else {
...@@ -1863,7 +1935,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -1863,7 +1935,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
Collections.shuffle(allExperts, new Random()); Collections.shuffle(allExperts, new Random());
allExperts.removeAll(expertList); allExperts.removeAll(expertList);
log.info("剩余专家列表{}", allExperts); log.info("剩余专家列表{}", allExperts);
if(concurrence){ if (concurrence) {
allExperts = allExperts.stream().filter(s -> !assignedUnits.contains(s.getWorkUnit())).toList(); allExperts = allExperts.stream().filter(s -> !assignedUnits.contains(s.getWorkUnit())).toList();
} }
Integer planCount = bo.getCount(); Integer planCount = bo.getCount();
...@@ -1905,7 +1977,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -1905,7 +1977,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
// 假设 encryptClient.encrypt() 是可重复加密,返回固定密文 // 假设 encryptClient.encrypt() 是可重复加密,返回固定密文
String encryptField = stringCryptoUtil.encryptField(smsUpEventDto.getMobile()); 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>() /* ZjkExpert zjkExpert = zjkExpertMapper.selectOne(new LambdaQueryWrapper<ZjkExpert>()
.eq(ZjkExpert::getExpertId, item.getExpertId()) .eq(ZjkExpert::getExpertId, item.getExpertId())
.eq(ZjkExpert::getDeleteFlag, UserConstants.DEL_FLAG_NORMAL));*/ .eq(ZjkExpert::getDeleteFlag, UserConstants.DEL_FLAG_NORMAL));*/
...@@ -1913,21 +1985,21 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -1913,21 +1985,21 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
throw new IllegalArgumentException("未找到对应的专家信息"); throw new IllegalArgumentException("未找到对应的专家信息");
} }
String lastContent = smsUpEventDto.getContent().substring(smsUpEventDto.getContent().length() - 1); String checkChar = smsUpEventDto.getContent().substring(smsUpEventDto.getContent().length() - 1);
int smsIsSuer; // int smsIsSuer;
try { // try {
smsIsSuer = Integer.parseInt(lastContent); // smsIsSuer = Integer.parseInt(lastContent);
} catch (NumberFormatException e) { // } catch (NumberFormatException e) {
throw new IllegalArgumentException("短信内容最后一位不是有效数字: " + lastContent, e); // throw new IllegalArgumentException("短信内容最后一位不是有效数字: " + lastContent, e);
} // }
// 构建专家记录 // 构建专家记录
ZjkExpertItemBo zjkExpertItemBo = new ZjkExpertItemBo(); ZjkExpertItemBo zjkExpertItemBo = new ZjkExpertItemBo();
zjkExpertItemBo.setExpertId(zjkExpert.getExpertId()); zjkExpertItemBo.setExpertId(zjkExpert.getExpertId());
zjkExpertItemBo.setUserId(zjkExpert.getUserId()); zjkExpertItemBo.setUserId(zjkExpert.getUserId());
zjkExpertItemBo.setSmsIsSuer(smsIsSuer); zjkExpertItemBo.setSmsIsSuer("是".equals(checkChar) ? 1 : 0);
if (smsIsSuer == 1) { if ("是".equals(checkChar)) {
zjkExpertItemBo.setConfirmCode(smsUpEventDto.getContent()); zjkExpertItemBo.setConfirmCode(smsUpEventDto.getContent());
} else { } else {
zjkExpertItemBo.setRefuseCode(smsUpEventDto.getContent()); zjkExpertItemBo.setRefuseCode(smsUpEventDto.getContent());
...@@ -1939,9 +2011,9 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -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); updateExtractionStatus(zjkExpertItem);
} }
...@@ -1953,11 +2025,11 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -1953,11 +2025,11 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
public void cancelExpert() { public void cancelExpert() {
String cancelExpert = remoteConfigService.selectConfigByKey("cancel_expert"); String cancelExpert = remoteConfigService.selectConfigByKey("cancel_expert");
if(StringUtils.isBlank(cancelExpert)){ if (StringUtils.isBlank(cancelExpert)) {
return; return;
} }
List<ZjkExpertItemVo> zjkExpertItemVos = baseMapper.selectCancle(cancelExpert); List<ZjkExpertItemVo> zjkExpertItemVos = baseMapper.selectCancle(cancelExpert);
if(CollectionUtil.isEmpty(zjkExpertItemVos)){ if (CollectionUtil.isEmpty(zjkExpertItemVos)) {
return; return;
} }
...@@ -1966,15 +2038,15 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -1966,15 +2038,15 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
List<ZjkExpertItem> zjkExpertItems = BeanUtil.copyToList(zjkExpertItemVos, ZjkExpertItem.class); List<ZjkExpertItem> zjkExpertItems = BeanUtil.copyToList(zjkExpertItemVos, ZjkExpertItem.class);
zjkExpertItems.forEach(s->s.setAcceptStatus("2")); zjkExpertItems.forEach(s -> s.setAcceptStatus("2"));
baseMapper.updateBatchById(zjkExpertItems); baseMapper.updateBatchById(zjkExpertItems);
List<ZjkItemExtreation> zjkItemExtreations = zjkItemExtreationMapper.selectBatchIds(listMap.keySet()); List<ZjkItemExtreation> zjkItemExtreations = zjkItemExtreationMapper.selectBatchIds(listMap.keySet());
zjkItemExtreations.forEach(s->{ zjkItemExtreations.forEach(s -> {
if(listMap.get(s.getId())!=null){ if (listMap.get(s.getId()) != null) {
List<ZjkExpertItemVo> cancleExpertList = listMap.get(s.getId()); 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); zjkItemExtreationMapper.updateBatchById(zjkItemExtreations);
...@@ -1989,7 +2061,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService { ...@@ -1989,7 +2061,7 @@ public class ZjkExpertItemServiceImpl implements IZjkExpertItemService {
ZjkItemExtreation zjkItemExtreation = zjkItemExtreationMapper.selectOne(new LambdaQueryWrapper<ZjkItemExtreation>() ZjkItemExtreation zjkItemExtreation = zjkItemExtreationMapper.selectOne(new LambdaQueryWrapper<ZjkItemExtreation>()
.eq(ZjkItemExtreation::getId, zjkReviewPhase.getItemExtreationId())); .eq(ZjkItemExtreation::getId, zjkReviewPhase.getItemExtreationId()));
if (zjkItemExtreation != null) { if (zjkItemExtreation != null) {
zjkItemExtreation.setExtractedSum(zjkItemExtreation.getExtractedSum() - 1); zjkItemExtreation.setExtractedSum((zjkItemExtreation.getExtractedSum() - 1) < 0 ? 0 : (zjkItemExtreation.getExtractedSum() - 1));
zjkItemExtreation.setExtractionStatus(1); zjkItemExtreation.setExtractionStatus(1);
zjkItemExtreationMapper.updateById(zjkItemExtreation); zjkItemExtreationMapper.updateById(zjkItemExtreation);
} }
......
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.service.DictService;
import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
...@@ -31,6 +32,7 @@ import java.util.Map; ...@@ -31,6 +32,7 @@ import java.util.Map;
public class ZjkExpertLogServiceImpl implements IZjkExpertLogService { public class ZjkExpertLogServiceImpl implements IZjkExpertLogService {
private final ZjkExpertLogMapper baseMapper; private final ZjkExpertLogMapper baseMapper;
private final DictService dictService;
/** /**
* 查询入库记录 * 查询入库记录
...@@ -66,7 +68,11 @@ public class ZjkExpertLogServiceImpl implements IZjkExpertLogService { ...@@ -66,7 +68,11 @@ public class ZjkExpertLogServiceImpl implements IZjkExpertLogService {
@Override @Override
public List<ZjkExpertLogVo> queryList(ZjkExpertLogBo bo) { public List<ZjkExpertLogVo> queryList(ZjkExpertLogBo bo) {
LambdaQueryWrapper<ZjkExpertLog> lqw = buildQueryWrapper(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) { private LambdaQueryWrapper<ZjkExpertLog> buildQueryWrapper(ZjkExpertLogBo bo) {
......
...@@ -32,6 +32,11 @@ public class ZjkExpertMajorServiceImpl implements IZjkExpertMajorService { ...@@ -32,6 +32,11 @@ public class ZjkExpertMajorServiceImpl implements IZjkExpertMajorService {
private final ZjkExpertMajorMapper baseMapper; private final ZjkExpertMajorMapper baseMapper;
@Override
public void saveBatch(List<ZjkExpertMajor> zjkExpertMajorList) {
baseMapper.insertBatch(zjkExpertMajorList);
}
/** /**
* 查询专家库 专业关系表 * 查询专家库 专业关系表
* *
......
...@@ -24,8 +24,11 @@ import org.dromara.zjk.mapper.ZjkExpertMapper; ...@@ -24,8 +24,11 @@ import org.dromara.zjk.mapper.ZjkExpertMapper;
import org.dromara.zjk.mapper.ZjkExpertMoneyConfigMapper; import org.dromara.zjk.mapper.ZjkExpertMoneyConfigMapper;
import org.dromara.zjk.mapper.ZjkExpertMoneyInfoMapper; import org.dromara.zjk.mapper.ZjkExpertMoneyInfoMapper;
import org.dromara.zjk.mapper.ZjkProductMapper; import org.dromara.zjk.mapper.ZjkProductMapper;
import org.dromara.zjk.service.IZjkReviewPhaseService;
import org.dromara.zjk.service.ZjkExpertMoneyInfoService; import org.dromara.zjk.service.ZjkExpertMoneyInfoService;
import org.dromara.zjk.utils.NumberGenerator; 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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -51,16 +54,23 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf ...@@ -51,16 +54,23 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf
@Resource @Resource
private ZjkExpertMoneyConfigMapper zjkExpertMoneyConfigMapper; private ZjkExpertMoneyConfigMapper zjkExpertMoneyConfigMapper;
@Resource
private IZjkReviewPhaseService zjkReviewPhaseService;
@Autowired
private StringCryptoUtil stringCryptoUtil;
@Override @Override
public ZjkExpertMoneyInfo queryById(Long moneyId) { public ZjkExpertMoneyInfo queryById(Long moneyId) {
return baseMapper.selectById(moneyId); return baseMapper.selectByIdEx(moneyId);
} }
@Override @Override
public TableDataInfo<ZjkExpertMoneyInfoVO> queryPageList(ZjkExpertMoneyInfoBo bo, PageQuery pageQuery) { public TableDataInfo<ZjkExpertMoneyInfo> queryPageList(ZjkExpertMoneyInfoBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ZjkExpertMoneyInfo> wrapper = buildQueryWrapper(bo);
Page<ZjkExpertMoneyInfoVO> result = baseMapper.selectMoneyInfoList(pageQuery.build(), bo); 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); return TableDataInfo.build(result);
} }
...@@ -182,7 +192,7 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf ...@@ -182,7 +192,7 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf
.eq(ZjkExpertMoneyInfo::getProductId, bo.getProductId()) .eq(ZjkExpertMoneyInfo::getProductId, bo.getProductId())
.eq(ZjkExpertMoneyInfo::getProductType, bo.getProductType()); .eq(ZjkExpertMoneyInfo::getProductType, bo.getProductType());
List<ZjkExpertMoneyInfo> zjkExpertMoneyInfos = baseMapper.selectList(wp); List<ZjkExpertMoneyInfo> zjkExpertMoneyInfos = baseMapper.selectList(wp);
if(!CollectionUtil.isEmpty(zjkExpertMoneyInfos)){ if (!CollectionUtil.isEmpty(zjkExpertMoneyInfos)) {
throw new ServiceException("该项目阶段下已经有专家录入了结算单不可重复录入!"); throw new ServiceException("该项目阶段下已经有专家录入了结算单不可重复录入!");
} }
...@@ -190,8 +200,8 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf ...@@ -190,8 +200,8 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf
add.setPaySn(NumberGenerator.generateUniqueNumber("fee", 8)); add.setPaySn(NumberGenerator.generateUniqueNumber("fee", 8));
assert add != null; assert add != null;
if(add.getStatus().equals(MoneySettlementStatusEnum.NO_SETTLEMENT.getCode())){ if (add.getStatus().equals(MoneySettlementStatusEnum.NO_SETTLEMENT.getCode())) {
add.setSettlementSn(NumberGenerator.generateUniqueNumber("stn",8)); add.setSettlementSn(NumberGenerator.generateUniqueNumber("stn", 8));
add.setSettlementDate(new Date()); add.setSettlementDate(new Date());
} }
String expertType = bo.getExpertType(); String expertType = bo.getExpertType();
...@@ -223,7 +233,7 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf ...@@ -223,7 +233,7 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf
throw new ServiceException("无效项目id"); throw new ServiceException("无效项目id");
} }
add.setProductName(zjkProduct.getProductName()); add.setProductName(zjkProduct.getProductName());
add.setReviewCount(String.valueOf(zjkReviewPhaseService.getReviewProductCountByExpertId(zjkExpert.getExpertId())));
boolean flag = baseMapper.insert(add) > 0; boolean flag = baseMapper.insert(add) > 0;
if (flag) { if (flag) {
bo.setMoneyId(add.getMoneyId()); bo.setMoneyId(add.getMoneyId());
...@@ -243,8 +253,8 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf ...@@ -243,8 +253,8 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf
ZjkExpertMoneyInfo update = MapstructUtils.convert(bo, ZjkExpertMoneyInfo.class); ZjkExpertMoneyInfo update = MapstructUtils.convert(bo, ZjkExpertMoneyInfo.class);
assert update != null; assert update != null;
if(update.getStatus().equals(MoneySettlementStatusEnum.NO_SETTLEMENT.getCode())){ if (update.getStatus().equals(MoneySettlementStatusEnum.NO_SETTLEMENT.getCode())) {
update.setSettlementSn(NumberGenerator.generateUniqueNumber("stn",8)); update.setSettlementSn(NumberGenerator.generateUniqueNumber("stn", 8));
update.setSettlementDate(new Date()); update.setSettlementDate(new Date());
} }
String expertType = bo.getExpertType(); String expertType = bo.getExpertType();
...@@ -304,18 +314,22 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf ...@@ -304,18 +314,22 @@ public class ZjkExpertMoneyInfoServiceImpl extends ServiceImpl<ZjkExpertMoneyInf
@Override @Override
public List<ZjkExpertMoneyInfo> getJsList(Long productId, Integer reviewSn, String expertId) { public List<ZjkExpertMoneyInfo> getJsList(Long productId, Integer reviewSn, String expertId) {
QueryWrapper<ZjkExpertMoneyInfo> wq = new QueryWrapper<>(); List<ZjkExpertMoneyInfo> res = baseMapper.selectJsList(productId, reviewSn, expertId);
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);
return res; return res;
} }
@Override @Override
public List<ZjkExpertVo> getExpertList(Long productId, Integer reviewSn) { public List<ZjkExpertVo> getExpertList(Long productId, Integer reviewSn) {
List<ZjkExpertVo> res = baseMapper.getExpertList(productId, reviewSn); List<ZjkExpertVo> res = baseMapper.getExpertList(productId, reviewSn);
return res; 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; package org.dromara.zjk.service.impl;
import cn.dev33.satoken.secure.BCrypt; import cn.dev33.satoken.secure.BCrypt;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
...@@ -12,16 +13,21 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; ...@@ -12,16 +13,21 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.constant.UserConstants; import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.domain.DateRange; 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.enums.BusinessStatusEnum;
import org.dromara.common.core.exception.ServiceException; 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.DateUtils;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; 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.excel.utils.ExcelUtil;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
...@@ -40,6 +46,7 @@ import org.dromara.workflow.api.domain.event.ProcessEvent; ...@@ -40,6 +46,7 @@ import org.dromara.workflow.api.domain.event.ProcessEvent;
import org.dromara.workflow.api.domain.event.ProcessTaskEvent; import org.dromara.workflow.api.domain.event.ProcessTaskEvent;
import org.dromara.zjk.annualInspection.annualInspectionAudit.domain.ZjkAnnualInspection; import org.dromara.zjk.annualInspection.annualInspectionAudit.domain.ZjkAnnualInspection;
import org.dromara.zjk.annualInspection.annualInspectionAudit.mapper.ZjkAnnualInspectionMapper; import org.dromara.zjk.annualInspection.annualInspectionAudit.mapper.ZjkAnnualInspectionMapper;
import org.dromara.zjk.config.SyncRemortUserConfig;
import org.dromara.zjk.domain.*; import org.dromara.zjk.domain.*;
import org.dromara.zjk.domain.bo.ZjkCreditUserBo; import org.dromara.zjk.domain.bo.ZjkCreditUserBo;
import org.dromara.zjk.domain.bo.ZjkExpertBo; import org.dromara.zjk.domain.bo.ZjkExpertBo;
...@@ -47,11 +54,8 @@ import org.dromara.zjk.domain.bo.ZjkProjectExpertItemBo; ...@@ -47,11 +54,8 @@ import org.dromara.zjk.domain.bo.ZjkProjectExpertItemBo;
import org.dromara.zjk.domain.dto.ProfessorsDto; import org.dromara.zjk.domain.dto.ProfessorsDto;
import org.dromara.zjk.domain.vo.*; import org.dromara.zjk.domain.vo.*;
import org.dromara.zjk.enums.*; 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.expertAwards.service.IZjkExpertAwardsService;
import org.dromara.zjk.expert.expertPaper.domain.ZjkExpertPaper;
import org.dromara.zjk.expert.expertPaper.service.IZjkExpertPaperService; 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.expert.expertPatent.service.IZjkExpertPatentService;
import org.dromara.zjk.mapper.*; import org.dromara.zjk.mapper.*;
import org.dromara.zjk.service.*; import org.dromara.zjk.service.*;
...@@ -70,13 +74,13 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -70,13 +74,13 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -132,26 +136,28 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -132,26 +136,28 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
private final ZjkExpertItemMapper zjkExpertItemMapper; private final ZjkExpertItemMapper zjkExpertItemMapper;
private final ZjkCreditMapper zjkCreditMapper; private final ZjkCreditMapper zjkCreditMapper;
private final ZjkExpertMoneyConfigMapper zjkExpertMoneyConfigMapper;
// 用户服务 远程调用 // 用户服务 远程调用
@DubboReference(timeout=5000) @DubboReference(timeout = 5000)
private RemoteUserService remoteUserService; private RemoteUserService remoteUserService;
@DubboReference(timeout=5000) @DubboReference(timeout = 5000)
private RemoteDeptService remoteDeptService; private RemoteDeptService remoteDeptService;
@DubboReference(timeout=5000) @DubboReference(timeout = 5000)
private RemoteConfigService remoteConfigService; private RemoteConfigService remoteConfigService;
@DubboReference(timeout=5000) @DubboReference(timeout = 5000)
private RemoteFileService remoteFileService; private RemoteFileService remoteFileService;
@DubboReference(timeout=20000) @DubboReference(timeout = 20000)
private RemoteWorkflowService remoteWorkflowService; private RemoteWorkflowService remoteWorkflowService;
@DubboReference(stub = "true") @DubboReference(stub = "true")
private final RemoteMessageService remoteMessageService; private final RemoteMessageService remoteMessageService;
private final ZjkReviewPhaseMapper zjkReviewPhaseMapper; private final ZjkReviewPhaseMapper zjkReviewPhaseMapper;
private final ZjkProductMapper zjkProductMapper; private final ZjkProductMapper zjkProductMapper;
...@@ -162,8 +168,8 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -162,8 +168,8 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
@Autowired @Autowired
private StringCryptoUtil stringCryptoUtil; private StringCryptoUtil stringCryptoUtil;
// @Value("${api.type.sxzwfw.online-third-professorList}") @Resource
private String professorList; private SyncRemortUserConfig syncRemortUserConfig;
/** /**
...@@ -187,7 +193,20 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -187,7 +193,20 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
ZjkExpertHistory zjkExpertHistory = zjkExpertHistoryMapper.selectOne(new LambdaQueryWrapper<ZjkExpertHistory>() ZjkExpertHistory zjkExpertHistory = zjkExpertHistoryMapper.selectOne(new LambdaQueryWrapper<ZjkExpertHistory>()
.eq(ZjkExpertHistory::getExpectId, zjkExpertVo.getExpertId()).eq(ZjkExpertHistory::getDeleteFlag, UserConstants.DEL_FLAG_NORMAL)); .eq(ZjkExpertHistory::getExpectId, zjkExpertVo.getExpertId()).eq(ZjkExpertHistory::getDeleteFlag, UserConstants.DEL_FLAG_NORMAL));
if (zjkExpertHistory != null && zjkExpertVo.getApprovalType() == ApprovalTypeEnum.CHANGESTO_INFORMATION.getCode()) { 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; return zjkExpertVo;
} }
...@@ -207,6 +226,10 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -207,6 +226,10 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
} else { } else {
lqw.eq(ZjkExpert::getStatus, bo.getStatus()); 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, true, ZjkExpert::getStatus);
lqw.orderBy(true, false, ZjkExpert::getUpdateTime); lqw.orderBy(true, false, ZjkExpert::getUpdateTime);
Page<ZjkExpertVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<ZjkExpertVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
...@@ -219,12 +242,21 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -219,12 +242,21 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
*/ */
@Override @Override
public TableDataInfo<ZjkExpertVo> expertList(ZjkExpertBo bo, PageQuery pageQuery) { 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); Page<ZjkExpertVo> result = baseMapper.expertList(pageQuery.build(), bo);
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
@Override @Override
public TableDataInfo<ZjkExpertVo> expertInquiry(ZjkExpertBo bo, PageQuery pageQuery) { 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); Page<ZjkExpertVo> result = baseMapper.expertInquiry(pageQuery.build(), bo);
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
...@@ -250,12 +282,16 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -250,12 +282,16 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
*/ */
@Override @Override
public List<ZjkExpertVo> exportList(ZjkExpertBo bo) { public List<ZjkExpertVo> exportList(ZjkExpertBo bo) {
// 2025-08-11 搜索时敏感字段需先加密
String encryptContact = stringCryptoUtil.encryptField(bo.getContact());
bo.setContact(encryptContact);
LambdaQueryWrapper<ZjkExpert> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<ZjkExpert> lqw = buildQueryWrapper(bo);
if (StringUtils.isNotBlank(bo.getExpertIds())) { if (StringUtils.isNotBlank(bo.getExpertIds())) {
List<String> expertIds= List.of(bo.getExpertIds().split(",")); List<String> expertIds = List.of(bo.getExpertIds().split(","));
if (CollectionUtils.isNotEmpty(expertIds)) { if (CollectionUtils.isNotEmpty(expertIds)) {
lqw.in(ZjkExpert::getExpertId, expertIds); lqw.in(ZjkExpert::getExpertId, expertIds);
} }
} }
lqw.eq(ZjkExpert::getStatus, ZjkExpertTypeEnum.NORMAL.getCode()); lqw.eq(ZjkExpert::getStatus, ZjkExpertTypeEnum.NORMAL.getCode());
lqw.orderBy(true, true, ZjkExpert::getStatus); lqw.orderBy(true, true, ZjkExpert::getStatus);
...@@ -283,7 +319,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -283,7 +319,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(ZjkExpertBo bo) { public Boolean insertByBo(ZjkExpertBo bo) {
try{ try {
// 状态不为空且是暂存的时候 // 状态不为空且是暂存的时候
if (bo.getStatus() != null && bo.getStatus() == ZjkExpertTypeEnum.STAGING.getCode()) { if (bo.getStatus() != null && bo.getStatus() == ZjkExpertTypeEnum.STAGING.getCode()) {
bo.setStatus(ZjkExpertTypeEnum.STAGING.getCode()); bo.setStatus(ZjkExpertTypeEnum.STAGING.getCode());
...@@ -299,7 +335,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -299,7 +335,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
.eq(ZjkExpert::getUserId, userId) .eq(ZjkExpert::getUserId, userId)
.eq(ZjkExpert::getDeleteFlag, UserConstants.DEL_FLAG_NORMAL) .eq(ZjkExpert::getDeleteFlag, UserConstants.DEL_FLAG_NORMAL)
); );
if(existingExpert!=null){ if (existingExpert != null) {
//解密 //解密
decryptIfNotBlank(existingExpert::getContact, existingExpert::setContact); decryptIfNotBlank(existingExpert::getContact, existingExpert::setContact);
decryptIfNotBlank(existingExpert::getIdCard, existingExpert::setIdCard); decryptIfNotBlank(existingExpert::getIdCard, existingExpert::setIdCard);
...@@ -402,23 +438,24 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -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( Map<String, Object> variables = Map.of(
"entity", Map.of( "entity", Map.of(
"approvalType",bo.getApprovalType() "approvalType", bo.getApprovalType()
) )
); );
Map<String, Object> startedWorkFlowMap = remoteWorkflowService.startWorkFlow(String.valueOf(addExpert.getExpertId()), "zjk_expert", variables); 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)); 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())); remoteWorkflowService.completeTask(startedWorkFlowMap.get("taskId").toString(), new ArrayList<>(List.of("1")), null, String.valueOf(addExpert.getExpertId()));
} }
refreshHmac(addExpert.getExpertId()); refreshHmac(addExpert.getExpertId());
}catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
throw new ServiceException(e.getMessage()); throw new ServiceException(e.getMessage());
} }
return true; return true;
} }
private void decryptIfNotBlank(Supplier<String> getter, Consumer<String> setter) { private void decryptIfNotBlank(Supplier<String> getter, Consumer<String> setter) {
String value = getter.get(); String value = getter.get();
if (value != null && !value.isBlank()) { if (value != null && !value.isBlank()) {
...@@ -428,6 +465,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -428,6 +465,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
/** /**
* 校验专家以及专家附属信息的hmac * 校验专家以及专家附属信息的hmac
*
* @param expertId * @param expertId
*/ */
@Override @Override
...@@ -464,7 +502,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -464,7 +502,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
// 生成哈希与 HMAC 值(如需加密服务调用,请替换此行) // 生成哈希与 HMAC 值(如需加密服务调用,请替换此行)
String hash = ObjectHashGenerator.generateHash(composite); String hash = ObjectHashGenerator.generateHash(composite);
String base64 = Base64.getEncoder().encodeToString(hash.getBytes(StandardCharsets.UTF_8)); String base64 = Base64.getEncoder().encodeToString(hash.getBytes(StandardCharsets.UTF_8));
String hmac = hmacClient.calculateHmac(base64); String hmac = hmacClient.calculateHmac(base64);
// String hmac = base64; // String hmac = base64;
// 更新专家主表的 HMAC 字段 // 更新专家主表的 HMAC 字段
...@@ -478,6 +516,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -478,6 +516,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
log.error("生成专家 HMAC 失败,专家ID: {}", expertId, e); log.error("生成专家 HMAC 失败,专家ID: {}", expertId, e);
} }
} }
@Override @Override
public Map<String, Object> getExpertObjectById(Long expertId) { public Map<String, Object> getExpertObjectById(Long expertId) {
try { try {
...@@ -529,13 +568,27 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -529,13 +568,27 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
return true; return true;
} }
List<ZjkExpert> zjkExpertList = new ArrayList<>(); List<ZjkExpert> zjkExpertList = new ArrayList<>();
List<ZjkExpertMajor> zjkExpertMajors = new ArrayList<>();
list.forEach(a -> { list.forEach(a -> {
ZjkExpert add = MapstructUtils.convert(a, ZjkExpert.class); ZjkExpert add = MapstructUtils.convert(a, ZjkExpert.class);
add.setApprovalType(ApprovalTypeEnum.EXPERTSAPPLY.getCode()); add.setApprovalType(ApprovalTypeEnum.EXPERTSAPPLY.getCode());
add.setStatus(ZjkExpertTypeEnum.NORMAL.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); zjkExpertList.add(add);
}); });
baseMapper.insertBatch(zjkExpertList); 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<ZjkCreditUser> zjkCreditUserList = new ArrayList<>();
List<ZjkCredit> zjkCreditList = new ArrayList<>(); List<ZjkCredit> zjkCreditList = new ArrayList<>();
for (ZjkExpert zjkExpert : zjkExpertList) { for (ZjkExpert zjkExpert : zjkExpertList) {
...@@ -554,7 +607,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -554,7 +607,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
} }
zjkCreditUserMapper.insertBatch(zjkCreditUserList); zjkCreditUserMapper.insertBatch(zjkCreditUserList);
zjkCreditMapper.insertBatch(zjkCreditList); zjkCreditMapper.insertBatch(zjkCreditList);
return true; return true;
} }
/** /**
...@@ -599,80 +652,80 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -599,80 +652,80 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
ZjkExpert add = MapstructUtils.convert(bo, ZjkExpert.class); ZjkExpert add = MapstructUtils.convert(bo, ZjkExpert.class);
try { try {
ZjkExpert zjkExpertInfo = baseMapper.selectById(bo.getExpertId()); ZjkExpert zjkExpertInfo = baseMapper.selectById(bo.getExpertId());
// 如果状态为通过并且 为专家申请 设置审批时间 // 如果状态为通过并且 为专家申请 设置审批时间
if (add.getStatus() == ZjkExpertTypeEnum.NORMAL.getCode() && zjkExpertInfo.getApprovalType() == ApprovalTypeEnum.EXPERTSAPPLY.getCode()) { if (add.getStatus() == ZjkExpertTypeEnum.NORMAL.getCode() && zjkExpertInfo.getApprovalType() == ApprovalTypeEnum.EXPERTSAPPLY.getCode()) {
//同步信用用户 查询当前专家是否存在数据 存在不进行处理 //同步信用用户 查询当前专家是否存在数据 存在不进行处理
ZjkCreditUser zjkCreditUser = zjkCreditUserMapper.selectOne(new LambdaQueryWrapper<ZjkCreditUser>() ZjkCreditUser zjkCreditUser = zjkCreditUserMapper.selectOne(new LambdaQueryWrapper<ZjkCreditUser>()
.eq(ZjkCreditUser::getUserId, zjkExpertInfo.getUserId()) .eq(ZjkCreditUser::getUserId, zjkExpertInfo.getUserId())
.eq(ZjkCreditUser::getExpertId, zjkExpertInfo.getExpertId())); .eq(ZjkCreditUser::getExpertId, zjkExpertInfo.getExpertId()));
if (zjkCreditUser == null) { if (zjkCreditUser == null) {
ZjkCreditUserBo zjkCreditUserBo = new ZjkCreditUserBo(); ZjkCreditUserBo zjkCreditUserBo = new ZjkCreditUserBo();
zjkCreditUserBo.setExpertId(zjkExpertInfo.getExpertId()); zjkCreditUserBo.setExpertId(zjkExpertInfo.getExpertId());
zjkCreditUserBo.setUserId(zjkExpertInfo.getUserId()); zjkCreditUserBo.setUserId(zjkExpertInfo.getUserId());
zjkCreditUserBo.setChangeTime(new Date()); zjkCreditUserBo.setChangeTime(new Date());
zjkCreditUserService.insertByBo(zjkCreditUserBo); zjkCreditUserService.insertByBo(zjkCreditUserBo);
//新增一条信用记录 //新增一条信用记录
ZjkCredit zjkCredit = new ZjkCredit(); ZjkCredit zjkCredit = new ZjkCredit();
zjkCredit.setExpertId(zjkExpertInfo.getExpertId()); zjkCredit.setExpertId(zjkExpertInfo.getExpertId());
zjkCredit.setCreditCount(100L); zjkCredit.setCreditCount(100L);
zjkCredit.setUserId(zjkExpertInfo.getUserId()); zjkCredit.setUserId(zjkExpertInfo.getUserId());
zjkCredit.setCredit(+100L); zjkCredit.setCredit(+100L);
zjkCreditMapper.insert(zjkCredit); zjkCreditMapper.insert(zjkCredit);
add.setApprovalTime(new Date()); add.setApprovalTime(new Date());
}
} }
} // 入库记录
// 入库记录 ZjkExpertLog expertLog = new ZjkExpertLog();
ZjkExpertLog expertLog = new ZjkExpertLog(); expertLog.setExpertId(zjkExpertInfo.getExpertId());
expertLog.setExpertId(zjkExpertInfo.getExpertId()); expertLog.setName(zjkExpertInfo.getExpertName());
expertLog.setName(zjkExpertInfo.getExpertName()); expertLog.setContactInfo(zjkExpertInfo.getContact());
expertLog.setContactInfo(zjkExpertInfo.getContact()); expertLog.setOrganization(zjkExpertInfo.getWorkUnit());
expertLog.setOrganization(zjkExpertInfo.getWorkUnit()); expertLog.setPosition(zjkExpertInfo.getDuty());
expertLog.setPosition(zjkExpertInfo.getDuty()); expertLog.setEntryResult(bo.getStatus() == 2 ? ResultTypeEnum.SUCCESS.getCode() : ResultTypeEnum.ERROR.getCode());
expertLog.setEntryResult(bo.getStatus() == 2 ? ResultTypeEnum.SUCCESS.getCode() : ResultTypeEnum.ERROR.getCode()); expertLog.setApplicationTime(zjkExpertInfo.getUpdateTime());
expertLog.setApplicationTime(zjkExpertInfo.getUpdateTime()); expertLog.setRejectionReason(bo.getRemark());
expertLog.setRejectionReason(bo.getRemark()); zjkExpertLogMapper.insert(expertLog);
zjkExpertLogMapper.insert(expertLog); // 审批流程记录
// 审批流程记录 zjkApprovalProcessLogsService.saveCommonApprovalRecord(bo.getStatus() == ZjkExpertTypeEnum.NORMAL.getCode() ? ApprovalProcessTypeEnum.APPROVAL_PASSED.getCode() : ApprovalProcessTypeEnum.APPROVAL_REFUSED.getCode(),
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(),
zjkExpertInfo.getApprovalType() == ApprovalTypeEnum.EXPERTSAPPLY.getCode() ? ApprovalProcessBusinessTypeEnum.Expert_warehousing.getCode() : ApprovalProcessBusinessTypeEnum.CHANGES_EXPERT_INFORMATION.getCode(), bo.getRemark());
bo.getRemark()); scheduledExecutorService.schedule(() -> {
scheduledExecutorService.schedule(() -> { remoteMessageService.publishMessage(zjkExpertInfo.getUserId(), bo.getStatus() == ZjkExpertTypeEnum.NORMAL.getCode() ? "您的专家信息审核通已通过" : "您的专家信息审核被驳回");
remoteMessageService.publishMessage(zjkExpertInfo.getUserId(), bo.getStatus() == ZjkExpertTypeEnum.NORMAL.getCode() ? "您的专家信息审核通已通过" : "您的专家信息审核被驳回"); }, 3, TimeUnit.SECONDS);
}, 3, TimeUnit.SECONDS); ZjkExpertHistory zjkExpertHistory = zjkExpertHistoryMapper.selectOne(new LambdaQueryWrapper<ZjkExpertHistory>().eq(ZjkExpertHistory::getExpectId, zjkExpertInfo.getExpertId()).eq(ZjkExpertHistory::getDeleteFlag, UserConstants.DEL_FLAG_NORMAL));
ZjkExpertHistory zjkExpertHistory = zjkExpertHistoryMapper.selectOne(new LambdaQueryWrapper<ZjkExpertHistory>().eq(ZjkExpertHistory::getExpectId, zjkExpertInfo.getExpertId()).eq(ZjkExpertHistory::getDeleteFlag, UserConstants.DEL_FLAG_NORMAL)); if (zjkExpertHistory != null) {
if (zjkExpertHistory != null) { zjkExpertHistoryMapper.deleteById(zjkExpertHistory.getId());
zjkExpertHistoryMapper.deleteById(zjkExpertHistory.getId()); }
} // 根据审核状态走不同的工作流 1. 根据业务 id 获取相关信息
// 根据审核状态走不同的工作流 1. 根据业务 id 获取相关信息
Map<String, Object> taskInfoMap = remoteWorkflowService.getTaskInfoByBusinessKey(String.valueOf(zjkExpertInfo.getExpertId())); 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()){ if (bo.getStatus() == ZjkExpertTypeEnum.NORMAL.getCode()) {
log.info("姓名:{}手机号:{}身份证号:{}审批通过",zjkExpertInfo.getExpertName(),zjkExpertInfo.getContact(),zjkExpertInfo.getIdCard()); log.info("姓名:{}手机号:{}身份证号:{}审批通过", zjkExpertInfo.getExpertName(), zjkExpertInfo.getContact(), zjkExpertInfo.getIdCard());
// 创建嵌套 Map // 创建嵌套 Map
Map<String, Object> result = Map.of( Map<String, Object> result = Map.of(
"entity", Map.of( "entity", Map.of(
"status",bo.getStatus(), "status", bo.getStatus(),
"approvalType",zjkExpertInfo.getApprovalType() "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 { } else {
log.info("姓名:{}手机号:{}身份证号:{}审批驳回",zjkExpertInfo.getExpertName(),zjkExpertInfo.getContact(),zjkExpertInfo.getIdCard()); log.info("姓名:{}手机号:{}身份证号:{}审批驳回", zjkExpertInfo.getExpertName(), zjkExpertInfo.getContact(), zjkExpertInfo.getIdCard());
// 获取可驳回的流程 id // 获取可驳回的流程 id
String targetActivityId = remoteWorkflowService.getNodeList(taskInfoMap.get("processInstanceId").toString()); 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()); 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); log.info("姓名:{} 手机号:{} 身份证号:{} 驳回状态:{}", zjkExpertInfo.getExpertName(), zjkExpertInfo.getContact(), zjkExpertInfo.getIdCard(), backResult);
} }
boolean b = baseMapper.updateStatusById(add) > 0; boolean b = baseMapper.updateStatusById(add) > 0;
refreshHmac(zjkExpertInfo.getExpertId()); refreshHmac(zjkExpertInfo.getExpertId());
return b; return b;
} catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
throw new ServiceException("系统异常,请联系管理员处理"); throw new ServiceException("系统异常,请联系管理员处理");
} }
...@@ -772,7 +825,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -772,7 +825,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
userWrapper.ge(ZjkCreditUser::getRewardId, 4); userWrapper.ge(ZjkCreditUser::getRewardId, 4);
List<ZjkCreditUser> zjkCreditUsers = zjkCreditUserMapper.selectList(userWrapper); List<ZjkCreditUser> zjkCreditUsers = zjkCreditUserMapper.selectList(userWrapper);
List<Long> collect2 = zjkCreditUsers.stream().map(ZjkCreditUser::getExpertId).collect(Collectors.toList()); List<Long> collect2 = zjkCreditUsers.stream().map(ZjkCreditUser::getExpertId).collect(Collectors.toList());
log.info("黑名单专家结果集{}",collect2); log.info("黑名单专家结果集{}", collect2);
if (collect2 != null && collect2.size() > 0) { if (collect2 != null && collect2.size() > 0) {
expertIds.addAll(collect2); expertIds.addAll(collect2);
} }
...@@ -794,9 +847,9 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -794,9 +847,9 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
LambdaQueryWrapper<ZjkExpert> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<ZjkExpert> lqw = Wrappers.lambdaQuery();
//回避专家 //回避专家
if(CollectionUtils.isNotEmpty(zjkProjectExpertItemBo.getExpertIds())){ if (CollectionUtils.isNotEmpty(zjkProjectExpertItemBo.getExpertIds())) {
expertIds.addAll(zjkProjectExpertItemBo.getExpertIds()); expertIds.addAll(zjkProjectExpertItemBo.getExpertIds());
log.info("回避专家结果集{}",collect2); log.info("回避专家结果集{}", collect2);
} }
//请假过滤,获取在开标时间段内请假的专家并过滤 //请假过滤,获取在开标时间段内请假的专家并过滤
LambdaQueryWrapper<ZjkLeave> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ZjkLeave> queryWrapper = new LambdaQueryWrapper<>();
...@@ -808,20 +861,20 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -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()); Set<String> set = zjkLeaveVos.stream().filter(s -> s.getCreateBy() != null).map(ZjkLeaveVo::getCreateBy).collect(Collectors.toSet());
if (CollectionUtil.isNotEmpty(set)) { if (CollectionUtil.isNotEmpty(set)) {
lqw.notIn(ZjkExpert::getUserId, set); lqw.notIn(ZjkExpert::getUserId, set);
log.info("长期请假用户集合{}",set); log.info("长期请假用户集合{}", set);
} }
if (CollectionUtil.isNotEmpty(zjkProjectExpertItemBo.getExtractArea())) { if (CollectionUtil.isNotEmpty(zjkProjectExpertItemBo.getExtractArea())) {
if (zjkProjectExpertItemBo.getExtractArea().size() == 1) { if (zjkProjectExpertItemBo.getExtractArea().size() == 1) {
lqw.eq(ZjkExpert::getProvince, zjkProjectExpertItemBo.getProvinces()); lqw.eq(ZjkExpert::getProvince, zjkProjectExpertItemBo.getProvinces());
log.info("抽取回避 省市区 --省{}",zjkProjectExpertItemBo.getProvinces()); log.info("抽取回避 省市区 --省{}", zjkProjectExpertItemBo.getProvinces());
} }
if (zjkProjectExpertItemBo.getExtractArea().size() == 2) { if (zjkProjectExpertItemBo.getExtractArea().size() == 2) {
lqw.eq(ZjkExpert::getCity, zjkProjectExpertItemBo.getProvinces()); lqw.eq(ZjkExpert::getCity, zjkProjectExpertItemBo.getProvinces());
log.info("抽取回避 省市区 --市{}",zjkProjectExpertItemBo.getProvinces()); log.info("抽取回避 省市区 --市{}", zjkProjectExpertItemBo.getProvinces());
} }
if (zjkProjectExpertItemBo.getExtractArea().size() == 3) { if (zjkProjectExpertItemBo.getExtractArea().size() == 3) {
lqw.eq(ZjkExpert::getArea, zjkProjectExpertItemBo.getProvinces()); lqw.eq(ZjkExpert::getArea, zjkProjectExpertItemBo.getProvinces());
log.info("抽取回避 省市区 --区{}",zjkProjectExpertItemBo.getProvinces()); log.info("抽取回避 省市区 --区{}", zjkProjectExpertItemBo.getProvinces());
} }
} }
if (zjkProjectExpertItemBo.getZjkReviewPhase() != null && zjkProjectExpertItemBo.getZjkReviewPhase().getParentId() != null) { if (zjkProjectExpertItemBo.getZjkReviewPhase() != null && zjkProjectExpertItemBo.getZjkReviewPhase().getParentId() != null) {
...@@ -838,7 +891,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -838,7 +891,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
if (CollectionUtil.isNotEmpty(zjkReviewPhases)) { if (CollectionUtil.isNotEmpty(zjkReviewPhases)) {
List<Long> collect = zjkReviewPhases.stream().map(ZjkReviewPhase::getId).collect(Collectors.toList()); List<Long> collect = zjkReviewPhases.stream().map(ZjkReviewPhase::getId).collect(Collectors.toList());
collect1.addAll(collect); collect1.addAll(collect);
log.info("项目请假专家集合{}",collect); log.info("项目请假专家集合{}", collect);
} }
LambdaQueryWrapper<ZjkExpertItem> lambdasQuery = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ZjkExpertItem> lambdasQuery = new LambdaQueryWrapper<>();
...@@ -853,7 +906,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -853,7 +906,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
.collect(Collectors.toList()); .collect(Collectors.toList());
zjkProjectExpertItemBo.setExpertIds(collect); zjkProjectExpertItemBo.setExpertIds(collect);
expertIds.addAll(collect); expertIds.addAll(collect);
log.info("发送通知结果集{}",collect); log.info("发送通知结果集{}", collect);
} }
} }
...@@ -870,10 +923,10 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -870,10 +923,10 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
.collect(Collectors.toList()); .collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(idList)) { if (CollectionUtil.isNotEmpty(idList)) {
List<ZjkExpertItemVo> zjkExpertItemVos = zjkExpertItemMapper.selectBatchByReviewIds(idList); List<ZjkExpertItemVo> zjkExpertItemVos = zjkExpertItemMapper.selectBatchByReviewIds(idList);
if(CollectionUtil.isNotEmpty(zjkExpertItemVos)){ if (CollectionUtil.isNotEmpty(zjkExpertItemVos)) {
List<Long> expertIdList = zjkExpertItemVos.stream().map(ZjkExpertItemVo::getExpertId).toList(); List<Long> expertIdList = zjkExpertItemVos.stream().map(ZjkExpertItemVo::getExpertId).toList();
expertIds.addAll(expertIdList); expertIds.addAll(expertIdList);
log.info("屏蔽同天评审专家集{}",expertIdList); log.info("屏蔽同天评审专家集{}", expertIdList);
} }
} }
} }
...@@ -906,7 +959,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -906,7 +959,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
} }
if (CollectionUtil.isNotEmpty(unit)) { if (CollectionUtil.isNotEmpty(unit)) {
lqw.notIn(ZjkExpert::getWorkUnit, unit); lqw.notIn(ZjkExpert::getWorkUnit, unit);
log.info("屏蔽本单位 {}",unit); log.info("屏蔽本单位 {}", unit);
} }
lqw.eq(ZjkExpert::getStatus, 2); lqw.eq(ZjkExpert::getStatus, 2);
...@@ -918,7 +971,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -918,7 +971,7 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
); );
if (CollectionUtil.isNotEmpty(expertIds)) { if (CollectionUtil.isNotEmpty(expertIds)) {
lqw.notIn(ZjkExpert::getExpertId, expertIds); lqw.notIn(ZjkExpert::getExpertId, expertIds);
log.info("排除全部专家集合{}",expertIds); log.info("排除全部专家集合{}", expertIds);
} }
return baseMapper.selectVoList(lqw); return baseMapper.selectVoList(lqw);
} }
...@@ -981,11 +1034,13 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -981,11 +1034,13 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public List<String> imports(MultipartFile file) { public R<Void> imports(MultipartFile file) {
try { try {
InputStream inputStream = file.getInputStream(); 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() List<String> idCards = zjkExpertVos.stream()
.map(ZjkExpertBo::getIdCard) .map(ZjkExpertBo::getIdCard)
...@@ -1005,7 +1060,41 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -1005,7 +1060,41 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
// 如果存在重复的身份证号则提示,剔除之后再次导入 // 如果存在重复的身份证号则提示,剔除之后再次导入
if (!CollUtil.isEmpty(existingIdCards)) { 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<>(); List<RemoteUserBo> remoteUserBoList = new ArrayList<>();
...@@ -1065,14 +1154,29 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -1065,14 +1154,29 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
if (userId != null) { if (userId != null) {
expert.setUserId(userId); 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); insertList(filteredZjkExpertVos);
} catch (Exception e) { } catch (IOException e) {
e.printStackTrace(); log.error("导入发票信息失败,{}", e.getMessage());
throw new ServiceException("导入失败请联系管理员"); throw new ServiceException("导入失败请联系管理员");
} }
return new ArrayList<>(); return R.ok();
} }
@Override @Override
...@@ -1208,139 +1312,328 @@ public class ZjkExpertServiceImpl implements IZjkExpertService { ...@@ -1208,139 +1312,328 @@ public class ZjkExpertServiceImpl implements IZjkExpertService {
return baseMapper.getUserIdByPhone(tel); return baseMapper.getUserIdByPhone(tel);
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void fetchRemoteProfessors() { public SyncUserReturnVO fetchRemoteProfessors() {
// 初始页面参数 SyncUserReturnVO result = null;
int currentPage = 1; int syncCount = 0; // 审批局获取的用户总数
int pageSize = 10; // 每页10条数据 int actualNum = 0; // 实际需要同步的用户数
ProfessorsDto allProfessorsDto = new ProfessorsDto(); // 用于存储所有请求到的数据
int totalPage = 1; // 默认总页数为1
try { try {
ObjectMapper objectMapper = new ObjectMapper(); // 1. 获取所有远程专家数据
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); List<ProfessorsInfo> allProfessors = fetchAllRemoteProfessors();
syncCount = allProfessors.size();
// 使用循环动态获取每一页数据 log.info("审批局需要同步的总用户量为: {}", syncCount);
while (currentPage <= totalPage) {
String url = professorList + "?pageNumber=" + currentPage + "&pageSize=" + pageSize; // 2. 过滤出需要同步的专家数据(去重)
String response = HttpUtil.createGet(url).execute().body(); List<ProfessorsInfo> filteredProfessors = filterNeedSyncProfessors(allProfessors);
// 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\"}}"; actualNum = filteredProfessors.size();
JSONObject jsonResponse = JSON.parseObject(response); log.info("审批局去重后需要同步的用户量为: {}", actualNum);
if (!"00000".equals(jsonResponse.getString("code"))) { // 3. 处理并同步过滤后的专家数据
break; if (actualNum > 0) {
} processAndSyncProfessors(filteredProfessors);
}
log.info("成功同步 {} 条专家数据", actualNum);
// 获取最里面的 "data" 并解密 result = new SyncUserReturnVO();
String innerData = AesUtils.decrypt(jsonResponse.getJSONObject("data").getString("data"), "KlzY40Xw2wywV9Me"); result.setStatu(true);
result.setMsg("数据同步完成,共新增 " + actualNum + " 条专家数据");
} catch (Exception e) {
log.error("同步远程专家数据失败", e);
throw new ServiceException("同步远程专家数据失败强联系管理员!");
}
// 将响应数据转化为 ProfessorsDto 对象 return result;
ProfessorsDto dto = objectMapper.readValue(innerData, ProfessorsDto.class); }
/**
* 从远程接口获取所有专家数据
*/
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) { // 解密并解析第一页数据
// 初始化分页信息 String firstInnerData = AesUtils.decrypt(firstJsonResponse.getJSONObject("data").getString("data"), "KlzY40Xw2wywV9Me");
allProfessorsDto.setTotalPage(dto.getTotalPage()); log.info("firstInnerData: {}", firstInnerData);
allProfessorsDto.setTotalRow(dto.getTotalRow()); ObjectMapper objectMapper = new ObjectMapper();
allProfessorsDto.setPageSize(dto.getPageSize()); 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);
// 合并数据 futures.add(future);
allProfessorsDto.getList().addAll(dto.getList()); }
totalPage = dto.getTotalPage(); // 更新总页数
currentPage++; // 获取下一页数据
}
// 数据拷贝转化 // 收集所有页面的数据
List<ZjkExpertBo> zjkExpertBos = allProfessorsDto.getList().stream() CompletableFuture<Void> allFutures = CompletableFuture.allOf(
.map(professor -> { futures.toArray(new CompletableFuture[0])
ZjkExpertBo expertBo = new ZjkExpertBo(); );
BeanUtils.copyProperties(professor, expertBo);
return expertBo;
})
.toList();
// 提取身份证号 CompletableFuture<List<ProfessorsInfo>> allPageDataFuture = allFutures.thenApply(v ->
List<String> idCards = zjkExpertBos.stream() futures.stream()
.map(ZjkExpertBo::getIdCard) .map(CompletableFuture::join)
.filter(idCard -> idCard != null && !idCard.trim().isEmpty()) .flatMap(List::stream)
.collect(Collectors.toList()); .collect(Collectors.toList())
);
// 查询已存在的身份证号 List<ProfessorsInfo> allProfessors = allPageDataFuture.get(); // 获取所有数据
List<String> existingIdCards = baseMapper.selectExistingIdCards(idCards); // 关闭线程池
executorService.shutdown();
// 过滤重复记录并设置额外字段 return allProfessors;
List<ZjkExpertBo> filteredZjkExpertBos = zjkExpertBos.stream() }
.filter(expert -> !existingIdCards.contains(expert.getIdCard()) && StringUtils.isNotBlank(expert.getIdCard()))
.peek(expert -> {
expert.setApprovalTime(new Date()); // 设置审批时间
// 提取出生日期 /**
String idCard = expert.getIdCard(); * 过滤出需要同步的专家数据(去重处理)
if (idCard.length() == 18) { */
try { private List<ProfessorsInfo> filterNeedSyncProfessors(List<ProfessorsInfo> allProfessors) {
String birthDateString = idCard.substring(6, 14); // 构建 name + idCard 的组合标识用于去重
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); List<String> checkKeys = allProfessors.stream()
expert.setBirthDate(sdf.parse(birthDateString)); .map(item -> item.getExpertName() + "|" + item.getIdCard())
} catch (ParseException e) { .collect(Collectors.toList());
throw new RuntimeException("Invalid ID card format", e);
} // 查询数据库中已存在的 name + idCard 组合
} Set<String> existingKeys = new HashSet<>(baseMapper.selectExistingNameAndIdCardPairs(checkKeys));
})
.toList(); // 过滤出数据库中不存在的专家数据
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( private void processAndSyncProfessors(List<ProfessorsInfo> filteredProfessors) throws Exception {
remoteConfigService.selectConfigByKey("expert.import.password"), // 数据转换处理
"k6psy7kafT%U" List<ZjkExpertBo> zjkExpertBos = convertProfessorsToExpertBo(filteredProfessors);
);
// 构造 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();
// 用户注册 // 用户注册
remoteUserService.expertRegisterUserInfo(remoteUserBoList, tenantId); List<RemoteUserBo> remoteUserBoList = registerRemoteUsers(zjkExpertBos);
// 根据手机号获取用户信息 // 设置用户ID
List<String> phoneNumbers = filteredZjkExpertBos.stream() setUserIdsForExperts(zjkExpertBos, remoteUserBoList);
.map(ZjkExpertBo::getIdCard)
.toList();
List<RemoteUserVo> fetchedUsers = remoteUserService.selectListByUserName(phoneNumbers); // 数据落库
insertList(zjkExpertBos);
}
// 转换为 Map (手机号 -> 用户 ID) /**
Map<String, Long> userNameToUserIdMap = fetchedUsers.stream() * 将ProfessorsInfo转换为ZjkExpertBo
.collect(Collectors.toMap(RemoteUserVo::getUserName, RemoteUserVo::getUserId)); */
private List<ZjkExpertBo> convertProfessorsToExpertBo(List<ProfessorsInfo> filteredProfessors) {
List<Map<String, String>> workperformIdByName = baseMapper.getWorkperformIdByName();
// 匹配用户 ID 并赋值 return filteredProfessors.stream()
filteredZjkExpertBos.forEach(expert -> { .map(professor -> {
Long userId = userNameToUserIdMap.get(expert.getIdCard()); ZjkExpertBo expertBo = new ZjkExpertBo();
if (userId != null) { BeanUtils.copyProperties(professor, expertBo);
expert.setUserId(userId);
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());
}
} }
});
// 数据落库 // 转换业务领域为id逗号拼接
insertList(filteredZjkExpertBos); 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) { return expertBo;
e.printStackTrace(); })
} .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 ...@@ -63,8 +63,8 @@ public class ZjkInvoiceReportServiceImpl extends ServiceImpl<ZjkInvoiceReportMap
zjkInvoiceReport.setTenantId(tenantId); zjkInvoiceReport.setTenantId(tenantId);
if (type == 0) { if (type == 0) {
// 月度报表 // 月度报表
Date lastMonthStart = DateUtil.beginOfMonth(DateUtil.offsetMonth(now, -1)); Date lastMonthStart = DateUtil.beginOfMonth(DateUtil.offsetMonth(now, 0));
Date lastMonthEnd = DateUtil.endOfMonth(DateUtil.offsetMonth(now, -1)); Date lastMonthEnd = DateUtil.endOfMonth(DateUtil.offsetMonth(now, 0));
zjkInvoiceReport.setDateRangeStart(lastMonthStart); zjkInvoiceReport.setDateRangeStart(lastMonthStart);
zjkInvoiceReport.setDateRangeEnd(lastMonthEnd); zjkInvoiceReport.setDateRangeEnd(lastMonthEnd);
...@@ -82,8 +82,8 @@ public class ZjkInvoiceReportServiceImpl extends ServiceImpl<ZjkInvoiceReportMap ...@@ -82,8 +82,8 @@ public class ZjkInvoiceReportServiceImpl extends ServiceImpl<ZjkInvoiceReportMap
} else if (type == 1) { } else if (type == 1) {
// 年度报表 // 年度报表
Date lastYearStart = DateUtil.beginOfYear(DateUtil.offsetYear(now, -1)); Date lastYearStart = DateUtil.beginOfYear(DateUtil.offsetYear(now, 0));
Date lastYearEnd = DateUtil.endOfYear(DateUtil.offsetYear(now, -1)); Date lastYearEnd = DateUtil.endOfYear(DateUtil.offsetYear(now, 0));
zjkInvoiceReport.setDateRangeStart(lastYearStart); zjkInvoiceReport.setDateRangeStart(lastYearStart);
zjkInvoiceReport.setDateRangeEnd(lastYearEnd); zjkInvoiceReport.setDateRangeEnd(lastYearEnd);
......
...@@ -4,10 +4,15 @@ import cn.hutool.core.collection.CollUtil; ...@@ -4,10 +4,15 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.excel.core.DropDownOptions;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
...@@ -22,15 +27,15 @@ import org.dromara.zjk.domain.ZjkSettlementVoucher; ...@@ -22,15 +27,15 @@ import org.dromara.zjk.domain.ZjkSettlementVoucher;
import org.dromara.zjk.domain.bo.ZjkInvoiceBo; import org.dromara.zjk.domain.bo.ZjkInvoiceBo;
import org.dromara.zjk.domain.vo.*; import org.dromara.zjk.domain.vo.*;
import org.dromara.zjk.enums.MoneySettlementStatusEnum; 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.ZjkExpertMoneyConfigMapper;
import org.dromara.zjk.mapper.ZjkExpertMoneyInfoMapper; import org.dromara.zjk.mapper.ZjkExpertMoneyInfoMapper;
import org.dromara.zjk.mapper.ZjkInvoiceMapper; import org.dromara.zjk.mapper.ZjkInvoiceMapper;
import org.dromara.zjk.mapper.ZjkSettlementVoucherMapper; import org.dromara.zjk.mapper.ZjkSettlementVoucherMapper;
import org.dromara.zjk.service.IZjkInvoiceService; import org.dromara.zjk.service.IZjkInvoiceService;
import org.dromara.zjk.service.ZjkExpertMoneyInfoService;
import org.dromara.zjk.zwy.client.HmacClient; import org.dromara.zjk.zwy.client.HmacClient;
import org.dromara.zjk.zwy.utils.ObjectHashGenerator; 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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -43,12 +48,15 @@ import java.math.BigDecimal; ...@@ -43,12 +48,15 @@ import java.math.BigDecimal;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.dromara.zjk.enums.ReviewSnEnum;
/** /**
* 发票Service业务层处理 * 发票Service业务层处理
* *
* @author mzx * @author mzx
* @date 2024-12-09 * @date 2024-12-09
*
*/ */
@Slf4j @Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
...@@ -57,14 +65,22 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService { ...@@ -57,14 +65,22 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
@Resource @Resource
private final ZjkInvoiceMapper zjkInvoiceMapper; private final ZjkInvoiceMapper zjkInvoiceMapper;
@Resource @Resource
private final ZjkProductMapper zjkProductMapper;
@Resource
private final ZjkSettlementVoucherMapper zjkSettlementVoucherMapper; private final ZjkSettlementVoucherMapper zjkSettlementVoucherMapper;
@Resource @Resource
private ZjkExpertMoneyInfoMapper zjkExpertMoneyInfoMapper; private ZjkExpertMoneyInfoMapper zjkExpertMoneyInfoMapper;
@Autowired @Autowired
private ZjkExpertMoneyConfigMapper zjkExpertMoneyConfigMapper; private ZjkExpertMoneyConfigMapper zjkExpertMoneyConfigMapper;
@Resource
private ZjkExpertMapper zjkExpertMapper;
private final HmacClient hmacClient; 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 { ...@@ -85,6 +101,10 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
*/ */
@Override @Override
public TableDataInfo<ZjkInvoiceVo> queryPageList(ZjkInvoiceBo bo, PageQuery pageQuery) { 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); Page<ZjkInvoiceVo> result = zjkInvoiceMapper.queryPageList(pageQuery.build(),bo);
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
...@@ -232,7 +252,7 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService { ...@@ -232,7 +252,7 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
private void validEntityBeforeSave(ZjkInvoice entity){ private void validEntityBeforeSave(ZjkInvoice entity){
//TODO 做一些数据校验,如唯一约束 //TODO 做一些数据校验,如唯一约束
//发票号码验证是否已存在 //发票号码验证是否已存在
Long invoiceNumber = entity.getInvoiceNumber(); String invoiceNumber = entity.getInvoiceNumber();
LambdaQueryWrapper<ZjkInvoice> zjkInvoiceLambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ZjkInvoice> zjkInvoiceLambdaQueryWrapper = new LambdaQueryWrapper<>();
zjkInvoiceLambdaQueryWrapper.eq(ZjkInvoice::getInvoiceNumber, invoiceNumber); zjkInvoiceLambdaQueryWrapper.eq(ZjkInvoice::getInvoiceNumber, invoiceNumber);
if (entity.getId()!=null){ if (entity.getId()!=null){
...@@ -262,20 +282,73 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService { ...@@ -262,20 +282,73 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void imports(MultipartFile file) { public R<Void> imports(MultipartFile file) {
try { try {
InputStream inputStream = file.getInputStream(); 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()) { 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)); List<ZjkInvoice> exitsZjkInvoice = zjkInvoiceMapper.selectList(new LambdaQueryWrapper<ZjkInvoice>().in(ZjkInvoice::getInvoiceNumber,invoiceNumberList));
if (CollUtil.isNotEmpty(exitsZjkInvoice)) { if (CollUtil.isNotEmpty(exitsZjkInvoice)) {
String existingInvoiceNumbersStr = exitsZjkInvoice.stream() String existingInvoiceNumbersStr = exitsZjkInvoice.stream()
.map(ZjkInvoice::getInvoiceNumber) .map(ZjkInvoice::getInvoiceNumber)
.map(String::valueOf) .map(String::valueOf)
.collect(Collectors.joining(",")); .collect(Collectors.joining(","));
throw new ServiceException("以下发票号已存在: " + existingInvoiceNumbersStr + ",请修改后重新导入"); errorSb.append( "以下发票号已存在: " + existingInvoiceNumbersStr + ",请修改后重新导入");
errorSb.append("<br/>");
} }
//处理职称等级 //处理职称等级
//得到职称-数字一一对应list //得到职称-数字一一对应list
...@@ -290,14 +363,19 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService { ...@@ -290,14 +363,19 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
} }
} }
} }
if(errorSb.length()>0){
return R.fail(errorSb.toString());
}else{
//insert //insert
zjkInvoiceMapper.insert(zjkInvoiceList); zjkInvoiceMapper.insert(zjkInvoiceList);
return R.ok();
}
} }
}catch (IOException e){ }catch (IOException e){
log.error("导入发票信息失败,{}",e.getMessage()); log.error("导入发票信息失败,{}",e.getMessage());
throw new ServiceException("导入发票信息失败,请联系管理员"); throw new ServiceException("导入发票信息失败,请联系管理员");
} }
return R.ok();
} }
@Override @Override
...@@ -329,6 +407,9 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService { ...@@ -329,6 +407,9 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
@Override @Override
public Boolean check(Long moneyId) { public Boolean check(Long moneyId) {
ZjkInvoice zjkInvoice = zjkInvoiceMapper.selectById(moneyId); ZjkInvoice zjkInvoice = zjkInvoiceMapper.selectById(moneyId);
if(zjkInvoice.getInvoiceAttached()==null){
throw new ServiceException("发票附件不存在,不可审核!");
}
zjkInvoice.setCheckStatus(1); zjkInvoice.setCheckStatus(1);
zjkInvoiceMapper.updateById(zjkInvoice); zjkInvoiceMapper.updateById(zjkInvoice);
//TODO 向【财务报表和结算凭证】同步该数据 //TODO 向【财务报表和结算凭证】同步该数据
...@@ -340,7 +421,7 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService { ...@@ -340,7 +421,7 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
settlementVoucher.setProductId(zjkInvoice.getProductId()); settlementVoucher.setProductId(zjkInvoice.getProductId());
settlementVoucher.setExpertId(zjkInvoice.getExpertName()==null?null:Long.valueOf(zjkInvoice.getExpertName())); settlementVoucher.setExpertId(zjkInvoice.getExpertName()==null?null:Long.valueOf(zjkInvoice.getExpertName()));
settlementVoucher.setSettleNo(zjkExpertMoneyInfoMapper.selectById(zjkInvoice.getSettleId()).getSettlementSn()); settlementVoucher.setSettleNo(zjkExpertMoneyInfoMapper.selectById(zjkInvoice.getSettleId()).getSettlementSn());
settlementVoucher.setMoney(zjkExpertMoneyConfigMapper.selectById(zjkInvoice.getExpertTitleLevel()).getMoneyNumber()); settlementVoucher.setMoney(zjkInvoice.getInvoiceMoney());
settlementVoucher.setSyncStatus(1); settlementVoucher.setSyncStatus(1);
zjkSettlementVoucherMapper.insert(settlementVoucher); zjkSettlementVoucherMapper.insert(settlementVoucher);
return true; return true;
...@@ -371,6 +452,8 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService { ...@@ -371,6 +452,8 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
checkSupportVo.setInvFileId(zjkInvoices.get(0).getInvoiceAttached()); checkSupportVo.setInvFileId(zjkInvoices.get(0).getInvoiceAttached());
List<String> fids = zjkInvoices.stream().map(ZjkInvoice::getInvoiceAttached).collect(Collectors.toList()); List<String> fids = zjkInvoices.stream().map(ZjkInvoice::getInvoiceAttached).collect(Collectors.toList());
checkSupportVo.setFids(fids); checkSupportVo.setFids(fids);
}else{
checkSupportVo.setInvStu("未开票");
} }
} }
}else{ }else{
...@@ -378,4 +461,45 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService { ...@@ -378,4 +461,45 @@ public class ZjkInvoiceServiceImpl implements IZjkInvoiceService {
} }
return checkSupportVo; 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 { ...@@ -385,7 +385,7 @@ public class ZjkLeaveServiceImpl implements IZjkLeaveService {
Date reviewTime = vo.getReviewTime(); Date reviewTime = vo.getReviewTime();
long hours = DateUtil.between(reviewTime, new Date(), DateUnit.HOUR); long hours = DateUtil.between(reviewTime, new Date(), DateUnit.HOUR);
if (hours <= Long.valueOf(proBeforeHour) && vo.getUserId() == null) { if (hours <= Long.valueOf(proBeforeHour) && vo.getUserId() == null) {
return R.fail("评审前" + zjkLeaveRuleVo.getBeforeDay() + "小时才能进行请假"); return R.fail("评审前" + zjkLeaveRuleVo.getProBeforeHour() + "小时才能进行请假");
} }
ZjkLeave zjkLeave = new ZjkLeave(); ZjkLeave zjkLeave = new ZjkLeave();
zjkLeave.setLeaveType(UserConstants.LEAVE_TYPE_PRO); zjkLeave.setLeaveType(UserConstants.LEAVE_TYPE_PRO);
...@@ -407,7 +407,7 @@ public class ZjkLeaveServiceImpl implements IZjkLeaveService { ...@@ -407,7 +407,7 @@ public class ZjkLeaveServiceImpl implements IZjkLeaveService {
//插入请假记录 //插入请假记录
baseMapper.insert(zjkLeave); baseMapper.insert(zjkLeave);
// 根据用户 id 项目 id 更新专家请假信息 // 根据用户 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"); zjkExpertItem.setLeaveStatus("1");
zjkExpertItemMapper.updateById(zjkExpertItem); zjkExpertItemMapper.updateById(zjkExpertItem);
// 更新抽取人数 // 更新抽取人数
...@@ -415,7 +415,7 @@ public class ZjkLeaveServiceImpl implements IZjkLeaveService { ...@@ -415,7 +415,7 @@ public class ZjkLeaveServiceImpl implements IZjkLeaveService {
ZjkItemExtreation zjkItemExtreation =zjkItemExtreationMapper.selectOne(new LambdaQueryWrapper<ZjkItemExtreation>() ZjkItemExtreation zjkItemExtreation =zjkItemExtreationMapper.selectOne(new LambdaQueryWrapper<ZjkItemExtreation>()
.eq(ZjkItemExtreation::getId,zjkReviewPhase.getItemExtreationId())); .eq(ZjkItemExtreation::getId,zjkReviewPhase.getItemExtreationId()));
if (zjkItemExtreation != null){ if (zjkItemExtreation != null){
zjkItemExtreation.setExtractedSum(zjkItemExtreation.getExtractedSum()-1); zjkItemExtreation.setExtractedSum((zjkItemExtreation.getExtractedSum()-1)<0?0:zjkItemExtreation.getExtractedSum()-1);
zjkItemExtreation.setExtractionStatus(1); zjkItemExtreation.setExtractionStatus(1);
zjkItemExtreationMapper.updateById(zjkItemExtreation); zjkItemExtreationMapper.updateById(zjkItemExtreation);
} }
...@@ -466,7 +466,7 @@ public class ZjkLeaveServiceImpl implements IZjkLeaveService { ...@@ -466,7 +466,7 @@ public class ZjkLeaveServiceImpl implements IZjkLeaveService {
ZjkItemExtreation zjkItemExtreation =zjkItemExtreationMapper.selectOne(new LambdaQueryWrapper<ZjkItemExtreation>() ZjkItemExtreation zjkItemExtreation =zjkItemExtreationMapper.selectOne(new LambdaQueryWrapper<ZjkItemExtreation>()
.eq(ZjkItemExtreation::getId,zjkReviewPhase.getItemExtreationId())); .eq(ZjkItemExtreation::getId,zjkReviewPhase.getItemExtreationId()));
if (zjkItemExtreation != null){ if (zjkItemExtreation != null){
zjkItemExtreation.setExtractedSum(zjkItemExtreation.getExtractedSum()-1); zjkItemExtreation.setExtractedSum((zjkItemExtreation.getExtractedSum()-1)<0?0:zjkItemExtreation.getExtractedSum()-1);
zjkItemExtreation.setExtractionStatus(1); zjkItemExtreation.setExtractionStatus(1);
zjkItemExtreationMapper.updateById(zjkItemExtreation); zjkItemExtreationMapper.updateById(zjkItemExtreation);
} }
......
...@@ -32,12 +32,24 @@ public class ZjkPointRewardServiceImpl extends ServiceImpl<ZjkPointRewardMapper, ...@@ -32,12 +32,24 @@ public class ZjkPointRewardServiceImpl extends ServiceImpl<ZjkPointRewardMapper,
reward.stream().forEach(item -> { reward.stream().forEach(item -> {
String result = ""; String result = "";
Integer effectFlag = item.getEffectFlag(); 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()); strings.add(item.getRewardName());
} }
}); });
return strings; 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; package org.dromara.zjk.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
...@@ -10,13 +11,16 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; ...@@ -10,13 +11,16 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.TenantConstants; 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.enums.UserType;
import org.dromara.common.core.exception.ServiceException; 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.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.model.RoleDTO;
import org.dromara.zjk.domain.*; import org.dromara.zjk.domain.*;
import org.dromara.zjk.domain.bo.ZjkProductBo; import org.dromara.zjk.domain.bo.ZjkProductBo;
import org.dromara.zjk.domain.dto.ProjectSummaryStatistics; import org.dromara.zjk.domain.dto.ProjectSummaryStatistics;
...@@ -38,6 +42,7 @@ import org.dromara.zjk.zwy.utils.ObjectHashGenerator; ...@@ -38,6 +42,7 @@ import org.dromara.zjk.zwy.utils.ObjectHashGenerator;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
...@@ -73,6 +78,8 @@ public class ZjkProductServiceImpl implements IZjkProductService { ...@@ -73,6 +78,8 @@ public class ZjkProductServiceImpl implements IZjkProductService {
private final ZjkProductReviewsnMapper zjkProductReviewsnMapper; private final ZjkProductReviewsnMapper zjkProductReviewsnMapper;
private final HmacClient hmacClient; private final HmacClient hmacClient;
private final DictService dictService;
/** /**
* 查询项目管理 * 查询项目管理
* *
...@@ -114,7 +121,27 @@ public class ZjkProductServiceImpl implements IZjkProductService { ...@@ -114,7 +121,27 @@ public class ZjkProductServiceImpl implements IZjkProductService {
} }
return TableDataInfo.build(result); 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 { ...@@ -124,7 +151,11 @@ public class ZjkProductServiceImpl implements IZjkProductService {
@Override @Override
public List<ZjkProductVo> queryList(ZjkProductBo bo) { public List<ZjkProductVo> queryList(ZjkProductBo bo) {
LambdaQueryWrapper<ZjkProduct> lqw = buildQueryWrapper(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) { private LambdaQueryWrapper<ZjkProduct> buildQueryWrapper(ZjkProductBo bo) {
...@@ -574,6 +605,16 @@ public class ZjkProductServiceImpl implements IZjkProductService { ...@@ -574,6 +605,16 @@ public class ZjkProductServiceImpl implements IZjkProductService {
@Override @Override
public Long getProductPanoramaCount() { public Long getProductPanoramaCount() {
LambdaQueryWrapper<ZjkProduct> wrapper = Wrappers.lambdaQuery(); 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); return baseMapper.selectCount(wrapper);
} }
...@@ -623,6 +664,12 @@ public class ZjkProductServiceImpl implements IZjkProductService { ...@@ -623,6 +664,12 @@ public class ZjkProductServiceImpl implements IZjkProductService {
@Override @Override
public TableDataInfo<ZjkProductVo> selectList(ZjkProductBo bo, PageQuery pageQuery) { public TableDataInfo<ZjkProductVo> selectList(ZjkProductBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ZjkProduct> lambdaQueryWrapper = buildQueryWrapper(bo); 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); IPage<ZjkProductVo> zjkProductVoIPage = baseMapper.selectProductReview(pageQuery.build(), bo);
return TableDataInfo.build(zjkProductVoIPage); return TableDataInfo.build(zjkProductVoIPage);
} }
...@@ -712,6 +759,12 @@ public class ZjkProductServiceImpl implements IZjkProductService { ...@@ -712,6 +759,12 @@ public class ZjkProductServiceImpl implements IZjkProductService {
return true; return true;
} }
@Override
public TableDataInfo<ProductPanoramaVo> getProductList(ProductPanoramaVo vo, PageQuery pageQuery) {
Page<ProductPanoramaVo> result = baseMapper.getProductList(pageQuery.build(), vo);
return TableDataInfo.build(result);
}
@Override @Override
public List<ProductCountReport> getProductTypeCountReport() { public List<ProductCountReport> getProductTypeCountReport() {
return baseMapper.getProductTypeCountReport(); return baseMapper.getProductTypeCountReport();
......
...@@ -86,7 +86,7 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi ...@@ -86,7 +86,7 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi
List<ZjkExpertVo> zjkExpertVos = BeanUtil.copyToList(zjkExperts, ZjkExpertVo.class); List<ZjkExpertVo> zjkExpertVos = BeanUtil.copyToList(zjkExperts, ZjkExpertVo.class);
List<ZjkExpertMajor> zjkExpertMajors = zjkExpertMajorMapper.selectMajorList(expertIdList); 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)); Map<Long, List<ZjkExpertMajor>> expertMajorMap = zjkExpertMajors.stream().collect(Collectors.groupingBy(ZjkExpertMajor::getExpertId));
for (ZjkExpertVo zjkExpertVo : zjkExpertVos) { for (ZjkExpertVo zjkExpertVo : zjkExpertVos) {
Long expertId = zjkExpertVo.getExpertId(); Long expertId = zjkExpertVo.getExpertId();
...@@ -125,18 +125,6 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi ...@@ -125,18 +125,6 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi
if (CollectionUtil.isEmpty(zjkProductSummarizeVos)) { if (CollectionUtil.isEmpty(zjkProductSummarizeVos)) {
return 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; return zjkProductSummarizeVos;
} }
...@@ -287,12 +275,12 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi ...@@ -287,12 +275,12 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi
List<ZjkExpert> zjkExperts = expertMapper.selectByIds(list); List<ZjkExpert> zjkExperts = expertMapper.selectByIds(list);
zjkExperts.forEach(zjkExpert -> { zjkExperts.forEach(zjkExpert -> {
// 获取专业学历 // 获取专业学历
ZjkExpertMajor zjkExpertMajor = zjkExpertMajorMapper.selectOne(new LambdaQueryWrapper<ZjkExpertMajor>() ZjkExpertMajor zjkExpertMajor = zjkExpertMajorMapper.selectOne(new LambdaQueryWrapper<ZjkExpertMajor>()
.eq(ZjkExpertMajor::getExpertId, zjkExpert.getExpertId()) .eq(ZjkExpertMajor::getExpertId, zjkExpert.getExpertId())
.orderByDesc(ZjkExpertMajor::getDegree) .orderByDesc(ZjkExpertMajor::getDegree)
.last("limit 1")); .last("limit 1"));
if (zjkExpertMajor != null) { 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; return zjkExperts;
...@@ -312,10 +300,10 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi ...@@ -312,10 +300,10 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi
Set<String> collect = vos.stream().map(ZjkProductSummarizeExcelVO::getProductName).collect(Collectors.toSet()); Set<String> collect = vos.stream().map(ZjkProductSummarizeExcelVO::getProductName).collect(Collectors.toSet());
LambdaQueryWrapper<ZjkProduct> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<ZjkProduct> lqw = Wrappers.lambdaQuery();
lqw.in(ZjkProduct::getProductName,collect); lqw.in(ZjkProduct::getProductName, collect);
lqw.eq(ZjkProduct::getUserId,LoginHelper.getUserId()); lqw.eq(ZjkProduct::getUserId, LoginHelper.getUserId());
List<ZjkProductVo> zjkProductVos = zjkProductMapper.selectVoList(lqw); List<ZjkProductVo> zjkProductVos = zjkProductMapper.selectVoList(lqw);
if(CollectionUtil.isEmpty(zjkProductVos)){ if (CollectionUtil.isEmpty(zjkProductVos)) {
throw new ServiceException("无效项目"); throw new ServiceException("无效项目");
} }
Map<String, ZjkProductVo> productMap = zjkProductVos.stream().collect(Collectors.toMap(ZjkProductVo::getProductName, v -> v)); Map<String, ZjkProductVo> productMap = zjkProductVos.stream().collect(Collectors.toMap(ZjkProductVo::getProductName, v -> v));
...@@ -326,10 +314,10 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi ...@@ -326,10 +314,10 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi
//获取项目全部评审阶段 //获取项目全部评审阶段
LambdaQueryWrapper<ZjkReviewPhase> ReviewLqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<ZjkReviewPhase> ReviewLqw = Wrappers.lambdaQuery();
ReviewLqw.in(ZjkReviewPhase::getItemId,productSet); ReviewLqw.in(ZjkReviewPhase::getItemId, productSet);
ReviewLqw.eq(ZjkReviewPhase::getEffective,1); ReviewLqw.eq(ZjkReviewPhase::getEffective, 1);
ReviewLqw.eq(ZjkReviewPhase::getParentId,0); ReviewLqw.eq(ZjkReviewPhase::getParentId, 0);
ReviewLqw.eq(ZjkReviewPhase::getIsSummarize,0); ReviewLqw.eq(ZjkReviewPhase::getIsSummarize, 0);
List<ZjkReviewPhaseVo> zjkReviewPhaseVos = zjkReviewPhaseMapper.selectVoList(ReviewLqw); List<ZjkReviewPhaseVo> zjkReviewPhaseVos = zjkReviewPhaseMapper.selectVoList(ReviewLqw);
...@@ -339,26 +327,26 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi ...@@ -339,26 +327,26 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi
List<ZjkProductSummarizeVo> zjkProductSummarizeVos = baseMapper.selectVoList(pSlqw); List<ZjkProductSummarizeVo> zjkProductSummarizeVos = baseMapper.selectVoList(pSlqw);
Map<Long, ZjkProductSummarizeVo> zjkProductSummarizeVoMap = zjkProductSummarizeVos.stream().collect(Collectors.toMap(ZjkProductSummarizeVo::getReviewId, v -> v)); 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) { for (ZjkProductSummarizeExcelVO vo : vos) {
if(!productMap.containsKey(vo.getProductName())){ if (!productMap.containsKey(vo.getProductName())) {
continue; continue;
} }
ZjkProductVo zjkProductVo = productMap.get(vo.getProductName()); ZjkProductVo zjkProductVo = productMap.get(vo.getProductName());
Long productId = zjkProductVo.getId(); Long productId = zjkProductVo.getId();
String reviewSn = vo.getReviewSn(); String reviewSn = vo.getReviewSn();
ZjkProductSummarize zjkProductSummarize = BeanUtil.copyProperties(vo, ZjkProductSummarize.class); ZjkProductSummarize zjkProductSummarize = BeanUtil.copyProperties(vo, ZjkProductSummarize.class);
zjkProductSummarize.setProductId(productId); zjkProductSummarize.setProductId(productId);
List<ZjkReviewPhaseVo> collect1 = zjkReviewPhaseVos.stream().filter(s -> s.getReviewSn().equals(reviewSn) && s.getItemId().equals(productId)).collect(Collectors.toList()); 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("无效项目阶段,请修改"); throw new ServiceException("无效项目阶段,请修改");
} }
for (ZjkReviewPhaseVo zjkReviewPhaseVo : collect1) { for (ZjkReviewPhaseVo zjkReviewPhaseVo : collect1) {
if(zjkProductSummarizeVoMap.containsKey(zjkReviewPhaseVo.getId())){ if (zjkProductSummarizeVoMap.containsKey(zjkReviewPhaseVo.getId())) {
throw new ServiceException(vo.getProductName()+ throw new ServiceException(vo.getProductName() +
ReviewSnEnum.getByCode(zjkReviewPhaseVo.getReviewSn()).getDesc() ReviewSnEnum.getByCode(zjkReviewPhaseVo.getReviewSn()).getDesc()
+"阶段 已总结"); + "阶段 已总结");
} }
zjkProductSummarize.setReviewId(zjkReviewPhaseVo.getId()); zjkProductSummarize.setReviewId(zjkReviewPhaseVo.getId());
...@@ -376,7 +364,7 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi ...@@ -376,7 +364,7 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi
zjkProductSummarizes.add(zjkProductSummarize); zjkProductSummarizes.add(zjkProductSummarize);
} }
baseMapper.insertBatch(zjkProductSummarizes); baseMapper.insertBatch(zjkProductSummarizes);
List<ZjkProductSummarizeLog> zjkProductSummarizeLogs = BeanUtil.copyToList(zjkProductSummarizes, ZjkProductSummarizeLog.class); List<ZjkProductSummarizeLog> zjkProductSummarizeLogs = BeanUtil.copyToList(zjkProductSummarizes, ZjkProductSummarizeLog.class);
for (ZjkProductSummarizeLog zjkProductSummarizeLog : zjkProductSummarizeLogs) { for (ZjkProductSummarizeLog zjkProductSummarizeLog : zjkProductSummarizeLogs) {
...@@ -386,7 +374,7 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi ...@@ -386,7 +374,7 @@ public class ZjkProductSummarizeServiceImpl implements IZjkProductSummarizeServi
zjkProductSummarizeLogMapper.insertBatch(zjkProductSummarizeLogs); zjkProductSummarizeLogMapper.insertBatch(zjkProductSummarizeLogs);
Set<Long> reviewIds = zjkReviewPhaseVos.stream().map(ZjkReviewPhaseVo::getId).collect(Collectors.toSet()); Set<Long> reviewIds = zjkReviewPhaseVos.stream().map(ZjkReviewPhaseVo::getId).collect(Collectors.toSet());
//修改项目总结 导入代码 //修改项目总结 导入代码
if(CollectionUtil.isNotEmpty(reviewIds)){ if (CollectionUtil.isNotEmpty(reviewIds)) {
zjkReviewPhaseMapper.updateByIds(reviewIds); zjkReviewPhaseMapper.updateByIds(reviewIds);
} }
return true; return true;
......
...@@ -6,21 +6,29 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -6,21 +6,29 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; 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.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; 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.ZjkReviewPhase;
import org.dromara.zjk.domain.bo.ZjkProductBo;
import org.dromara.zjk.domain.bo.ZjkReviewPhaseBo; import org.dromara.zjk.domain.bo.ZjkReviewPhaseBo;
import org.dromara.zjk.domain.bo.ZjkReviewProductBo; 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.ZjkProductVo;
import org.dromara.zjk.domain.vo.ZjkReviewPhaseVo; import org.dromara.zjk.domain.vo.ZjkReviewPhaseVo;
import org.dromara.zjk.domain.vo.ZjkReviewProductVo; import org.dromara.zjk.domain.vo.ZjkReviewProductVo;
import org.dromara.zjk.enums.ReviewSnEnum; import org.dromara.zjk.enums.ReviewSnEnum;
import org.dromara.zjk.mapper.ZjkExpertMapper;
import org.dromara.zjk.mapper.ZjkProductMapper; import org.dromara.zjk.mapper.ZjkProductMapper;
import org.dromara.zjk.mapper.ZjkReviewPhaseMapper; import org.dromara.zjk.mapper.ZjkReviewPhaseMapper;
import org.dromara.zjk.service.IZjkReviewPhaseService; 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 org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -41,7 +49,9 @@ public class ZjkReviewPhaseServiceImpl implements IZjkReviewPhaseService { ...@@ -41,7 +49,9 @@ public class ZjkReviewPhaseServiceImpl implements IZjkReviewPhaseService {
private final ZjkReviewPhaseMapper baseMapper; private final ZjkReviewPhaseMapper baseMapper;
private final ZjkProductMapper productMapper; private final ZjkProductMapper productMapper;
private final ZjkExpertMapper expertMapper;
@Autowired
private StringCryptoUtil stringCryptoUtil;
/** /**
* 查询抽取条件 * 查询抽取条件
* *
...@@ -149,6 +159,24 @@ public class ZjkReviewPhaseServiceImpl implements IZjkReviewPhaseService { ...@@ -149,6 +159,24 @@ public class ZjkReviewPhaseServiceImpl implements IZjkReviewPhaseService {
@Override @Override
public TableDataInfo<ZjkReviewProductVo> reviewProductList(ZjkReviewProductBo bo, PageQuery pageQuery) { 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); Page<ZjkReviewProductVo> result = baseMapper.reviewProductList(pageQuery.build(), bo);
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
...@@ -178,9 +206,26 @@ public class ZjkReviewPhaseServiceImpl implements IZjkReviewPhaseService { ...@@ -178,9 +206,26 @@ public class ZjkReviewPhaseServiceImpl implements IZjkReviewPhaseService {
@Override @Override
public List<ZjkReviewProductVo> reviewExport(ZjkReviewProductBo bo) { 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)){ if(!CollectionUtil.isEmpty(result)){
for (ZjkReviewProductVo zjkReviewProductVo : result) { for (ZjkReviewProductVo zjkReviewProductVo : result) {
zjkReviewProductVo.setUnitConcat(stringCryptoUtil.decryptField(zjkReviewProductVo.getUnitConcat()));
String reviewSn = zjkReviewProductVo.getReviewSn(); String reviewSn = zjkReviewProductVo.getReviewSn();
ReviewSnEnum byCode = ReviewSnEnum.getByCode(reviewSn); ReviewSnEnum byCode = ReviewSnEnum.getByCode(reviewSn);
if(byCode!=null){ if(byCode!=null){
...@@ -209,6 +254,12 @@ public class ZjkReviewPhaseServiceImpl implements IZjkReviewPhaseService { ...@@ -209,6 +254,12 @@ public class ZjkReviewPhaseServiceImpl implements IZjkReviewPhaseService {
return baseMapper.getReviewProductCountByExpertId(expertId); 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) { private List<String> getReviewSn(String reviewSn) {
List<String> list = new ArrayList<>(); List<String> list = new ArrayList<>();
if(reviewSn.equals(ReviewSnEnum.FINAL_ACCEPTANCE.getCode())){ if(reviewSn.equals(ReviewSnEnum.FINAL_ACCEPTANCE.getCode())){
......
...@@ -78,6 +78,7 @@ public class ZjkSmsInfoServiceImpl extends ServiceImpl<ZjkSmsInfoMapper, ZjkSmsI ...@@ -78,6 +78,7 @@ public class ZjkSmsInfoServiceImpl extends ServiceImpl<ZjkSmsInfoMapper, ZjkSmsI
info.setSmsContent(content); info.setSmsContent(content);
info.setParamJson(dto.getParamJson().toJSONString()); info.setParamJson(dto.getParamJson().toJSONString());
info.setTemplateId(dto.getTemplateId()); info.setTemplateId(dto.getTemplateId());
//TODO 短信发送暂定我的手机
info.setReceivePhone(contact); info.setReceivePhone(contact);
return info; return info;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
......
...@@ -32,10 +32,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -32,10 +32,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.Instant; import java.time.*;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -118,9 +115,16 @@ public class ZjkMoneyStatementServiceImpl implements IZjkMoneyStatementService { ...@@ -118,9 +115,16 @@ public class ZjkMoneyStatementServiceImpl implements IZjkMoneyStatementService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean insertByBo() { public Boolean insertByBo() {
Date[] currentMonthDateRange = DateUtils.getLastMonthDateRange(LocalDate.now()); Date[] currentMonthDateRange = DateUtils.getLastMonthDateRange(LocalDate.now());
Date startTime = currentMonthDateRange[0]; // 获取当月第一天和最后一天的 Date
Date endTime = currentMonthDateRange[1]; // 获取当前日期
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(); List<String> tenantIds = expertMoneyInfoMapper.selectTenantIds();
if(CollectionUtil.isEmpty(tenantIds)){ if(CollectionUtil.isEmpty(tenantIds)){
return true; return true;
...@@ -171,8 +175,17 @@ public class ZjkMoneyStatementServiceImpl implements IZjkMoneyStatementService { ...@@ -171,8 +175,17 @@ public class ZjkMoneyStatementServiceImpl implements IZjkMoneyStatementService {
@Override @Override
public Boolean addYear() { public Boolean addYear() {
Date[] currentMonthDateRange = DateUtils.getLastYearDateRange(LocalDate.now()); Date[] currentMonthDateRange = DateUtils.getLastYearDateRange(LocalDate.now());
Date startTime = currentMonthDateRange[0]; LocalDate now = LocalDate.now();
Date endTime = currentMonthDateRange[1];
// 当年第一天 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(); List<String> tenantIds = expertMoneyInfoMapper.selectTenantIds();
if(CollectionUtil.isEmpty(tenantIds)){ if(CollectionUtil.isEmpty(tenantIds)){
return true; return true;
...@@ -224,12 +237,17 @@ public class ZjkMoneyStatementServiceImpl implements IZjkMoneyStatementService { ...@@ -224,12 +237,17 @@ public class ZjkMoneyStatementServiceImpl implements IZjkMoneyStatementService {
zjkMoneyExpertStatement.setStatementId(moneyStatement.getId()); zjkMoneyExpertStatement.setStatementId(moneyStatement.getId());
zjkMoneyExpertStatement.setMoneyCycle(zjkExpertMoneyInfoVO.getMoneyCycle()); zjkMoneyExpertStatement.setMoneyCycle(zjkExpertMoneyInfoVO.getMoneyCycle());
zjkMoneyExpertStatement.setExpertType(zjkExpertMoneyInfoVO.getExpertType()); zjkMoneyExpertStatement.setExpertType(zjkExpertMoneyInfoVO.getExpertType());
zjkMoneyExpertStatement.setTenantId(tenantId);
zjkMoneyExpertStatementList.add(zjkMoneyExpertStatement); zjkMoneyExpertStatementList.add(zjkMoneyExpertStatement);
} }
} }
//汇总 //汇总
// 在分组前检查列表是否为空
if (CollectionUtil.isEmpty(zjkExpertMoneyInfoList)) {
// 处理空列表的情况
return; // 或其他适当的处理
}
Map<String, List<ZjkExpertMoneyInfoVO>> moneyCycleMap = zjkExpertMoneyInfoList.stream().collect(Collectors.groupingBy(ZjkExpertMoneyInfoVO::getMoneyCycle)); Map<String, List<ZjkExpertMoneyInfoVO>> moneyCycleMap = zjkExpertMoneyInfoList.stream().collect(Collectors.groupingBy(ZjkExpertMoneyInfoVO::getMoneyCycle));
List<ZjkMoneyCollectStatement> zjkMoneyCollectStatements = new ArrayList<>(); List<ZjkMoneyCollectStatement> zjkMoneyCollectStatements = new ArrayList<>();
for (String moneyCycle : moneyCycleMap.keySet()) { for (String moneyCycle : moneyCycleMap.keySet()) {
...@@ -249,6 +267,7 @@ public class ZjkMoneyStatementServiceImpl implements IZjkMoneyStatementService { ...@@ -249,6 +267,7 @@ public class ZjkMoneyStatementServiceImpl implements IZjkMoneyStatementService {
zjkMoneyCollectStatement.setPayMoney(payMoney); zjkMoneyCollectStatement.setPayMoney(payMoney);
zjkMoneyCollectStatement.setNoPayMoney(noPayMoney); zjkMoneyCollectStatement.setNoPayMoney(noPayMoney);
zjkMoneyCollectStatement.setSumFee(expertTypeMoneyFee); zjkMoneyCollectStatement.setSumFee(expertTypeMoneyFee);
zjkMoneyCollectStatement.setTenantId(tenantId);
zjkMoneyCollectStatements.add(zjkMoneyCollectStatement); zjkMoneyCollectStatements.add(zjkMoneyCollectStatement);
} }
} }
...@@ -296,6 +315,7 @@ public class ZjkMoneyStatementServiceImpl implements IZjkMoneyStatementService { ...@@ -296,6 +315,7 @@ public class ZjkMoneyStatementServiceImpl implements IZjkMoneyStatementService {
zjkMoneyAnalyseStatement.setProportion(percentage); zjkMoneyAnalyseStatement.setProportion(percentage);
zjkMoneyAnalyseStatement.setExpertType(expertType); zjkMoneyAnalyseStatement.setExpertType(expertType);
zjkMoneyAnalyseStatement.setStatementId(moneyStatement.getId()); zjkMoneyAnalyseStatement.setStatementId(moneyStatement.getId());
zjkMoneyAnalyseStatement.setTenantId(tenantId);
zjkMoneyAnalyseStatementList.add(zjkMoneyAnalyseStatement); zjkMoneyAnalyseStatementList.add(zjkMoneyAnalyseStatement);
} }
} }
......
...@@ -48,7 +48,6 @@ public class DynamicCronTask implements SchedulingConfigurer { ...@@ -48,7 +48,6 @@ public class DynamicCronTask implements SchedulingConfigurer {
private ZjkInvoiceReportService zjkInvoiceReportService; private ZjkInvoiceReportService zjkInvoiceReportService;
@Override @Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
//ivs会话保活
taskRegistrar.addTriggerTask(() -> { taskRegistrar.addTriggerTask(() -> {
zjkPointUserService.handleWaitCheckPointStatus(); zjkPointUserService.handleWaitCheckPointStatus();
}, triggerContext -> new CronTrigger(config.refreshCheckPoint).nextExecutionTime(triggerContext).toInstant()); }, 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 { ...@@ -55,5 +55,9 @@ public class IdCardValidator {
int mod = sum % 11; int mod = sum % 11;
return idCard.charAt(17) == checkCode[mod]; return idCard.charAt(17) == checkCode[mod];
} }
public static void main(String[] args) {
System.out.println(isValid("142322199301218011"));
}
} }
...@@ -26,6 +26,7 @@ public class SensitiveEncryptAspect { ...@@ -26,6 +26,7 @@ public class SensitiveEncryptAspect {
@Pointcut("@annotation(org.dromara.zjk.zwy.annotation.DecryptOperation)") @Pointcut("@annotation(org.dromara.zjk.zwy.annotation.DecryptOperation)")
public void decryptPointcut() {} public void decryptPointcut() {}
/** 加密执行前 */ /** 加密执行前 */
@Before("encryptPointcut()") @Before("encryptPointcut()")
public void beforeEncrypt(JoinPoint joinPoint) { public void beforeEncrypt(JoinPoint joinPoint) {
......
...@@ -69,7 +69,7 @@ public class DecryptClient { ...@@ -69,7 +69,7 @@ public class DecryptClient {
return plaintext; return plaintext;
} catch (Exception e) { } catch (Exception e) {
log.error("调用解密服务失败,密文 hash: {}", ciphertextBlob != null ? ciphertextBlob.hashCode() : "null", e); log.error("调用解密服务失败,密文 hash: {}", ciphertextBlob != null ? ciphertextBlob.hashCode() : "null", e);
throw new RuntimeException("调用解密服务失败", e); return ciphertextBlob;
} }
} }
...@@ -99,5 +99,14 @@ public class DecryptClient { ...@@ -99,5 +99,14 @@ public class DecryptClient {
return headers; 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 { ...@@ -62,7 +62,7 @@ public class EncryptClient {
return cipherText; return cipherText;
} catch (Exception e) { } catch (Exception e) {
log.error("调用加密服务失败,明文内容:{}", plainText, e); log.error("调用加密服务失败,明文内容:{}", plainText, e);
throw new RuntimeException("调用加密服务失败", e); return plainText;
} }
} }
......
...@@ -121,5 +121,4 @@ public class SensitiveDataService { ...@@ -121,5 +121,4 @@ public class SensitiveDataService {
Number.class.isAssignableFrom(clazz) || Number.class.isAssignableFrom(clazz) ||
clazz.getName().startsWith("java.time."); clazz.getName().startsWith("java.time.");
} }
} }
...@@ -38,13 +38,15 @@ cron: ...@@ -38,13 +38,15 @@ cron:
activity-start-check-point: ${ACTIVITY_START_CHECK_POINT:0 */1 * * * ?} activity-start-check-point: ${ACTIVITY_START_CHECK_POINT:0 */1 * * * ?}
activity-end-check-point: ${ACTIVITY_END_CHECK_POINT:0 */1 * * * ?} activity-end-check-point: ${ACTIVITY_END_CHECK_POINT:0 */1 * * * ?}
refresh-expert-chart: ${REFRESH_EXPERT_CHART: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-Year-Inspection: ${STATEMENT_YEAR_INSPECTION:0 0 1 1 * ?}
statement-Inspection: ${STATEMENT_YEAR_INSPECTION:0 0 1 * * ?} statement-Inspection: ${STATEMENT_YEAR_INSPECTION:0 0 1 * * ?}
cancel-Expert-Inspection: ${CANCEL-EXPERT-INSPECTION:0 */1 * * * ?} cancel-Expert-Inspection: ${CANCEL-EXPERT-INSPECTION:0 */1 * * * ?}
#每月1日的凌晨1点执行 # 每月1日的凌晨2点执行
invoice-report-month: ${INVOICE_REPORT_MONTH:0 53 14 * * ?} invoice-report-month: ${INVOICE_REPORT_MONTH:0 0 2 1 * ?}
#每年1月1日的凌晨2点执行 # 每年1月1日的凌晨3点执行
invoice-report-year: ${INVOICE_REPORT_YEAR:0 51 14 * * ?} invoice-report-year: ${INVOICE_REPORT_YEAR:0 0 3 1 1 ?}
...@@ -20,27 +20,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -20,27 +20,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="bo.annualInspectionStatus != null"> <if test="bo.annualInspectionStatus != null">
and zai.annual_inspection_status = #{bo.annualInspectionStatus} and zai.annual_inspection_status = #{bo.annualInspectionStatus}
</if> </if>
<if test="bo.searchValue != null and bo.searchValue !=''"> <if test="bo.annualInspectionSn != null">
AND (zai.annual_inspection_name like '%' || #{bo.searchValue} || '%' or zai.annual_inspection_sn like '%' || #{bo.searchValue} || '%') 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>
<if test="bo.contact != null and bo.contact !=''"> <if test="bo.contact != null and bo.contact !=''">
and zp.contact = #{bo.contact} and zp.contact = #{bo.contact}
</if> </if>
<if test="bo.beginAuditTime != null and bo.endAuditTime != null"> <if test="bo.start != null and bo.end != null">
AND audit_time &gt;= TO_DATE(#{bo.beginAuditTime}, 'YYYY-MM-DD') AND audit_time &gt;= TO_DATE(#{bo.start}, 'YYYY-MM-DD')
AND audit_time &lt;= TO_DATE(#{bo.endAuditTime}, 'YYYY-MM-DD') AND audit_time &lt; TO_DATE(#{bo.end}, 'YYYY-MM-DD') + INTERVAL '1 day'
</if> </if>
</where> </where>
ORDER BY zai.create_time desc ORDER BY zai.create_time desc
</select> </select>
<select id="selectApprovalByUserId" resultType="java.lang.String">
select nick_name from sys_user where user_id=#{updateBy}
</select>
<update id="batchAnnualInspection"> <update id="batchAnnualInspection">
UPDATE zjk_annual_inspection UPDATE zjk_annual_inspection
SET SET
annual_inspection_status = #{annualInspectionStatus}, annual_inspection_status = #{annualInspectionStatus},
audit_time = #{auditTime}, audit_time = #{auditTime},
update_time = #{updateTime},
update_by = #{updateBy}
<if test="reason != null and reason != ''"> <if test="reason != null and reason != ''">
reason = #{reason} ,reason = #{reason}
</if> </if>
WHERE id IN WHERE id IN
<foreach item="id" collection="ids" open="(" separator="," close=")"> <foreach item="id" collection="ids" open="(" separator="," close=")">
......
...@@ -17,6 +17,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -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 LEFT JOIN zjk_expert zp ON zp.expert_id = zai.expert_id and zp.status =2 and zp.delete_flag = 0
<where> <where>
zai.del_flag = 0 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!=''"> <if test="bo.annualInspectionStatus != null and bo.annualInspectionStatus!=''">
and zai.annual_inspection_status = #{bo.annualInspectionStatus} and zai.annual_inspection_status = #{bo.annualInspectionStatus}
</if> </if>
......
...@@ -181,7 +181,7 @@ ...@@ -181,7 +181,7 @@
</if> </if>
<if test="bo.status != null and bo.status != ''"> <if test="bo.status != null and bo.status != ''">
<if test="bo.status == 0"> <if test="bo.status == 0">
and dd.flag is null and dd.flag = 0
</if> </if>
<if test="bo.status != 0"> <if test="bo.status != 0">
and dd.flag = #{bo.status} and dd.flag = #{bo.status}
...@@ -252,6 +252,7 @@ ...@@ -252,6 +252,7 @@
left join zjk_expert zee on aa.expert_id = zee.expert_id 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 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' 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 )dd
<where> <where>
dd.userId is not null and dd.expert_id is not null dd.userId is not null and dd.expert_id is not null
......
...@@ -35,15 +35,23 @@ ...@@ -35,15 +35,23 @@
expert_money_file,product_id,product_type, expert_money_file,product_id,product_type,
product_name product_name
</sql> </sql>
<select id="selectMoneyInfoList" resultType="org.dromara.zjk.domain.vo.ZjkExpertMoneyInfoVO"> <select id="selectMoneyInfoList" resultType="org.dromara.zjk.domain.ZjkExpertMoneyInfo">
select zemi.* select zemi.money_id,zemi.expert_type,zemi.expert_id,
from zjk_expert_money_info zemi 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 where zemi."ASSIGN_ID" = 0
<if test="bo.expertIdcard != null and bo.expertIdcard != '' "> <if test="bo.expertIdcard != null and bo.expertIdcard != '' ">
and bo.id_card like '%' || #{bo.expertIdcard} ||'%' and ze.id_card like '%' || #{bo.expertIdcard} ||'%'
</if> </if>
<if test="bo.expertContact != null and bo.expertContact != '' "> <if test="bo.expertContact != null and bo.expertContact != '' ">
and bo.contact like '%' || #{bo.expertContact} || '%' and ze.contact like '%' || #{bo.expertContact} || '%'
</if> </if>
<if test="bo.expertMoneyFlag != null and bo.expertMoneyFlag != '' "> <if test="bo.expertMoneyFlag != null and bo.expertMoneyFlag != '' ">
and zemi.expert_money_flag = #{bo.expertMoneyFlag} and zemi.expert_money_flag = #{bo.expertMoneyFlag}
...@@ -56,7 +64,7 @@ ...@@ -56,7 +64,7 @@
</if> </if>
</select> </select>
<select id="selectListByMonth" resultType="org.dromara.zjk.domain.vo.ZjkExpertMoneyInfoVO"> <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 from zjk_expert_money_info zemi
inner join zjk_expert ze on ze.expert_id = zemi.expert_id 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 inner join zjk_expert_money_config zemc on ze.position_title_level = zemc.money_id
...@@ -75,15 +83,61 @@ ...@@ -75,15 +83,61 @@
</select> </select>
<select id="getExpertList" resultType="org.dromara.zjk.domain.vo.ZjkExpertVo"> <select id="getExpertList" resultType="org.dromara.zjk.domain.vo.ZjkExpertVo">
select DISTINCT ze.expert_id, select DISTINCT ze.expert_id,
ze.expert_name, ze.expert_name,
ze.contact, ze.contact,
ze.work_unit ze.id_card,
ze.position_title_level,
ze.work_unit
from zjk_expert_money_info zem from zjk_expert_money_info zem
left join zjk_expert ze ON zem.expert_id = ze.expert_id left join zjk_expert ze ON zem.expert_id = ze.expert_id
where zem.status = 1 where zem.status = 1
--取支付或支付的专家进行开票 --取支付或支付的专家进行开票
and zem.expert_money_flag != 1 and zem.expert_money_flag != 1
and zem.product_id = #{productId} 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> </select>
</mapper> </mapper>
...@@ -26,7 +26,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -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为正常 --> LEFT JOIN zjk_expert_money_config zemc ON zemc.money_id = zi.expert_title_level and zemc.ASSIGN_ID =0 <!--逻辑删除标志,0为正常 -->
<where> <where>
<if test="bo.expertName != null and bo.expertName != ''"> <if test="bo.expertName != null and bo.expertName != ''">
and zi.expert_name like '%' || #{bo.expertName} || '%' and ze.expert_name like '%' || #{bo.expertName} || '%'
</if> </if>
<if test="bo.expertPhone != null and bo.expertPhone != ''"> <if test="bo.expertPhone != null and bo.expertPhone != ''">
and zi.expert_phone like '%' || #{bo.expertPhone} || '%' and zi.expert_phone like '%' || #{bo.expertPhone} || '%'
...@@ -47,20 +47,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -47,20 +47,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
zi.*, zi.*,
zemc.money_type as expertTitleLevel, zemc.money_type as expertTitleLevel,
so.original_name AS invoiceAttachedName, so.original_name AS invoiceAttachedName,
so.url AS invoiceAttachedAddr so.url AS invoiceAttachedAddr,
zemi.settlement_sn as settleIdName
FROM FROM
zjk_invoice zi zjk_invoice zi
LEFT JOIN sys_oss so ON so.oss_id = zi.invoice_attached 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_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} WHERE zi.id = #{id}
</select> </select>
<select id="selectTotalMoney" resultType="java.math.BigDecimal"> <select id="selectTotalMoney" resultType="java.math.BigDecimal">
SELECT SELECT SUM(invoice_money) as totalMoney
SUM(invoice_money) as totalMoney FROM zjk_invoice
FROM
zjk_invoice
WHERE invoice_money IS NOT NULL WHERE invoice_money IS NOT NULL
</select> </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> </mapper>
...@@ -33,7 +33,12 @@ ...@@ -33,7 +33,12 @@
case when report_type = 0 then '每月' else '每年' end as typeDesc, 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') TO_CHAR(date_range_start, 'YYYY/MM/DD') || '~' || TO_CHAR(date_range_end, 'YYYY/MM/DD')
AS date_range 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>
<select id="getInfoList" resultType="org.dromara.zjk.domain.vo.FpReportInVO"> <select id="getInfoList" resultType="org.dromara.zjk.domain.vo.FpReportInVO">
select pp.* from ( select pp.* from (
......
...@@ -106,6 +106,12 @@ ...@@ -106,6 +106,12 @@
LEFT JOIN zjk_expert ze ON ze.user_id = ZL.create_by LEFT JOIN zjk_expert ze ON ze.user_id = ZL.create_by
where where
1=1 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 != ''"> <if test="bo.createBy != null and bo.createBy != ''">
and zl.create_by = #{bo.createBy} and zl.create_by = #{bo.createBy}
</if> </if>
......
...@@ -32,6 +32,6 @@ ...@@ -32,6 +32,6 @@
UPDATE_TIME UPDATE_TIME
</sql> </sql>
<select id="getAbleReward" resultType="org.dromara.zjk.domain.ZjkPointReward"> <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> </select>
</mapper> </mapper>
...@@ -43,6 +43,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -43,6 +43,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="bo.idCard != null and bo.idCard !=''"> <if test="bo.idCard != null and bo.idCard !=''">
and zp.id_card = #{bo.idCard} and zp.id_card = #{bo.idCard}
</if> </if>
<if test="bo.expertStatus != null and bo.expertStatus !=''">
and zrr.expert_status = #{bo.expertStatus}
</if>
</where> </where>
ORDER BY zrr.create_time desc ORDER BY zrr.create_time desc
</select> </select>
......
...@@ -23,11 +23,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -23,11 +23,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="getByProductIds" resultType="org.dromara.zjk.domain.vo.ZjkExpertItemVo"> <select id="getByProductIds" resultType="org.dromara.zjk.domain.vo.ZjkExpertItemVo">
select * select *
from zjk_expert_item from zjk_expert_item zei
where accept_status in (0,1) and item_id in where zei.accept_status in (0,1) and zei.item_id in
<foreach collection="ids" open="(" separator="," close=")" item="id"> <foreach collection="ids" open="(" separator="," close=")" item="id">
#{id} #{id}
</foreach> </foreach>
and EXISTS(select 1 from zjk_review_phase zrp where zrp.id=zei.review_id and zrp.effective=1)
</select> </select>
<select id="selectDataList" resultType="java.lang.String"> <select id="selectDataList" resultType="java.lang.String">
...@@ -74,11 +75,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -74,11 +75,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND zei.confirm_code = #{confirmCode} AND zei.confirm_code = #{confirmCode}
</when> </when>
<otherwise> <otherwise>
AND zei.refuse_code = #{confirmCode} AND zei.refuse_code = #{refuseCode}
</otherwise> </otherwise>
</choose> </choose>
</if> </if>
ORDER BY zei.review_id DESC LIMIT 1
</select> </select>
<select id="selectCancle" resultType="org.dromara.zjk.domain.vo.ZjkExpertItemVo"> <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 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" ...@@ -115,7 +116,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND e.contact = #{phone} AND e.contact = #{phone}
AND i.is_sure = 1 AND i.is_sure = 1
AND e.delete_flag = 0 AND e.delete_flag = 0
ORDER BY i.create_time DESC ORDER BY i.review_id DESC
LIMIT 1 LIMIT 1
</select> </select>
<select id="getCheckZjAccetpt" resultType="org.dromara.zjk.domain.ZjkExpertItem"> <select id="getCheckZjAccetpt" resultType="org.dromara.zjk.domain.ZjkExpertItem">
......
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper <!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.zjk.mapper.ZjkExpertMapper"> <mapper namespace="org.dromara.zjk.mapper.ZjkExpertMapper">
<select id="selectExistingIdCards" resultType="String"> <select id="selectExistingIdCards" resultType="String">
...@@ -62,12 +62,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -62,12 +62,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
e.approval_type, e.approval_type,
e.unit_type, e.unit_type,
e.id_card, e.id_card,
e.is_classified,
e.scope_of_activity,
e.origin e.origin
FROM zjk_expert e FROM zjk_expert e
LEFT JOIN zjk_expert_major em on em.expert_id = e.expert_id 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 LEFT JOIN zjk_expert_professional ep on ep.expert_id = e.expert_id
<where> <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 "> <if test="bo.status== null ">
AND e.status NOT IN (0, 4, 5) AND e.status NOT IN (0, 4, 5)
</if> </if>
...@@ -110,7 +113,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -110,7 +113,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="selectByUserIds" resultType="org.dromara.zjk.domain.vo.ZjkExpertVo"> <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 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 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_dept sd on su.dept_id = sd.dept_id
left join sys_oss so on su.avatar = so.oss_id left join sys_oss so on su.avatar = so.oss_id
...@@ -139,19 +142,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -139,19 +142,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectExpertAllList" resultType="org.dromara.zjk.domain.ZjkExpert"> <select id="selectExpertAllList" resultType="org.dromara.zjk.domain.ZjkExpert">
SELECT SELECT e.*,
e.*, zcu.credit_count
zcu.credit_count FROM zjk_expert e
FROM LEFT JOIN zjk_credit_user zcu ON zcu.expert_id = e.expert_id
zjk_expert e WHERE status = 2
LEFT JOIN zjk_credit_user zcu ON zcu.expert_id = e.expert_id
WHERE
status = 2
AND delete_flag = 0 AND delete_flag = 0
</select> </select>
<select id="selectDataWorkId" resultType="java.lang.String"> <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>
<select id="expertList" resultType="org.dromara.zjk.domain.vo.ZjkExpertVo"> <select id="expertList" resultType="org.dromara.zjk.domain.vo.ZjkExpertVo">
...@@ -194,6 +198,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -194,6 +198,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
e.unit_type, e.unit_type,
e.id_card, e.id_card,
e.origin, e.origin,
e.is_classified,
e.scope_of_activity,
zcu.reward_id,
zcr.reward_type, zcr.reward_type,
e.expert_sources, e.expert_sources,
e.position_title_level e.position_title_level
...@@ -214,110 +221,102 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -214,110 +221,102 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="bo.contact != null and bo.contact !=''"> <if test="bo.contact != null and bo.contact !=''">
AND e.contact like '%' || #{bo.contact} || '%' AND e.contact like '%' || #{bo.contact} || '%'
</if> </if>
<if test="bo.idCard != null and bo.idCard !=''">
AND e.id_card like '%' || #{bo.idCard} || '%'
</if>
<if test="bo.workProfessialYear != null"> <if test="bo.workProfessialYear != null">
AND e.work_professial_year = #{bo.workProfessialYear} AND e.work_professial_year = #{bo.workProfessialYear}
</if> </if>
<if test="bo.unitType != null"> <if test="bo.unitType != null">
and e.unit_type=#{bo.unitType} and e.unit_type=#{bo.unitType}
</if> </if>
order by e.update_time desc
</where> </where>
order by e.update_time desc
</select> </select>
<select id="getExpertBaseInfo" resultType="org.dromara.zjk.domain.ExpertBaseInfo"> <select id="getExpertBaseInfo" resultType="org.dromara.zjk.domain.ExpertBaseInfo">
SELECT SELECT ze.expert_name,
ze.expert_name, ze.work_unit,
ze.work_unit, ze.duty,
ze.duty, ze.status,
ze.status, zpu.point_count,
zpu.point_count, zcl.credit_name,
zcl.credit_name, ze.perform_work_id
ze.perform_work_id FROM zjk_expert ze
FROM LEFT JOIN zjk_point_user zpu on zpu.expert_id = ze.expert_id
zjk_expert ze LEFT JOIN zjk_credit_user zcu on zcu.expert_id = ze.expert_id
LEFT JOIN zjk_point_user zpu on zpu.expert_id = ze.expert_id LEFT JOIN zjk_credit_lv zcl on zcl."id" = zcu.lv_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} WHERE ze.user_id = #{userId}
</select> </select>
<select id="getExpertPerformWorkCount" resultType="org.dromara.zjk.domain.vo.ExpertPerformWorkCountVO"> <select id="getExpertPerformWorkCount" resultType="org.dromara.zjk.domain.vo.ExpertPerformWorkCountVO">
SELECT SELECT
CAST(perform_work_id AS INTEGER) AS performWork, CAST(perform_work_id AS INTEGER) AS performWork,
COUNT(*) AS COUNT COUNT(*) AS COUNT
FROM ( FROM (
SELECT SELECT
tenant_id, tenant_id,
TRIM(VALUE) AS perform_work_id, TRIM(VALUE) AS perform_work_id,
update_time update_time
FROM FROM
zjk_expert, zjk_expert,
UNNEST(string_to_array(perform_work_id, ',')) AS VALUE UNNEST(string_to_array(perform_work_id, ',')) AS VALUE
<where> <where>
status = 2 status = 2
<if test="startDate != null and endDate != null"> <if test="startDate != null and endDate != null">
and update_time BETWEEN #{startDate} AND #{endDate} and update_time BETWEEN #{startDate} AND #{endDate}
</if> </if>
</where> </where>
) AS split_values ) AS split_values
GROUP BY GROUP BY
perform_work_id perform_work_id
ORDER BY ORDER BY
performWork ASC; performWork ASC;
</select> </select>
<select id="getAgeRangeStatistics" resultType="java.util.Map"> <select id="getAgeRangeStatistics" resultType="java.util.Map">
SELECT SELECT CASE
CASE WHEN age BETWEEN 20 AND 24 THEN '20-25'
WHEN age BETWEEN 20 AND 24 THEN '20-25' WHEN age BETWEEN 25 AND 29 THEN '25-30'
WHEN age BETWEEN 25 AND 29 THEN '25-30' WHEN age BETWEEN 30 AND 34 THEN '30-35'
WHEN age BETWEEN 30 AND 34 THEN '30-35' WHEN age BETWEEN 35 AND 39 THEN '35-40'
WHEN age BETWEEN 35 AND 39 THEN '35-40' WHEN age BETWEEN 40 AND 44 THEN '40-45'
WHEN age BETWEEN 40 AND 44 THEN '40-45' WHEN age BETWEEN 45 AND 49 THEN '45-50'
WHEN age BETWEEN 45 AND 49 THEN '45-50' WHEN age BETWEEN 50 AND 54 THEN '50-55'
WHEN age BETWEEN 50 AND 54 THEN '50-55' WHEN age BETWEEN 55 AND 59 THEN '55-60'
WHEN age BETWEEN 55 AND 59 THEN '55-60' WHEN age BETWEEN 60 AND 64 THEN '60-65'
WHEN age BETWEEN 60 AND 64 THEN '60-65' WHEN age BETWEEN 65 AND 70 THEN '65-70'
WHEN age BETWEEN 65 AND 70 THEN '65-70' ELSE '其他'
ELSE '其他' END AS age_range,
END AS age_range, COUNT(*) AS count
COUNT(*) AS count FROM (SELECT FLOOR(EXTRACT(YEAR FROM age(birth_date))) AS age
FROM ( FROM zjk_expert
SELECT WHERE birth_date IS NOT NULL
FLOOR(EXTRACT(YEAR FROM age(birth_date))) AS age AND status = 2) t
FROM zjk_expert
WHERE birth_date IS NOT NULL
AND status = 2
) t
GROUP BY age_range GROUP BY age_range
ORDER BY age_range; ORDER BY age_range;
</select> </select>
<select id="getUnitCount" resultType="org.dromara.zjk.domain.vo.ExpertPerformWorkCountVO"> <select id="getUnitCount" resultType="org.dromara.zjk.domain.vo.ExpertPerformWorkCountVO">
SELECT SELECT ifnull(unit_type, 0) as unit_type,
ifnull(unit_type,0)as unit_type, COUNT(1) AS count,
COUNT(1) AS count, SUM(COUNT(1)) OVER () AS total_count -- 计算总和
SUM(COUNT(1)) OVER () AS total_count -- 计算总和 FROM zjk_expert
FROM where status = 2
zjk_expert GROUP BY unit_type;
where status = 2
GROUP BY
unit_type;
</select> </select>
<select id="getPoliticsCount" resultType="org.dromara.zjk.domain.vo.ExpertPerformWorkCountVO"> <select id="getPoliticsCount" resultType="org.dromara.zjk.domain.vo.ExpertPerformWorkCountVO">
SELECT SELECT politics,
politics, COUNT(1)
COUNT( 1 ) FROM zjk_expert
FROM WHERE politics IS NOT NULL
zjk_expert AND status = 2
WHERE GROUP BY politics
politics IS NOT NULL AND status = 2
GROUP BY
politics
</select> </select>
<select id="workProfessialYear" resultType="java.util.Map"> <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 FROM zjk_expert
WHERE status = 2 WHERE status = 2
GROUP BY work_professial_year GROUP BY work_professial_year
...@@ -325,11 +324,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -325,11 +324,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getApprovalTimeAnalysis" resultType="java.util.Map"> <select id="getApprovalTimeAnalysis" resultType="java.util.Map">
SELECT SELECT
TO_CHAR( approval_time, 'YYYY-MM-DD' ) AS approval_date,-- 格式化审批时间为日期 TO_CHAR( approval_time, 'YYYY-MM-DD' ) AS approval_date,-- 格式化审批时间为日期
COUNT( * ) AS approval_count -- 统计每天的记录数 COUNT( * ) AS approval_count -- 统计每天的记录数
FROM FROM
zjk_expert zjk_expert
<where> <where>
status = 2 status = 2
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''"> <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
...@@ -337,27 +336,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -337,27 +336,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if> </if>
</where> </where>
GROUP BY GROUP BY
TO_CHAR( approval_time, 'YYYY-MM-DD' ) -- 按天分组 TO_CHAR( approval_time, 'YYYY-MM-DD' ) -- 按天分组
ORDER BY ORDER BY
approval_date;-- 按日期排序 approval_date;-- 按日期排序
</select> </select>
<select id="selectByUserId" resultType="org.dromara.zjk.domain.vo.ZjkExpertVo"> <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 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 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_dept sd on su.dept_id = sd.dept_id
left join sys_oss so on su.avatar = so.oss_id left join sys_oss so on su.avatar = so.oss_id
where su.user_id = #{id} where su.user_id = #{id}
</select> </select>
<select id="selectZjkExpertVo" resultType="org.dromara.zjk.domain.vo.ZjkExpertVo"> <select id="selectZjkExpertVo" resultType="org.dromara.zjk.domain.vo.ZjkExpertVo">
SELECT SELECT
ze.*, ze.*,
zemc.money_type as positionTitleLevelStr zemc.money_type as positionTitleLevelStr
FROM FROM
zjk_expert ze zjk_expert ze
LEFT JOIN zjk_expert_money_config zemc ON zemc.money_id = ze.position_title_level LEFT JOIN zjk_expert_money_config zemc ON zemc.money_id = ze.position_title_level
<where> <where>
ze.delete_flag = '0' ze.delete_flag = '0'
<if test="userId != null"> <if test="userId != null">
...@@ -370,28 +369,92 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -370,28 +369,92 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="getApprovalTimeCountThisYear" resultType="java.lang.Long"> <select id="getApprovalTimeCountThisYear" resultType="java.lang.Long">
SELECT SELECT COUNT(*)
COUNT(*) FROM "zjk_expert"
FROM WHERE EXTRACT(YEAR FROM "approval_time") = EXTRACT(YEAR FROM CURRENT_DATE);
"zjk_expert"
WHERE
EXTRACT(YEAR FROM "approval_time") = EXTRACT(YEAR FROM CURRENT_DATE);
</select> </select>
<select id="getPhonesById" resultType="org.dromara.zjk.domain.ZjkExpert"> <select id="getPhonesById" resultType="org.dromara.zjk.domain.ZjkExpert">
select user_id,contact from zjk_expert where 1=1 select user_id,contact from zjk_expert where 1=1
<if test="receiveUserIds != null and receiveUserIds.size() > 0"> <if test="receiveUserIds != null and receiveUserIds.size() > 0">
AND user_id IN AND user_id IN
<foreach collection="receiveUserIds" item="id" open="(" separator="," close=")"> <foreach collection="receiveUserIds" item="id" open="(" separator="," close=")">
#{id} #{id}
</foreach> </foreach>
</if> </if>
</select> </select>
<select id="getUserIdByPhone" resultType="java.lang.Long"> <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>
<select id="selectIdsByName" resultType="java.lang.Long"> <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>
<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 id="updateHmac">
UPDATE zjk_expert UPDATE zjk_expert
...@@ -402,4 +465,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -402,4 +465,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</set> </set>
WHERE expert_id = #{expertId} WHERE expert_id = #{expertId}
</update> </update>
<update id="handleClassified">
UPDATE zjk_expert
set is_classified = #{isClassified}
WHERE expert_id = #{expertId}
</update>
</mapper> </mapper>
...@@ -19,7 +19,8 @@ ...@@ -19,7 +19,8 @@
</select> </select>
<select id="selectExtreationList" resultType="org.dromara.zjk.domain.vo.ZjkItemExtreationVo"> <select id="selectExtreationList" resultType="org.dromara.zjk.domain.vo.ZjkItemExtreationVo">
SELECT 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 FROM
zjk_item_extreation zie zjk_item_extreation zie
LEFT JOIN zjk_product zp ON zp.ID = zie.item_id LEFT JOIN zjk_product zp ON zp.ID = zie.item_id
...@@ -41,11 +42,14 @@ ...@@ -41,11 +42,14 @@
and zp.product_sn like '%' || #{bo.itemCode} || '%' and zp.product_sn like '%' || #{bo.itemCode} || '%'
</if> </if>
<if test="bo.itemName != null and bo.itemName != '' "> <if test="bo.itemName != null and bo.itemName != '' ">
and zp.product_name like '%' || #{bo.itemName} and zp.product_name like '%' || #{bo.itemName} || '%'
</if> </if>
<if test="bo.reviewSn != null and bo.reviewSn != '' "> <if test="bo.reviewSn != null and bo.reviewSn != '' ">
and zrp.review_sn = #{bo.reviewSn} and zrp.review_sn = #{bo.reviewSn}
</if> </if>
<if test="bo.extractionSn != null and bo.extractionSn != '' ">
and zie.extraction_sn like '%' || #{bo.extractionSn} || '%'
</if>
</where> </where>
order by zie.extraction_time desc order by zie.extraction_time desc
</select> </select>
......
...@@ -12,46 +12,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -12,46 +12,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</update> </update>
<select id="reviewProductList" resultType="org.dromara.zjk.domain.vo.ZjkReviewProductVo"> <select id="reviewProductList" resultType="org.dromara.zjk.domain.vo.ZjkReviewProductVo">
SELECT select zp.product_name,zrp.review_sn,zp.id,
zp.product_name,
zp.product_sn, zp.product_sn,
zp.product_unit, zp.product_unit,
zp.unit_by, zp.unit_by,
zp.unit_concat, zp.unit_concat,
zvp.review_sn, zrp.review_time,
zvp.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
zp.id AS product_id WHERE zp.id is not null and zrp.review_time <![CDATA[ < ]]> CURRENT_TIMESTAMP
FROM zjk_expert_item zei <if test="bo.isExpert==1">
INNER JOIN zjk_review_phase zvp ON zei.review_id = zvp.id 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})
INNER JOIN zjk_product zp ON zp.id = zei.item_id </if>
WHERE 1 = 1 <if test="bo.isExpert==0">
AND effective = 1 and zp.user_id = #{bo.userId}
</if>
<if test="bo.reviewSn != null and bo.reviewSn != ''"> <if test="bo.reviewSn != null and bo.reviewSn != ''">
AND zvp.review_sn = #{bo.reviewSn} AND zrp.review_sn = #{bo.reviewSn}
</if> </if>
<if test="bo.search != null and bo.search != ''"> <if test="bo.search != null and bo.search != ''">
AND (zp.product_name LIKE CONCAT('%', #{bo.search}, '%') AND (zp.product_name like '%' || #{bo.search} || '%'
OR zp.product_sn LIKE CONCAT('%', #{bo.search}, '%')) OR zp.product_sn like '%' || #{bo.search} || '%' )
</if> </if>
<if test="bo.startTime != null"> <if test="bo.startTime != null">
AND zvp.review_time &gt;= #{bo.startTime} AND zrp.review_time &gt;= #{bo.startTime}
</if> </if>
<if test="bo.endTime != null"> <if test="bo.endTime != null">
AND zvp.review_time &lt;= #{bo.endTime} AND zrp.review_time &lt;= #{bo.endTime}
</if> </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>
<select id="getByProductId" resultType="java.lang.Long"> <select id="getByProductId" resultType="java.lang.Long">
...@@ -70,10 +59,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -70,10 +59,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
Max(zvp.review_sn) as review_sn, Max(zvp.review_sn) as review_sn,
Max(zvp.review_time) as review_time, Max(zvp.review_time) as review_time,
Max(zp.id) as product_id 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_review_phase zvp on zei.review_id = zvp.id
inner JOIN zjk_product zp on zp.id = zei.item_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!= '' "> <if test="bo.search != null and bo.search!= '' ">
and (zp.product_name like '%' || #{bo.search} ||'%' or zp.product_sn like '%' || #{bo.search} ||'%' ) and (zp.product_name like '%' || #{bo.search} ||'%' or zp.product_sn like '%' || #{bo.search} ||'%' )
</if> </if>
...@@ -250,4 +240,81 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -250,4 +240,81 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where zrp.item_extreation_id = #{extractionId} where zrp.item_extreation_id = #{extractionId}
order by zrp.CREATE_TIME desc order by zrp.CREATE_TIME desc
</select> </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> </mapper>
...@@ -55,8 +55,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -55,8 +55,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
SELECT original_name FROM sys_oss where oss_id= #{invFileId} SELECT original_name FROM sys_oss where oss_id= #{invFileId}
</select> </select>
<select id="getCheckNo" resultType="java.lang.String"> <select id="getCheckNo" resultType="java.lang.String">
SELECT 'DZ' || TO_CHAR(NOW(), 'YYYYMMDD') || '-' || ( SELECT 'DZ' || TO_CHAR(NOW(), 'YYYYMMDD') || '-' || LPAD(FLOOR(RANDOM() * 90000 + 10000)::text, 5, '0') as id
SELECT COUNT(1) + 1
FROM zjk_inout_check)
</select> </select>
<select id="selectUserNameById" resultType="java.lang.String">
select user_name from sys_user where user_id=#{createBy}
</select>
</mapper> </mapper>
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper <!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.zjk.mapper.ZjkCreditMapper"> <mapper namespace="org.dromara.zjk.mapper.ZjkCreditMapper">
<select id="queryPointList" resultType="org.dromara.zjk.domain.vo.CreditShowVO"> <select id="queryPointList" resultType="org.dromara.zjk.domain.vo.CreditShowVO">
...@@ -23,10 +23,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -23,10 +23,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<where> <where>
1=1 1=1
<if test="bo.startTime !=null "> <if test="bo.startTime !=null ">
and ze.approval_time >= #{bo.startTime} and ze.approval_time >= #{bo.startTime}
</if> </if>
<if test="bo.endTime !=null "> <if test="bo.endTime !=null ">
and ze.approval_time &lt;= #{bo.endTime} and ze.approval_time &lt;= #{bo.endTime}
</if> </if>
<if test="bo.expertName != null and bo.expertName != ''"> <if test="bo.expertName != null and bo.expertName != ''">
and ze.expert_name like '%' || #{bo.expertName} || '%' and ze.expert_name like '%' || #{bo.expertName} || '%'
...@@ -42,5 +42,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -42,5 +42,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ORDER BY credit_count DESC ORDER BY credit_count DESC
</select> </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> </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" ...@@ -28,4 +28,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and zlc.information_id = #{bo.informationId} and zlc.information_id = #{bo.informationId}
</if> </if>
</select> </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> </mapper>
...@@ -19,9 +19,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -19,9 +19,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
zlc.course_brief, zlc.course_brief,
zlc.perform_work_id, zlc.perform_work_id,
so.original_name, so.original_name,
so.url so.url,
su.nick_name createBy,
zlc.create_time
FROM FROM
zjk_learning_course zlc 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 LEFT JOIN sys_oss so on so.oss_id = zlc.course_attachment
<where> <where>
<if test="id != null"> <if test="id != null">
......
...@@ -3,6 +3,12 @@ ...@@ -3,6 +3,12 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.zjk.learning_world.mapper.ZjkLearningToolMapper"> <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 id="queryById" resultType="org.dromara.zjk.learning_world.domain.vo.ZjkLearningToolVo">
SELECT SELECT
zlt."id", zlt."id",
...@@ -37,6 +43,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -37,6 +43,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="bo.name != null and bo.name !=''"> <if test="bo.name != null and bo.name !=''">
and zlt."name" like '%' || #{bo.name} || '%' and zlt."name" like '%' || #{bo.name} || '%'
</if> </if>
<if test="bo.status != null and bo.status !=''">
and zlt.status = #{bo.status}
</if>
</where> </where>
</select> </select>
</mapper> </mapper>
...@@ -44,7 +44,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -44,7 +44,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
FROM zjk_product zp FROM zjk_product zp
left JOIN zjk_review_phase zrp on zp.id=zrp.item_id left JOIN zjk_review_phase zrp on zp.id=zrp.item_id
LEFT JOIN zjk_expert ze on ze.user_id = zp.user_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 !='' "> <if test="bo.productName != null and bo.productName !='' ">
and zp.product_name like '%' || #{bo.productName} || '%' and zp.product_name like '%' || #{bo.productName} || '%'
</if> </if>
...@@ -90,6 +90,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -90,6 +90,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="bo.productName != null and bo.getProductName != '' "> <if test="bo.productName != null and bo.getProductName != '' ">
and zp.product_name like '%' || #{bo.productName} || '%' and zp.product_name like '%' || #{bo.productName} || '%'
</if> </if>
<if test="bo.userId != null and bo.userId != '' ">
and zp.user_id = #{bo.userId}
</if>
</select> </select>
<select id="getProductTypeCountReport" resultType="org.dromara.zjk.domain.ProductCountReport"> <select id="getProductTypeCountReport" resultType="org.dromara.zjk.domain.ProductCountReport">
...@@ -143,10 +146,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -143,10 +146,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<where> <where>
del_flag = 0 del_flag = 0
<if test="bo.productSn !=null and bo.productSn != '' "> <if test="bo.productSn !=null and bo.productSn != '' ">
and product_sn like '||' #{bo.productSn} '||' and product_sn like '%' || #{bo.productSn} || '%'
</if> </if>
<if test="bo.productName !=null and bo.productName != '' "> <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> </if>
ORDER BY create_time DESC ORDER BY create_time DESC
</where> </where>
...@@ -158,4 +164,43 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -158,4 +164,43 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
left join sys_dept sd on sd.dept_id = zp.create_dept left join sys_dept sd on sd.dept_id = zp.create_dept
where zp.del_flag = 0 where zp.del_flag = 0
</select> </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> </mapper>
...@@ -21,6 +21,9 @@ ...@@ -21,6 +21,9 @@
<if test="bo.fileName != null and bo.fileName != ''"> <if test="bo.fileName != null and bo.fileName != ''">
and a.original_name like '%' || #{bo.fileName} || '%' and a.original_name like '%' || #{bo.fileName} || '%'
</if> </if>
<if test="bo.userId != null and bo.userId != '' ">
and zp.user_id = #{bo.userId}
</if>
</where> </where>
</select> </select>
<select id="selectVoByProductIdReviewSn" resultType="org.dromara.zjk.domain.ZjkProductReviewsn"> <select id="selectVoByProductIdReviewSn" resultType="org.dromara.zjk.domain.ZjkProductReviewsn">
......
...@@ -62,7 +62,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -62,7 +62,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="bo.statusList != null and bo.statusList.size > 0 "> <if test="bo.statusList != null and bo.statusList.size > 0 ">
and zps.status in and zps.status in
<foreach collection="bo.statusList" open="(" separator="," close=")" item="status"> <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> </foreach>
</if> </if>
</select> </select>
......
...@@ -29,24 +29,11 @@ public class WebSecurityConfigurer { ...@@ -29,24 +29,11 @@ public class WebSecurityConfigurer {
@Bean @Bean
public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl(adminContextPath + "/");
return httpSecurity return httpSecurity
.headers((header) -> .headers((header) ->
header.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable)) header.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable))
.authorizeHttpRequests((authorize) -> .authorizeHttpRequests((authorize) ->
authorize.requestMatchers( authorize.anyRequest().permitAll()) // 允许所有请求
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())
.csrf(AbstractHttpConfigurer::disable) .csrf(AbstractHttpConfigurer::disable)
.build(); .build();
} }
......
...@@ -13,6 +13,17 @@ spring: ...@@ -13,6 +13,17 @@ spring:
--- # nacos 配置 --- # nacos 配置
spring: spring:
security:
user:
name: ruoyi
password: 123456
boot:
admin:
ui:
title: RuoYi-Cloud-Plus服务监控中心
discovery:
# seata 不具有健康检查的能力 防止报错排除掉
ignored-services: ruoyi-seata-server
cloud: cloud:
nacos: nacos:
# nacos 服务地址 # nacos 服务地址
......
...@@ -22,7 +22,6 @@ server.servlet.contextPath=/nacos ...@@ -22,7 +22,6 @@ server.servlet.contextPath=/nacos
server.error.include-message=ALWAYS server.error.include-message=ALWAYS
### Default web server port: ### Default web server port:
server.port=8848 server.port=8848
#*************** Network Related Configurations ***************# #*************** Network Related Configurations ***************#
### If prefer hostname over ip for Nacos server addresses in cluster.conf: ### If prefer hostname over ip for Nacos server addresses in cluster.conf:
# nacos.inetutils.prefer-hostname-over-ip=false # nacos.inetutils.prefer-hostname-over-ip=false
...@@ -93,7 +92,7 @@ spring.boot.admin.client.instance.metadata.userpassword: ${spring.boot.admin.cli ...@@ -93,7 +92,7 @@ spring.boot.admin.client.instance.metadata.userpassword: ${spring.boot.admin.cli
### Metrics for prometheus ### Metrics for prometheus
management.endpoints.web.exposure.include=* management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,heapdump,threaddump,mappings
### Metrics for elastic search ### Metrics for elastic search
management.metrics.export.elastic.enabled=false management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost:9200 #management.metrics.export.elastic.host=http://localhost:9200
...@@ -138,7 +137,7 @@ nacos.core.auth.plugin.nacos.token.expire.seconds=18000 ...@@ -138,7 +137,7 @@ nacos.core.auth.plugin.nacos.token.expire.seconds=18000
### The default token (Base64 string): ### The default token (Base64 string):
#nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789 #nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
### 此处为token密钥 需要自行修改 ### 此处为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 ### worked when nacos.core.auth.system.type=ldap,{0} is Placeholder,replace login username
#nacos.core.auth.ldap.url=ldap://localhost:389 #nacos.core.auth.ldap.url=ldap://localhost:389
...@@ -192,7 +191,6 @@ nacos.istio.mcp.server.enabled=false ...@@ -192,7 +191,6 @@ nacos.istio.mcp.server.enabled=false
# nacos.core.member.meta.site= # nacos.core.member.meta.site=
# nacos.core.member.meta.adweight= # nacos.core.member.meta.adweight=
# nacos.core.member.meta.weight= # nacos.core.member.meta.weight=
### MemberLookup ### MemberLookup
### Addressing pattern category, If set, the priority is highest ### Addressing pattern category, If set, the priority is highest
# nacos.core.member.lookup.type=[file,address-server] # 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