commit
b51b9c28a2
File diff suppressed because one or more lines are too long
@ -0,0 +1,238 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<parent> |
||||
<groupId>digital.laboratory.platform</groupId> |
||||
<artifactId>DigitalLaboratoryPlatform</artifactId> |
||||
<version>2022.10.11-snapshots</version> |
||||
</parent> |
||||
|
||||
<artifactId>dlp-repository</artifactId> |
||||
<packaging>jar</packaging> |
||||
<description>DLP 的检材仓库管理</description> |
||||
<properties> |
||||
<maven.compiler.target>1.8</maven.compiler.target> |
||||
<maven.compiler.source>1.8</maven.compiler.source> |
||||
<junit.version>5.7.1</junit.version> |
||||
</properties> |
||||
|
||||
<dependencies> |
||||
<!--注册中心客户端--> |
||||
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery --> |
||||
<dependency> |
||||
<groupId>com.alibaba.cloud</groupId> |
||||
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> |
||||
<version>2021.1</version> |
||||
</dependency> |
||||
|
||||
<!--<dependency> |
||||
<groupId>com.deepoove.poi</groupId> |
||||
<artifactId>poi-tl</artifactId> |
||||
<version>1.12.0</version> |
||||
</dependency>--> |
||||
|
||||
<!--配置中心客户端--> |
||||
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-config --> |
||||
<dependency> |
||||
<groupId>com.alibaba.cloud</groupId> |
||||
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> |
||||
<version>2021.1</version> |
||||
</dependency> |
||||
|
||||
<!-- swagger --> |
||||
<dependency> |
||||
<groupId>digital.laboratory.platform</groupId> |
||||
<artifactId>dlp-common-swagger</artifactId> |
||||
<version>2022.10.11-snapshots</version> |
||||
</dependency> |
||||
|
||||
<!-- poi-tl word 模板处理器 http://deepoove.com/poi-tl --> |
||||
<dependency> |
||||
<groupId>com.deepoove</groupId> |
||||
<artifactId>poi-tl</artifactId> |
||||
<version>1.12.0</version> |
||||
</dependency> |
||||
|
||||
<!-- for MockMultipartFile--> |
||||
<dependency> |
||||
<groupId>org.springframework</groupId> |
||||
<artifactId>spring-test</artifactId> |
||||
</dependency> |
||||
|
||||
<dependency> |
||||
<groupId>digital.laboratory.platform</groupId> |
||||
<artifactId>dlp-common-oss</artifactId> |
||||
<version>2022.10.11-snapshots</version> |
||||
</dependency> |
||||
|
||||
<dependency> |
||||
<groupId>digital.laboratory.platform</groupId> |
||||
<artifactId>dlp-common-remote-word2pdf</artifactId> |
||||
<version>2022.10.11-snapshots</version> |
||||
</dependency> |
||||
|
||||
|
||||
<dependency> |
||||
<groupId>digital.laboratory.platform</groupId> |
||||
<artifactId>dlp-common-seata</artifactId> |
||||
<version>2022.10.11-snapshots</version> |
||||
</dependency> |
||||
|
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-web</artifactId> |
||||
<version>2.5.5</version> |
||||
</dependency> |
||||
<!--断路器依赖--> |
||||
<dependency> |
||||
<groupId>digital.laboratory.platform</groupId> |
||||
<artifactId>dlp-common-feign</artifactId> |
||||
<version>2022.10.11-snapshots</version> |
||||
</dependency> |
||||
|
||||
<!--security--> |
||||
<dependency> |
||||
<groupId>digital.laboratory.platform</groupId> |
||||
<artifactId>dlp-common-security</artifactId> |
||||
<version>2022.10.11-snapshots</version> |
||||
</dependency> |
||||
|
||||
<!--JDBC相关--> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-jdbc</artifactId> |
||||
</dependency> |
||||
|
||||
<!-- <dependency>--> |
||||
<!-- <groupId>org.springframework.boot</groupId>--> |
||||
<!-- <artifactId>spring-boot-starter-thymeleaf</artifactId>--> |
||||
<!-- </dependency>--> |
||||
|
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-test</artifactId> |
||||
<scope>test</scope> |
||||
</dependency> |
||||
|
||||
<!--core 工具类--> |
||||
<dependency> |
||||
<groupId>digital.laboratory.platform</groupId> |
||||
<artifactId>dlp-common-core</artifactId> |
||||
<version>2022.10.11-snapshots</version> |
||||
</dependency> |
||||
|
||||
|
||||
<!-- 数据库 mysql依赖 --> |
||||
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> |
||||
<dependency> |
||||
<groupId>mysql</groupId> |
||||
<artifactId>mysql-connector-java</artifactId> |
||||
<version>8.0.28</version> |
||||
</dependency> |
||||
|
||||
<!--undertow容器--> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-undertow</artifactId> |
||||
</dependency> |
||||
|
||||
<!-- log --> |
||||
<dependency> |
||||
<groupId>digital.laboratory.platform</groupId> |
||||
<artifactId>dlp-common-log</artifactId> |
||||
<version>2022.10.11-snapshots</version> |
||||
</dependency> |
||||
|
||||
<!-- 业务数据的依赖 --> |
||||
<dependency> |
||||
<groupId>digital.laboratory.platform</groupId> |
||||
<artifactId>dlp-admin-api</artifactId> |
||||
<version>2022.10.11-snapshots</version> |
||||
</dependency> |
||||
|
||||
</dependencies> |
||||
|
||||
<build> |
||||
<plugins> |
||||
<plugin> |
||||
<groupId>org.apache.maven.plugins</groupId> |
||||
<artifactId>maven-compiler-plugin</artifactId> |
||||
<configuration> |
||||
<compilerArgument>-Xlint:unchecked</compilerArgument> |
||||
</configuration> |
||||
<version>3.8.1</version> |
||||
</plugin> |
||||
<plugin> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-maven-plugin</artifactId> |
||||
</plugin> |
||||
<plugin> |
||||
<groupId>io.fabric8</groupId> |
||||
<artifactId>docker-maven-plugin</artifactId> |
||||
</plugin> |
||||
|
||||
<plugin> |
||||
<groupId>org.codehaus.mojo</groupId> |
||||
<artifactId>build-helper-maven-plugin</artifactId> |
||||
<version>3.3.0</version> |
||||
<executions> |
||||
<execution> |
||||
<id>timestamp-property</id> |
||||
<goals> |
||||
<goal>timestamp-property</goal> |
||||
</goals> |
||||
<configuration> |
||||
<name>timestamp</name> |
||||
<pattern>yyyy-MM-dd HH:mm:ss</pattern> |
||||
<locale>zh_CN</locale> |
||||
<timeZone>Asia/Shanghai</timeZone> |
||||
</configuration> |
||||
</execution> |
||||
</executions> |
||||
</plugin> |
||||
|
||||
|
||||
|
||||
<plugin> |
||||
<groupId>org.apache.maven.plugins</groupId> |
||||
<artifactId>maven-surefire-plugin</artifactId> |
||||
<configuration> |
||||
<testFailureIgnore>true</testFailureIgnore> |
||||
</configuration> |
||||
</plugin> |
||||
|
||||
|
||||
|
||||
|
||||
<plugin> |
||||
<artifactId>maven-resources-plugin</artifactId> |
||||
<groupId>org.apache.maven.plugins</groupId> |
||||
<version>3.1.0</version> |
||||
<executions> |
||||
<execution> |
||||
<id>copy-resource-one</id> |
||||
<phase>install</phase> |
||||
<goals> |
||||
<goal>copy-resources</goal> |
||||
</goals> |
||||
<configuration> |
||||
<outputDirectory>${basedir}/../out</outputDirectory> |
||||
<resources> |
||||
<resource> |
||||
<directory>${basedir}/target</directory> |
||||
<includes> |
||||
<include>${project.artifactId}.jar</include> |
||||
</includes> |
||||
</resource> |
||||
</resources> |
||||
</configuration> |
||||
</execution> |
||||
</executions> |
||||
</plugin> |
||||
|
||||
</plugins> |
||||
</build> |
||||
|
||||
</project> |
@ -0,0 +1,41 @@ |
||||
package digital.laboratory.platform.imr; |
||||
|
||||
import digital.laboratory.platform.common.feign.annotation.EnableDLPFeignClients; |
||||
import digital.laboratory.platform.common.security.annotation.EnableDLPResourceServer; |
||||
import digital.laboratory.platform.common.swagger.annotation.EnableDLPSwagger2; |
||||
import org.springframework.boot.SpringApplication; |
||||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||
import org.springframework.cache.annotation.EnableCaching; |
||||
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; |
||||
import org.springframework.cloud.openfeign.EnableFeignClients; |
||||
import org.springframework.context.annotation.ComponentScan; |
||||
import org.springframework.context.annotation.Configuration; |
||||
|
||||
@Configuration // ???
|
||||
@EnableDLPSwagger2 |
||||
@EnableDLPFeignClients |
||||
@EnableDiscoveryClient |
||||
@EnableDLPResourceServer |
||||
@SpringBootApplication(scanBasePackages="digital.laboratory.platform") |
||||
@EnableCaching |
||||
public class IdentificationMaterialRepositoryApplication { |
||||
|
||||
public static void main(String[] args) { |
||||
SpringApplication.run(IdentificationMaterialRepositoryApplication.class, args); |
||||
|
||||
|
||||
// System.out.println("\n\n\n");
|
||||
// System.out.println("-----------------------------");
|
||||
// System.out.println("end of Spring Application main()");
|
||||
// System.out.println("-----------------------------");
|
||||
// System.out.println("\n\n\n");
|
||||
|
||||
|
||||
} |
||||
|
||||
// @Bean
|
||||
// RestTemplate restTemplate() {
|
||||
// return new RestTemplate();
|
||||
// }
|
||||
//
|
||||
} |
@ -0,0 +1,77 @@ |
||||
package digital.laboratory.platform.imr.component; |
||||
|
||||
|
||||
import java.sql.Timestamp; |
||||
import java.text.DateFormat; |
||||
import java.text.ParseException; |
||||
import java.text.ParsePosition; |
||||
import java.text.SimpleDateFormat; |
||||
import java.time.LocalDate; |
||||
import java.time.LocalDateTime; |
||||
import java.time.LocalTime; |
||||
import java.time.ZoneId; |
||||
import java.time.format.DateTimeFormatter; |
||||
import java.time.temporal.ChronoField; |
||||
import java.time.temporal.ChronoUnit; |
||||
import java.time.temporal.TemporalAdjusters; |
||||
import java.util.*; |
||||
|
||||
/** |
||||
* @Description: |
||||
* @Author: fangzh |
||||
* @CreateDate: 2020-11-18 17:53 |
||||
*/ |
||||
public class DateUtils { |
||||
|
||||
/** |
||||
* 获取当前的分钟 |
||||
* |
||||
* @return |
||||
*/ |
||||
public static String getTime() { |
||||
Date currentTime = new Date(); |
||||
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||
String dateString = formatter.format(currentTime); |
||||
String min = dateString.substring(14, 16); |
||||
return min; |
||||
} |
||||
|
||||
|
||||
public static String formatDateByPattern(Date date,String dateFormat) { |
||||
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); |
||||
String formatTimeStr = null; |
||||
if (date != null) { |
||||
formatTimeStr = sdf.format(date); |
||||
} |
||||
return formatTimeStr; |
||||
} |
||||
|
||||
|
||||
public static String parseToCron(LocalDateTime taskTime) { |
||||
//Date-->LocalDateTime
|
||||
Date date = toDate(taskTime); |
||||
//规定cron表达式格式
|
||||
String cronFormat = "ss mm HH dd MM ? yyyy"; |
||||
|
||||
return formatDateByPattern(date, cronFormat); |
||||
} |
||||
|
||||
public static String getCron(Date date) { |
||||
String dateFormat = "ss mm HH dd MM ? yyyy"; |
||||
return formatDateByPattern(date, dateFormat); |
||||
} |
||||
|
||||
public static Date toDate(LocalDateTime localDateTime) { |
||||
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); |
||||
} |
||||
|
||||
|
||||
public static String localDateTimeToStr(LocalDateTime localDateTime){ |
||||
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
||||
|
||||
String dateStr = localDateTime.format(fmt); |
||||
|
||||
return dateStr ; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,62 @@ |
||||
package digital.laboratory.platform.imr.component; |
||||
|
||||
import com.alibaba.fastjson.JSON; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import java.util.Enumeration; |
||||
|
||||
@Slf4j |
||||
public class GetClientIPUtil { |
||||
|
||||
public static String getIpAddress(HttpServletRequest request) { |
||||
|
||||
String ip = null; |
||||
|
||||
// x-forwarded-for : Squid 服务代理
|
||||
String ipAddresses = request.getHeader("X-Forwarded-For"); |
||||
log.info("====ipAddresses: {}", ipAddresses); |
||||
|
||||
// 获取所有头信息
|
||||
Enumeration<String> headerNames = request.getHeaderNames(); |
||||
while (headerNames.hasMoreElements()) { |
||||
String headerKey = headerNames.nextElement(); |
||||
String header = request.getHeader(headerKey); |
||||
System.out.println(headerKey + ":::" + header); |
||||
} |
||||
|
||||
System.out.println("headerNames: " + JSON.toJSONString(headerNames)); |
||||
|
||||
String unknown = "unknown"; |
||||
if (ipAddresses == null || ipAddresses.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) { |
||||
//Proxy-Client-IP:apache 服务代理
|
||||
ipAddresses = request.getHeader("Proxy-Client-IP"); |
||||
} |
||||
|
||||
if (ipAddresses == null || ipAddresses.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) { |
||||
//WL-Proxy-Client-IP:weblogic 服务代理
|
||||
ipAddresses = request.getHeader("WL-Proxy-Client-IP"); |
||||
} |
||||
|
||||
if (ipAddresses == null || ipAddresses.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) { |
||||
//HTTP_CLIENT_IP:有些代理服务器
|
||||
ipAddresses = request.getHeader("HTTP_CLIENT_IP"); |
||||
} |
||||
|
||||
if (ipAddresses == null || ipAddresses.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) { |
||||
//X-Real-IP:nginx服务代理
|
||||
ipAddresses = request.getHeader("X-Real-IP"); |
||||
} |
||||
|
||||
//有些网络通过多层代理,那么获取到的ip就会有多个,一般都是通过逗号(,)分割开来,并且第一个ip为客户端的真实IP
|
||||
if (ipAddresses != null && ipAddresses.length() != 0) { |
||||
ip = ipAddresses.split(",")[0]; |
||||
} |
||||
|
||||
//还是不能获取到,最后再通过request.getRemoteAddr();获取
|
||||
if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) { |
||||
ip = request.getRemoteAddr(); |
||||
} |
||||
return ip; |
||||
} |
||||
} |
@ -0,0 +1,28 @@ |
||||
package digital.laboratory.platform.imr.config; |
||||
|
||||
import org.springframework.context.annotation.Configuration; |
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity; |
||||
import org.springframework.security.config.annotation.web.builders.WebSecurity; |
||||
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; |
||||
import org.springframework.security.core.context.SecurityContextHolder; |
||||
|
||||
//@EnableOAuth2Sso
|
||||
@Configuration |
||||
|
||||
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter { |
||||
|
||||
@Override |
||||
public void configure(WebSecurity web) { |
||||
SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL); |
||||
web.ignoring().antMatchers("/", "/static/**", "/static/dist/**", "/hello**", "/favicon.ico**", "/login", "/login-callback", "/v2/**", "/papp/v2/**", "/papp/entrustment/common/**","/cabinetOpen/temperatureAndHumidity","/cabinetOpen/statisticsSampleCount/**"); |
||||
} |
||||
|
||||
@Override |
||||
public void configure(HttpSecurity http) throws Exception { |
||||
|
||||
http.csrf().disable() |
||||
.authorizeRequests() |
||||
.antMatchers("/", "/static/**", "/static/dist/**", "/hello**", "/favicon.ico**", "/login", "/login-callback", "/v2/**", "/papp/v2/**", "/papp/entrustment/common/**").permitAll() |
||||
.anyRequest().permitAll(); |
||||
} |
||||
} |
@ -0,0 +1,428 @@ |
||||
package digital.laboratory.platform.imr.controller; |
||||
|
||||
|
||||
import cn.hutool.core.util.StrUtil; |
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import digital.laboratory.platform.common.core.util.R; |
||||
import digital.laboratory.platform.common.mybatis.security.service.DLPUser; |
||||
import digital.laboratory.platform.imr.component.GetClientIPUtil; |
||||
import digital.laboratory.platform.imr.dto.DepositToDTO; |
||||
import digital.laboratory.platform.imr.dto.QueryDTO; |
||||
import digital.laboratory.platform.imr.dto.UseOutboundDTO; |
||||
import digital.laboratory.platform.imr.dto.UserInfoDTO; |
||||
import digital.laboratory.platform.imr.entity.CabinetOpeningRecord; |
||||
import digital.laboratory.platform.imr.entity.SampleStorage; |
||||
import digital.laboratory.platform.imr.mapper.DestructionDetailMapper; |
||||
import digital.laboratory.platform.imr.mapper.SampleStorageMapper; |
||||
import digital.laboratory.platform.imr.service.CabinetOpeningRecordService; |
||||
import digital.laboratory.platform.imr.vo.CabinetSampleVO; |
||||
import digital.laboratory.platform.imr.vo.StatisticsCount; |
||||
import digital.laboratory.platform.sys.feign.RemoteEnvironmentService; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import lombok.RequiredArgsConstructor; |
||||
import org.springframework.security.crypto.password.PasswordEncoder; |
||||
import org.springframework.security.oauth2.provider.OAuth2Authentication; |
||||
import org.springframework.util.Assert; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import java.security.Principal; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
@RestController |
||||
@RequiredArgsConstructor |
||||
@RequestMapping("/cabinetOpen" ) |
||||
@Api(value = "cabinetOpen", tags = "智能物证柜管理") |
||||
public class CabinetOpenController { |
||||
|
||||
private static final PasswordEncoder ENCODER = new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("MD5"); |
||||
|
||||
|
||||
|
||||
public final SampleStorageMapper storageMapper; |
||||
|
||||
|
||||
private final DestructionDetailMapper ddMapper; |
||||
|
||||
|
||||
public final RemoteEnvironmentService environmentService; |
||||
|
||||
|
||||
public final CabinetOpeningRecordService openingRecordService; |
||||
|
||||
/* |
||||
通过请求获取id判断是属于哪个房间获取温湿度 |
||||
这个接口不需要验证 |
||||
*/ |
||||
|
||||
@ApiOperation(value = "获取房间号", notes = "获取房间号") |
||||
@GetMapping("/getRoom" ) |
||||
public R getRoom(HttpServletRequest request){ |
||||
|
||||
//根据ip判断属于那个房间
|
||||
String ipAddress = GetClientIPUtil.getIpAddress(request); |
||||
String roomNo = ""; |
||||
switch (ipAddress) { |
||||
case "192.168.30.243": |
||||
roomNo = "702"; |
||||
break; |
||||
case "192.168.30.241": |
||||
roomNo = "709"; |
||||
break; |
||||
case "192.168.10.242": |
||||
roomNo = "602"; |
||||
break; |
||||
case "192.168.10.241": |
||||
roomNo = "609"; |
||||
break; |
||||
case "192.168.10.243": |
||||
roomNo = "605"; |
||||
break; |
||||
default: |
||||
roomNo = "709"; |
||||
} |
||||
|
||||
|
||||
return R.ok(roomNo,"查询成功"); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
@ApiOperation(value = "通过请求获取ip判断是属于哪个房间获取温湿度", notes = "通过请求获取ip判断是属于哪个房间获取温湿度") |
||||
@GetMapping("/temperatureAndHumidity" ) |
||||
public R temperatureAndHumidity(HttpServletRequest request){ |
||||
|
||||
//根据ip判断属于那个房间
|
||||
String ipAddress = GetClientIPUtil.getIpAddress(request); |
||||
String roomNo = ""; |
||||
switch (ipAddress) { |
||||
case "192.168.30.243": |
||||
roomNo = "702"; |
||||
break; |
||||
case "192.168.30.241": |
||||
roomNo = "709"; |
||||
break; |
||||
case "192.168.10.242": |
||||
roomNo = "602"; |
||||
break; |
||||
case "192.168.10.241": |
||||
roomNo = "609"; |
||||
break; |
||||
case "192.168.10.243": |
||||
roomNo = "605"; |
||||
break; |
||||
default: |
||||
roomNo = "706"; |
||||
} |
||||
|
||||
R<Map<String, Double>> humiture = environmentService.getHumitureByRoomNo(roomNo); |
||||
|
||||
return R.ok(humiture,"查询成功"); |
||||
} |
||||
|
||||
|
||||
/* |
||||
统计仓库模块的检材/样本 |
||||
*/ |
||||
|
||||
@ApiOperation(value = "统计仓库模块的检材/样本type=1仓库现有样本总数;2出库待归还样本;3.退还出库/销毁出库样本", notes = "统计仓库模块的检材/样本") |
||||
@GetMapping("/statisticsSampleCount/{type}" ) |
||||
public R<List<StatisticsCount>> statisticsSampleCount(@PathVariable("type") Integer type,HttpServletRequest request){ |
||||
|
||||
|
||||
//根据ip判断属于那个房间
|
||||
String ipAddress = GetClientIPUtil.getIpAddress(request); |
||||
String roomNo = ""; |
||||
switch (ipAddress) { |
||||
case "192.168.30.243": |
||||
roomNo = "702"; |
||||
break; |
||||
case "192.168.30.241": |
||||
roomNo = "709"; |
||||
break; |
||||
case "192.168.10.242": |
||||
roomNo = "602"; |
||||
break; |
||||
case "192.168.10.241": |
||||
roomNo = "609"; |
||||
break; |
||||
case "192.168.10.243": |
||||
roomNo = "605"; |
||||
break; |
||||
default: |
||||
roomNo = "706"; |
||||
} |
||||
|
||||
|
||||
ArrayList<StatisticsCount> list = new ArrayList<>(); |
||||
if(type==1){ |
||||
//仓库现有样本(要区分房间)
|
||||
QueryWrapper<SampleStorage> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("status",2); |
||||
queryWrapper.eq("room_no",roomNo); |
||||
Long count = storageMapper.selectCount(queryWrapper); |
||||
list.add(new StatisticsCount("inbound",count)); |
||||
} else if (type==2) { |
||||
//出库待归还样本
|
||||
QueryWrapper<SampleStorage> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("status",3); |
||||
queryWrapper.eq("is_return",1); |
||||
queryWrapper.eq("room_no",roomNo); |
||||
Long count = storageMapper.selectCount(queryWrapper); |
||||
list.add(new StatisticsCount("return",count)); |
||||
|
||||
} else if (type==3) { |
||||
//出库样本
|
||||
QueryWrapper<SampleStorage> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("status",3); |
||||
queryWrapper.eq("room_no",roomNo); |
||||
Long count = storageMapper.selectCount(queryWrapper); |
||||
list.add(new StatisticsCount("outbound",count)); |
||||
} |
||||
|
||||
return R.ok(list,"查询成功"); |
||||
|
||||
} |
||||
|
||||
|
||||
/* |
||||
扫码查询检材接口 |
||||
*/ |
||||
@ApiOperation(value = "扫码查询检材接口/支持样本编号入库/取检码出库", notes = "扫码查询检材接口") |
||||
@GetMapping("/scanCode/{number}" ) |
||||
public R<List<CabinetSampleVO>> scanCode(@PathVariable("number") String number){ |
||||
if(StrUtil.isEmpty(number)){ |
||||
throw new RuntimeException("编号不能为空"); |
||||
} |
||||
List<CabinetSampleVO> vo = openingRecordService.scanCode(number); |
||||
return R.ok(vo,"查询成功"); |
||||
} |
||||
|
||||
/* |
||||
批量入库时扫码查询 |
||||
*/ |
||||
@ApiOperation(value = "批量入库时扫码查询", notes = "批量入库时扫码查询") |
||||
@GetMapping("/batchScanCode/{number}" ) |
||||
public R<List<CabinetSampleVO>> batchScanCode(@PathVariable("number") String number){ |
||||
if(StrUtil.isEmpty(number)){ |
||||
throw new RuntimeException("编号不能为空"); |
||||
} |
||||
|
||||
List<CabinetSampleVO> vo = openingRecordService.batchScanCode(number); |
||||
|
||||
if(vo==null || vo.size()==0){ |
||||
return R.failed("当前编号未查询到任何数据,请检查是否错误"); |
||||
}else { |
||||
return R.ok(vo,"查询成功"); |
||||
} |
||||
} |
||||
|
||||
/* |
||||
扫码查询检材推荐位置入库(选择位置后确认入库) |
||||
*/ |
||||
@ApiOperation(value = "扫码推荐位置入库/批量入库--确认按钮--", notes = "扫码推荐位置入库--确认按钮") |
||||
@PostMapping("/scanCodePromptInbound" ) |
||||
public R<String> scanCodePromptInbound(@RequestBody DepositToDTO dto, HttpServletRequest theHttpServletRequest){ |
||||
|
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
openingRecordService.scanCodePromptInbound(dto,dlpUser); |
||||
|
||||
return R.ok("存储成功","存储成功"); |
||||
} |
||||
|
||||
/* |
||||
扫码查询检材显示存储位置出库(确认出库) |
||||
*/ |
||||
@ApiOperation(value = "扫码推荐出库--这里传入单个sampleId和监督人id", notes = "扫码推荐出库") |
||||
@PostMapping("/scanCodePromptOutbound" ) |
||||
public R<String> scanCodePromptOutbound(@RequestBody UseOutboundDTO dto, HttpServletRequest theHttpServletRequest){ |
||||
|
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
if(StrUtil.isEmpty(dto.getSupervisorId())){ |
||||
throw new RuntimeException("监督人不能为空"); |
||||
} |
||||
|
||||
openingRecordService.scanCodePromptOutbound(dto,dlpUser); |
||||
|
||||
return R.ok("出库成功","出库成功"); |
||||
} |
||||
|
||||
|
||||
/* |
||||
智能柜修改sample质量 |
||||
*/ |
||||
@ApiOperation(value = "智能柜修改sample质量", notes = "智能柜修改sample质量") |
||||
@PostMapping("/updateSampleQuality") |
||||
public R<String> updateSampleQuality(String sampleId,double sampleQuality){ |
||||
|
||||
if(StrUtil.isEmpty(sampleId)){ |
||||
throw new RuntimeException("id不能为空"); |
||||
} |
||||
|
||||
//查询并修改
|
||||
openingRecordService.updateSampleQuality(sampleId,sampleQuality); |
||||
|
||||
return R.ok(null,"修改质量成功"); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/* |
||||
根据取检码查询检材信息 |
||||
*/ |
||||
@ApiOperation(value = "根据取检码查询检材信息", notes = "根据取检码查询检材信息") |
||||
@GetMapping("/querySampleByCode" ) |
||||
public R<List<CabinetSampleVO>> querySampleByCode(String code,HttpServletRequest request){ |
||||
|
||||
|
||||
//根据ip判断属于那个房间
|
||||
String ipAddress = GetClientIPUtil.getIpAddress(request); |
||||
String roomNo = ""; |
||||
switch (ipAddress) { |
||||
case "192.168.30.243": |
||||
roomNo = "702"; |
||||
break; |
||||
case "192.168.30.241": |
||||
roomNo = "709"; |
||||
break; |
||||
case "192.168.10.242": |
||||
roomNo = "602"; |
||||
break; |
||||
case "192.168.10.241": |
||||
roomNo = "609"; |
||||
break; |
||||
case "192.168.10.243": |
||||
roomNo = "605"; |
||||
break; |
||||
default: |
||||
roomNo = "709"; |
||||
} |
||||
|
||||
List<CabinetSampleVO> list = openingRecordService.querySampleByCode(code,roomNo); |
||||
|
||||
return R.ok(list,"查询成功"); |
||||
} |
||||
|
||||
/* |
||||
领用出库 |
||||
*/ |
||||
@ApiOperation(value = "领用出库--这里传code和监督人id和sampleIds样本id集合", notes = "领用出库") |
||||
@PostMapping("/useOutbound") |
||||
public R<String> useOutbound(@RequestBody UseOutboundDTO dto, HttpServletRequest theHttpServletRequest){ |
||||
|
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
if(StrUtil.isEmpty(dto.getSupervisorId())){ |
||||
throw new RuntimeException("监督人不能为空"); |
||||
} |
||||
|
||||
openingRecordService.useOutbound(dto,dlpUser); |
||||
|
||||
return R.ok("出库成功","出库成功"); |
||||
} |
||||
|
||||
|
||||
|
||||
/* |
||||
强制开箱forceOpen |
||||
*/ |
||||
@ApiOperation(value = "强制开箱--这里传cellId和监督人id", notes = "强制开箱") |
||||
@PostMapping("/forceOpen" ) |
||||
public R<String> forceOpen(@RequestBody UseOutboundDTO dto, HttpServletRequest theHttpServletRequest){ |
||||
|
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
if(StrUtil.isEmpty(dto.getSupervisorId())){ |
||||
throw new RuntimeException("监督人不能为空"); |
||||
} |
||||
if(StrUtil.isEmpty(dto.getPassword())){ |
||||
throw new RuntimeException("请填写密码"); |
||||
} |
||||
|
||||
String s = dlpUser.getPassword(); |
||||
String password = s.replace("{MD5}", ""); |
||||
Assert.isTrue(ENCODER.matches(dto.getPassword(), password), "密码错误, 请重试"); |
||||
openingRecordService.forceOpen(dto,dlpUser); |
||||
return R.ok("出库成功","出库成功"); |
||||
} |
||||
|
||||
|
||||
/* |
||||
查询人接口 |
||||
*/ |
||||
|
||||
@ApiOperation(value = "查询人接口", notes = "查询人接口") |
||||
@GetMapping("/getUserInfo" ) |
||||
public R getApprove(String name, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
//查询全部接收人
|
||||
List<UserInfoDTO> user = ddMapper.getApprove(name,dlpUser.getId()); |
||||
return R.ok(user,"查询成功"); |
||||
} |
||||
|
||||
/* |
||||
分页查询开箱记录 |
||||
*/ |
||||
|
||||
@ApiOperation(value = "分页查询开箱记录", notes = "分页查询开箱记录") |
||||
@GetMapping("/page/openRecord" ) |
||||
public R<IPage<CabinetOpeningRecord>> openRecord(QueryDTO dto, HttpServletRequest theHttpServletRequest){ |
||||
|
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
|
||||
String ipAddress = GetClientIPUtil.getIpAddress(theHttpServletRequest); |
||||
String roomNo = ""; |
||||
switch (ipAddress) { |
||||
case "192.168.30.243": |
||||
roomNo = "702"; |
||||
break; |
||||
case "192.168.30.241": |
||||
roomNo = "709"; |
||||
break; |
||||
case "192.168.10.242": |
||||
roomNo = "602"; |
||||
break; |
||||
case "192.168.10.241": |
||||
roomNo = "609"; |
||||
break; |
||||
case "192.168.10.243": |
||||
roomNo = "605"; |
||||
break; |
||||
default: |
||||
roomNo = "706"; |
||||
} |
||||
|
||||
|
||||
Page<CabinetOpeningRecord> recordPage = new Page<>(dto.getCurrent(), dto.getSize()); |
||||
|
||||
QueryWrapper<CabinetOpeningRecord> queryWrapper = new QueryWrapper<>(); |
||||
|
||||
queryWrapper.like(StrUtil.isNotEmpty(dto.getName()),"open_person",dto.getName()); |
||||
queryWrapper.eq("warehouse",roomNo); |
||||
queryWrapper.between(dto.getBeginDate()!=null && dto.getFinishDate()!=null,"open_time",dto.getBeginDate(),dto.getFinishDate()); |
||||
|
||||
queryWrapper.orderByDesc("open_time"); |
||||
|
||||
IPage<CabinetOpeningRecord> thisPage = openingRecordService.page(recordPage,queryWrapper); |
||||
|
||||
return R.ok(thisPage,"查询成功"); |
||||
|
||||
} |
||||
|
||||
} |
@ -0,0 +1,295 @@ |
||||
package digital.laboratory.platform.imr.controller; |
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker; |
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import digital.laboratory.platform.common.core.util.R; |
||||
import digital.laboratory.platform.common.log.annotation.SysLog; |
||||
import digital.laboratory.platform.common.mybatis.security.service.DLPUser; |
||||
import digital.laboratory.platform.imr.dto.DestructionPublicityDTO; |
||||
import digital.laboratory.platform.imr.dto.PublicityDTO; |
||||
import digital.laboratory.platform.imr.dto.QueryDTO; |
||||
import digital.laboratory.platform.imr.dto.UserInfoDTO; |
||||
import digital.laboratory.platform.imr.entity.DestructionPublicity; |
||||
import digital.laboratory.platform.imr.entity.SampleStorage; |
||||
import digital.laboratory.platform.imr.mapper.DestructionDetailMapper; |
||||
import digital.laboratory.platform.imr.mapper.DestructionPublicityMapper; |
||||
import digital.laboratory.platform.imr.mapper.SampleStorageMapper; |
||||
import digital.laboratory.platform.imr.service.DestructionPublicityService; |
||||
import digital.laboratory.platform.imr.vo.DestructionPublicityVO; |
||||
import digital.laboratory.platform.imr.vo.OutSampleVO; |
||||
import org.springframework.security.access.prepost.PreAuthorize; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import lombok.RequiredArgsConstructor; |
||||
import org.springframework.security.oauth2.provider.OAuth2Authentication; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.io.IOException; |
||||
import java.security.Principal; |
||||
import java.util.Arrays; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-23 |
||||
* @describe 前端控制器 |
||||
* |
||||
* 这是与表示层的接口, 不应该接业务逻辑写在这里, 业务逻辑应该写在 service 中 |
||||
* 这里写什么: |
||||
* 为前端提供数据, 接受前端的数据 |
||||
* 为前端提供的数据, 从 service 取得后, 可以做一些适当的加工, 这种加工不是业务层面的, 只能是数据格式上, 为方便前端处理 |
||||
* 接受前端的数据, 每一个函数的参数可以先做一些整理后, 再调用 service 中的函数。这里对参数的整理, 应该只是格式上的, 而不能是业务上的 |
||||
* 数据层在 mapper 中, 数据层不涉及业务, 只管技术上的 对象<->表 之间的转换 |
||||
*/ |
||||
@RestController |
||||
@RequiredArgsConstructor |
||||
@RequestMapping("/destruction_publicity" ) |
||||
@Api(value = "destruction_publicity", tags = "检材销毁与公示管理") |
||||
public class DestructionPublicityController { |
||||
|
||||
private final DestructionPublicityService dpService; |
||||
|
||||
|
||||
private final DestructionDetailMapper ddMapper; |
||||
|
||||
private final DestructionPublicityMapper dpMapper; |
||||
|
||||
|
||||
private final SampleStorageMapper storageMapper; |
||||
|
||||
/** |
||||
* 通过id查询 |
||||
* @param id id |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "通过id查询公示详情", notes = "通过id查询公示详情") |
||||
@GetMapping("/getOneById/{id}" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_destruction_publicity_get')" ) |
||||
public R<DestructionPublicity> getOneById(@PathVariable("id" ) String id, HttpServletRequest theHttpServletRequest) { |
||||
if(id==null||"".equals((id))){ |
||||
throw new RuntimeException(String.format("申请id不能为空" )); |
||||
} |
||||
DestructionPublicity vo = dpService.getOneById(id); |
||||
return R.ok(vo); |
||||
} |
||||
|
||||
/** |
||||
* 分页查询 |
||||
* @param dto 分页对象 |
||||
* @param dto |
||||
* @return |
||||
*/ |
||||
@ApiOperation(value = "分页查询", notes = "分页查询") |
||||
@GetMapping("/page" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_destruction_publicity_get')" ) |
||||
public R<IPage<DestructionPublicityVO>> getDestructionPublicityPage(PublicityDTO dto, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
Page<DestructionPublicity> page = new Page<>(dto.getCurrent(),dto.getSize()); |
||||
|
||||
IPage<DestructionPublicityVO> vo = dpService.getDestructionPublicityPage(page,Wrappers.<DestructionPublicity>query() |
||||
.between(dto.getBeginDate()!=null && dto.getFinishDate()!=null,"release_date",dto.getBeginDate(),dto.getFinishDate()) |
||||
.eq("status",dto.getStatus()) |
||||
); |
||||
return R.ok(vo,"查询成功"); |
||||
} |
||||
|
||||
/** |
||||
* 列表查询 |
||||
*/ |
||||
|
||||
|
||||
/** |
||||
* 新增 |
||||
* @param dto |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "创建检材销毁与公示", notes = "新增") |
||||
@SysLog("新增" ) |
||||
@PostMapping("/createPublicity") |
||||
@PreAuthorize("@pms.hasPermission('imr_destruction_publicity_add')" ) |
||||
public R createPublicity(@RequestBody DestructionPublicityDTO dto, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
if (dto.getDestroyDate()==null|| |
||||
dto.getReviewerId()==null|| |
||||
dto.getDestroyCompany()==null|| |
||||
dto.getSampleIds().isEmpty() |
||||
){ |
||||
throw new RuntimeException(String.format("公示数据不能为空")); |
||||
} |
||||
|
||||
DestructionPublicityVO vo = null; |
||||
if(dto.getId()==null){ |
||||
vo = dpService.createPublicity(dto,dlpUser); |
||||
}else { |
||||
vo = dpService.updatePublicity(dto,dlpUser); |
||||
} |
||||
|
||||
if (vo!=null){ |
||||
return R.ok(vo,"公示创建成功"); |
||||
}else{ |
||||
return R.failed("公示创建失败"); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 修改 |
||||
* @param dto |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "修改", notes = "修改") |
||||
@SysLog("修改" ) |
||||
@PutMapping("/updatePublicity") |
||||
@PreAuthorize("@pms.hasPermission('imr_destruction_publicity_edit')" ) |
||||
public R<DestructionPublicity> updatePublicity(@RequestBody DestructionPublicityDTO dto, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
if (dto.getDestroyDate()==null|| |
||||
dto.getReviewerId()==null|| |
||||
dto.getDestroyCompany()==null|| |
||||
dto.getSampleIds().isEmpty()|| |
||||
dto.getId()==null |
||||
){ |
||||
throw new RuntimeException(String.format("创建销毁与申请的数据不能为空")); |
||||
} |
||||
DestructionPublicityVO vo = dpService.updatePublicity(dto,dlpUser); |
||||
|
||||
if (vo!=null){ |
||||
return R.ok(vo,"操作成功"); |
||||
}else{ |
||||
return R.failed("操作失败"); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 单个通过id删除 |
||||
* @param id id |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "通过id删除", notes = "通过id删除") |
||||
@SysLog("通过id删除" ) |
||||
@DeleteMapping("/delete/{id}" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_destruction_publicity_del')" ) |
||||
public R deleteOneById(@PathVariable("id") String id) { |
||||
|
||||
|
||||
dpService.deleteOneById(id); |
||||
|
||||
return R.ok(null,"删除成功"); |
||||
} |
||||
|
||||
|
||||
|
||||
@ApiOperation(value = "批量删除", notes = "批量删除") |
||||
@SysLog("通过id删除" ) |
||||
@DeleteMapping("/deleteList" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_destruction_publicity_del')" ) |
||||
public R deleteOneById(@RequestBody List<String> ids) { |
||||
|
||||
|
||||
for (String id : ids) { |
||||
dpService.deleteOneById(id); |
||||
} |
||||
return R.ok(null,"删除成功"); |
||||
|
||||
} |
||||
|
||||
|
||||
@ApiOperation(value = "查询审核人接口", notes = "查询审核人接口") |
||||
@GetMapping("/getApprove" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_destruction_publicity_get')" ) |
||||
public R getApprove(String name, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
|
||||
//查询全部接收人
|
||||
List<UserInfoDTO> user = ddMapper.getApprove(name,dlpUser.getId()); |
||||
return R.ok(user,"查询成功"); |
||||
} |
||||
|
||||
/** |
||||
* 发布/提交 |
||||
*/ |
||||
@ApiOperation(value = "发布/提交", notes = "发布/提交") |
||||
@PutMapping("/release" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_destruction_publicity_edit')" ) |
||||
public R release(String id, HttpServletRequest theHttpServletRequest) { |
||||
|
||||
if(id == null){ |
||||
throw new RuntimeException(String.format("id不能为空")); |
||||
} |
||||
|
||||
DestructionPublicity vo = dpService.release(id); |
||||
|
||||
return R.ok(vo,"发布成功"); |
||||
} |
||||
|
||||
|
||||
/* |
||||
查询可公示的样本(审核审批成功后的) |
||||
*/ |
||||
@ApiOperation(value = "查询可公示的样本(审核审批成功后的)", notes = "查询可公示的样本(审核审批成功后的)") |
||||
@GetMapping("/getSampleInfo" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_destruction_publicity_get')" ) |
||||
public R getSampleInfo(QueryDTO dto) { |
||||
|
||||
List<String> sampleIds = Arrays.asList(dto.getSampleIds().split(",")); |
||||
int size = sampleIds.size(); |
||||
if ("".equals(dto.getSampleIds())){ |
||||
size = sampleIds.size()-1; |
||||
} |
||||
|
||||
|
||||
if(dto.getTotal()!=0){ |
||||
int num = 0;//去重后目前能分的页数
|
||||
|
||||
if((dto.getTotal()-size)%8==0){ |
||||
num = (dto.getTotal()-size)/8; |
||||
}else { |
||||
num = (dto.getTotal()-size)/8+1; |
||||
} |
||||
|
||||
System.out.println(num); |
||||
|
||||
if(dto.getCurrent()>num){ |
||||
//求余数
|
||||
int a = dto.getTotal()%8;//求最后一页的剩余条数
|
||||
if(a==0){ |
||||
a=8; |
||||
if(sampleIds.size()>=a){ |
||||
dto.setCurrent(num); |
||||
} |
||||
}else { |
||||
if(sampleIds.size()>=a){ |
||||
dto.setCurrent(num); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
Page<SampleStorage> page = new Page<>(dto.getCurrent(),dto.getSize()); |
||||
|
||||
IPage<OutSampleVO> sampleVOIPage = storageMapper.getSampleInfo(page,Wrappers.<SampleStorage>query() |
||||
.notIn(!sampleIds.isEmpty(),"storage.sample_id",sampleIds)//去重数组sampleIds
|
||||
.like(!dto.getName().isEmpty(),"storage.name",dto.getName()) |
||||
.eq("storage.early_warning",2) //只能查找通过审核审批的样本
|
||||
.eq("s.status",7)//状态等于待销毁
|
||||
|
||||
); |
||||
List<OutSampleVO> records = sampleVOIPage.getRecords(); |
||||
for (OutSampleVO vo : records) { |
||||
vo.setSampleId(vo.getId()); |
||||
} |
||||
|
||||
return R.ok(sampleVOIPage,"查询成功"); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,15 @@ |
||||
package digital.laboratory.platform.imr.controller; |
||||
|
||||
|
||||
import io.swagger.annotations.Api; |
||||
import lombok.RequiredArgsConstructor; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
import org.springframework.web.bind.annotation.RestController; |
||||
|
||||
@RestController |
||||
@RequiredArgsConstructor |
||||
@RequestMapping("/drugDepots" ) |
||||
@Api(value = "DrugDepotsController", tags = "毒品库信息管理接口") |
||||
public class DrugDepotsController { |
||||
|
||||
} |
@ -0,0 +1,212 @@ |
||||
package digital.laboratory.platform.imr.controller; |
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import digital.laboratory.platform.common.core.util.R; |
||||
import digital.laboratory.platform.common.log.annotation.SysLog; |
||||
import digital.laboratory.platform.common.mybatis.security.service.DLPUser; |
||||
import digital.laboratory.platform.imr.dto.QueryApplyDTO; |
||||
import digital.laboratory.platform.imr.dto.ReviewApprovalDTO; |
||||
import digital.laboratory.platform.imr.dto.ReviewSampleDetail; |
||||
import digital.laboratory.platform.imr.dto.SampleApplyQueryDTO; |
||||
import digital.laboratory.platform.imr.entity.SampleApply; |
||||
import digital.laboratory.platform.imr.entity.enums.ApplyStatus; |
||||
import digital.laboratory.platform.imr.mapper.SampleApplyDetailedMapper; |
||||
import digital.laboratory.platform.imr.mapper.SampleApplyMapper; |
||||
import digital.laboratory.platform.imr.service.ReviewApprovalService; |
||||
import digital.laboratory.platform.imr.service.SampleApplyService; |
||||
import digital.laboratory.platform.imr.vo.ApplySampleVO; |
||||
import digital.laboratory.platform.imr.vo.SampleApplyVO; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import lombok.RequiredArgsConstructor; |
||||
import org.springframework.cache.annotation.Cacheable; |
||||
import org.springframework.security.access.prepost.PreAuthorize; |
||||
import org.springframework.security.oauth2.provider.OAuth2Authentication; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import java.security.Principal; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
import java.util.Set; |
||||
|
||||
/** |
||||
* 自定义审核/审批控制层 |
||||
* 这个controller应用与检材申请的审核审批 |
||||
* 外带+销毁 |
||||
*/ |
||||
@RestController |
||||
@RequiredArgsConstructor |
||||
@RequestMapping("/review_approval" ) |
||||
@Api(value = "review_approval", tags = "样本申请审核审批") |
||||
public class ReviewApprovalController { |
||||
|
||||
private final ReviewApprovalService reviewApprovalService; |
||||
private final SampleApplyService sampleApplyService; |
||||
|
||||
/* |
||||
---------------审核模块分页(加权限)------------------ |
||||
*/ |
||||
|
||||
/** |
||||
* |
||||
*/ |
||||
/* @ApiOperation(value = "一级审核员分页查询", notes = "一级审核员分页查询") |
||||
@GetMapping("firstAudit/page" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_apply_get_firstAudit')" ) |
||||
public R<IPage<SampleApplyVO>> getPage( @RequestBody SampleApplyQueryDTO dto) { |
||||
|
||||
return null; |
||||
}*/ |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ApiOperation(value = "查询申请详情", notes = "查询申请详情") |
||||
@SysLog("查询申请详情" ) |
||||
@GetMapping("/getDetail") |
||||
@PreAuthorize("@pms.hasPermission('imr_review_and_approval')" ) |
||||
public R<SampleApplyVO> getDetail(String id) { |
||||
|
||||
if(id==null){ |
||||
throw new RuntimeException(String.format("申请id不能为空" )); |
||||
} |
||||
|
||||
SampleApplyVO sampleApply = sampleApplyService.getDetail(id); |
||||
|
||||
return R.ok(sampleApply); |
||||
} |
||||
|
||||
@ApiOperation(value = "审核分页查询", notes = "审核分页查询") |
||||
@GetMapping("/page" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_review_and_approval')" ) |
||||
public R<IPage<SampleApplyVO>> getAuditPage(QueryApplyDTO dto, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
|
||||
Page<SampleApply> page = new Page<>(dto.getCurrent(),dto.getSize()); |
||||
QueryWrapper<SampleApply> queryWrapper = new QueryWrapper<>(); |
||||
ArrayList<Integer> list = new ArrayList<>(); |
||||
|
||||
Set<String> permissions = dlpUser.getPermissions();//判断权限
|
||||
|
||||
//System.out.println(permissions);
|
||||
for (String permission : permissions) { |
||||
if ("imr_sample_apply_first_audit".equals(permission)) { |
||||
//
|
||||
queryWrapper.eq("apply_type",1); |
||||
if(dto.getStatus()==null){//审核初页面(不应该有销毁申请)
|
||||
queryWrapper.eq("application_status",1); |
||||
}else {//点击通过页面时
|
||||
if(dto.getStatus()==0){ |
||||
//返回全部
|
||||
queryWrapper.and(Wrapper->Wrapper.le("application_status",-2) |
||||
.or().ge("application_status",2) |
||||
); |
||||
}else { |
||||
//通过status==1/不通过status==-1
|
||||
if(dto.getStatus()==1){ |
||||
queryWrapper.ge("application_status",2); |
||||
} |
||||
if(dto.getStatus()==-1){ |
||||
queryWrapper.le("application_status",-2); |
||||
} |
||||
} |
||||
} |
||||
break; |
||||
} else if ("imr_sample_apply_secondary_audit".equals(permission)) { |
||||
//二级审核员(不应该有销毁申请)
|
||||
queryWrapper.eq("apply_type",1); |
||||
if(dto.getStatus()==null){ |
||||
queryWrapper.eq("application_status",2); |
||||
}else { |
||||
if(dto.getStatus()==0){ |
||||
//返回全部
|
||||
queryWrapper.and(Wrapper->Wrapper.le("application_status",-3) |
||||
.or().ge("application_status",3) |
||||
); |
||||
/*queryWrapper.le("application_status",-3).or() |
||||
.ge("application_status",3);//大于=3的后面所有*/
|
||||
}else { |
||||
//通过status==1/不通过status==-1
|
||||
if(dto.getStatus()==1){ |
||||
queryWrapper.ge("application_status",3); |
||||
} |
||||
if(dto.getStatus()==-1){ |
||||
queryWrapper.le("application_status",-3); |
||||
} |
||||
} |
||||
} |
||||
break; |
||||
}else if ("imr_sample_apply_approval".equals(permission)) { |
||||
//审批人
|
||||
if(dto.getStatus()==null){ |
||||
queryWrapper.eq("application_status",3); |
||||
}else { |
||||
if(dto.getStatus()==0){ |
||||
list.add(-4);//二级不通过
|
||||
list.add(4);//通过/不通过
|
||||
queryWrapper.in("application_status",list); |
||||
}else { |
||||
//通过status==1/不通过status==-1
|
||||
if(dto.getStatus()==1){ |
||||
queryWrapper.eq("application_status",4); |
||||
} |
||||
if(dto.getStatus()==-1){ |
||||
queryWrapper.eq("application_status",-4); |
||||
} |
||||
} |
||||
} |
||||
break; |
||||
} |
||||
} |
||||
//判断权限查询条件设置完毕
|
||||
queryWrapper.between(dto.getBeginDate()!=null && dto.getFinishDate()!=null,"application_date",dto.getBeginDate(),dto.getFinishDate()); |
||||
queryWrapper.orderByDesc("application_date"); |
||||
IPage<SampleApplyVO> applyVOPage = sampleApplyService.getApplyPage(page, queryWrapper); |
||||
return R.ok(applyVOPage,"查询成功"); |
||||
} |
||||
|
||||
/** |
||||
* 审核审批 |
||||
* @param dto |
||||
* @param theHttpServletRequest |
||||
* @return |
||||
*/ |
||||
@ApiOperation(value = "检材申请审核审批", notes = "检材申请审核审批") |
||||
@PutMapping("/sampleApply/approval" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_review_and_approval')" ) |
||||
public R applyApproval(@RequestBody ReviewApprovalDTO dto, HttpServletRequest theHttpServletRequest) { |
||||
|
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
Set<String> permissions = dlpUser.getPermissions();//判断权限
|
||||
|
||||
SampleApplyVO sampleApplyVO = null; |
||||
|
||||
for (String permission : permissions) { |
||||
if ("imr_sample_apply_first_audit".equals(permission)) { |
||||
//一级审核员
|
||||
sampleApplyVO = reviewApprovalService.firstAudit(dto, dlpUser); |
||||
break; |
||||
} else if ("imr_sample_apply_secondary_audit".equals(permission)) { |
||||
//二级审核员
|
||||
reviewApprovalService.secondaryAudit(dto, dlpUser); |
||||
break; |
||||
}else if ("imr_sample_apply_approval".equals(permission)) { |
||||
//审批人
|
||||
reviewApprovalService.approval(dto,dlpUser); |
||||
break; |
||||
} |
||||
} |
||||
return R.ok(sampleApplyVO,"审核成功"); |
||||
} |
||||
} |
@ -0,0 +1,680 @@ |
||||
package digital.laboratory.platform.imr.controller; |
||||
|
||||
import cn.hutool.core.date.LocalDateTimeUtil; |
||||
import cn.hutool.core.io.IoUtil; |
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import com.deepoove.poi.XWPFTemplate; |
||||
import com.deepoove.poi.config.Configure; |
||||
import com.deepoove.poi.config.ConfigureBuilder; |
||||
import digital.laboratory.platform.common.core.util.R; |
||||
import digital.laboratory.platform.common.feign.RemoteWord2PDFService; |
||||
import digital.laboratory.platform.common.log.annotation.SysLog; |
||||
import digital.laboratory.platform.common.mybatis.security.service.DLPUser; |
||||
import digital.laboratory.platform.common.oss.service.OssFile; |
||||
import digital.laboratory.platform.imr.dto.ApplyDTO; |
||||
import digital.laboratory.platform.imr.dto.QueryApplyDTO; |
||||
import digital.laboratory.platform.imr.dto.QueryDTO; |
||||
import digital.laboratory.platform.imr.entity.SampleApply; |
||||
import digital.laboratory.platform.imr.entity.SampleStorage; |
||||
import digital.laboratory.platform.imr.mapper.SampleApplyDetailedMapper; |
||||
import digital.laboratory.platform.imr.mapper.SampleStorageMapper; |
||||
import digital.laboratory.platform.imr.service.SampleApplyService; |
||||
import digital.laboratory.platform.imr.vo.ApplySampleVO; |
||||
import digital.laboratory.platform.imr.vo.BaseSampleVO; |
||||
import digital.laboratory.platform.imr.vo.SampleApplyVO; |
||||
import feign.Response; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import lombok.RequiredArgsConstructor; |
||||
import org.springframework.mock.web.MockMultipartFile; |
||||
import org.springframework.security.access.prepost.PreAuthorize; |
||||
import org.springframework.security.oauth2.provider.OAuth2Authentication; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.io.ByteArrayInputStream; |
||||
import java.io.ByteArrayOutputStream; |
||||
import java.security.Principal; |
||||
import java.util.*; |
||||
|
||||
/** |
||||
* 检材申请实体类 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 |
||||
* @describe 检材申请实体类 前端控制器 |
||||
* |
||||
* 这是与表示层的接口, 不应该接业务逻辑写在这里, 业务逻辑应该写在 service 中 |
||||
* 这里写什么: |
||||
* 为前端提供数据, 接受前端的数据 |
||||
* 为前端提供的数据, 从 service 取得后, 可以做一些适当的加工, 这种加工不是业务层面的, 只能是数据格式上, 为方便前端处理 |
||||
* 接受前端的数据, 每一个函数的参数可以先做一些整理后, 再调用 service 中的函数。这里对参数的整理, 应该只是格式上的, 而不能是业务上的 |
||||
* 数据层在 mapper 中, 数据层不涉及业务, 只管技术上的 对象<->表 之间的转换 |
||||
*/ |
||||
@RestController |
||||
@RequiredArgsConstructor |
||||
@RequestMapping("/sample_apply" ) |
||||
@Api(value = "sample_apply", tags = "检材申请管理--外带+销毁") |
||||
public class SampleApplyController { |
||||
|
||||
private final SampleApplyService sampleApplyService; |
||||
|
||||
|
||||
|
||||
private final OssFile ossFile; |
||||
|
||||
private final RemoteWord2PDFService remoteWord2PDFService; |
||||
|
||||
private final SampleStorageMapper storageMapper; |
||||
|
||||
|
||||
/** |
||||
* 提供id查询申请详情 |
||||
*/ |
||||
@ApiOperation(value = "查询申请详情", notes = "查询申请详情") |
||||
@SysLog("查询申请详情" ) |
||||
@GetMapping("/getDetail") |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_apply_get')" ) |
||||
public R<SampleApplyVO> getDetail(String id) { |
||||
|
||||
if(id==null){ |
||||
throw new RuntimeException("申请id不能为空"); |
||||
} |
||||
|
||||
SampleApplyVO sampleApply = sampleApplyService.getDetail(id); |
||||
|
||||
return R.ok(sampleApply); |
||||
} |
||||
|
||||
@ApiOperation(value = "申请人查询销毁申请--分页", notes = "申请人查询申请--分页") |
||||
@SysLog("申请人查询申请--分页" ) |
||||
@GetMapping("/page") |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_des_apply')" ) |
||||
public R<IPage<SampleApplyVO>> getApplyPage(QueryApplyDTO dto,HttpServletRequest theHttpServletRequest) { |
||||
|
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
|
||||
Page<SampleApply> page = new Page<>(dto.getCurrent(),dto.getSize()); |
||||
|
||||
if(dto.getApplyType()==null){ |
||||
throw new RuntimeException(String.format("需要传递申请类型参数" )); |
||||
} |
||||
|
||||
QueryWrapper<SampleApply> wrapper = new QueryWrapper<>(); |
||||
wrapper.eq("apply_type",dto.getApplyType()); |
||||
if(!dlpUser.getPermissions().contains("imr_inbound_or_outbound")){ |
||||
//如果不是检材管理员只能看见自己的
|
||||
wrapper.eq("applicant_id",dlpUser.getId()); |
||||
} |
||||
wrapper.between(dto.getBeginDate()!=null && dto.getFinishDate()!=null,"application_date",dto.getBeginDate(),dto.getFinishDate()); |
||||
if(dto.getStatus()!=null){ |
||||
wrapper.eq("application_status",dto.getStatus()); |
||||
}else { |
||||
wrapper.ne("application_status",4); |
||||
} |
||||
wrapper.orderByDesc("application_date");//申请时间排序
|
||||
|
||||
IPage<SampleApplyVO> vo = sampleApplyService.getApplyPage(page,wrapper); |
||||
|
||||
return R.ok(vo,"查询成功"); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
@ApiOperation(value = "申请人查询外带申请--分页", notes = "申请人查询申请--分页") |
||||
@SysLog("申请人查询申请--分页" ) |
||||
@GetMapping("/list") |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_out_apply')" ) |
||||
public R<IPage<SampleApplyVO>> getApplyList(QueryApplyDTO dto,HttpServletRequest theHttpServletRequest) { |
||||
|
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
|
||||
Page<SampleApply> page = new Page<>(dto.getCurrent(),dto.getSize()); |
||||
|
||||
if(dto.getApplyType()==null){ |
||||
throw new RuntimeException("需要传递申请类型参数"); |
||||
} |
||||
|
||||
QueryWrapper<SampleApply> wrapper = new QueryWrapper<>(); |
||||
wrapper.eq("apply_type",dto.getApplyType()); |
||||
wrapper.eq("applicant_id",dlpUser.getId()); |
||||
wrapper.between(dto.getBeginDate()!=null && dto.getFinishDate()!=null,"application_date",dto.getBeginDate(),dto.getFinishDate()); |
||||
if(dto.getStatus()!=null){ |
||||
wrapper.eq("application_status",dto.getStatus()); |
||||
}else { |
||||
wrapper.ne("application_status",4); |
||||
} |
||||
wrapper.orderByDesc("application_date");//申请时间排序
|
||||
|
||||
|
||||
|
||||
IPage<SampleApplyVO> vo = sampleApplyService.getApplyPage(page,wrapper); |
||||
|
||||
return R.ok(vo,"查询成功"); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* 创建并保存检材申请 |
||||
* @param dto |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "创建并保存检材申请", notes = "创建并保存检材申请") |
||||
@SysLog("创建并保存检材申请" ) |
||||
@PostMapping("/createAndSave") |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_apply_add')" ) |
||||
public R<SampleApplyVO> createAndSave(@RequestBody ApplyDTO dto, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
|
||||
if(dto.getApplyType()==null){ |
||||
throw new RuntimeException("必须提供一个申请类型/外带/销毁"); |
||||
} |
||||
if(dto.getSampleId()==null ||dto.getSampleId().size()==0){ |
||||
throw new RuntimeException("样本信息不能为空"); |
||||
} |
||||
SampleApplyVO applyVO = null; |
||||
if(dto.getId()==null||"".equals(dto.getId())) { |
||||
applyVO = sampleApplyService.createAndSave(dto, dlpUser); |
||||
}else { |
||||
applyVO = sampleApplyService.updateAndSave(dto, dlpUser); |
||||
} |
||||
|
||||
return R.ok(applyVO,"保存成功"); |
||||
|
||||
} |
||||
|
||||
|
||||
/** |
||||
* 根据当前持有人去查询数据 |
||||
* 问题:1.创建完流转后当前持有人数据显示问题 |
||||
* |
||||
* 设定查询有两个条件需要满 |
||||
* 1.当前持有人id |
||||
* 2.当前的样本状态!=4;(不等于流转中)---这个是目前的想法 |
||||
*/ |
||||
@ApiOperation(value = "创建外带申请--根据当前持有人去查询数据", notes = "根据当前持有人去查询数据") |
||||
@GetMapping("/getSampleInfoByHolder" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_apply_get')" ) |
||||
public R<IPage<BaseSampleVO>> getSampleInfoByHolder(QueryDTO dto, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
|
||||
List<String> sampleIds = Arrays.asList(dto.getSampleIds().split(",")); |
||||
int size = sampleIds.size(); |
||||
if ("".equals(dto.getSampleIds())){ |
||||
size = sampleIds.size()-1; |
||||
} |
||||
|
||||
|
||||
if(dto.getTotal()!=0){ |
||||
int num = 0;//去重后目前能分的页数
|
||||
|
||||
if((dto.getTotal()-size)%8==0){ |
||||
num = (dto.getTotal()-size)/8; |
||||
}else { |
||||
num = (dto.getTotal()-size)/8+1; |
||||
} |
||||
|
||||
System.out.println(num); |
||||
|
||||
if(dto.getCurrent()>num){ |
||||
//求余数
|
||||
int a = dto.getTotal()%8;//求最后一页的剩余条数
|
||||
if(a==0){ |
||||
a=8; |
||||
if(sampleIds.size()>=a){ |
||||
dto.setCurrent(num); |
||||
} |
||||
}else { |
||||
if(sampleIds.size()>=a){ |
||||
dto.setCurrent(num); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
Page<SampleStorage> samplePage = new Page<>(dto.getCurrent(),dto.getSize()); |
||||
|
||||
IPage<BaseSampleVO> sampleVOS = storageMapper.getSampleInfoByHolder(samplePage,Wrappers.<SampleStorage>query() |
||||
.notIn(!sampleIds.isEmpty(),"s.id",sampleIds)//去重数组id
|
||||
.like(!dto.getName().isEmpty(),"s.name",dto.getName()) |
||||
.eq("s.holder",dlpUser.getId()) |
||||
.eq("s.status",1)//状态为出库
|
||||
.ne("s.status",12)//当前状态不等于申请中
|
||||
|
||||
); |
||||
return R.ok(sampleVOS,"查询成功"); |
||||
} |
||||
|
||||
|
||||
|
||||
/** |
||||
* 根据当前持有人去查询数据 |
||||
* 问题:1.创建完流转后当前持有人数据显示问题 |
||||
* |
||||
* 设定查询有两个条件需要满足 |
||||
* 1.当前持有人id |
||||
* 2.当前的样本状态!=4;(不等于流转中)---这个是目前的想法 |
||||
*/ |
||||
@ApiOperation(value = "当前仓库库存样本--创建销毁申请", notes = "当前仓库库存样本--创建销毁申请") |
||||
@GetMapping("/getSampleInfoByRepository" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_apply_get')" ) |
||||
public R<IPage<BaseSampleVO>> getSampleInfoByRepository(QueryDTO dto) { |
||||
|
||||
List<String> sampleIds = Arrays.asList(dto.getSampleIds().split(",")); |
||||
int size = sampleIds.size(); |
||||
if ("".equals(dto.getSampleIds())){ |
||||
size = sampleIds.size()-1; |
||||
} |
||||
|
||||
|
||||
if(dto.getTotal()!=0){ |
||||
int num = 0;//去重后目前能分的页数
|
||||
|
||||
if((dto.getTotal()-size)%8==0){ |
||||
num = (dto.getTotal()-size)/8; |
||||
}else { |
||||
num = (dto.getTotal()-size)/8+1; |
||||
} |
||||
|
||||
System.out.println(num); |
||||
|
||||
if(dto.getCurrent()>num){ |
||||
//求余数
|
||||
int a = dto.getTotal()%8;//求最后一页的剩余条数
|
||||
if(a==0){ |
||||
a=8; |
||||
} |
||||
if(sampleIds.size()>=a){ |
||||
dto.setCurrent(num); |
||||
} |
||||
} |
||||
} |
||||
|
||||
Page<SampleStorage> samplePage = new Page<>(dto.getCurrent(),dto.getSize()); |
||||
|
||||
IPage<BaseSampleVO> sampleVOS = storageMapper.getDestructionSample(samplePage,Wrappers.<SampleStorage>query() |
||||
.notIn(!sampleIds.isEmpty(),"storage.sample_id",sampleIds)//去重数组id
|
||||
.like(!dto.getName().isEmpty(),"storage.name",dto.getName()) |
||||
.eq("storage.status",2)//在仓库的
|
||||
.eq("storage.early_warning",1)//在仓库已经到销毁时间了的
|
||||
.ne("s.status",12 )//当前状态不等于申请中
|
||||
.ne("s.status",8)//该样本没有被销毁
|
||||
|
||||
|
||||
); |
||||
return R.ok(sampleVOS,"查询成功"); |
||||
} |
||||
|
||||
|
||||
|
||||
/** |
||||
* 创建并提交检材申请(创建直接点提交) |
||||
* @param dto |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "创建并提交检材申请", notes = "创建并提交检材申请") |
||||
@SysLog("创建并提交检材申请" ) |
||||
@PostMapping("/createAndSubmit") |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_apply_add')" ) |
||||
public R<SampleApplyVO> createAndSubmit(@RequestBody ApplyDTO dto, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
if (dto.getApplyType() == null) { |
||||
throw new RuntimeException(String.format("必须提供一个申请类型/外带/销毁")); |
||||
} |
||||
if (dto.getSampleId().isEmpty()) { |
||||
throw new RuntimeException(String.format("样本信息不能为空")); |
||||
} |
||||
if (dto.getSampleId().size() == 0) { |
||||
throw new RuntimeException(String.format("样本信息不能为空")); |
||||
} |
||||
SampleApplyVO applyVO = null; |
||||
if(dto.getId()==null||"".equals(dto.getId())) { |
||||
applyVO = sampleApplyService.createAndSubmit(dto, dlpUser); |
||||
}else { |
||||
applyVO = sampleApplyService.updateAndSubmit(dto, dlpUser); |
||||
} |
||||
return R.ok(applyVO, "创建成功"); |
||||
} |
||||
|
||||
|
||||
/** |
||||
*单个提交申请 |
||||
*/ |
||||
@ApiOperation(value = "单个提交申请", notes = "单个提交申请") |
||||
@SysLog("单个提交申请" ) |
||||
@PutMapping("/submitApplyOne") |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_apply_edit')" ) |
||||
public R<SampleApplyVO> submitApplyOne(String id){ |
||||
|
||||
if(id==null){ |
||||
throw new RuntimeException(String.format("id不能为空")); |
||||
} |
||||
SampleApplyVO vo = sampleApplyService.submitApplyOne(id); |
||||
|
||||
return R.ok(vo, "提交成功"); |
||||
} |
||||
|
||||
/** |
||||
* 批量提交申请 |
||||
*/ |
||||
@ApiOperation(value = "批量提交申请", notes = "批量提交申请") |
||||
@SysLog("批量提交申请" ) |
||||
@PutMapping("/submitApplyList") |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_apply_edit')" ) |
||||
public R submitApplyList(@RequestBody List<String> ids){ |
||||
if (ids.isEmpty()){ |
||||
throw new RuntimeException(String.format("请选择提交的申请" )); |
||||
} |
||||
for (String id : ids) { |
||||
sampleApplyService.submitApplyOne(id); |
||||
} |
||||
return R.ok(null,"提交成功"); |
||||
} |
||||
|
||||
/** |
||||
* 单个撤回withdrawal |
||||
*/ |
||||
|
||||
@ApiOperation(value = "单个撤回", notes = "单个撤回") |
||||
@SysLog("单个撤回" ) |
||||
@PutMapping("/withdrawalOne/{id}") |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_apply_edit')" ) |
||||
public R withdrawalOne(@PathVariable("id") String id){ |
||||
|
||||
if(id==null){ |
||||
throw new RuntimeException(String.format("id不能为空")); |
||||
} |
||||
SampleApplyVO vo = sampleApplyService.withdrawalOne(id); |
||||
|
||||
return R.ok(vo, "撤回成功"); |
||||
} |
||||
|
||||
/** |
||||
* 批量撤回 |
||||
*/ |
||||
@ApiOperation(value = "批量撤回", notes = "批量撤回") |
||||
@SysLog("批量撤回" ) |
||||
@PutMapping("/withdrawalList") |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_apply_edit')" ) |
||||
public R withdrawalList(@RequestBody List<String> ids){ |
||||
|
||||
if (ids.isEmpty()){ |
||||
throw new RuntimeException(String.format("请选择撤回的申请" )); |
||||
} |
||||
for (String id:ids) { |
||||
sampleApplyService.withdrawalOne(id); |
||||
} |
||||
|
||||
return R.ok(null,"撤回成功"); |
||||
|
||||
} |
||||
|
||||
|
||||
/** |
||||
* 单个删除 |
||||
* @param id id |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "单个删除", notes = "单个删除") |
||||
@SysLog("通过id删除检材申请实体类" ) |
||||
@DeleteMapping("/deleteApplyOne/{id}" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_apply_del')" ) |
||||
public R deleteApplyOne(@PathVariable("id") String id, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
if (id.isEmpty()){ |
||||
throw new RuntimeException(String.format("删除数据id不存在")); |
||||
} |
||||
|
||||
sampleApplyService.deleteOne(id); |
||||
|
||||
return R.ok(null, "删除成功"); |
||||
} |
||||
|
||||
/** |
||||
* 批量删除 |
||||
* @param ids |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "批量删除", notes = "批量删除") |
||||
@SysLog("批量删除" ) |
||||
@DeleteMapping("/deleteApplyList" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_apply_del')" ) |
||||
public R deleteApplyList(@RequestBody List<String> ids, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
|
||||
|
||||
if(ids.isEmpty()){ |
||||
throw new RuntimeException(String.format("删除数据id不能为空")); |
||||
} |
||||
for (String id:ids) { |
||||
sampleApplyService.deleteOne(id); |
||||
} |
||||
return R.ok(null, "对象删除成功"); |
||||
} |
||||
|
||||
/** |
||||
* 修改并提交检材申请实体类(修改的设定为直接提交)修改应该叫修改并提交 |
||||
* 1.待提交 |
||||
* 2.审核审批不通过状态? |
||||
* 2的情况比较特殊,这种已经审批过的修改应该是重新创建一条数据? |
||||
* @param dto 检材申请实体类 |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "修改并提交申请", notes = "修改并提交申请") |
||||
@SysLog("修改检材申请实体类" ) |
||||
@PutMapping("/updateAndSubmit") |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_apply_edit')" ) |
||||
public R<SampleApplyVO> updateAndSubmit(@RequestBody ApplyDTO dto, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
if (dto.getId()==null){ |
||||
throw new RuntimeException(String.format("申请id不能为空")); |
||||
} |
||||
|
||||
if(dto.getSampleId().isEmpty()){ |
||||
throw new RuntimeException(String.format("选择样本不能为空")); |
||||
} |
||||
|
||||
SampleApplyVO vo = sampleApplyService.updateAndSubmit(dto,dlpUser); |
||||
|
||||
return R.ok(vo,"修改成功"); |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
@ApiOperation(value = "修改并保存", notes = "修改并保存") |
||||
@SysLog("修改并保存" ) |
||||
@PutMapping("/updateAndSave") |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_apply_edit')" ) |
||||
public R<SampleApplyVO> updateAndSave(@RequestBody ApplyDTO dto, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
if (dto.getId()==null){ |
||||
throw new RuntimeException(String.format("申请id不能为空")); |
||||
} |
||||
|
||||
if(dto.getSampleId().isEmpty()){ |
||||
throw new RuntimeException(String.format("选择样本不能为空")); |
||||
} |
||||
|
||||
SampleApplyVO vo = sampleApplyService.updateAndSave(dto,dlpUser); |
||||
|
||||
return R.ok(vo,"修改成功"); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* 下载鉴定委托书 |
||||
* |
||||
* @param id |
||||
* |
||||
* @return |
||||
*/ |
||||
@ApiOperation(value = "下载申请表格", notes = "下载申请表格。如果还没有创建, 立即创建: 根据鉴定申请信息内容的内容创建PDF格式的鉴定委托书, 并保存到 MinIO 存储中") |
||||
@SysLog("创建鉴定委托书") |
||||
@GetMapping("/print/apply") |
||||
// @PreAuthorize("@pms.hasPermission('EntrustmentEdit')")
|
||||
public void bizGetPDFSampleApplyTable(String id, HttpServletRequest theHttpServletRequest, HttpServletResponse httpServletResponse) { |
||||
System.out.println("bizApplyWord................."); |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
|
||||
//查询数据
|
||||
SampleApplyVO detail = sampleApplyService.getDetail(id); |
||||
|
||||
if (detail == null) { |
||||
throw new RuntimeException(String.format("没有找到该申请")); |
||||
} |
||||
|
||||
if (detail.getApplicationStatus().getStatus()!=4) { |
||||
throw new RuntimeException("申请状态必须在[审批通过]之后才能打印申请表格"); |
||||
} |
||||
|
||||
/*if (!dlpUser.isStaff()) { |
||||
if (!StrUtil.equalsIgnoreCase(ev.getClientOrgId(), dlpUser.getOrgId())) { |
||||
throw new RuntimeException("您只能打印自己所在机构的委托"); |
||||
} |
||||
}*/ |
||||
|
||||
String applyFileName = ""; |
||||
|
||||
if(detail.getApplyType()==1){//外带申请
|
||||
applyFileName = "携带毒品外出申请表-"+detail.getId(); |
||||
//String entrustmentLetterFileName = "鉴定委托书-" + ev.getEntrustmentNo();
|
||||
}else { |
||||
applyFileName = "待销毁检材样本报批表-"+detail.getId(); |
||||
} |
||||
String pdfFilePath = "document" + "/"+"application" + "/" + detail.getId() + "/" + applyFileName + ".pdf"; |
||||
try { |
||||
if (!ossFile.objectExist(pdfFilePath)) { |
||||
GenerateSampleApplyTablePDF(detail,theHttpServletRequest,httpServletResponse); |
||||
} |
||||
ossFile.fileGet(pdfFilePath, httpServletResponse.getOutputStream()); |
||||
httpServletResponse.setContentType(applyFileName); |
||||
} catch (Exception e) { |
||||
System.out.println(String.format("minioFile objectExist() Exception. %s", e.getLocalizedMessage())); |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
|
||||
|
||||
private void GenerateSampleApplyTablePDF(SampleApplyVO applyVO , HttpServletRequest theHttpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||
System.out.println("GenerateSampleApplyTablePDF................."); |
||||
|
||||
//try {
|
||||
//---------------
|
||||
// 构造对象 Map
|
||||
//Map<String, Object> dm = BeanMap.create(ev); //ClassUtils.objectToMap(ev);
|
||||
//Map<String, Object> dm = ClassUtils.objectToMap(applyVO);
|
||||
|
||||
Map<String, Object> dm = new HashMap<>(); |
||||
//dm.put("size", 1);//号
|
||||
dm.put("applicantName", applyVO.getApplicantName());//申请人
|
||||
dm.put("reason", applyVO.getReason());//原因
|
||||
dm.put("id", LocalDateTimeUtil.format(applyVO.getApplicationDate(), "yyyy"));//设置为年份
|
||||
dm.put("applicationDate", LocalDateTimeUtil.format(applyVO.getApplicationDate(), "yyyy年MM月dd日"));//申请时间
|
||||
if(applyVO.getApplyType()==1){ |
||||
dm.put("firstAuditorName",applyVO.getFirstAuditorName());//一级审核人
|
||||
dm.put("firstAuditDate",LocalDateTimeUtil.format(applyVO.getFirstAuditDate(), "yyyy年MM月dd日"));//一级时间
|
||||
dm.put("firstAuditOpinion",applyVO.getFirstAuditOpinion());//一级意见
|
||||
dm.put("secondaryAuditName",applyVO.getSecondaryAuditName());//二级人
|
||||
dm.put("secondaryAuditDate",LocalDateTimeUtil.format(applyVO.getSecondaryAuditDate(), "yyyy年MM月dd日"));//二级时间
|
||||
dm.put("secondaryAuditOpinion",applyVO.getSecondaryAuditOpinion());//二级意见
|
||||
} |
||||
dm.put("approverName",applyVO.getApproverName());//审批人
|
||||
dm.put("approvalDate",LocalDateTimeUtil.format(applyVO.getApprovalDate(), "yyyy年MM月dd日"));//审批时间
|
||||
dm.put("approverOpinion",applyVO.getApproverOpinion());//审批意见
|
||||
dm.put("applyQuantity",applyVO.getApplyQuantity());//数量
|
||||
|
||||
|
||||
String str = ""; |
||||
|
||||
List<String> sampleNos = new ArrayList<>(); |
||||
for (ApplySampleVO sampleVO : applyVO.getSampleVO()) { |
||||
if(sampleVO.getStatus()==1){ |
||||
str=str+sampleVO.getSampleNo()+"\n"; |
||||
} |
||||
} |
||||
|
||||
dm.put("sampleNo",str); |
||||
|
||||
//-----------------------------
|
||||
// 生成 word 版本的 鉴定委托书
|
||||
|
||||
String applyFileName = ""; |
||||
|
||||
if (applyVO.getApplyType() == 1) {//外带申请
|
||||
applyFileName = "携带毒品外出申请表-" + applyVO.getId(); |
||||
} else { |
||||
applyFileName = "待销毁检材样本报批表-" + applyVO.getId(); |
||||
} |
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream(); |
||||
if (applyVO.getApplyType() == 1) {//外带申请
|
||||
ossFile.fileGet("template" + "/" + "携带毒品外出申请表模板.docx", bos); |
||||
} else { |
||||
ossFile.fileGet("template" + "/" + "待销毁检材报批申请表模板.docx", bos); |
||||
} |
||||
byte[] templateArray = bos.toByteArray(); |
||||
ByteArrayInputStream bis = new ByteArrayInputStream(templateArray); |
||||
bos.close(); |
||||
// 现在 bis 是模板的 InputStream
|
||||
ConfigureBuilder builder = Configure.builder().buildGramer("${", "}").useSpringEL(false); |
||||
XWPFTemplate template = XWPFTemplate.compile(bis, builder.build()).render(dm); |
||||
bis.close(); |
||||
|
||||
ByteArrayOutputStream fosWord = new ByteArrayOutputStream(); |
||||
template.write(fosWord); |
||||
template.close(); |
||||
|
||||
//------------
|
||||
ByteArrayInputStream fisWord = new ByteArrayInputStream(fosWord.toByteArray()); |
||||
fosWord.close(); |
||||
|
||||
//MockMultipartFile mockMultipartFile = new MockMultipartFile("file", entrustmentLetterFileName + ".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", fisWord);
|
||||
MockMultipartFile mockMultipartFile = new MockMultipartFile("file", applyFileName + ".docx", "image/jpg", fisWord); |
||||
Response response = remoteWord2PDFService.word2pdf(mockMultipartFile); |
||||
fisWord.close(); |
||||
|
||||
|
||||
ByteArrayOutputStream outPDF = new ByteArrayOutputStream(); |
||||
IoUtil.copy(response.body().asInputStream(), outPDF, IoUtil.DEFAULT_MIDDLE_BUFFER_SIZE); |
||||
ByteArrayInputStream isPDF = new ByteArrayInputStream(outPDF.toByteArray()); |
||||
outPDF.close(); |
||||
|
||||
|
||||
ossFile.fileSave("document" + "/" + "application" + "/" + applyVO.getId() + "/" + applyFileName + ".pdf", isPDF); |
||||
isPDF.close(); |
||||
|
||||
System.out.println("转换为 PDF 结束"); |
||||
|
||||
} |
||||
} |
||||
|
@ -0,0 +1,472 @@ |
||||
package digital.laboratory.platform.imr.controller; |
||||
|
||||
import cn.hutool.core.util.StrUtil; |
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils; |
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import digital.laboratory.platform.common.core.util.R; |
||||
import digital.laboratory.platform.common.log.annotation.SysLog; |
||||
import digital.laboratory.platform.common.mybatis.security.service.DLPUser; |
||||
import digital.laboratory.platform.imr.dto.CombinationOut; |
||||
import digital.laboratory.platform.imr.dto.OutWarehouseApplyDTO; |
||||
import digital.laboratory.platform.imr.dto.QueryDTO; |
||||
import digital.laboratory.platform.imr.entity.SampleOutWarehouseApply; |
||||
import digital.laboratory.platform.imr.entity.SampleStorage; |
||||
import digital.laboratory.platform.imr.mapper.SampleStorageMapper; |
||||
import digital.laboratory.platform.imr.service.SampleOutWarehouseApplyService; |
||||
import digital.laboratory.platform.imr.vo.OutSampleVO; |
||||
import digital.laboratory.platform.imr.vo.RepositorySampleVO; |
||||
import digital.laboratory.platform.imr.vo.SampleOutWarehouseApplyVO; |
||||
import org.springframework.security.access.prepost.PreAuthorize; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import lombok.RequiredArgsConstructor; |
||||
import org.springframework.security.oauth2.provider.OAuth2Authentication; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import java.security.Principal; |
||||
import java.util.*; |
||||
import java.util.stream.Collectors; |
||||
|
||||
/** |
||||
* 样本出库申请实体类 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 |
||||
* @describe 样本出库申请实体类 前端控制器 |
||||
* <p> |
||||
* 这是与表示层的接口, 不应该接业务逻辑写在这里, 业务逻辑应该写在 service 中 |
||||
* 这里写什么: |
||||
* 为前端提供数据, 接受前端的数据 |
||||
* 为前端提供的数据, 从 service 取得后, 可以做一些适当的加工, 这种加工不是业务层面的, 只能是数据格式上, 为方便前端处理 |
||||
* 接受前端的数据, 每一个函数的参数可以先做一些整理后, 再调用 service 中的函数。这里对参数的整理, 应该只是格式上的, 而不能是业务上的 |
||||
* 数据层在 mapper 中, 数据层不涉及业务, 只管技术上的 对象<->表 之间的转换 |
||||
*/ |
||||
@RestController |
||||
@RequiredArgsConstructor |
||||
@RequestMapping("/sample_out_warehouse_apply") |
||||
@Api(value = "sample_out_warehouse_apply", tags = "领用出库申请管理") |
||||
public class SampleOutWarehouseApplyController { |
||||
|
||||
private final SampleOutWarehouseApplyService sampleOutWarehouseApplyService; |
||||
|
||||
private final SampleStorageMapper storageMapper; |
||||
|
||||
/** |
||||
* 通过id查询样本出库申请实体类 |
||||
* |
||||
* @param id id |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "通过id查询", notes = "通过id查询") |
||||
@GetMapping("/{id}") |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_out_warehouse_apply_get')") |
||||
public R<SampleOutWarehouseApplyVO> getById(@PathVariable("id") String id, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
SampleOutWarehouseApplyVO outWarehouseApplyVO = sampleOutWarehouseApplyService.getOutWarehouseDetailedById(id); |
||||
if (outWarehouseApplyVO != null) { |
||||
return R.ok(outWarehouseApplyVO, "查询成功"); |
||||
} else { |
||||
return R.failed("查询失败"); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 分页查询 |
||||
* |
||||
* @param dto 查询参数 |
||||
* @return |
||||
*/ |
||||
@ApiOperation(value = "分页查询", notes = "分页查询") |
||||
@GetMapping("/page") |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_out_warehouse_apply_get')") |
||||
public R<IPage<SampleOutWarehouseApplyVO>> getSampleOutWarehouseApplyPage(QueryDTO dto, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
QueryWrapper<SampleOutWarehouseApply> query = Wrappers.<SampleOutWarehouseApply>query(); |
||||
query.eq("applicant_id", dlpUser.getId()); |
||||
query.between(dto.getBeginDate() != null && dto.getFinishDate() != null, "application_date", dto.getBeginDate(), dto.getFinishDate()); |
||||
query.orderByDesc("create_time"); |
||||
|
||||
if (dto.getStatus() == 0) {//返回待审核和待使用的数据
|
||||
ArrayList<Integer> integers = new ArrayList<>(); |
||||
integers.add(1); |
||||
integers.add(2); |
||||
query.in("status", integers); |
||||
} else if (dto.getStatus() == 1) { |
||||
query.eq("status", 1); |
||||
} else if (dto.getStatus() == 2) { |
||||
query.eq("status", 2); |
||||
} else if (dto.getStatus() == 3) { |
||||
query.eq("status", 3); |
||||
} |
||||
|
||||
if (dto.getStatus() == 4) {//全部数据--出库模块备用
|
||||
ArrayList<Integer> integers = new ArrayList<>(); |
||||
integers.add(1); |
||||
integers.add(2); |
||||
integers.add(3); |
||||
query.in("status", integers); |
||||
} |
||||
|
||||
Page<SampleOutWarehouseApply> page = new Page<>(dto.getCurrent(), dto.getSize()); |
||||
|
||||
IPage<SampleOutWarehouseApplyVO> thisPage = sampleOutWarehouseApplyService.getSampleOutWarehouseApplyVOPage(page, query); |
||||
return R.ok(thisPage, "查询出库申请成功"); |
||||
} |
||||
|
||||
@ApiOperation(value = "列表查询", notes = "列表查询") |
||||
@GetMapping("/list") |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_out_warehouse_apply_list')") |
||||
public R<IPage<SampleOutWarehouseApply>> getSampleOutWarehouseApplyList(Page<SampleOutWarehouseApply> page, SampleOutWarehouseApply sampleOutWarehouseApply, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
IPage<SampleOutWarehouseApply> thisList = sampleOutWarehouseApplyService.getSampleOutWarehouseApplyVOList(Wrappers.<SampleOutWarehouseApply>query() |
||||
.eq("applicant_id", dlpUser.getId()) |
||||
.eq(sampleOutWarehouseApply.getStatus() != null, "status", sampleOutWarehouseApply.getStatus()) |
||||
.orderByDesc("create_time") |
||||
); |
||||
return R.ok(thisList, "查询出库申请成功"); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 查询当前已经存入仓库的样本信息(全部查询) |
||||
*/ |
||||
|
||||
@ApiOperation(value = "创建领用申请时的查询样本接口--分页", notes = "创建领用申请时的查询样本接口--分页") |
||||
@GetMapping("/getSampleInfo") |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_out_warehouse_apply_list')") |
||||
public R getSampleInfo(QueryDTO dto) { |
||||
|
||||
List<String> sampleIds = Arrays.asList(dto.getSampleIds().split(",")); |
||||
|
||||
if (dto.getType() == 1) {//任务
|
||||
IPage<OutSampleVO> sampleVOIPage2 = new Page<>(); |
||||
List<OutSampleVO> records1 = new ArrayList<>(); |
||||
|
||||
if (dto.getType() == 1) { |
||||
Integer begin = (dto.getCurrent() - 1) * dto.getSize(); |
||||
CombinationOut combinationOut = new CombinationOut(sampleIds, begin, dto.getSize(), dto.getName()); |
||||
//获取仓库现有样本;并进行事件分类
|
||||
//1.委托
|
||||
List<OutSampleVO> vo1 = storageMapper.getWTSample(combinationOut); |
||||
if (!vo1.isEmpty()) { |
||||
records1.addAll(vo1); |
||||
} |
||||
|
||||
List<OutSampleVO> vo2 = storageMapper.getWSSample(combinationOut); |
||||
if (!vo2.isEmpty()) { |
||||
records1.addAll(vo2); |
||||
} |
||||
List<OutSampleVO> vo3 = storageMapper.getMFSample(combinationOut); |
||||
if (!vo3.isEmpty()) { |
||||
records1.addAll(vo3); |
||||
} |
||||
List<OutSampleVO> vo4 = storageMapper.getSJSample(combinationOut); |
||||
if (!vo4.isEmpty()) { |
||||
records1.addAll(vo4); |
||||
} |
||||
List<OutSampleVO> vo5 = storageMapper.getTZSample(combinationOut); |
||||
if (!vo5.isEmpty()) { |
||||
records1.addAll(vo5); |
||||
} |
||||
} |
||||
|
||||
if (records1.size() == 0) { |
||||
return R.ok(sampleVOIPage2, "暂无数据"); |
||||
} |
||||
Collections.sort(records1, new Comparator<OutSampleVO>() { |
||||
@Override |
||||
public int compare(OutSampleVO o1, OutSampleVO o2) { |
||||
return o1.getRoomNo().compareTo(o2.getSampleNo()); |
||||
} |
||||
}); |
||||
List<OutSampleVO> records2 = new ArrayList<>(); |
||||
sampleVOIPage2.setSize(dto.getSize()); |
||||
int pageCurrent = (dto.getCurrent() - 1) * dto.getSize(); |
||||
int pageTotal = 0; |
||||
if (records1.size() % dto.getSize() == 0) { |
||||
pageTotal = records1.size() / dto.getSize(); |
||||
} else { |
||||
pageTotal = records1.size() / dto.getSize() + 1; |
||||
} |
||||
if (pageCurrent + dto.getSize() <= records1.size()) { |
||||
records2 = records1.subList(pageCurrent, pageCurrent + dto.getSize()); |
||||
} else if (records1.size() % dto.getSize() > sampleIds.size() - 1) { |
||||
records2 = records1.subList(pageCurrent, records1.size()); |
||||
} else if (dto.getCurrent() > pageTotal) { |
||||
records2 = records1.subList(pageCurrent - dto.getSize(), records1.size()); |
||||
} else { |
||||
records2 = records1.subList(pageCurrent, records1.size()); |
||||
} |
||||
sampleVOIPage2.setTotal(records1.size());//不分页总数
|
||||
sampleVOIPage2.setRecords(records2); |
||||
return R.ok(sampleVOIPage2, "查询成功"); |
||||
|
||||
} else { |
||||
// int size = sampleIds.size();
|
||||
// if ("".equals(dto.getSampleIds())) {
|
||||
// size = sampleIds.size() - 1;
|
||||
// }
|
||||
// if (dto.getTotal() != 0) {
|
||||
// int num = 0;//去重后目前能分的页数
|
||||
//
|
||||
// if ((dto.getTotal() - size) % 8 == 0) {
|
||||
// num = (dto.getTotal() - size) / 8;
|
||||
// } else {
|
||||
// num = (dto.getTotal() - size) / 8 + 1;
|
||||
// }
|
||||
//
|
||||
//
|
||||
// if (dto.getCurrent() > num) {
|
||||
// //求余数
|
||||
// int a = dto.getTotal() % 8;//求最后一页的剩余条数
|
||||
// if (a == 0) {
|
||||
// a = 8;
|
||||
// }
|
||||
// if (sampleIds.size() >= a) {
|
||||
// dto.setCurrent(num);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// Page<SampleStorage> page = new Page<>(dto.getCurrent(), dto.getSize());
|
||||
|
||||
List<OutSampleVO> sampleVOList = storageMapper.getSampleInfoList(Wrappers.<SampleStorage>query() |
||||
.and(StringUtils.isNotBlank(dto.getName()), qw -> qw |
||||
.like("storage.name", dto.getName()) |
||||
.or() |
||||
.like("sample_no", dto.getName())) |
||||
.notIn(!sampleIds.isEmpty(), "storage.sample_id", sampleIds)//去重数组sampleIds
|
||||
.eq("storage.status", 2) //只能查找存入仓库的样本数据
|
||||
.eq("s.status", 2)//并且sample实际状态为2
|
||||
.like(StringUtils.isNotBlank(dto.getRoomNo()), "storage.room_no", dto.getRoomNo()) |
||||
.orderByDesc("sample_no") |
||||
); |
||||
for (OutSampleVO vo : sampleVOList) { |
||||
vo.setSampleId(vo.getId()); |
||||
String eventName = ""; |
||||
//entrustment/hairJob/sewageJob
|
||||
if (vo.getSource().equals("entrustment")) { |
||||
//委托
|
||||
eventName = storageMapper.getEntrustmentName(vo.getSampleId()); |
||||
} else if (vo.getSource().equals("hairJob")) { |
||||
//毛发
|
||||
eventName = storageMapper.getHairJobName(vo.getSampleId()); |
||||
} else if (vo.getSource().equals("sewageJob")) { |
||||
//污水
|
||||
eventName = storageMapper.getSewageJobName(vo.getSampleId()); |
||||
} else if (vo.getSource().contains("Event")) {//通用事件
|
||||
//内部录入
|
||||
eventName = storageMapper.getEventName(vo.getSampleId()); |
||||
} else { |
||||
//特征分析
|
||||
eventName = storageMapper.getFeatureName(vo.getSampleId()); |
||||
} |
||||
vo.setEventName(eventName); |
||||
} |
||||
Map<String, List<OutSampleVO>> map = sampleVOList.stream().collect(Collectors.groupingBy(item -> item.getSource())); |
||||
List<OutSampleVO> entrustmentSampleList = map.get("entrustment"); |
||||
List<OutSampleVO> outSampleVOS = new ArrayList<>(); |
||||
if (entrustmentSampleList != null && entrustmentSampleList.size() > 0) { |
||||
sampleVOList.removeAll(entrustmentSampleList); |
||||
Collections.sort(entrustmentSampleList, new Comparator<OutSampleVO>() { |
||||
@Override |
||||
public int compare(OutSampleVO o1, OutSampleVO o2) { |
||||
String[] split1 = o1.getSampleNo().split("-"); |
||||
String[] split2 = o2.getSampleNo().split("-"); |
||||
// 先比较年份
|
||||
int yearComparison = split2[0].compareTo(split1[0]); |
||||
if (yearComparison != 0) { |
||||
return yearComparison; |
||||
} |
||||
// 再比较序号
|
||||
int num1 = Integer.parseInt(split2[1]); |
||||
int num2 = Integer.parseInt(split1[1]); |
||||
if (num1 - num2 != 0) { |
||||
return num1 - num2; |
||||
} |
||||
|
||||
// 再比较尾号
|
||||
int num3 = Integer.parseInt(split1[2]); |
||||
int num4 = Integer.parseInt(split2[2]); |
||||
return num3 - num4; |
||||
|
||||
} |
||||
}); |
||||
outSampleVOS.addAll(entrustmentSampleList); |
||||
} |
||||
outSampleVOS.addAll(sampleVOList); |
||||
return R.ok(outSampleVOS, "查询成功"); |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 查询当前已经存入仓库的样本信息(根据当前登录人查询对应部门的sample信息) |
||||
*/ |
||||
|
||||
|
||||
/** |
||||
* 新增样本出库申请实体类 |
||||
* |
||||
* @param dto 样本出库申请实体类 |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "新增样本出库申请实体类", notes = "新增样本出库申请实体类") |
||||
@SysLog("新增样本出库申请实体类") |
||||
@PostMapping("/addOutApply") |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_out_warehouse_apply_add')") |
||||
public R<SampleOutWarehouseApply> postAddOutApply(@RequestBody OutWarehouseApplyDTO dto, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
//数据校验
|
||||
if (dto.getSampleIds() == null || dto.getSampleIds().size() == 0) { |
||||
throw new RuntimeException("申请出库检材不能为空"); |
||||
} |
||||
if (dto.getReturnDate() == null) { |
||||
throw new RuntimeException("归还时间不能为空"); |
||||
} |
||||
if ("".equals(dto.getAppraiserId()) || dto.getAppraiserId().isEmpty()) { |
||||
throw new RuntimeException("鉴定人不能为空"); |
||||
} |
||||
|
||||
SampleOutWarehouseApplyVO vo = sampleOutWarehouseApplyService.createOutApply(dto, dlpUser); |
||||
if (vo != null) { |
||||
return R.ok(vo, "创建出库申请成功"); |
||||
} else { |
||||
return R.failed("创建出库申请失败"); |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 创建样本出库申请(接口2) |
||||
* |
||||
* @param dto |
||||
* @param theHttpServletRequest |
||||
* @return |
||||
*/ |
||||
@ApiOperation(value = "创建样本出库申请(老版本)", notes = "创建样本出库申请(老版本)") |
||||
@SysLog("创建样本出库申请") |
||||
@PostMapping("/createOutRepositoryApply") |
||||
@PreAuthorize("@pms.hasPermission('imr_sample_out_warehouse_apply_add')") |
||||
public R createOutRepositoryApply(@RequestBody OutWarehouseApplyDTO dto, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
//数据校验
|
||||
if (dto.getSampleIds().isEmpty()) { |
||||
throw new RuntimeException("申请检材不能为空"); |
||||
} |
||||
if (dto.getReturnDate() == null) { |
||||
throw new RuntimeException("归还时间不能为空"); |
||||
} |
||||
if ("".equals(dto.getAppraiserId()) || dto.getAppraiserId().isEmpty()) { |
||||
throw new RuntimeException("鉴定人不能为空"); |
||||
} |
||||
|
||||
SampleOutWarehouseApplyVO vo = sampleOutWarehouseApplyService.createOutRepositoryApply(dto, dlpUser); |
||||
if (vo != null) { |
||||
return R.ok(vo, "创建出库申请成功"); |
||||
} else { |
||||
return R.failed("创建出库申请失败"); |
||||
} |
||||
} |
||||
|
||||
|
||||
@ApiOperation(value = "取检条码打印", |
||||
notes = "取检条码打印") |
||||
@SysLog("检材条码打印") |
||||
@GetMapping("/print_QR_code") |
||||
public String printgetSampleQRCode(String code) { |
||||
|
||||
return sampleOutWarehouseApplyService.buildEventImLabelContent(code); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 以下为新创建接口---------------------------------------------------------------------- |
||||
*/ |
||||
|
||||
@GetMapping("/testQuery") |
||||
public R testQuery(QueryDTO dto) { |
||||
|
||||
List<String> sampleIds = Arrays.asList(dto.getSampleIds().split(",")); |
||||
IPage<OutSampleVO> sampleVOIPage2 = new Page<>(); |
||||
List<OutSampleVO> records1 = new ArrayList<>(); |
||||
int total = 0; |
||||
|
||||
if (dto.getType() == 1) { |
||||
Integer begin = (dto.getCurrent() - 1) * dto.getSize(); |
||||
CombinationOut combinationOut = new CombinationOut(sampleIds, begin, dto.getSize(), dto.getName()); |
||||
//获取仓库现有样本;并进行事件分类
|
||||
//1.委托
|
||||
List<OutSampleVO> vo1 = storageMapper.getWTSample(combinationOut); |
||||
if (!vo1.isEmpty()) { |
||||
total = total + vo1.size(); |
||||
records1.addAll(vo1); |
||||
} |
||||
|
||||
//2.污水
|
||||
List<OutSampleVO> vo2 = storageMapper.getWSSample(combinationOut); |
||||
if (!vo2.isEmpty()) { |
||||
total = total + vo2.size(); |
||||
records1.addAll(vo2); |
||||
} |
||||
//3.毛发
|
||||
List<OutSampleVO> vo3 = storageMapper.getMFSample(combinationOut); |
||||
if (!vo3.isEmpty()) { |
||||
total = total + vo3.size(); |
||||
records1.addAll(vo3); |
||||
} |
||||
//4.事件
|
||||
List<OutSampleVO> vo4 = storageMapper.getSJSample(combinationOut); |
||||
if (!vo4.isEmpty()) { |
||||
total = total + vo4.size(); |
||||
records1.addAll(vo4); |
||||
} |
||||
} |
||||
|
||||
sampleVOIPage2.setTotal(total); |
||||
sampleVOIPage2.setRecords(records1); |
||||
return R.ok(sampleVOIPage2, "查询成功"); |
||||
} |
||||
|
||||
|
||||
|
||||
/*if(pageCurrent<records1.size()){ |
||||
if(pageCurrent+dto.getSize()<=records1.size()){ |
||||
records2 = records1.subList(pageCurrent,pageCurrent+dto.getSize()); |
||||
}else { |
||||
if(records1.size()%dto.getSize()>sampleIds.size()-1){ |
||||
records2 = records1.subList(pageCurrent,records1.size()); |
||||
}else { |
||||
if(dto.getCurrent()>=2){ |
||||
records2 = records1.subList(pageCurrent-dto.getSize(),records1.size()); |
||||
}else { |
||||
records2 = records1.subList(0,records1.size()); |
||||
} |
||||
} |
||||
} |
||||
}*/ |
||||
|
||||
/*if(records1.size()%dto.getSize()>sampleIds.size()-1){ |
||||
records2 = records1.subList(pageCurrent,records1.size()); |
||||
}else { |
||||
if (dto.getCurrent() > Math.ceil((float)records1.size()/dto.getSize())) { |
||||
records2 = records1.subList(pageCurrent - dto.getSize(), records1.size()); |
||||
} else { |
||||
records2 = records1.subList(pageCurrent, records1.size()); |
||||
} |
||||
}*/ |
||||
|
||||
|
||||
} |
@ -0,0 +1,594 @@ |
||||
package digital.laboratory.platform.imr.controller; |
||||
|
||||
import cn.hutool.core.io.IoUtil; |
||||
import cn.hutool.core.util.StrUtil; |
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker; |
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import com.deepoove.poi.XWPFTemplate; |
||||
import com.deepoove.poi.config.Configure; |
||||
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy; |
||||
import digital.laboratory.platform.common.core.util.R; |
||||
import digital.laboratory.platform.common.feign.RemoteWord2PDFService; |
||||
import digital.laboratory.platform.common.log.annotation.SysLog; |
||||
import digital.laboratory.platform.common.mybatis.security.service.DLPUser; |
||||
import digital.laboratory.platform.common.oss.service.OssFile; |
||||
import digital.laboratory.platform.imr.dto.*; |
||||
import digital.laboratory.platform.imr.entity.*; |
||||
import digital.laboratory.platform.imr.entity.enums.OutboundType; |
||||
import digital.laboratory.platform.imr.mapper.DestructionDetailMapper; |
||||
import digital.laboratory.platform.imr.mapper.SampleOutWarehouseApplyMapper; |
||||
import digital.laboratory.platform.imr.mapper.SampleOutboundRecordMapper; |
||||
import digital.laboratory.platform.imr.mapper.SampleStorageMapper; |
||||
import digital.laboratory.platform.imr.service.DestructionPublicityService; |
||||
import digital.laboratory.platform.imr.service.SampleOutWarehouseApplyService; |
||||
import digital.laboratory.platform.imr.service.SampleOutWarehouseService; |
||||
import digital.laboratory.platform.imr.vo.*; |
||||
import feign.Response; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import lombok.RequiredArgsConstructor; |
||||
import org.springframework.mock.web.MockMultipartFile; |
||||
import org.springframework.security.access.prepost.PreAuthorize; |
||||
import org.springframework.security.oauth2.provider.OAuth2Authentication; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.io.ByteArrayInputStream; |
||||
import java.io.ByteArrayOutputStream; |
||||
import java.security.Principal; |
||||
import java.util.*; |
||||
import java.util.stream.Collectors; |
||||
|
||||
/** |
||||
* 自定义出库controller |
||||
*/ |
||||
@RestController |
||||
@RequiredArgsConstructor |
||||
@RequestMapping("/sample_out_Warehouse" ) |
||||
@Api(value = "sample_out_Warehouse", tags = "样本出库管理") |
||||
public class SampleOutWarehouseController { |
||||
|
||||
|
||||
|
||||
private final SampleOutWarehouseApplyService sampleOutWarehouseApplyService; |
||||
|
||||
private final DestructionPublicityService destructionPublicityService; |
||||
|
||||
private final DestructionDetailMapper destructionDetailMapper; |
||||
|
||||
|
||||
private final SampleOutWarehouseApplyMapper outWarehouseApplyMapper; |
||||
|
||||
|
||||
private final SampleOutWarehouseService warehouseService; |
||||
|
||||
|
||||
private final SampleStorageMapper storageMapper; |
||||
|
||||
|
||||
private final SampleOutboundRecordMapper outboundRecordMapper; |
||||
|
||||
|
||||
private final RemoteWord2PDFService remoteWord2PDFService; |
||||
|
||||
private final OssFile ossFile; |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* 分页查询 |
||||
* @param dto 查询参数管理员可以看见所有数据 |
||||
* @return |
||||
*/ |
||||
@ApiOperation(value = "出库模块领用出库申请--分页查询", notes = "出库模块领用出库申请--分页查询") |
||||
@GetMapping("/page" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_get')" ) |
||||
public R<IPage<SampleOutWarehouseApplyVO>> getSampleOutWarehouseApplyPage(QueryDTO dto, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
QueryWrapper<SampleOutWarehouseApply> query = Wrappers.<SampleOutWarehouseApply>query(); |
||||
query.between(dto.getBeginDate()!=null && dto.getFinishDate()!=null,"application_date",dto.getBeginDate(),dto.getFinishDate()); |
||||
query.orderByDesc("create_time"); |
||||
|
||||
if (dto.getStatus()==0){//返回待审核和待使用的数据
|
||||
ArrayList<Integer> integers = new ArrayList<>(); |
||||
integers.add(1); |
||||
integers.add(2); |
||||
integers.add(3); |
||||
query.in("status",integers); |
||||
}else if (dto.getStatus()==1){ |
||||
query.eq("status",1); |
||||
} |
||||
else if (dto.getStatus()==2){ |
||||
query.eq("status",2); |
||||
} |
||||
else if (dto.getStatus()==3){ |
||||
query.eq("status",3); |
||||
} |
||||
|
||||
Page<SampleOutWarehouseApply> page = new Page<>(dto.getCurrent(),dto.getSize()); |
||||
|
||||
IPage<SampleOutWarehouseApplyVO> thisPage = sampleOutWarehouseApplyService.getSampleOutWarehouseApplyVOPage(page,query); |
||||
return R.ok(thisPage,"查询出库申请成功"); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* 检材管理员看见领用出库申请然后点击同意出库 |
||||
*/ |
||||
|
||||
@ApiOperation(value = "检材管理员--确认同意领用申请", notes = "检材管理员--确认同意领用申请") |
||||
@PutMapping("/reconfirmApply" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_edit')" ) |
||||
public R reconfirmApply(String id, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
if (id.isEmpty()){ |
||||
throw new RuntimeException(String.format("id不能为空")); |
||||
} |
||||
|
||||
SampleOutWarehouseApplyVO applyVO = sampleOutWarehouseApplyService.reconfirmApply(id,dlpUser.getId()); |
||||
|
||||
|
||||
return R.ok(applyVO,"确认成功"); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 根据"取检码"查询相关信息 |
||||
*/ |
||||
@ApiOperation(value = "根据取检码查询相关信息", notes = "根据取检码查询相关信息") |
||||
@SysLog("根据取检码查询相关信息" ) |
||||
@GetMapping("/code/{code}" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_get')") |
||||
public R<SampleOutWarehouseApplyVO> getInfoByCode(@PathVariable("code" ) String code, HttpServletRequest theHttpServletRequest) { |
||||
|
||||
if ("".equals(code)||code.isEmpty()) { |
||||
throw new RuntimeException(String.format("取检码不能为空")); |
||||
} |
||||
SampleOutWarehouseApplyVO vo = sampleOutWarehouseApplyService.getInfoByCode(code); |
||||
if (vo!=null) { |
||||
return R.ok(vo,"查询成功"); |
||||
}else { |
||||
return R.failed("查询失败"); |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 根据"取检码"验证出库信息(确认出库) |
||||
* Confirm Outbound |
||||
*/ |
||||
|
||||
@ApiOperation(value = "根据取检码验证出库信息(确认出库)", notes = "根据取检码验证出库信息(确认出库)") |
||||
@SysLog("根据取检码验证出库信息(确认出库)" ) |
||||
@PutMapping("/confirmOutbound" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_edit')") |
||||
public R<SampleOutWarehouseApplyVO> confirmOutbound(@RequestBody VerificationCode dto, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
if(dto.getSampleIds().isEmpty()){ |
||||
throw new RuntimeException("领用申请样本id不能为空"); |
||||
} |
||||
if(StrUtil.isEmpty(dto.getCode())){ |
||||
throw new RuntimeException("'取检码不能为空'"); |
||||
} |
||||
|
||||
SampleOutWarehouseApplyVO vo = sampleOutWarehouseApplyService.confirmOutbound(dto,dlpUser); |
||||
return R.ok(vo,"确认出库成功"); |
||||
|
||||
} |
||||
|
||||
|
||||
/** |
||||
* 退还/销毁出库---待销毁样本列表查询 |
||||
*/ |
||||
@ApiOperation(value = "待销毁或退还出库的样本查询接口", notes = "待销毁或退还出库的样本查询接口--分页") |
||||
@GetMapping("/toBeDestroyed/page" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_edit')" ) |
||||
public R getToBeDestroyedSample(QueryDTO dto) { |
||||
|
||||
List<String> sampleIds = Arrays.asList(dto.getSampleIds().split(",")); |
||||
int size = sampleIds.size(); |
||||
if ("".equals(dto.getSampleIds())){ |
||||
size = sampleIds.size()-1; |
||||
} |
||||
|
||||
|
||||
if(dto.getTotal()!=0){ |
||||
int num = 0;//去重后目前能分的页数
|
||||
|
||||
if((dto.getTotal()-size)%8==0){ |
||||
num = (dto.getTotal()-size)/8; |
||||
}else { |
||||
num = (dto.getTotal()-size)/8+1; |
||||
} |
||||
|
||||
System.out.println(num); |
||||
|
||||
if(dto.getCurrent()>num){ |
||||
//求余数
|
||||
int a = dto.getTotal()%8;//求最后一页的剩余条数
|
||||
if(a==0){ |
||||
a=8; |
||||
if(sampleIds.size()>=a){ |
||||
dto.setCurrent(num); |
||||
} |
||||
}else { |
||||
if(sampleIds.size()>=a){ |
||||
dto.setCurrent(num); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
Page<SampleStorage> page = new Page<>(dto.getCurrent(),dto.getSize()); |
||||
/* |
||||
* 两个条件 |
||||
* 审核通过待销毁状态-->=2 |
||||
* 销毁申请通过的不能再退还中出现 |
||||
* |
||||
* 还在仓库--status==2 |
||||
*/ |
||||
|
||||
QueryWrapper<SampleStorage> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.notIn(!sampleIds.isEmpty(),"storage.sample_id",sampleIds);//去重数组sampleIds
|
||||
queryWrapper.like(!dto.getName().isEmpty(),"storage.name",dto.getName()); |
||||
queryWrapper.eq("storage.status",2); //只能查找存入仓库的样本数据
|
||||
if(dto.getStatus()==null){ |
||||
queryWrapper.ne("storage.early_warning",2); //如果是退还出库不需要去查询销毁申请通过的检材
|
||||
}else { |
||||
queryWrapper.eq("storage.early_warning",dto.getStatus());//销毁出库就只查询销毁申请通过的
|
||||
} |
||||
//queryWrapper.eq(dto.getStatus()!=null,"storage.early_warning",dto.getStatus());
|
||||
IPage<BaseSampleVO> sampleVOIPage = storageMapper.getSampleInfoTwo(page,queryWrapper); |
||||
return R.ok(sampleVOIPage,"查询成功"); |
||||
} |
||||
|
||||
/** |
||||
* 退还出库自动查询退还单位 |
||||
*/ |
||||
@ApiOperation(value = "退还出库查询委托方", notes = "退还出库查询委托方") |
||||
@GetMapping("/returnOutboundQuery" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_edit')" ) |
||||
public R returnOutboundQuery(String sampleId) { |
||||
|
||||
|
||||
String orgName = storageMapper.returnOutboundQuery(sampleId); |
||||
|
||||
return R.ok(orgName,"查询成功"); |
||||
} |
||||
|
||||
/** |
||||
* 退还出库 |
||||
*/ |
||||
@ApiOperation(value = "退还出库", notes = "退还出库") |
||||
@PutMapping("/returnOutbound" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_edit')" ) |
||||
|
||||
public R returnOutbound(@RequestBody ReturnOutboundDTO dto, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
if(dto.getSampleIds().isEmpty()){ |
||||
throw new RuntimeException("样本信息不能为空"); |
||||
} |
||||
if(dto.getReturnInstitution().isEmpty()){ |
||||
throw new RuntimeException("退还单位不能为空"); |
||||
} |
||||
|
||||
warehouseService.returnOutbound(dto,dlpUser); |
||||
|
||||
return R.ok("退还出库成功"); |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 销毁出库 |
||||
*/ |
||||
|
||||
@ApiOperation(value = "销毁出库", notes = "销毁出库") |
||||
@PutMapping("/destroyOutbound" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_edit')" ) |
||||
public R destroyOutbound(@RequestBody DestroyOutboundDTO dto, HttpServletRequest theHttpServletRequest) { |
||||
|
||||
|
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
/* |
||||
*这里销毁出库可能要先判断是否公示了 |
||||
*/ |
||||
// LambdaQueryWrapper<DestructionDetail> queryWrapper = new LambdaQueryWrapper<>();
|
||||
// queryWrapper.in(DestructionDetail::getSampleId, dto.getSampleIds());
|
||||
// queryWrapper.orderByDesc(DestructionDetail::getUpdateTime);
|
||||
// List<DestructionDetail> destructionDetails = destructionDetailMapper.selectList(queryWrapper); // 查询该dto中的样本id 是否已经公示
|
||||
// // 根据公示id 进行分类
|
||||
// Map<String, List<DestructionDetail>> collect = destructionDetails.stream().collect(Collectors.groupingBy(item -> item.getDestructionId()));
|
||||
// collect.forEach((k, v) -> {
|
||||
// // 根据公示详情中关联的公示id 查公示
|
||||
// DestructionPublicity oneById = destructionPublicityService.getOneById(k);
|
||||
// if (oneById == null || oneById.getStatus() != 1) {
|
||||
// // 公示如果查不到或者状态不为1 则提示需要公示
|
||||
// throw new RuntimeException("请先进行销毁公示在出口!");
|
||||
// }
|
||||
// });
|
||||
|
||||
|
||||
if(dto.getSampleIds().isEmpty()){ |
||||
throw new RuntimeException("样本信息不能为空"); |
||||
} |
||||
|
||||
warehouseService.destroyOutbound(dto,dlpUser); |
||||
|
||||
return R.ok("销毁出库成功"); |
||||
} |
||||
|
||||
|
||||
|
||||
/** |
||||
* 入库样本记录分页 |
||||
*/ |
||||
@ApiOperation(value = "出库记录分页", notes = "出库记录分页") |
||||
@GetMapping("/outboundRecord/page" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_get')" ) |
||||
public R<IPage<OutboundRecordVO>> outboundRecord(QuerySampleDTO dto) { |
||||
Page<SampleOutboundRecord> page = new Page<>(dto.getCurrent(), dto.getSize()); |
||||
IPage<OutboundRecordVO> sampleVOIPage = outboundRecordMapper.outboundRecord(page, Wrappers.<SampleOutboundRecord>query() |
||||
.like(!dto.getName().isEmpty(), "outbound.name", dto.getName()) |
||||
.orderByDesc("create_time") |
||||
); |
||||
|
||||
List<OutboundRecordVO> records = sampleVOIPage.getRecords(); |
||||
for (OutboundRecordVO record : records) { |
||||
record.setStatusCode(record.getOutboundType().getStatus()); |
||||
if(record.getOutboundType() == OutboundType.RETURN){ |
||||
record.setRecipientName(record.getRecipientId());//退还的比较特殊
|
||||
} |
||||
//销毁出库
|
||||
} |
||||
return R.ok(sampleVOIPage, "查询成功"); |
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
/** |
||||
* 待归还样本toBeReturned |
||||
*/ |
||||
@ApiOperation(value = "待归还样本--分页", notes = "待归还样本--分页") |
||||
@GetMapping("/toBeReturned/page" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_get')" ) |
||||
public R<IPage<ToBeReturnVO>> toBeReturned(QuerySampleDTO dto) { |
||||
|
||||
Page<SampleStorage> page = new Page<>(dto.getCurrent(), dto.getSize()); |
||||
|
||||
IPage<ToBeReturnVO> sampleVOIPage = storageMapper.toBeReturned(page, Wrappers.<SampleStorage>query() |
||||
.like(!dto.getName().isEmpty(), "storage.name", dto.getName()) |
||||
.eq("is_return",1)//只查询需要归还的
|
||||
.eq("storage.status",3) |
||||
.orderByAsc("storage.update_time") |
||||
); |
||||
List<ToBeReturnVO> records = sampleVOIPage.getRecords(); |
||||
for (ToBeReturnVO toBeReturnVO : records) { |
||||
String eventName = ""; |
||||
//entrustment/hairJob/sewageJob
|
||||
switch (toBeReturnVO.getSource()) { |
||||
case "entrustment": |
||||
//委托
|
||||
eventName = storageMapper.getEntrustmentName(toBeReturnVO.getSampleId()); |
||||
break; |
||||
case "hairJob": |
||||
//毛发
|
||||
eventName = storageMapper.getHairJobName(toBeReturnVO.getSampleId()); |
||||
break; |
||||
case "sewageJob": |
||||
//污水
|
||||
eventName = storageMapper.getSewageJobName(toBeReturnVO.getSampleId()); |
||||
break; |
||||
case "Event污水": |
||||
case "Event毛发": |
||||
//内部录入
|
||||
eventName = storageMapper.getEventName(toBeReturnVO.getSampleId()); |
||||
break; |
||||
default: |
||||
//特征分析
|
||||
eventName = storageMapper.getFeatureName(toBeReturnVO.getSampleId()); |
||||
break; |
||||
} |
||||
toBeReturnVO.setEventName(eventName); |
||||
} |
||||
|
||||
|
||||
return R.ok(sampleVOIPage, "查询成功"); |
||||
|
||||
|
||||
} |
||||
|
||||
/** |
||||
* 查询单个待归还样本 |
||||
*/ |
||||
|
||||
@ApiOperation(value = "待归还样本--详情", notes = "待归还样本--详情") |
||||
@GetMapping("/toBeReturned/detail" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_get')" ) |
||||
public R<RecipientDTO> toBeReturnedDetail(String sampleId) { |
||||
|
||||
|
||||
|
||||
RecipientDTO sampleVOIPage = storageMapper.toBeReturnedDetail(sampleId); |
||||
|
||||
return R.ok(sampleVOIPage, "查询成功"); |
||||
|
||||
|
||||
} |
||||
|
||||
/** |
||||
* 出库模块对应角标 |
||||
*/ |
||||
|
||||
@ApiOperation(value = "出库模块对应角标0.待确认出库申请;2.出库待归还", notes = "出库模块对应角标0.待确认出库申请;2.出库待归还") |
||||
@GetMapping("/inboundIcon/count" ) |
||||
//@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_edit')" )
|
||||
public R<List<IconDTO>> getIconCount() { |
||||
|
||||
|
||||
//出库申请
|
||||
QueryWrapper<SampleOutWarehouseApply> queryWrapper = new QueryWrapper<>(); |
||||
|
||||
queryWrapper.eq("status",1);//待确认(出库申请带确认)
|
||||
|
||||
Long count = outWarehouseApplyMapper.selectCount(queryWrapper); |
||||
|
||||
IconDTO destroyed = new IconDTO(count, 0, "destroyed"); |
||||
|
||||
//出库待归还
|
||||
|
||||
QueryWrapper<SampleStorage> wrapper = new QueryWrapper<>(); |
||||
wrapper.eq("is_return",1);//需要归还
|
||||
wrapper.eq("status",3);//领用出库了
|
||||
|
||||
Long selectCount = storageMapper.selectCount(wrapper); |
||||
|
||||
IconDTO aReturn = new IconDTO(selectCount, 2, "return"); |
||||
|
||||
|
||||
ArrayList<IconDTO> iconDTOS = new ArrayList<>(); |
||||
iconDTOS.add(destroyed); |
||||
iconDTOS.add(aReturn); |
||||
return R.ok(iconDTOS,"查询成功"); |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
/**-------出库清单*/ |
||||
/** |
||||
* 出库清单 |
||||
* |
||||
* @param ids |
||||
* |
||||
* @return |
||||
*/ |
||||
@ApiOperation(value = "出库清单", notes = "出库清单") |
||||
@SysLog("出库清单") |
||||
@PostMapping("/print/inventory") |
||||
// @PreAuthorize("@pms.hasPermission('EntrustmentEdit')")
|
||||
public void bizGetPDFInventory(@RequestBody List<String> ids, HttpServletRequest theHttpServletRequest, HttpServletResponse httpServletResponse) { |
||||
System.out.println("bizApplyWord................."); |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
|
||||
//查询数据
|
||||
List<InventorySample> voList = storageMapper.getSampleInventory(new QueryWrapper<SampleStorage>() |
||||
.in("storage.id", ids)//查询该集合中相关样本数据
|
||||
); |
||||
|
||||
if (voList.isEmpty()) { |
||||
throw new RuntimeException("未查询到相关信息"); |
||||
} |
||||
|
||||
String id = IdWorker.get32UUID().toUpperCase(); |
||||
|
||||
String applyFileName = "检材出库清单-"+id; |
||||
|
||||
String pdfFilePath = "document" + "/"+"inventory" + "/" + id + "/" + applyFileName + ".pdf"; |
||||
try { |
||||
//直接调用pdf方法
|
||||
GenerateSampleApplyTablePDF(voList,id,theHttpServletRequest,httpServletResponse); |
||||
ossFile.fileGet(pdfFilePath, httpServletResponse.getOutputStream()); |
||||
httpServletResponse.setContentType(applyFileName); |
||||
} catch (Exception e) { |
||||
System.out.printf("minioFile objectExist() Exception. %s%n", e.getLocalizedMessage()); |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
|
||||
|
||||
private void GenerateSampleApplyTablePDF(List<InventorySample> voList,String id, HttpServletRequest theHttpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||
System.out.println("GenerateSampleApplyTablePDF................."); |
||||
|
||||
//-----------------------------
|
||||
// 生成 word 版本的 鉴定委托书
|
||||
|
||||
String applyFileName = "检材出库清单-"+id; |
||||
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream(); |
||||
ossFile.fileGet("template" + "/" + "检材出库清单模板.docx", bos); |
||||
|
||||
byte[] templateArray = bos.toByteArray(); |
||||
|
||||
ByteArrayInputStream bis = new ByteArrayInputStream(templateArray); |
||||
bos.close(); |
||||
|
||||
for (int i = 0;i<voList.size();i++) { |
||||
InventorySample inventorySample = voList.get(i); |
||||
inventorySample.setNumber(i+1); |
||||
} |
||||
|
||||
|
||||
LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); |
||||
|
||||
Configure config = Configure.builder(). |
||||
bind("voList", policy).build(); |
||||
/** |
||||
* 循环表格 |
||||
*/ |
||||
XWPFTemplate template = XWPFTemplate.compile(bis, config).render( |
||||
new HashMap<String, Object>() {{ |
||||
put("voList", voList); |
||||
}} |
||||
); |
||||
bis.close(); |
||||
|
||||
ByteArrayOutputStream fosWord = new ByteArrayOutputStream(); |
||||
template.write(fosWord); |
||||
template.close(); |
||||
|
||||
//------------
|
||||
ByteArrayInputStream fisWord = new ByteArrayInputStream(fosWord.toByteArray()); |
||||
fosWord.close(); |
||||
|
||||
//MockMultipartFile mockMultipartFile = new MockMultipartFile("file", entrustmentLetterFileName + ".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", fisWord);
|
||||
MockMultipartFile mockMultipartFile = new MockMultipartFile("file", applyFileName + ".docx", "image/jpg", fisWord); |
||||
Response response = remoteWord2PDFService.word2pdf(mockMultipartFile); |
||||
fisWord.close(); |
||||
|
||||
|
||||
ByteArrayOutputStream outPDF = new ByteArrayOutputStream(); |
||||
IoUtil.copy(response.body().asInputStream(), outPDF, IoUtil.DEFAULT_MIDDLE_BUFFER_SIZE); |
||||
ByteArrayInputStream isPDF = new ByteArrayInputStream(outPDF.toByteArray()); |
||||
outPDF.close(); |
||||
|
||||
|
||||
ossFile.fileSave("document" + "/" + "inventory" + "/" + id + "/" + applyFileName + ".pdf", isPDF); |
||||
isPDF.close(); |
||||
|
||||
|
||||
System.out.println("转换为 PDF 结束"); |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* 催还 |
||||
*/ |
||||
|
||||
} |
@ -0,0 +1,947 @@ |
||||
package digital.laboratory.platform.imr.controller; |
||||
|
||||
|
||||
import cn.hutool.core.date.LocalDateTimeUtil; |
||||
import cn.hutool.core.io.IoUtil; |
||||
import cn.hutool.core.util.StrUtil; |
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker; |
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import com.deepoove.poi.XWPFTemplate; |
||||
import com.deepoove.poi.config.Configure; |
||||
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy; |
||||
import digital.laboratory.platform.common.core.util.R; |
||||
import digital.laboratory.platform.common.feign.RemoteWord2PDFService; |
||||
import digital.laboratory.platform.common.log.annotation.SysLog; |
||||
import digital.laboratory.platform.common.mybatis.security.service.DLPUser; |
||||
import digital.laboratory.platform.common.oss.service.OssFile; |
||||
import digital.laboratory.platform.common.security.annotation.Inner; |
||||
import digital.laboratory.platform.common.security.util.SecurityUtils; |
||||
import digital.laboratory.platform.imr.dto.*; |
||||
import digital.laboratory.platform.imr.entity.*; |
||||
import digital.laboratory.platform.imr.mapper.*; |
||||
import digital.laboratory.platform.imr.service.SamplePutInStorageService; |
||||
import digital.laboratory.platform.imr.vo.*; |
||||
import feign.Response; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import lombok.RequiredArgsConstructor; |
||||
import org.springframework.mock.web.MockMultipartFile; |
||||
import org.springframework.security.access.prepost.PreAuthorize; |
||||
import org.springframework.security.oauth2.provider.OAuth2Authentication; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.io.ByteArrayInputStream; |
||||
import java.io.ByteArrayOutputStream; |
||||
import java.security.Principal; |
||||
import java.time.LocalDate; |
||||
import java.util.*; |
||||
|
||||
|
||||
/** |
||||
* @author Zhang Xiaolong created at 2023-03-21 |
||||
* @describe 前端控制器 |
||||
* <p> |
||||
* 这是与表示层的接口, 不应该接业务逻辑写在这里, 业务逻辑应该写在 service 中 |
||||
* 这里写什么: |
||||
* 为前端提供数据, 接受前端的数据 |
||||
* 为前端提供的数据, 从 service 取得后, 可以做一些适当的加工, 这种加工不是业务层面的, 只能是数据格式上, 为方便前端处理 |
||||
* 接受前端的数据, 每一个函数的参数可以先做一些整理后, 再调用 service 中的函数。这里对参数的整理, 应该只是格式上的, 而不能是业务上的 |
||||
* 数据层在 mapper 中, 数据层不涉及业务, 只管技术上的 对象<->表 之间的转换 |
||||
*/ |
||||
|
||||
|
||||
/** |
||||
* 样本入库controller |
||||
* 入库相关接口 |
||||
*/ |
||||
@RestController |
||||
@RequiredArgsConstructor |
||||
@RequestMapping("/sample_put_in_storage") |
||||
@Api(value = "sample_inbound_or_outbound", tags = "样本入库管理") |
||||
public class SamplePutInStorageController { |
||||
|
||||
private final SamplePutInStorageService samplePutInStorageService; |
||||
|
||||
private final SampleStorageMapper storageMapper; |
||||
|
||||
private final RemoteWord2PDFService remoteWord2PDFService; |
||||
|
||||
private final SampleApplyMapper asMapper; |
||||
|
||||
private final OssFile ossFile; |
||||
|
||||
private final SampleOutWarehouseApplyMapper outWarehouseApplyMapper; |
||||
|
||||
private final SampleInboundAndOutboundTableMapper tableMapper; |
||||
|
||||
/** |
||||
* 获取已录入仓库样本(分页) |
||||
*/ |
||||
@ApiOperation(value = "获取已录入仓库样本(分页)", notes = "获取已录入仓库样本(分页)") |
||||
@GetMapping("/repositorySample/page") |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_get')") |
||||
public R<IPage<RepositorySampleVO>> getSampleVOList(QuerySampleDTO dto) { |
||||
|
||||
Page<SampleStorage> page = new Page<>(dto.getCurrent(), dto.getSize()); |
||||
IPage<RepositorySampleVO> sampleVOIPage = samplePutInStorageService.getSampleVOList(page, Wrappers.<SampleStorage>query() |
||||
.like(StrUtil.isNotEmpty(dto.getName()), "storage.name", dto.getName()) |
||||
.eq(StrUtil.isNotEmpty(dto.getSampleType()), "storage.sample_type", dto.getSampleType()) |
||||
.eq("storage.status", dto.getStatus()) |
||||
.between(dto.getBeginDate() != null && dto.getFinishDate() != null, "in_repository_date", dto.getBeginDate(), dto.getFinishDate()) |
||||
.orderByDesc("create_time") |
||||
); |
||||
return R.ok(sampleVOIPage, "查询成功"); |
||||
} |
||||
|
||||
/** |
||||
* 入库样本记录分页 |
||||
*/ |
||||
@ApiOperation(value = "入库样本记录分页", notes = "入库样本记录分页") |
||||
@GetMapping("/inboundRecord/page") |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_get')") |
||||
public R<IPage<InboundRecordVO>> inboundRecord(QuerySampleDTO dto) { |
||||
Page<SampleInboundRecord> page = new Page<>(dto.getCurrent(), dto.getSize()); |
||||
IPage<InboundRecordVO> sampleVOIPage = samplePutInStorageService.inboundRecord(page, Wrappers.<SampleInboundRecord>query() |
||||
.like(StrUtil.isNotEmpty(dto.getName()), "inbound.name", dto.getName()) |
||||
.orderByDesc("create_time") |
||||
); |
||||
return R.ok(sampleVOIPage, "查询成功"); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 待销毁样本预警 |
||||
*/ |
||||
@ApiOperation(value = "待销毁样本预警", notes = "待销毁样本预警") |
||||
@GetMapping("/destructionWarning/page") |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_get')") |
||||
public R destructionWarning(QuerySampleDTO dto) { |
||||
Page<SampleStorage> page = new Page<>(dto.getCurrent(), dto.getSize()); |
||||
IPage<RepositorySampleVO> sampleVOIPage = samplePutInStorageService.getDestructionVO(page, Wrappers.<SampleStorage>query() |
||||
.like(StrUtil.isNotEmpty(dto.getName()), "storage.name", dto.getName()) |
||||
.eq("early_warning", 1) |
||||
.eq("storage.status", 2)//只能查看当前入库的
|
||||
.orderByDesc("create_time") |
||||
); |
||||
return R.ok(sampleVOIPage, "查询成功"); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 查询单个存放样本信息 |
||||
* sample信息+详情(出入库登记表) |
||||
*/ |
||||
@ApiOperation(value = "查询单个存放样本信息--这个id不是样本id", notes = "查询单个存放样本信息") |
||||
@GetMapping("/detailed") |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_get')") |
||||
public R<RepositorySampleVO> getSampleDetailed(String id) { |
||||
|
||||
if (StrUtil.isEmpty(id)) { |
||||
throw new RuntimeException("查询id不能为空"); |
||||
} |
||||
|
||||
RepositorySampleVO sampleVO = samplePutInStorageService.getSampleDetailed(id); |
||||
|
||||
return R.ok(sampleVO, "查询成功"); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 根据样本编号获取主要信息 |
||||
* (扫码枪扫描) |
||||
*/ |
||||
@ApiOperation(value = "根据样本编号获取主要信息(入库)", notes = "根据样本编号获取主要信息(入库)") |
||||
@GetMapping("/getSampleInfoByNo") |
||||
@Inner(value = false) |
||||
//@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_get')" )
|
||||
public R<List<OutSampleVO>> getSampleInfoByNo(String sampleNo) { |
||||
|
||||
if (sampleNo == null || "".equals(sampleNo)) { |
||||
return R.failed(null); |
||||
} |
||||
|
||||
List<OutSampleVO> vo = samplePutInStorageService.getSampleListByNo(sampleNo); |
||||
|
||||
if (!vo.isEmpty()) { |
||||
return R.ok(vo, "查询成功"); |
||||
} else { |
||||
return R.failed(vo, String.format("编号为" + sampleNo + "的样本不存在请重试")); |
||||
} |
||||
} |
||||
|
||||
|
||||
@ApiOperation(value = "修改sample质量", notes = "修改sample质量") |
||||
@PostMapping("/updateSampleQuality") |
||||
public R<String> updateSampleQuality(String sampleId, double sampleQuality) { |
||||
|
||||
if (StrUtil.isEmpty(sampleId)) { |
||||
throw new RuntimeException("id不能为空"); |
||||
} |
||||
|
||||
//查询并修改
|
||||
samplePutInStorageService.updateSampleQuality(sampleId, sampleQuality); |
||||
|
||||
return R.ok(null, "修改质量成功"); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 扫码入库查看详情信息 |
||||
*/ |
||||
@ApiOperation(value = "获取sample主要的详情信息", notes = "获取sample主要的详情信息") |
||||
@GetMapping("/getSampleDetailInfo") |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_get')") |
||||
public R<BaseSampleDetail> getSampleDetailInfo(String id) { |
||||
|
||||
if (id == null || "".equals(id)) { |
||||
return R.failed(null); |
||||
} |
||||
|
||||
BaseSampleDetail sampleDetail = storageMapper.getSampleDetailInfo(id); |
||||
|
||||
if (sampleDetail != null) { |
||||
if (sampleDetail.getSource().equals("entrustment") && sampleDetail.getQuantity() == 0) { |
||||
sampleDetail.setQuantity(storageMapper.getQuality(sampleDetail.getId())); |
||||
} |
||||
return R.ok(sampleDetail, "查询成功"); |
||||
} else { |
||||
return R.failed("查询失败"); |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 默认没有仓库样本表 |
||||
* 外部关联一张样本存储表格 |
||||
* (接口2)(不考虑样本入库质量) |
||||
* 根据检材样本编号录入仓库(入库) |
||||
* 确认入库按钮 |
||||
*/ |
||||
@ApiOperation(value = "根据编号录入仓库(入库)--不考虑质量", notes = "根据编号录入仓库(入库)--不考虑质量") |
||||
@PostMapping("/sampleEntryRepository") |
||||
//@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound')" )
|
||||
public R sampleEntryRepository(@RequestBody List<String> sampleNos, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
if (sampleNos != null) { |
||||
throw new RuntimeException("入库样本编号不能为空"); |
||||
} |
||||
|
||||
List<OutSampleVO> vo = samplePutInStorageService.sampleEntryRepository(sampleNos, dlpUser); |
||||
if (vo != null) { |
||||
return R.ok(vo, "样本入库成功,本次入库样本数为" + sampleNos.size() + "份"); |
||||
} else { |
||||
return R.failed("入库失败"); |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 默认没有仓库样本表 |
||||
* 外部关联一张样本存储表格 |
||||
* (接口3) |
||||
* 根据检材样本编号录入仓库(入库) |
||||
* <p> |
||||
* 这里需要手动填写入库时的质量和计量单位(流转) |
||||
* <p> |
||||
* 确认入库按钮 |
||||
*/ |
||||
@ApiOperation(value = "根据样本编号录入仓库(入库)--考虑质量", notes = "根据样本编号录入仓库(入库)--考虑质量") |
||||
@PostMapping("/sampleInRepository") |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_add')") |
||||
public R sampleInRepository(@RequestBody List<InRepositoryDTO> sample, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
if (sample == null) { |
||||
throw new RuntimeException("入库样本编号不能为空"); |
||||
} |
||||
|
||||
List<OutSampleVO> vo = samplePutInStorageService.sampleInRepository(sample, dlpUser); |
||||
if (vo != null) { |
||||
return R.ok(vo, "样本入库成功,本次入库样本数为" + sample.size() + "份"); |
||||
} else { |
||||
return R.failed("入库失败"); |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 待存放样本查询 |
||||
*/ |
||||
@ApiOperation(value = "待存放样本查询", notes = "待存放样本查询") |
||||
@GetMapping("/getToBeStoredSample") |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_get')") |
||||
public R<IPage<RepositorySampleVO>> getToBeStoredSample(QueryDTO dto) { |
||||
|
||||
|
||||
Page<SampleStorage> page = new Page<>(dto.getCurrent(), dto.getSize()); |
||||
|
||||
IPage<RepositorySampleVO> sampleVOS = storageMapper.getToBeStoredSample(page, Wrappers.<SampleStorage>query() |
||||
.like(StrUtil.isNotEmpty(dto.getName()), "storage.name", dto.getName()) |
||||
.eq("storage.status", 1) |
||||
); |
||||
|
||||
|
||||
return R.ok(sampleVOS, "查询成功"); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 检材存放 |
||||
*/ |
||||
@ApiOperation(value = "选择样本存放到格子(存放)", notes = "选择样本存放到格子(存放)") |
||||
@PostMapping("/sampleDepositRepository") |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_edit')") |
||||
public R sampleDepositRepository(@RequestBody DepositDTO dto) { |
||||
if (dto.getIds() == null) { |
||||
throw new RuntimeException("样本不能为空"); |
||||
} |
||||
if (StrUtil.isEmpty(dto.getCellId())) { |
||||
throw new RuntimeException("存放位置不能为空"); |
||||
} |
||||
|
||||
List<OutSampleVO> vo = samplePutInStorageService.sampleDepositRepository(dto); |
||||
|
||||
return R.ok(vo, "已成功存入" + vo.get(0).getStorageLocation()); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 点击存放格子时展示对应内部的存放样本信息 |
||||
*/ |
||||
|
||||
@ApiOperation(value = "通过样本id获取格子中存放的样本信息", notes = "通过样本id获取格子中存放的样本信息") |
||||
@GetMapping("/getStoredSample") |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_get')") |
||||
public R<List<OutSampleVO>> getStoredSample(String cellId) { |
||||
|
||||
|
||||
if (cellId == null || "".equals(cellId)) { |
||||
throw new RuntimeException("格子id不能为空"); |
||||
} |
||||
|
||||
ArrayList<OutSampleVO> outSampleVOS = new ArrayList<>(); |
||||
QueryWrapper<SampleStorage> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("storage_cell_id", cellId); |
||||
queryWrapper.eq("status", 2);//已经入库的
|
||||
List<SampleStorage> storages = storageMapper.selectList(queryWrapper); |
||||
for (SampleStorage storage : storages) { |
||||
OutSampleVO sampleVO = storageMapper.getSampleById(storage.getSampleId()); |
||||
if (sampleVO != null) { |
||||
outSampleVOS.add(sampleVO); |
||||
} |
||||
} |
||||
Collections.sort(outSampleVOS, new Comparator<OutSampleVO>() { |
||||
@Override |
||||
public int compare(OutSampleVO o1, OutSampleVO o2) { |
||||
String[] split1 = o1.getSampleNo().split("-"); |
||||
String[] split2 = o2.getSampleNo().split("-"); |
||||
// 先比较年份
|
||||
int yearComparison = split2[0].compareTo(split1[0]); |
||||
if (yearComparison != 0) { |
||||
return yearComparison; |
||||
} |
||||
// 再比较序号
|
||||
int num1 = Integer.parseInt(split2[1]); |
||||
int num2 = Integer.parseInt(split1[1]); |
||||
if (num1 - num2 != 0) { |
||||
return num1 - num2; |
||||
} |
||||
|
||||
// 再比较尾号
|
||||
int num3 = Integer.parseInt(split1[2]); |
||||
int num4 = Integer.parseInt(split2[2]); |
||||
return num3 - num4; |
||||
} |
||||
}); |
||||
if (!outSampleVOS.isEmpty()) { |
||||
return R.ok(outSampleVOS, "查询成功"); |
||||
} else { |
||||
return R.failed("当前格子未存放样本"); |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 修改存储期限 |
||||
*/ |
||||
|
||||
@ApiOperation(value = "修改存储期限", notes = "修改存储期限") |
||||
@PutMapping("/updateStorageDate") |
||||
@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_edit')") |
||||
public R updateStorageLocation(@RequestBody UpdateStorageDateDTO dto) { |
||||
|
||||
if (dto.getStorageDate().isBefore(LocalDate.now())) { |
||||
throw new RuntimeException("请选择正确的时间"); |
||||
} |
||||
|
||||
UpdateWrapper<SampleStorage> wrapper = new UpdateWrapper<>(); |
||||
wrapper.eq("id", dto.getId()); |
||||
wrapper.set("storage_date", dto.getStorageDate()); |
||||
wrapper.set("early_warning", 0);//销毁预警为0
|
||||
storageMapper.update(null, wrapper); |
||||
return R.ok("修改成功"); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 销毁预警角标 |
||||
*/ |
||||
|
||||
@ApiOperation(value = "销毁预警角标", notes = "销毁预警角标") |
||||
@GetMapping("/destroyed/count") |
||||
//@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_edit')" )
|
||||
public R<List<IconDTO>> getIconCount() { |
||||
//查询当前待销毁检材数量
|
||||
QueryWrapper<SampleStorage> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("early_warning", 1); |
||||
queryWrapper.eq("status", 2);//只能查看当前入库的
|
||||
Long count = storageMapper.selectCount(queryWrapper); |
||||
|
||||
IconDTO destroyed = new IconDTO(count, 1, "destroyed"); |
||||
|
||||
ArrayList<IconDTO> iconDTOS = new ArrayList<>(); |
||||
iconDTOS.add(destroyed); |
||||
return R.ok(iconDTOS, "查询成功"); |
||||
|
||||
} |
||||
|
||||
|
||||
//待存放检材角标(--检材存放提示角标)
|
||||
/*@ApiOperation(value = "待存放检材角标", notes = "待存放检材角标") |
||||
@GetMapping("/getToBeStoredIcon/count" ) |
||||
//@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound_edit')" )
|
||||
public R<List<IconDTO>> getToBeStoredIcon() { |
||||
//查询当前待存放检材的数量
|
||||
QueryWrapper<SampleStorage> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("status",1);//只能查看当前入库的
|
||||
Long count = storageMapper.selectCount(queryWrapper); |
||||
|
||||
IconDTO toBeStored = new IconDTO(count, 1, "toBeStored"); |
||||
|
||||
ArrayList<IconDTO> iconDTOS = new ArrayList<>(); |
||||
iconDTOS.add(toBeStored); |
||||
return R.ok(iconDTOS,"查询成功"); |
||||
|
||||
}*/ |
||||
|
||||
//----------------------------------------------------------
|
||||
|
||||
|
||||
/* |
||||
|
||||
*/ |
||||
@ApiOperation(value = "一个检材入库时的可选检材列表", notes = "一个检材入库时的可选检材列表") |
||||
@GetMapping("/choseSampleList") |
||||
public R<Map<String, List<OutSampleVO>>> choseSampleList(String keyWords) { |
||||
Map<String, List<OutSampleVO>> map = samplePutInStorageService.choseSampleList(keyWords); |
||||
return R.ok(map, "查询成功"); |
||||
} |
||||
|
||||
@ApiOperation(value = "临时入库接口,修改检材状态") |
||||
@PutMapping("/tempSampleIn") |
||||
public R temporaryProcessSampleIn(@RequestBody List<OutSampleVO> vos) { |
||||
samplePutInStorageService.temporaryProcessSampleIn(vos, SecurityUtils.getUser()); |
||||
return R.ok(); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 生成出入库登记表 |
||||
* |
||||
* @param |
||||
*/ |
||||
@ApiOperation(value = "生成出入库单个登记表", notes = "生成出入库单个登记表。如果还没有创建, 立即创建: 根据鉴定申请信息内容的内容创建PDF格式的鉴定委托书, 并保存到 MinIO 存储中") |
||||
@SysLog("生成出入库登记表") |
||||
@GetMapping("/print/inAndOutTable") |
||||
// @PreAuthorize("@pms.hasPermission('EntrustmentEdit')")
|
||||
public R bizGetPDFSampleInAndOutTable(String sampleId, HttpServletRequest theHttpServletRequest, HttpServletResponse httpServletResponse) { |
||||
System.out.println("bizApplyWord................."); |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
|
||||
//查询数据
|
||||
BaseSampleDetail sampleDetailInfo = storageMapper.getSampleDetailInfo(sampleId); |
||||
if (sampleDetailInfo == null) { |
||||
throw new RuntimeException("没有找到检材相关信息"); |
||||
} |
||||
|
||||
List<InAndOutInfos> inAndOutInfos = tableMapper.getInandOutTableInfo(sampleId); |
||||
if (inAndOutInfos == null || inAndOutInfos.size() == 0) { |
||||
throw new RuntimeException("没有找到检材出入库相关信息"); |
||||
} |
||||
|
||||
String id = IdWorker.get32UUID().toUpperCase(); |
||||
|
||||
String applyFileName = "检材出入库登记表-" + id; |
||||
String pdfFilePath = "document" + "/" + "repository" + "/" + id + "/" + applyFileName + ".docx"; |
||||
|
||||
try { |
||||
//直接调用生成
|
||||
GenerateSampleApplyTablePDF(inAndOutInfos, id, theHttpServletRequest, httpServletResponse); |
||||
return R.ok(pdfFilePath); |
||||
// ossFile.fileGet(pdfFilePath, httpServletResponse.getOutputStream());
|
||||
// httpServletResponse.setContentType(applyFileName);
|
||||
} catch (Exception e) { |
||||
System.out.printf("minioFile objectExist() Exception. %s%n", e.getLocalizedMessage()); |
||||
e.printStackTrace(); |
||||
return R.failed("生成失败!"); |
||||
} |
||||
} |
||||
|
||||
|
||||
private void GenerateSampleApplyTablePDF(List<InAndOutInfos> inAndOutInfos, String id, HttpServletRequest theHttpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||
System.out.println("GenerateSampleApplyTablePDF................."); |
||||
|
||||
//-----------------------------
|
||||
// 生成 word 版本的 鉴定委托书
|
||||
|
||||
String applyFileName = "检材出入库登记表-" + id; |
||||
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream(); |
||||
ossFile.fileGet("template" + "/" + "检材样本出入库登记表模板.docx", bos); |
||||
|
||||
byte[] templateArray = bos.toByteArray(); |
||||
|
||||
ByteArrayInputStream bis = new ByteArrayInputStream(templateArray); |
||||
bos.close(); |
||||
|
||||
for (int i = 0; i < inAndOutInfos.size(); i++) { |
||||
InAndOutInfos table = inAndOutInfos.get(i); |
||||
table.setNumber(i + 1); |
||||
if (inAndOutInfos.get(i).getSampleType().equals("A")) { |
||||
inAndOutInfos.get(i).setSampleType("分析样"); |
||||
} else { |
||||
inAndOutInfos.get(i).setSampleType("留存样"); |
||||
} |
||||
} |
||||
// int size = inAndOutInfos.size();
|
||||
// int index = 0;
|
||||
// if (size < 12) {
|
||||
// index = 12 - size;
|
||||
// for (int i = 0; i < index; i++) {
|
||||
// InAndOutInfos inAndOutInfos1 = new InAndOutInfos();
|
||||
// inAndOutInfos1.setSampleType("");
|
||||
// inAndOutInfos1.setSampleNo("");
|
||||
// inAndOutInfos1.setNumber(null);
|
||||
// inAndOutInfos1.setWarehousingDate(null);
|
||||
// inAndOutInfos1.setAppraiserName("");
|
||||
// inAndOutInfos1.setReturnTime(null);
|
||||
// inAndOutInfos1.setImName(null);
|
||||
// inAndOutInfos1.setRemarks("");
|
||||
// inAndOutInfos.add(inAndOutInfos1);
|
||||
// }
|
||||
// } else if (size > 12) {
|
||||
// index = size % 12;
|
||||
// if (index != 0) {
|
||||
// for (int i = 0; i < index; i++) {
|
||||
// InAndOutInfos inAndOutInfos1 = new InAndOutInfos();
|
||||
// inAndOutInfos1.setSampleType("");
|
||||
// inAndOutInfos1.setSampleNo("");
|
||||
// inAndOutInfos1.setNumber(null);
|
||||
// inAndOutInfos1.setWarehousingDate(null);
|
||||
// inAndOutInfos1.setAppraiserName("");
|
||||
// inAndOutInfos1.setReturnTime(null);
|
||||
// inAndOutInfos1.setImName(null);
|
||||
// inAndOutInfos1.setRemarks("");
|
||||
// inAndOutInfos.add(inAndOutInfos1);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
|
||||
LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); |
||||
|
||||
Configure config = Configure.builder(). |
||||
bind("inAndOutInfos", policy).build(); |
||||
/** |
||||
* 循环表格 |
||||
*/ |
||||
XWPFTemplate template = XWPFTemplate.compile(bis, config).render( |
||||
new HashMap<String, Object>() {{ |
||||
put("inAndOutInfos", inAndOutInfos); |
||||
put("year", LocalDateTimeUtil.format(LocalDate.now(), "yyyy"));//将年份设置为编号
|
||||
}} |
||||
); |
||||
bis.close(); |
||||
|
||||
ByteArrayOutputStream fosWord = new ByteArrayOutputStream(); |
||||
template.write(fosWord); |
||||
template.close(); |
||||
|
||||
//------------
|
||||
ByteArrayInputStream fisWord = new ByteArrayInputStream(fosWord.toByteArray()); |
||||
fosWord.close(); |
||||
boolean ret = ossFile.fileSave("document" + "/" + "repository" + "/" + id + "/" + applyFileName + ".docx", fisWord); |
||||
if (ret) { |
||||
System.out.println("生成word成功~~~~~~~~~~~~~~~~~~~~~~" + "document" + "/" + "repository" + "/" + id + "/" + applyFileName + ".docx"); |
||||
} else { |
||||
System.out.println("生成word失败~~~~~~~~~~~~~~~~~~~~~~"); |
||||
} |
||||
//MockMultipartFile mockMultipartFile = new MockMultipartFile("file", entrustmentLetterFileName + ".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", fisWord);
|
||||
// MockMultipartFile mockMultipartFile = new MockMultipartFile("file", applyFileName + ".docx", "image/jpg", fisWord);
|
||||
// Response response = remoteWord2PDFService.word2pdf(mockMultipartFile);
|
||||
// fisWord.close();
|
||||
//
|
||||
//
|
||||
// ByteArrayOutputStream outPDF = new ByteArrayOutputStream();
|
||||
// IoUtil.copy(response.body().asInputStream(), outPDF, IoUtil.DEFAULT_MIDDLE_BUFFER_SIZE);
|
||||
// ByteArrayInputStream isPDF = new ByteArrayInputStream(outPDF.toByteArray());
|
||||
// outPDF.close();
|
||||
|
||||
// isPDF.close();
|
||||
//
|
||||
//
|
||||
// System.out.println("转换为 PDF 结束");
|
||||
} |
||||
|
||||
|
||||
/** |
||||
* 返回当前样本管理中所存在的委托/任务列表 |
||||
*/ |
||||
@ApiOperation(value = "返回任务/委托列表", notes = "返回任务/委托列表") |
||||
@GetMapping("/event/list") |
||||
public R<List<BaseEvent>> eventList(String name) { |
||||
|
||||
ArrayList<BaseEvent> baseEvents = new ArrayList<>(); |
||||
//查询毛发
|
||||
List<String> hairJobIds = tableMapper.queryHairJob(); |
||||
//查询相关事件信息
|
||||
if (hairJobIds != null) { |
||||
for (String id : hairJobIds) { |
||||
BaseEvent baseEvent = new BaseEvent(); |
||||
String hairJobName = tableMapper.getHairJobName(id, name); |
||||
if (hairJobName != null) { |
||||
baseEvent.setEventId(id); |
||||
baseEvent.setEventName(hairJobName); |
||||
baseEvent.setSource("hairJob"); |
||||
baseEvents.add(baseEvent); |
||||
} |
||||
} |
||||
} |
||||
//查询污水
|
||||
List<String> sewageJobIds = tableMapper.querySewageJob(); |
||||
if (sewageJobIds != null) { |
||||
for (String id : sewageJobIds) { |
||||
BaseEvent baseEvent = new BaseEvent(); |
||||
String sewageJobName = tableMapper.getSewageJobName(id, name); |
||||
if (sewageJobName != null) { |
||||
baseEvent.setEventId(id); |
||||
baseEvent.setEventName(sewageJobName); |
||||
baseEvent.setSource("sewageJob"); |
||||
baseEvents.add(baseEvent); |
||||
} |
||||
} |
||||
} |
||||
//查询委托
|
||||
List<String> entrustmentIds = tableMapper.queryEntrustment(); |
||||
if (entrustmentIds != null) { |
||||
for (String id : entrustmentIds) { |
||||
BaseEvent baseEvent = new BaseEvent(); |
||||
String entrustmentName = tableMapper.getEntrustmentName(id, name); |
||||
if (entrustmentName != null) { |
||||
baseEvent.setEventId(id); |
||||
baseEvent.setEventName(entrustmentName); |
||||
baseEvent.setSource("entrustment"); |
||||
baseEvents.add(baseEvent); |
||||
} |
||||
} |
||||
} |
||||
//查询事件
|
||||
List<String> eventIds = tableMapper.queryEvent(); |
||||
if (eventIds != null) { |
||||
for (String id : eventIds) { |
||||
BaseEvent baseEvent = new BaseEvent(); |
||||
String eventName = tableMapper.getEventName(id, name); |
||||
if (eventName != null) { |
||||
baseEvent.setEventId(id); |
||||
baseEvent.setEventName(eventName); |
||||
baseEvent.setSource("Event"); |
||||
baseEvents.add(baseEvent); |
||||
} |
||||
} |
||||
} |
||||
//查询特征分析
|
||||
List<String> featureIds = tableMapper.queryFeature(); |
||||
if (featureIds != null) { |
||||
for (String id : featureIds) { |
||||
BaseEvent baseEvent = new BaseEvent(); |
||||
String eventName = tableMapper.getFeatureName(id, name); |
||||
if (eventName != null) { |
||||
baseEvent.setEventId(id); |
||||
baseEvent.setEventName(eventName); |
||||
baseEvent.setSource("feature"); |
||||
baseEvents.add(baseEvent); |
||||
} |
||||
} |
||||
} |
||||
|
||||
return R.ok(baseEvents, "查询成功"); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 按照时间段来生成出入库登记表 |
||||
*/ |
||||
@ApiOperation(value = "按时间/委托段生成登记表", notes = "按时间/委托段生成登记表。如果还没有创建, 立即创建: 根据鉴定申请信息内容的内容创建PDF格式的鉴定委托书, 并保存到 MinIO 存储中") |
||||
@SysLog("生成出入库登记表") |
||||
@GetMapping("/print/inAndOutTableByDateOrEvent") |
||||
// @PreAuthorize("@pms.hasPermission('EntrustmentEdit')")
|
||||
public R bizGetPDFSampleInAndOutTableByDate(PrintTableDTO dto, HttpServletRequest theHttpServletRequest, HttpServletResponse httpServletResponse) { |
||||
System.out.println("bizApplyWord................."); |
||||
|
||||
List<InAndOutInfos> inAndOutInfos = new ArrayList<>(); |
||||
List<String> sampleIds = null; |
||||
if (dto.getType() == 1) { |
||||
//委托/任务
|
||||
switch (dto.getSource()) { |
||||
case "entrustment": |
||||
//委托(对应样本表中所有检材样本id)
|
||||
sampleIds = tableMapper.getSampleIdsByEw(dto.getEventId()); |
||||
break; |
||||
case "hairJob": |
||||
//毛发
|
||||
sampleIds = tableMapper.getSampleIdsByHj(dto.getEventId()); |
||||
break; |
||||
case "sewageJob": |
||||
//污水
|
||||
sampleIds = tableMapper.getSampleIdsBySj(dto.getEventId()); |
||||
break; |
||||
case "Event": |
||||
//事件
|
||||
sampleIds = tableMapper.getSampleIdsByTy(dto.getEventId()); |
||||
break; |
||||
default: |
||||
//特征分析
|
||||
sampleIds = tableMapper.getSampleIdsByTz(dto.getEventId()); |
||||
break; |
||||
} |
||||
|
||||
if (sampleIds != null) { |
||||
for (String sampleId : sampleIds) { |
||||
List<InAndOutInfos> inAndOutTableInfo = tableMapper.getInandOutTableInfo(sampleId); |
||||
if (inAndOutTableInfo != null) { |
||||
inAndOutInfos.addAll(inAndOutTableInfo); |
||||
} |
||||
} |
||||
} |
||||
|
||||
} else { |
||||
//根据时间
|
||||
inAndOutInfos = tableMapper.getInandOutTableInfoByDate(dto.getBeginDate(), dto.getFinishDate()); |
||||
} |
||||
|
||||
//查询数据
|
||||
|
||||
if (inAndOutInfos.size() == 0) { |
||||
throw new RuntimeException("没有找到检材出入库相关信息"); |
||||
} |
||||
|
||||
String id = IdWorker.get32UUID().toUpperCase(); |
||||
|
||||
String applyFileName = "检材出入库登记表-" + id; |
||||
; |
||||
String pdfFilePath = "document" + "/" + "repository" + "/" + id + "/" + applyFileName + ".docx"; |
||||
; |
||||
|
||||
try { |
||||
//直接调用生成
|
||||
GenerateSampleApplyTablePDF(inAndOutInfos, id, theHttpServletRequest, httpServletResponse); |
||||
return R.ok(pdfFilePath); |
||||
} catch (Exception e) { |
||||
System.out.println(String.format("minioFile objectExist() Exception. %s", e.getLocalizedMessage())); |
||||
e.printStackTrace(); |
||||
} |
||||
return R.ok(pdfFilePath); |
||||
} |
||||
|
||||
/** |
||||
* 检材管理首页子模块所有角标 |
||||
* 一.检材流转 |
||||
* 1.待接收+2.待见证 |
||||
* 二.入库管理 |
||||
* 1.销毁预警 |
||||
* 三.出库管理 |
||||
* 1.待确认出库申请+2.待归还 |
||||
* 四.审核审批 |
||||
* 1.待审核/待审批 |
||||
*/ |
||||
@ApiOperation(value = "检材管理首页子模块所有角标", notes = "检材管理首页子模块所有角标") |
||||
@SysLog("检材管理首页子模块所有角标") |
||||
@GetMapping("/getAllModuleIcon") |
||||
//@PreAuthorize("@pms.hasPermission('imr_inbound_or_outbound')")
|
||||
public R<List<IconDTO>> getAllModuleIcon(HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
/*Set<String> permissions = dlpUser.getPermissions(); |
||||
if(permissions.contains("imr_sample_apply_first_audit")){ |
||||
//一级审核
|
||||
|
||||
} else if (permissions.contains("imr_sample_apply_secondary_audit")) { |
||||
//二级审核
|
||||
} else if (permissions.contains("imr_sample_apply_approval")) { |
||||
//审批
|
||||
}*/ |
||||
|
||||
ArrayList<IconDTO> iconDTOS = new ArrayList<>(); |
||||
|
||||
//1.检材流转
|
||||
IconDTO count1 = samplePutInStorageService.getTransferIconCount(dlpUser.getId()); |
||||
if (count1 != null) { |
||||
iconDTOS.add(count1); |
||||
} |
||||
|
||||
//入库管理--销毁预警
|
||||
QueryWrapper<SampleStorage> queryWrapper1 = new QueryWrapper<>(); |
||||
queryWrapper1.eq("early_warning", 1); |
||||
queryWrapper1.eq("status", 2);//只能查看当前入库的
|
||||
Long destroyed = storageMapper.selectCount(queryWrapper1); |
||||
IconDTO count2 = null; |
||||
if (destroyed != 0) { |
||||
count2 = new IconDTO(destroyed, 3, "inbound"); |
||||
iconDTOS.add(count2); |
||||
} |
||||
|
||||
|
||||
//出库管理--待归还+待确认
|
||||
Long countReturn = storageMapper.selectCount(Wrappers.<SampleStorage>query() |
||||
.eq("status", 3) |
||||
.eq("is_return", 1)//需要归还
|
||||
); |
||||
|
||||
//出库申请
|
||||
Long countConfirm = outWarehouseApplyMapper.selectCount(Wrappers.<SampleOutWarehouseApply>query() |
||||
.eq("status", 1)//待确认
|
||||
); |
||||
IconDTO count3 = null; |
||||
if (countReturn + countConfirm != 0) { |
||||
count3 = new IconDTO(countReturn + countConfirm, 4, "outbound"); |
||||
iconDTOS.add(count3); |
||||
} |
||||
//审核/审批
|
||||
|
||||
return R.ok(iconDTOS, "查询成功"); |
||||
} |
||||
|
||||
/* |
||||
getExternalModuleIcon |
||||
获取部分模块的角标 |
||||
*/ |
||||
@ApiOperation(value = "获取部分模块的角标", notes = "获取部分模块的角标") |
||||
@GetMapping("/getExternalModuleIcon") |
||||
public R<List<IconVO>> getExternalModuleIcon(HttpServletRequest theHttpServletRequest) { |
||||
|
||||
ArrayList<IconVO> list = new ArrayList<>(); |
||||
|
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
Set<String> permissions = dlpUser.getPermissions(); |
||||
|
||||
//流转(imt_sample_transfer_get)
|
||||
if (permissions.contains("imt_sample_transfer_get")) { |
||||
|
||||
int count = storageMapper.queryTransfer(dlpUser.getId()); |
||||
if (count != 0) { |
||||
IconVO iconVO = new IconVO("sample-circulation", true); |
||||
list.add(iconVO); |
||||
} |
||||
} |
||||
if (permissions.contains("imr_sample_out_warehouse_apply_get")) { |
||||
//出库申请申请人是自己并且待操作的数据
|
||||
QueryWrapper<SampleOutWarehouseApply> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("status", 2);//已经创建待使用
|
||||
queryWrapper.eq("applicant_id", dlpUser.getId()); |
||||
|
||||
Long count = outWarehouseApplyMapper.selectCount(queryWrapper); |
||||
if (count != 0) { |
||||
IconVO iconVO = new IconVO("outapplication", true); |
||||
list.add(iconVO); |
||||
} |
||||
} |
||||
if (permissions.contains("imr_inbound_or_outbound")) { |
||||
//出库 待操作的数据 出库申请+领用待归还的
|
||||
|
||||
QueryWrapper<SampleStorage> wrapper1 = new QueryWrapper<>(); |
||||
wrapper1.eq("is_return", 1);//只查询需要归还的
|
||||
wrapper1.eq("status", 3); |
||||
|
||||
Long count1 = storageMapper.selectCount(wrapper1); |
||||
|
||||
|
||||
QueryWrapper<SampleOutWarehouseApply> wrapper2 = new QueryWrapper<>(); |
||||
wrapper2.eq("status", 1);//待确定的数据
|
||||
Long count2 = outWarehouseApplyMapper.selectCount(wrapper2); |
||||
|
||||
if (count1 + count2 != 0) { |
||||
IconVO iconVO = new IconVO("outbound-management", true); |
||||
list.add(iconVO); |
||||
} |
||||
} |
||||
if (permissions.contains("imr_inbound_or_outbound")) { |
||||
//入库
|
||||
QueryWrapper<SampleStorage> wrapper1 = new QueryWrapper<>(); |
||||
wrapper1.eq("early_warning", 1); |
||||
wrapper1.eq("status", 2);//只能查看当前入库的
|
||||
|
||||
Long count1 = storageMapper.selectCount(wrapper1); |
||||
|
||||
if (count1 != 0) { |
||||
IconVO iconVO = new IconVO("warehousing-management", true); |
||||
list.add(iconVO); |
||||
} |
||||
|
||||
} |
||||
|
||||
//审核审批
|
||||
if (permissions.contains("imr_sample_apply_first_audit")) { |
||||
//一级审核员
|
||||
QueryWrapper<SampleApply> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("application_status", 1); |
||||
Long count1 = asMapper.selectCount(queryWrapper); |
||||
|
||||
if (count1 != 0) { |
||||
IconVO iconVO = new IconVO("review-approval", true); |
||||
list.add(iconVO); |
||||
} |
||||
|
||||
} else if (permissions.contains("imr_sample_apply_secondary_audit")) { |
||||
//二级审核员
|
||||
QueryWrapper<SampleApply> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("application_status", 2); |
||||
Long count1 = asMapper.selectCount(queryWrapper); |
||||
|
||||
if (count1 != 0) { |
||||
IconVO iconVO = new IconVO("review-approval", true); |
||||
list.add(iconVO); |
||||
} |
||||
} else if (permissions.contains("imr_sample_apply_approval")) { |
||||
//审批人
|
||||
QueryWrapper<SampleApply> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("application_status", 3); |
||||
Long count1 = asMapper.selectCount(queryWrapper); |
||||
|
||||
if (count1 != 0) { |
||||
IconVO iconVO = new IconVO("review-approval", true); |
||||
list.add(iconVO); |
||||
} |
||||
} |
||||
if (list.size() > 0) { |
||||
return R.ok(list, "查询成功"); |
||||
} else { |
||||
return R.failed("暂无数据"); |
||||
} |
||||
} |
||||
|
||||
|
||||
} |
@ -0,0 +1,274 @@ |
||||
package digital.laboratory.platform.imr.controller; |
||||
|
||||
import cn.hutool.core.io.file.FileNameUtil; |
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker; |
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import digital.laboratory.platform.common.core.util.R; |
||||
import digital.laboratory.platform.common.log.annotation.SysLog; |
||||
import digital.laboratory.platform.common.mybatis.security.service.DLPUser; |
||||
import digital.laboratory.platform.imr.dto.QueryStorageDTO; |
||||
import digital.laboratory.platform.imr.entity.StorageCell; |
||||
import digital.laboratory.platform.imr.entity.StorageCupboard; |
||||
import digital.laboratory.platform.imr.mapper.StorageCellMapper; |
||||
import digital.laboratory.platform.imr.mapper.StorageCupboardMapper; |
||||
import digital.laboratory.platform.imr.service.StorageCellService; |
||||
import org.springframework.security.access.prepost.PreAuthorize; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import lombok.RequiredArgsConstructor; |
||||
import org.springframework.security.oauth2.provider.OAuth2Authentication; |
||||
import org.springframework.web.bind.annotation.*; |
||||
import org.springframework.web.multipart.MultipartFile; |
||||
|
||||
import javax.activation.MimetypesFileTypeMap; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.io.IOException; |
||||
import java.security.Principal; |
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
import digital.laboratory.platform.common.oss.service.OssFile; |
||||
|
||||
/** |
||||
* |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 |
||||
* @describe 前端控制器 |
||||
* |
||||
* 这是与表示层的接口, 不应该接业务逻辑写在这里, 业务逻辑应该写在 service 中 |
||||
* 这里写什么: |
||||
* 为前端提供数据, 接受前端的数据 |
||||
* 为前端提供的数据, 从 service 取得后, 可以做一些适当的加工, 这种加工不是业务层面的, 只能是数据格式上, 为方便前端处理 |
||||
* 接受前端的数据, 每一个函数的参数可以先做一些整理后, 再调用 service 中的函数。这里对参数的整理, 应该只是格式上的, 而不能是业务上的 |
||||
* 数据层在 mapper 中, 数据层不涉及业务, 只管技术上的 对象<->表 之间的转换 |
||||
*/ |
||||
@RestController |
||||
@RequiredArgsConstructor |
||||
@RequestMapping("/storage_cell" ) |
||||
@Api(value = "storage_cell", tags = "存储柜子对应格子管理") |
||||
public class StorageCellController { |
||||
|
||||
private final StorageCellService storageCellService; |
||||
|
||||
|
||||
private final StorageCellMapper cellMapper; |
||||
|
||||
private final StorageCupboardMapper cupboardMapper; |
||||
|
||||
|
||||
private final OssFile ossFile; |
||||
|
||||
/** |
||||
* 通过id查询 |
||||
* @param id id |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "通过id查询", notes = "通过id查询") |
||||
@GetMapping("/{id}" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_storage_cell_get')" ) |
||||
public R<StorageCell> getById(@PathVariable("id" ) String id, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
StorageCell storageCell = storageCellService.getById(id); |
||||
return R.ok(storageCell); |
||||
//return R.ok(storageCellService.getById(id));
|
||||
} |
||||
|
||||
/** |
||||
* 上传图片 |
||||
* @param cellId |
||||
* @param file |
||||
* @return |
||||
* @throws Exception |
||||
*/ |
||||
|
||||
|
||||
@ApiOperation(value = "上传格子图片", notes = "上传格子图片") |
||||
@PostMapping(value = " /{cellId}") |
||||
//@PreAuthorize("@pms.hasPermission('roomUpload')")
|
||||
public R uploadAttachmentObj(@PathVariable("cellId") String cellId, @RequestPart("file") MultipartFile file) throws Exception { |
||||
|
||||
StorageCell storageCell = cellMapper.selectById(cellId); |
||||
if (storageCell != null) { |
||||
|
||||
String path = "cell" + "/" + cellId; |
||||
String fileName = FileNameUtil.getName(file.getOriginalFilename()); |
||||
boolean r = ossFile.fileUpload(file, path); |
||||
Map<String, String> ResultData = new HashMap<>(); |
||||
ResultData.put("fileName", fileName); |
||||
ResultData.put("path", path); |
||||
|
||||
if (r) { |
||||
//修改数据库
|
||||
storageCell.setCellPhoto(path); |
||||
storageCell.setFileName(fileName); |
||||
cellMapper.updateById(storageCell); |
||||
return R.ok(ResultData, "上传成功"); |
||||
} |
||||
return R.failed("上传失败"); |
||||
} |
||||
return R.failed(null, "这个格子不存在"); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*HairSample hs = hairSampleService.getById(hairSampleId); |
||||
if (hs != null) { |
||||
try { |
||||
// 获取样品所属的任务信息
|
||||
HairJob hairJob = hairJobService.getById(hs.getJobId()); |
||||
if (hairJob == null) { |
||||
throw new RuntimeException(String.format("任务id为 %s 的任务不存在", hs.getJobId())); |
||||
} |
||||
String rootId; |
||||
// 获取根任务id
|
||||
if (hairJob.getRootTaskId().equals("0")) { |
||||
rootId = hairJob.getId(); |
||||
} else { |
||||
rootId = hairJob.getRootTaskId(); |
||||
} |
||||
ossFile.fileGet("hair_job" + "/" + rootId + "/" + hairSampleId + "/" + fileName, httpServletResponse.getOutputStream()); |
||||
httpServletResponse.setContentType(new MimetypesFileTypeMap().getContentType(hs.getPicture())); |
||||
} catch (AmazonS3Exception s3e) { |
||||
httpServletResponse.sendError(s3e.getStatusCode(), s3e.toString()); |
||||
} catch (Exception e) { |
||||
httpServletResponse.sendError(501, e.toString()); |
||||
} |
||||
} |
||||
else { |
||||
httpServletResponse.sendError(404, "不存在这个毛发样品"); |
||||
}*/ |
||||
|
||||
|
||||
|
||||
@ApiOperation(value = "柜子列表查询接口--存储管理", notes = "柜子列表查询接口--存储管理") |
||||
@GetMapping("/cell/list" ) |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_room_get')" )
|
||||
public R<IPage<StorageCell>> getStorageRoomPage(QueryStorageDTO dto){ |
||||
|
||||
|
||||
Page<StorageCell> page = new Page<>(); |
||||
|
||||
IPage<StorageCell> storageList = cellMapper.getStorageCellPage(page,Wrappers.<StorageCell>query() |
||||
.eq(!dto.getId().isEmpty(),"id",dto.getId()) |
||||
.orderByDesc("create_time") |
||||
); |
||||
return R.ok(storageList,"查询成功"); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* |
||||
* @param dto |
||||
* @return |
||||
*/ |
||||
@ApiOperation(value = "格子分页查询--入库模块使用", notes = "格子分页查询--入库模块使用") |
||||
@GetMapping("/page" ) |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_room_get')" )
|
||||
public R<IPage<StorageCell>> getStorageRoomList(QueryStorageDTO dto) { |
||||
|
||||
Page<StorageCell> page = new Page<>(dto.getCurrent(),dto.getSize()); |
||||
|
||||
IPage<StorageCell> storage = cellMapper.getStorageCellPage(page,Wrappers.<StorageCell>query() |
||||
.eq("cupboard_id",dto.getId()) |
||||
.orderByDesc("sort") |
||||
); |
||||
return R.ok(storage,"查询成功"); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 通过id删除 |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "通过格子id删除图片", notes = "通过格子id删除图片") |
||||
@SysLog("通过id删除" ) |
||||
@DeleteMapping("/deletePicture/{cellId}" ) |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_cell_del')" )
|
||||
public R deleteById(@PathVariable("cellId") String cellId) throws Exception { |
||||
|
||||
|
||||
StorageCell storageCell = cellMapper.selectById(cellId); |
||||
if(storageCell==null){ |
||||
throw new RuntimeException(String.format("当前格子数据不存在")); |
||||
} |
||||
if(storageCell.getCellPhoto()!=null && storageCell.getFileName()!=null ){ |
||||
//删除图片
|
||||
ossFile.fileDelete("cell" + "/" + storageCell.getId() + "/" + storageCell.getFileName()); |
||||
storageCell.setCellPhoto(""); |
||||
storageCell.setFileName(""); |
||||
cellMapper.updateById(storageCell); |
||||
} |
||||
return R.ok("删除成功"); |
||||
} |
||||
|
||||
|
||||
|
||||
/** |
||||
* 通过id删除 |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "批量删除格子", notes = "批量删除格子") |
||||
@SysLog("通过id删除" ) |
||||
@DeleteMapping("/deleteCell" ) |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_cell_del')" )
|
||||
public R deleteById(@RequestBody List<String> cellIds) throws Exception { |
||||
|
||||
List<StorageCell> storageCells = cellMapper.selectBatchIds(cellIds); |
||||
|
||||
for (StorageCell storageCell : storageCells) { |
||||
if(storageCell.getStatus()){ |
||||
throw new RuntimeException(String.format("编号为"+storageCell.getCellNo()+"的格子已存放东西")); |
||||
} |
||||
} |
||||
for (StorageCell storageCell : storageCells) { |
||||
|
||||
//删除数据库数据
|
||||
cellMapper.deleteById(storageCell.getId()); |
||||
if(storageCell.getCellPhoto()!=null && storageCell.getFileName()!=null ){ |
||||
//删除图片
|
||||
ossFile.fileDelete("cell" + "/" + storageCell.getId() + "/" + storageCell.getFileName()); |
||||
} |
||||
//更新对应格子的规格数据
|
||||
StorageCupboard storageCupboard = cupboardMapper.selectById(storageCell.getCupboardId()); |
||||
storageCupboard.setSpecifications(storageCupboard.getSpecifications()-1);//删除一个减-
|
||||
//获取对应格子数量
|
||||
/*QueryWrapper<StorageCell> wrapper = new QueryWrapper<>(); |
||||
wrapper.eq("cupboard_id",storageCell.getCupboardId()); |
||||
cellMapper.selectCount(wrapper);*/ |
||||
cupboardMapper.updateById(storageCupboard); |
||||
} |
||||
return R.ok("删除成功"); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 通过柜子id和文件名获取图片"/getRoomPicture/{roomId}/{fileName}" |
||||
*/ |
||||
@ApiOperation(value = "通过格子id和文件名获取图片--存储管理", notes = "通过格子id和文件名获取图片--存储管理") |
||||
@GetMapping("/getCellPicture/{cellId}/{fileName}") |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_room_get')" )
|
||||
public void getRoomPicture (@PathVariable("cellId") String cellId, |
||||
@PathVariable("fileName") String fileName, |
||||
HttpServletResponse httpServletResponse) throws Exception { |
||||
StorageCell storageCell = storageCellService.getById(cellId); |
||||
if (storageCell == null) { |
||||
throw new RuntimeException(String.format("当前柜子数据不存在")); |
||||
} |
||||
ossFile.fileGet("cell" + "/" + storageCell.getId() + "/" + fileName, httpServletResponse.getOutputStream()); |
||||
httpServletResponse.setContentType(new MimetypesFileTypeMap().getContentType(storageCell.getFileName())); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,354 @@ |
||||
package digital.laboratory.platform.imr.controller; |
||||
|
||||
import cn.hutool.core.io.file.FileNameUtil; |
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker; |
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import digital.laboratory.platform.common.core.util.R; |
||||
import digital.laboratory.platform.common.log.annotation.SysLog; |
||||
import digital.laboratory.platform.common.mybatis.security.service.DLPUser; |
||||
import digital.laboratory.platform.imr.dto.QueryStorageDTO; |
||||
import digital.laboratory.platform.imr.entity.StorageCell; |
||||
import digital.laboratory.platform.imr.entity.StorageCupboard; |
||||
import digital.laboratory.platform.imr.entity.StorageRoom; |
||||
import digital.laboratory.platform.imr.mapper.StorageCellMapper; |
||||
import digital.laboratory.platform.imr.mapper.StorageCupboardMapper; |
||||
import digital.laboratory.platform.imr.service.StorageCupboardService; |
||||
import org.springframework.security.access.prepost.PreAuthorize; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import lombok.RequiredArgsConstructor; |
||||
import org.springframework.security.oauth2.provider.OAuth2Authentication; |
||||
import org.springframework.web.bind.annotation.*; |
||||
import org.springframework.web.multipart.MultipartFile; |
||||
|
||||
import javax.activation.MimetypesFileTypeMap; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.io.IOException; |
||||
import java.security.Principal; |
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
import digital.laboratory.platform.common.oss.service.OssFile; |
||||
|
||||
import static com.alibaba.fastjson.util.IOUtils.stringSize; |
||||
|
||||
/** |
||||
* |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 |
||||
* @describe 前端控制器 |
||||
* |
||||
* 这是与表示层的接口, 不应该接业务逻辑写在这里, 业务逻辑应该写在 service 中 |
||||
* 这里写什么: |
||||
* 为前端提供数据, 接受前端的数据 |
||||
* 为前端提供的数据, 从 service 取得后, 可以做一些适当的加工, 这种加工不是业务层面的, 只能是数据格式上, 为方便前端处理 |
||||
* 接受前端的数据, 每一个函数的参数可以先做一些整理后, 再调用 service 中的函数。这里对参数的整理, 应该只是格式上的, 而不能是业务上的 |
||||
* 数据层在 mapper 中, 数据层不涉及业务, 只管技术上的 对象<->表 之间的转换 |
||||
*/ |
||||
@RestController |
||||
@RequiredArgsConstructor |
||||
@RequestMapping("/storage_cupboard" ) |
||||
@Api(value = "storage_cupboard", tags = "柜子管理") |
||||
public class StorageCupboardController { |
||||
|
||||
private final StorageCupboardService storageCupboardService; |
||||
|
||||
|
||||
private final StorageCupboardMapper cupboardMapper; |
||||
|
||||
|
||||
private final StorageCellMapper cellMapper; |
||||
|
||||
private final OssFile ossFile; |
||||
|
||||
/** |
||||
* 通过id查询 |
||||
* @param id id |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "通过id查询", notes = "通过id查询") |
||||
@GetMapping("/{id}" ) |
||||
@PreAuthorize("@pms.hasPermission('imr_storage_cupboard_get')" ) |
||||
public R<StorageCupboard> getById(@PathVariable("id" ) String id, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
StorageCupboard storageCupboard = storageCupboardService.getById(id); |
||||
return R.ok(storageCupboard); |
||||
//return R.ok(storageCupboardService.getById(id));
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ApiOperation(value = "柜子列表查询接口--存储管理", notes = "柜子列表查询接口--存储管理") |
||||
@GetMapping("/cupboard/list" ) |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_room_get')" )
|
||||
public R<IPage<StorageCupboard>> getStorageRoomPage(QueryStorageDTO dto){ |
||||
|
||||
|
||||
Page<StorageCupboard> page = new Page<>(dto.getCurrent(),dto.getSize()); |
||||
|
||||
IPage<StorageCupboard> storageCupboardList = cupboardMapper.getStorageCupboardPage(page,Wrappers.<StorageCupboard>query() |
||||
.eq(!dto.getId().isEmpty(),"id",dto.getId()) |
||||
.orderByDesc("create_time") |
||||
); |
||||
return R.ok(storageCupboardList,"查询成功"); |
||||
} |
||||
|
||||
|
||||
|
||||
/* @ApiOperation(value = "修改--上传柜子图片", notes = "修改--上传柜子图片") |
||||
@PostMapping(value = "/uploadCupboard/{cupboardId}") |
||||
//@PreAuthorize("@pms.hasPermission('roomUpload')")
|
||||
public R uploadAttachmentObj(@PathVariable("cupboardId") String cupboardId, @RequestPart("file") MultipartFile file) throws Exception { |
||||
|
||||
StorageCupboard storageCupboard = cupboardMapper.selectById(cupboardId); |
||||
if (storageCupboard != null) { |
||||
|
||||
String path = "cupboard" + "/" + cupboardId; |
||||
String fileName = FileNameUtil.getName(file.getOriginalFilename()); |
||||
boolean r = ossFile.fileUpload(file, path); |
||||
Map<String, String> ResultData = new HashMap<>(); |
||||
ResultData.put("fileName", fileName); |
||||
ResultData.put("path", path); |
||||
|
||||
if (r) { |
||||
//修改数据库
|
||||
storageCupboard.setCupboardPhoto(path); |
||||
storageCupboard.setFileName(fileName); |
||||
cupboardMapper.updateById(storageCupboard); |
||||
return R.ok(ResultData, "上传成功"); |
||||
} |
||||
return R.failed("上传失败"); |
||||
} |
||||
return R.failed(null, "这个柜子不存在"); |
||||
}*/ |
||||
|
||||
|
||||
/** |
||||
* 新增 |
||||
* @param storageCupboard |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "添加存储柜--存储管理", notes = "添加存储柜--存储管理") |
||||
@SysLog("添加存储柜--存储管理" ) |
||||
@PostMapping("/createStorageCupboard") |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_room_add')" )
|
||||
public R<StorageCupboard> postAddObject(StorageCupboard storageCupboard, HttpServletRequest theHttpServletRequest,@RequestPart(value = "file",required = false) MultipartFile file)throws Exception { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
if (storageCupboard.getRoomId() == null) { |
||||
throw new RuntimeException(String.format("柜子必须关联格子")); |
||||
} |
||||
if (storageCupboard.getSpecifications() == null) { |
||||
throw new RuntimeException(String.format("柜子必须要填写规格")); |
||||
} |
||||
if (storageCupboard.getCupboardNo() == null) { |
||||
throw new RuntimeException(String.format("柜子编号不能为空")); |
||||
} |
||||
|
||||
storageCupboard.setId(IdWorker.get32UUID().toUpperCase()); |
||||
|
||||
if (file != null) { |
||||
String path = "cupboard" + "/" + storageCupboard.getId(); |
||||
String fileName = FileNameUtil.getName(file.getOriginalFilename()); |
||||
boolean r = ossFile.fileUpload(file, path); |
||||
if (r) { |
||||
storageCupboard.setCupboardPhoto(path); |
||||
storageCupboard.setFileName(fileName); |
||||
cupboardMapper.insert(storageCupboard); |
||||
//根据柜子规格创建格子
|
||||
for (Integer a = 1; a <= storageCupboard.getSpecifications(); a++) { |
||||
StorageCell storageCell = new StorageCell(); |
||||
storageCell.setId(IdWorker.get32UUID().toUpperCase()); |
||||
storageCell.setStatus(true);//默认未存入东西
|
||||
storageCell.setCupboardId(storageCupboard.getId()); |
||||
//取柜子的编号前几位
|
||||
String head = storageCupboard.getCupboardNo().substring(0, 3); |
||||
//制定格子编号生成规则
|
||||
String str = "CL"; |
||||
String number = getNumber(a); |
||||
storageCell.setCellNo(str + head + number); |
||||
cellMapper.insert(storageCell); |
||||
} |
||||
return R.ok(storageCupboard, "创建成功"); |
||||
} else { |
||||
//删除图片
|
||||
ossFile.fileDelete("cupboard" + "/" + storageCupboard.getId() + "/" + fileName); |
||||
return R.failed("创建失败"); |
||||
} |
||||
} else { |
||||
cupboardMapper.insert(storageCupboard); |
||||
return R.ok(storageCupboard, "创建成功"); |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 修改 |
||||
* @param storageCupboard |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "修改--存储管理(数据修改+图片修改)", notes = "修改--存储管理") |
||||
@SysLog("修改") |
||||
@PutMapping("/updateCupboard") |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_room_edit')" )
|
||||
public R<StorageCupboard> putUpdateById (StorageCupboard storageCupboard, HttpServletRequest |
||||
theHttpServletRequest, @RequestPart(value = "file", required = false) MultipartFile file)throws Exception { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
StorageCupboard cupboard = storageCupboardService.getById(storageCupboard.getId());//数据库数据
|
||||
|
||||
if(cupboard==null){ |
||||
throw new RuntimeException(String.format("当前修改数据不存在")); |
||||
} |
||||
|
||||
if ((int)storageCupboard.getSpecifications()!=(int)cupboard.getSpecifications()) { |
||||
throw new RuntimeException(String.format("不允许修改")); |
||||
} |
||||
|
||||
if (file != null) { |
||||
String path = "cupboard" + "/" + storageCupboard.getId(); |
||||
String fileName = FileNameUtil.getName(file.getOriginalFilename()); |
||||
boolean r = ossFile.fileUpload(file, path); |
||||
if (r) { |
||||
storageCupboard.setCupboardPhoto(path); |
||||
storageCupboard.setFileName(fileName); |
||||
cupboardMapper.updateById(storageCupboard); |
||||
return R.ok(storageCupboard, "修改成功"); |
||||
} else { |
||||
return R.failed("修改失败"); |
||||
} |
||||
} else { |
||||
if(cupboard.getCupboardPhoto()!=null && cupboard.getFileName()!=null) { |
||||
//删除图片
|
||||
ossFile.fileDelete("cupboard" + "/" + cupboard.getId() + "/" + cupboard.getFileName()); |
||||
} |
||||
storageCupboard.setFileName(null); |
||||
storageCupboard.setCupboardPhoto(null); |
||||
cupboardMapper.updateById(storageCupboard); |
||||
return R.ok(storageCupboard, "修改成功"); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 通过id删除 |
||||
* @param id id |
||||
* @return R |
||||
**/ |
||||
@ApiOperation(value = "通过id删除柜子--存储管理", notes = "通过id删除柜子--存储管理") |
||||
@SysLog("通过id删除") |
||||
@DeleteMapping("deleteCupboard/{id}") |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_room_del')" )
|
||||
public R<StorageCupboard> deleteById (@PathVariable String id, HttpServletRequest theHttpServletRequest) throws |
||||
Exception { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
QueryWrapper<StorageCell> wrapper = new QueryWrapper<>(); |
||||
wrapper.eq("cupboard_id", id); |
||||
List<StorageCell> storageCells = cellMapper.selectList(wrapper); |
||||
for (StorageCell storageCell : storageCells) { |
||||
if (!storageCell.getStatus()) { |
||||
throw new RuntimeException(String.format("当前柜子中"+storageCell.getCellNo()+"格子还存有物品")); |
||||
} |
||||
} |
||||
//删除柜子
|
||||
StorageCupboard storageCupboard = storageCupboardService.getById(id); |
||||
if (storageCupboard.getCupboardPhoto() != null && storageCupboard.getFileName() != null) { |
||||
//删除图片
|
||||
ossFile.fileDelete("cupboard" + "/" + storageCupboard.getId() + "/" + storageCupboard.getFileName()); |
||||
} |
||||
|
||||
if (storageCupboardService.removeById(id)) { |
||||
|
||||
QueryWrapper<StorageCell> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("cupboard_id",id); |
||||
cellMapper.delete(queryWrapper);//删除格子
|
||||
//删除对应格子照片
|
||||
for (StorageCell storageCell : storageCells) { |
||||
if (storageCell.getCellPhoto() != null && storageCell.getFileName() != null) { |
||||
//删除图片
|
||||
ossFile.fileDelete("cell" + "/" + storageCell.getId() + "/" + storageCell.getFileName()); |
||||
} |
||||
} |
||||
return R.ok(storageCupboard, "对象删除成功"); |
||||
} else { |
||||
return R.failed(storageCupboard, "对象删除失败"); |
||||
} |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 通过柜子id和文件名获取图片"/getRoomPicture/{roomId}/{fileName}" |
||||
*/ |
||||
@ApiOperation(value = "通过柜子id和文件名获取图片--存储管理", notes = "通过柜子id和文件名获取图片--存储管理") |
||||
@GetMapping("/getCupboardPicture/{cupboardId}/{fileName}") |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_room_get')" )
|
||||
public void getRoomPicture (@PathVariable("cupboardId") String cupboardId, |
||||
@PathVariable("fileName") String fileName, |
||||
HttpServletResponse httpServletResponse) throws Exception { |
||||
StorageCupboard storageCupboard = storageCupboardService.getById(cupboardId); |
||||
if (storageCupboard == null) { |
||||
throw new RuntimeException(String.format("当前柜子数据不存在")); |
||||
} |
||||
ossFile.fileGet("cupboard" + "/" + storageCupboard.getId() + "/" + fileName, httpServletResponse.getOutputStream()); |
||||
httpServletResponse.setContentType(new MimetypesFileTypeMap().getContentType(storageCupboard.getFileName())); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* |
||||
* @param |
||||
* @return |
||||
**/ |
||||
@ApiOperation(value = "柜子列表查询--下拉框的", notes = "柜子列表查询--下拉框的") |
||||
@GetMapping("/list/{roomId}") |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_room_get')" )
|
||||
public R<List<StorageCupboard>> getStorageRoomList (@PathVariable("roomId") String roomId ){ |
||||
|
||||
List<StorageCupboard> storage = cupboardMapper.getStorageCupboardList(Wrappers.<StorageCupboard>query() |
||||
.eq("room_id", roomId) |
||||
.ne("status", 0)//排除不可用的柜子
|
||||
.orderByDesc("sort") |
||||
); |
||||
return R.ok(storage, "查询成功"); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
public static String getNumber(Integer a){ |
||||
String number = ""; |
||||
Integer i = stringSize(a); |
||||
if(i==1){ |
||||
number="000"+a.toString(); |
||||
}else if(i==2){ |
||||
number="00"+a.toString(); |
||||
}else if(i==3){ |
||||
number="0"+a.toString(); |
||||
} |
||||
|
||||
return number; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,309 @@ |
||||
package digital.laboratory.platform.imr.controller; |
||||
|
||||
import cn.hutool.core.io.file.FileNameUtil; |
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker; |
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import digital.laboratory.platform.common.core.constant.OSSDirectoryConstants; |
||||
import digital.laboratory.platform.common.core.util.R; |
||||
import digital.laboratory.platform.common.log.annotation.SysLog; |
||||
import digital.laboratory.platform.common.mybatis.security.service.DLPUser; |
||||
import digital.laboratory.platform.imr.entity.StorageCupboard; |
||||
import digital.laboratory.platform.imr.entity.StorageRoom; |
||||
import digital.laboratory.platform.imr.mapper.StorageCupboardMapper; |
||||
import digital.laboratory.platform.imr.mapper.StorageRoomMapper; |
||||
import digital.laboratory.platform.imr.service.StorageRoomService; |
||||
import digital.laboratory.platform.common.oss.service.OssFile; |
||||
import digital.laboratory.platform.common.core.*; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import lombok.RequiredArgsConstructor; |
||||
import org.springframework.security.access.prepost.PreAuthorize; |
||||
import org.springframework.security.oauth2.provider.OAuth2Authentication; |
||||
import org.springframework.web.bind.annotation.*; |
||||
import org.springframework.web.multipart.MultipartFile; |
||||
|
||||
import javax.activation.MimetypesFileTypeMap; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.io.IOException; |
||||
import java.security.Principal; |
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
|
||||
/** |
||||
* |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 |
||||
* @describe 前端控制器 |
||||
* |
||||
* 这是与表示层的接口, 不应该接业务逻辑写在这里, 业务逻辑应该写在 service 中 |
||||
* 这里写什么: |
||||
* 为前端提供数据, 接受前端的数据 |
||||
* 为前端提供的数据, 从 service 取得后, 可以做一些适当的加工, 这种加工不是业务层面的, 只能是数据格式上, 为方便前端处理 |
||||
* 接受前端的数据, 每一个函数的参数可以先做一些整理后, 再调用 service 中的函数。这里对参数的整理, 应该只是格式上的, 而不能是业务上的 |
||||
* 数据层在 mapper 中, 数据层不涉及业务, 只管技术上的 对象<->表 之间的转换 |
||||
*/ |
||||
@RestController |
||||
@RequiredArgsConstructor |
||||
@RequestMapping("/storage_room" ) |
||||
@Api(value = "storage_room", tags = "房间管理") |
||||
public class StorageRoomController { |
||||
|
||||
|
||||
|
||||
private final StorageRoomMapper roomMapper; |
||||
|
||||
private final StorageRoomService storageRoomService; |
||||
|
||||
|
||||
|
||||
private final StorageCupboardMapper cupboardMapper; |
||||
|
||||
private final OssFile ossFile; |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* @ApiOperation(value = "上传房间图片", notes = "上传房间图片") |
||||
@PostMapping(value = "/uploadRoom/{roomId}") |
||||
@PreAuthorize("@pms.hasPermission('roomUpload')") |
||||
public R uploadAttachmentObj(@PathVariable("roomId") String roomId, @RequestPart("file") MultipartFile file) throws Exception { |
||||
|
||||
StorageRoom storageRoom = roomMapper.selectById(roomId); |
||||
if (storageRoom != null) { |
||||
|
||||
String path = "room" + "/" + roomId; |
||||
String fileName = FileNameUtil.getName(file.getOriginalFilename()); |
||||
boolean r = ossFile.fileUpload(file, path); |
||||
Map<String, String> ResultData = new HashMap<>(); |
||||
ResultData.put("fileName", fileName); |
||||
ResultData.put("path", path); |
||||
|
||||
if (r) { |
||||
//修改数据库
|
||||
storageRoom.setRoomPhoto(path); |
||||
storageRoom.setFileName(fileName); |
||||
roomMapper.updateById(storageRoom); |
||||
return R.ok(ResultData, "上传成功"); |
||||
} |
||||
return R.failed("上传失败"); |
||||
} |
||||
return R.failed(null, "这个房间不存在"); |
||||
}*/ |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* 通过id查询 |
||||
* @param id id |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "通过id查询", notes = "通过id查询") |
||||
@GetMapping("/{id}" ) |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_room_get')" )
|
||||
public R<StorageRoom> getById(@PathVariable("id" ) String id, HttpServletRequest theHttpServletRequest) { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
StorageRoom storageRoom = storageRoomService.getById(id); |
||||
return R.ok(storageRoom); |
||||
//return R.ok(storageRoomService.getById(id));
|
||||
} |
||||
|
||||
/** |
||||
* 分页查询 |
||||
* @param roomName |
||||
* @return |
||||
*/ |
||||
@ApiOperation(value = "存储室列表查询接口--存储管理", notes = "存储室列表查询接口--存储管理") |
||||
@GetMapping("/room/list" ) |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_room_get')" )
|
||||
public R<List<StorageRoom>> getStorageRoomPage(String roomName){ |
||||
|
||||
List<StorageRoom> storageRoomList = roomMapper.getStorageRoomPage(Wrappers.<StorageRoom>query() |
||||
.like(!roomName.isEmpty(),"name",roomName) |
||||
.orderByDesc("create_time") |
||||
); |
||||
return R.ok(storageRoomList,"查询成功"); |
||||
} |
||||
|
||||
/** |
||||
* 新增 |
||||
* @param storageRoom |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "添加存储室--存储管理(上传或不上传图片)", notes = "添加存储室--存储管理") |
||||
@SysLog("添加存储室" ) |
||||
@PostMapping("/createStorageRoom") |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_room_add')" )
|
||||
public R<StorageRoom> postAddObject(StorageRoom storageRoom, HttpServletRequest theHttpServletRequest,@RequestPart(value = "file",required = false) MultipartFile file)throws Exception { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
|
||||
storageRoom.setId(IdWorker.get32UUID().toUpperCase()); |
||||
|
||||
if(file!=null){ |
||||
String path = "room" + "/" + storageRoom.getId(); |
||||
String fileName = FileNameUtil.getName(file.getOriginalFilename()); |
||||
boolean r = ossFile.fileUpload(file, path); |
||||
if (r) { |
||||
storageRoom.setRoomPhoto(path); |
||||
storageRoom.setFileName(fileName); |
||||
roomMapper.insert(storageRoom); |
||||
return R.ok(storageRoom, "创建成功"); |
||||
} |
||||
else { |
||||
//删除图片
|
||||
ossFile.fileDelete("room" + "/" + storageRoom.getId() + "/" + fileName); |
||||
return R.failed("创建失败"); |
||||
} |
||||
}else { |
||||
roomMapper.insert(storageRoom); |
||||
return R.ok(storageRoom, "创建成功"); |
||||
} |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* 修改 |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "修改--存储管理(数据修改+图片修改)", notes = "修改--存储管理") |
||||
@SysLog("修改" ) |
||||
@PutMapping("/updateRoom") |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_room_edit')" )
|
||||
public R<StorageRoom> putUpdateById(StorageRoom storageRoom, HttpServletRequest theHttpServletRequest,@RequestPart(value = "file",required = false)MultipartFile file)throws Exception { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
|
||||
StorageRoom room = roomMapper.selectById(storageRoom.getId()); |
||||
if(room==null){ |
||||
throw new RuntimeException(String.format("存储室数据不存在")); |
||||
} |
||||
if(file!=null){ |
||||
String path = "room" + "/" + storageRoom.getId(); |
||||
String fileName = FileNameUtil.getName(file.getOriginalFilename()); |
||||
boolean r = ossFile.fileUpload(file, path); |
||||
if (r) { |
||||
storageRoom.setRoomPhoto(path); |
||||
storageRoom.setFileName(fileName); |
||||
roomMapper.updateById(storageRoom); |
||||
return R.ok(storageRoom, "修改成功"); |
||||
} |
||||
else { |
||||
return R.failed("修改失败"); |
||||
} |
||||
}else { |
||||
//判断数据库是否存储照片
|
||||
if(room.getRoomPhoto() != null && room.getFileName()!=null){ |
||||
//删除图片
|
||||
ossFile.fileDelete("room" + "/" + room.getId() + "/" + room.getFileName()); |
||||
} |
||||
//修改数据
|
||||
storageRoom.setFileName(""); |
||||
storageRoom.setRoomPhoto(""); |
||||
roomMapper.updateById(storageRoom); |
||||
return R.ok(storageRoom, "修改成功"); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 通过id删除 |
||||
* @param id id |
||||
* @return R |
||||
*/ |
||||
@ApiOperation(value = "通过id删除房间--存储管理", notes = "通过id删除--存储管理") |
||||
@SysLog("通过id删除" ) |
||||
@DeleteMapping("deleteRoom/{id}" ) |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_room_del')" )
|
||||
public R<StorageRoom> deleteById(@PathVariable String id, HttpServletRequest theHttpServletRequest) throws Exception { |
||||
Principal principal = theHttpServletRequest.getUserPrincipal(); |
||||
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); |
||||
|
||||
QueryWrapper<StorageCupboard> wrapper = new QueryWrapper<>(); |
||||
wrapper.eq("room_id",id); |
||||
List<StorageCupboard> storageCupboards = cupboardMapper.selectList(wrapper); |
||||
|
||||
if (storageCupboards!=null){ |
||||
throw new RuntimeException(String.format("当前房间还存在柜子不允许删除")); |
||||
} |
||||
|
||||
StorageRoom storageRoom = storageRoomService.getById(id); |
||||
if(storageRoom.getRoomPhoto()!=null && storageRoom.getFileName()!=null){ |
||||
//删除图片
|
||||
ossFile.fileDelete("room" + "/" + storageRoom.getId() + "/" + storageRoom.getFileName()); |
||||
} |
||||
|
||||
if (storageRoomService.removeById(id)) { |
||||
return R.ok(storageRoom, "对象删除成功"); |
||||
} |
||||
else { |
||||
return R.failed(storageRoom, "对象删除失败"); |
||||
} |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 通过房间id和文件名获取图片"/getRoomPicture/{roomId}/{fileName}" |
||||
*/ |
||||
@ApiOperation(value = "通过房间id和文件名获取图片", notes = "通过房间id和文件名获取图片") |
||||
@GetMapping("/getRoomPicture/{roomId}/{fileName}" ) |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_room_get')" )
|
||||
public void getRoomPicture(@PathVariable("roomId") String roomId, |
||||
@PathVariable("fileName") String fileName, |
||||
HttpServletResponse httpServletResponse) throws Exception { |
||||
StorageRoom storageRoom = roomMapper.selectById(roomId); |
||||
if(storageRoom==null){ |
||||
throw new RuntimeException(String.format("当前房间数据不存在")); |
||||
} |
||||
ossFile.fileGet("room" + "/" + storageRoom.getId() + "/" + fileName, httpServletResponse.getOutputStream()); |
||||
httpServletResponse.setContentType(new MimetypesFileTypeMap().getContentType(storageRoom.getFileName())); |
||||
} |
||||
|
||||
|
||||
|
||||
/* |
||||
@ApiOperation(value = "删除图片", notes = "删除图片") |
||||
@SysLog("通过id删除" ) |
||||
@DeleteMapping("deleteRoom/{id}" ) |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_room_del')" )
|
||||
*/ |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* 列表 |
||||
* @param |
||||
* @return |
||||
*/ |
||||
@ApiOperation(value = "房间列表查询--下拉框的", notes = "房间列表查询--下拉框的") |
||||
@GetMapping("/list" ) |
||||
//@PreAuthorize("@pms.hasPermission('imr_storage_room_get')" )
|
||||
public R<List<StorageRoom>> getStorageRoomList() { |
||||
|
||||
List<StorageRoom> storage = roomMapper.getStorageRoomList(Wrappers.<StorageRoom>query() |
||||
.orderByDesc("sort") |
||||
); |
||||
return R.ok(storage,"查询成功"); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,45 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 创建/修改申请DTO |
||||
*/ |
||||
|
||||
@Data |
||||
@ApiModel(value = "ApplyDTO",description = "创建修改申请dto") |
||||
public class ApplyDTO { |
||||
|
||||
/** |
||||
* 申请id |
||||
*/ |
||||
|
||||
@ApiModelProperty(value = "申请id--主键id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 样本id |
||||
*/ |
||||
@ApiModelProperty(value = "选择的样本id集合") |
||||
private List<String> sampleId; |
||||
|
||||
/** |
||||
* 申请原因 |
||||
*/ |
||||
@ApiModelProperty(value="申请原因") |
||||
private String reason; |
||||
|
||||
|
||||
/** |
||||
* 申请类型(如果是一个接口就要使用该字段) |
||||
* |
||||
* destroy销毁 |
||||
* Carry外带 |
||||
*/ |
||||
@ApiModelProperty(value="申请类型/1.外带/2.销毁--必须传的字段") |
||||
private Integer applyType; |
||||
} |
@ -0,0 +1,22 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Data; |
||||
|
||||
import java.util.List; |
||||
|
||||
@Data |
||||
@AllArgsConstructor |
||||
public class CombinationOut { |
||||
|
||||
private List<String> sampleIds;//去重数组id
|
||||
|
||||
|
||||
private Integer begin;//计算分页开始数
|
||||
|
||||
|
||||
private Integer size;//每页显示条数
|
||||
|
||||
|
||||
private String name;//模糊匹配名字
|
||||
} |
@ -0,0 +1,61 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 检材/样本存放dto |
||||
* |
||||
*/ |
||||
|
||||
@Data |
||||
@ApiModel(value = "样本存放dto") |
||||
public class DepositDTO { |
||||
|
||||
|
||||
|
||||
//可多个检材存放到一个格子
|
||||
|
||||
|
||||
/** |
||||
* buildingLv:'', //楼层
|
||||
* roomNo:'', //房间号
|
||||
* boxId: '', //柜子id
|
||||
* cabinetName |
||||
*/ |
||||
@ApiModelProperty(value="楼层") |
||||
private String buildingLv; |
||||
|
||||
@ApiModelProperty(value="房间号") |
||||
private String roomNo; |
||||
|
||||
@ApiModelProperty(value="柜子名称") |
||||
private String cabinetName; |
||||
|
||||
@ApiModelProperty(value="柜子id") |
||||
private String boxId; |
||||
|
||||
|
||||
/** |
||||
* 样本存放id---主键id |
||||
*/ |
||||
@ApiModelProperty(value="样本存放id---主键id") |
||||
private List<String> ids; |
||||
|
||||
|
||||
@ApiModelProperty(value="详细位置") |
||||
private String storageLocation; |
||||
|
||||
/** |
||||
* 存放格子id |
||||
*/ |
||||
@ApiModelProperty(value="存放格子id") |
||||
private String cellId; |
||||
|
||||
|
||||
@ApiModelProperty(value="格子状态") |
||||
private String cellStatus; |
||||
} |
@ -0,0 +1,52 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.util.List; |
||||
|
||||
|
||||
|
||||
@Data |
||||
@ApiModel(value = "存储dto") |
||||
public class DepositToDTO { |
||||
|
||||
|
||||
@ApiModelProperty(value="楼层") |
||||
private String buildingLv; |
||||
|
||||
@ApiModelProperty(value="房间号") |
||||
private String roomNo; |
||||
|
||||
@ApiModelProperty(value="柜子名称") |
||||
private String cabinetName; |
||||
|
||||
@ApiModelProperty(value="柜子id") |
||||
private String boxId; |
||||
|
||||
@ApiModelProperty(value="监督人id") |
||||
private String supervisorId; |
||||
|
||||
|
||||
@ApiModelProperty(value="样本信息") |
||||
private List<SampleInfo> sampleInfo; |
||||
|
||||
|
||||
@ApiModelProperty(value="详细位置") |
||||
private String storageLocation; |
||||
|
||||
/** |
||||
* 存放格子id |
||||
*/ |
||||
@ApiModelProperty(value="存放格子id") |
||||
private String cellId; |
||||
|
||||
|
||||
@ApiModelProperty(value="格子状态") |
||||
private String cellStatus; |
||||
|
||||
|
||||
@ApiModelProperty(value="入库质量") |
||||
private double quality; |
||||
} |
@ -0,0 +1,16 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
|
||||
import lombok.Data; |
||||
|
||||
import java.util.List; |
||||
|
||||
@Data |
||||
public class DestroyOutboundDTO { |
||||
|
||||
|
||||
private List<String> sampleIds; |
||||
|
||||
|
||||
private String supervisor;//监督人
|
||||
} |
@ -0,0 +1,54 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField; |
||||
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import java.time.LocalDate; |
||||
|
||||
import java.time.LocalDateTime; |
||||
import java.util.List; |
||||
|
||||
@Data |
||||
public class DestructionPublicityDTO { |
||||
|
||||
|
||||
/** |
||||
* 主键id |
||||
*/ |
||||
private String id; |
||||
|
||||
/** |
||||
* 审核人id |
||||
*/ |
||||
@ApiModelProperty(value="审核人id") |
||||
private String reviewerId; |
||||
|
||||
/** |
||||
* 销毁单位 |
||||
*/ |
||||
@ApiModelProperty(value="销毁单位") |
||||
private String destroyCompany; |
||||
|
||||
/** |
||||
* 销毁时间 |
||||
*/ |
||||
@ApiModelProperty(value="销毁时间") |
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
@JSONField(format = "yyyy-MM-dd") |
||||
private LocalDate destroyDate; |
||||
|
||||
/** |
||||
* 备注 |
||||
*/ |
||||
@ApiModelProperty(value="备注") |
||||
private String remarks; |
||||
|
||||
|
||||
/** |
||||
* |
||||
*/ |
||||
@ApiModelProperty(value="销毁公示样本id集合--sampleIds") |
||||
private List<String> sampleIds; |
||||
} |
@ -0,0 +1,22 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Data; |
||||
|
||||
@Data |
||||
@ApiModel(value = "显示图标") |
||||
@AllArgsConstructor |
||||
public class IconDTO { |
||||
|
||||
|
||||
@ApiModelProperty(value = "数量") |
||||
private Long number; |
||||
|
||||
@ApiModelProperty(value = "状态") |
||||
private Integer status; |
||||
|
||||
@ApiModelProperty(value = "描述类型") |
||||
private String type; |
||||
} |
@ -0,0 +1,48 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.math.BigDecimal; |
||||
|
||||
/** |
||||
* 入库DTO |
||||
*/ |
||||
|
||||
@Data |
||||
@ApiModel(value = "样本入库dto") |
||||
public class InRepositoryDTO { |
||||
|
||||
/** |
||||
* 样本编号 |
||||
*/ |
||||
@ApiModelProperty(value="样本编号") |
||||
private String sampleNo; |
||||
|
||||
|
||||
|
||||
/** |
||||
* 样本入库时质量(这里更确切应该是流转的质量) |
||||
*/ |
||||
@ApiModelProperty(value="入库质量/体积") |
||||
private BigDecimal quality; |
||||
|
||||
|
||||
|
||||
/** |
||||
* 监督人 |
||||
*/ |
||||
@ApiModelProperty(value="监督人") |
||||
private String supervisor; |
||||
|
||||
|
||||
/** |
||||
* 计量单位 |
||||
*/ |
||||
@ApiModelProperty(value="计量单位") |
||||
private String unit; |
||||
|
||||
} |
@ -0,0 +1,32 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
import java.time.LocalDateTime; |
||||
|
||||
/** |
||||
* 内部样本出库DTO |
||||
*/ |
||||
public class InnerSampleOutbound { |
||||
|
||||
/** |
||||
* id |
||||
* 样本id |
||||
*/ |
||||
private String id; |
||||
|
||||
/** |
||||
* 领取人Id |
||||
*/ |
||||
private String recipientId; |
||||
|
||||
/** |
||||
* 归还时间 |
||||
*/ |
||||
private LocalDateTime returnDate; |
||||
|
||||
|
||||
/** |
||||
* 原因 |
||||
*/ |
||||
private String cause; |
||||
|
||||
} |
@ -0,0 +1,47 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField; |
||||
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.io.Serializable; |
||||
import java.time.LocalDate; |
||||
import java.time.LocalDateTime; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 创建出库申请DTO |
||||
*/ |
||||
|
||||
@Data |
||||
public class OutWarehouseApplyDTO implements Serializable { |
||||
|
||||
|
||||
|
||||
/** |
||||
* 出库用途 |
||||
*/ |
||||
@ApiModelProperty(value="出库用途") |
||||
private String purpose; |
||||
|
||||
/** |
||||
* 归还日期 |
||||
*/ |
||||
@ApiModelProperty(value="归还日期") |
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
@JSONField(format = "yyyy-MM-dd") |
||||
private LocalDate returnDate; |
||||
|
||||
/** |
||||
* 鉴定人id |
||||
*/ |
||||
@ApiModelProperty(value="鉴定人id") |
||||
private String appraiserId; |
||||
|
||||
/** |
||||
* 出库的样本id集合 |
||||
*/ |
||||
@ApiModelProperty(value="样本id集合") |
||||
List<String> sampleIds; |
||||
} |
@ -0,0 +1,41 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField; |
||||
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.time.LocalDate; |
||||
|
||||
@Data |
||||
@ApiModel(value = "按时间或委托生成检材出入库登记表") |
||||
public class PrintTableDTO { |
||||
|
||||
@ApiModelProperty(value = "打印筛选条件1.委托/任务;2.时间") |
||||
private Integer type; |
||||
|
||||
|
||||
@ApiModelProperty(value = "委托/任务id") |
||||
private String EventId; |
||||
|
||||
@ApiModelProperty(value = "mf--毛发/wt--委托/ws--污水--其他....") |
||||
private String source; |
||||
|
||||
|
||||
@ApiModelProperty(value = "事件名称") |
||||
private String EventName; |
||||
|
||||
@ApiModelProperty(value = "开始时间") |
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
@JSONField(format = "yyyy-MM-dd") |
||||
private LocalDate beginDate; |
||||
@ApiModelProperty(value = "结束时间") |
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
@JSONField(format = "yyyy-MM-dd") |
||||
private LocalDate finishDate; |
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,38 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField; |
||||
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.time.LocalDate; |
||||
@Data |
||||
@ApiModel(value = "PublicityDTO",description = "销毁与公示dto") |
||||
public class PublicityDTO { |
||||
|
||||
|
||||
@ApiModelProperty(value = "开始时间") |
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
@JSONField(format = "yyyy-MM-dd") |
||||
private LocalDate beginDate; |
||||
@ApiModelProperty(value = "结束时间") |
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
@JSONField(format = "yyyy-MM-dd") |
||||
private LocalDate finishDate; |
||||
|
||||
@ApiModelProperty(value = "当前申请的状态") |
||||
private Integer status;//状态
|
||||
/** |
||||
* 当前页 |
||||
*/ |
||||
@ApiModelProperty(value = "当前页") |
||||
private Integer current; |
||||
|
||||
/** |
||||
* 每页显示条数 |
||||
*/ |
||||
|
||||
@ApiModelProperty(value = "每页显示条数") |
||||
private Integer size; |
||||
} |
@ -0,0 +1,41 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField; |
||||
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.time.LocalDate; |
||||
@Data |
||||
@ApiModel(value="查询申请通用DTO") |
||||
public class QueryApplyDTO { |
||||
|
||||
@ApiModelProperty(value = "申请类型(1.外带//2.销毁)") |
||||
private Integer applyType;//名称
|
||||
|
||||
@ApiModelProperty(value = "开始时间") |
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
@JSONField(format = "yyyy-MM-dd") |
||||
private LocalDate beginDate; |
||||
@ApiModelProperty(value = "结束时间") |
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
@JSONField(format = "yyyy-MM-dd") |
||||
private LocalDate finishDate; |
||||
|
||||
@ApiModelProperty(value = "当前申请的状态") |
||||
private Integer status;//状态
|
||||
/** |
||||
* 当前页 |
||||
*/ |
||||
@ApiModelProperty(value = "当前页") |
||||
private Integer current; |
||||
|
||||
/** |
||||
* 每页显示条数 |
||||
*/ |
||||
|
||||
@ApiModelProperty(value = "每页显示条数") |
||||
private Integer size; |
||||
} |
@ -0,0 +1,64 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField; |
||||
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.time.LocalDate; |
||||
import java.util.List; |
||||
|
||||
@Data |
||||
@ApiModel(value = "通用的查询参数dto--选择其中部分数据作为查询参数") |
||||
public class QueryDTO { |
||||
|
||||
//以下为查询条件
|
||||
|
||||
@ApiModelProperty(value = "名称") |
||||
private String name;//名称
|
||||
|
||||
|
||||
@ApiModelProperty(value = "样本id集合") |
||||
private String sampleIds;//名称
|
||||
|
||||
@ApiModelProperty(value = "开始时间") |
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
@JSONField(format = "yyyy-MM-dd") |
||||
private LocalDate beginDate; |
||||
@ApiModelProperty(value = "结束时间") |
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
@JSONField(format = "yyyy-MM-dd") |
||||
private LocalDate finishDate; |
||||
|
||||
@ApiModelProperty(value = "状态--必带参数") |
||||
private Integer status;//状态
|
||||
/** |
||||
* 当前页 |
||||
*/ |
||||
@ApiModelProperty(value = "当前页") |
||||
private Integer current; |
||||
|
||||
/** |
||||
* 每页显示条数 |
||||
*/ |
||||
|
||||
@ApiModelProperty(value = "每页显示条数") |
||||
private Integer size; |
||||
|
||||
@ApiModelProperty(value = "总量") |
||||
private Integer total; |
||||
|
||||
|
||||
@ApiModelProperty(value = "查询类型字段1.按照样本模糊查询;2.按照任务模糊查询") |
||||
private Integer type; |
||||
|
||||
@ApiModelProperty(value = "查询参数:房间号") |
||||
private String roomNo; |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,47 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField; |
||||
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.time.LocalDate; |
||||
import java.time.LocalDateTime; |
||||
|
||||
/** |
||||
* 仓库查询样本DTO |
||||
*/ |
||||
@Data |
||||
@ApiModel(value = "仓库查询样本dto") |
||||
public class QuerySampleDTO { |
||||
|
||||
@ApiModelProperty(value = "样本名称") |
||||
private String name;//名称
|
||||
@ApiModelProperty(value = "样本类型") |
||||
private String sampleType;//
|
||||
|
||||
|
||||
// private String sampleNo;//编号
|
||||
|
||||
@ApiModelProperty(value = "入库开始时间") |
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
@JSONField(format = "yyyy-MM-dd") |
||||
private LocalDate beginDate; |
||||
@ApiModelProperty(value = "入库结束时间") |
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
@JSONField(format = "yyyy-MM-dd") |
||||
private LocalDate finishDate; |
||||
@ApiModelProperty(value = "状态--必带参数") |
||||
private Integer status;//状态
|
||||
|
||||
@ApiModelProperty(value = "当前页") |
||||
private Integer current; |
||||
|
||||
/** |
||||
* 每页显示条数 |
||||
*/ |
||||
@ApiModelProperty(value = "每页显示条数") |
||||
private Integer size; |
||||
|
||||
} |
@ -0,0 +1,32 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
/** |
||||
* 查询房间--柜子--格子对应的dto |
||||
*/ |
||||
|
||||
@Data |
||||
@ApiModel(value = "查询存储相关的dto") |
||||
public class QueryStorageDTO { |
||||
|
||||
@ApiModelProperty(value = "id--这个id可以是房间/柜子") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "name--这个name可以是房间/柜子") |
||||
private String name; |
||||
|
||||
|
||||
@ApiModelProperty(value = "当前页") |
||||
private Integer current; |
||||
|
||||
|
||||
@ApiModelProperty(value = "每页显示条数") |
||||
private Integer size; |
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,32 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 退还出库dto |
||||
*/ |
||||
|
||||
@Data |
||||
@ApiModel(value = "退还出库dto") |
||||
public class ReturnOutboundDTO { |
||||
|
||||
|
||||
@ApiModelProperty(value = "退还出库id集合") |
||||
List<String> sampleIds; |
||||
|
||||
@ApiModelProperty(value = "退还单位") |
||||
String returnInstitution; |
||||
|
||||
@ApiModelProperty(value = "备注") |
||||
String remark; |
||||
|
||||
@ApiModelProperty(value = "监督人") |
||||
String supervisor; |
||||
|
||||
|
||||
} |
@ -0,0 +1,40 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
import digital.laboratory.platform.imr.entity.enums.ApplyStatus; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import org.w3c.dom.stylesheets.LinkStyle; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 审核审批DTO |
||||
*/ |
||||
@Data |
||||
@ApiModel(value = "ReviewApprovalDTO",description = "审核审批带头") |
||||
public class ReviewApprovalDTO { |
||||
|
||||
/** |
||||
* 申请id |
||||
*/ |
||||
@ApiModelProperty(value = "申请id") |
||||
private String applyId; |
||||
|
||||
|
||||
@ApiModelProperty(value = "可对单个样本进行审核审批的dto") |
||||
private List<ReviewSampleDetail> reviewSampleDetails; |
||||
|
||||
/** |
||||
* 审核审批状态(枚举) |
||||
*/ |
||||
@ApiModelProperty(value = "审核审批状态:通过/不通过") |
||||
private Integer status; |
||||
|
||||
/** |
||||
* 意见 |
||||
*/ |
||||
|
||||
@ApiModelProperty(value = "意见") |
||||
private String opinion; |
||||
} |
@ -0,0 +1,20 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
@Data |
||||
@ApiModel(value="ReviewSampleDetail",description = "单个审核dto") |
||||
public class ReviewSampleDetail { |
||||
|
||||
|
||||
@ApiModelProperty(value = "单个样本申请明细id--不是sample_id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 审核审批状态(枚举) |
||||
*/ |
||||
@ApiModelProperty(value = "单个样本审核审批状态:1.通过/-1不通过") |
||||
private Integer status; |
||||
} |
@ -0,0 +1,22 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
import lombok.Data; |
||||
|
||||
/** |
||||
* 销毁/外带申请查询dto |
||||
*/ |
||||
|
||||
@Data |
||||
public class SampleApplyQueryDTO { |
||||
|
||||
|
||||
private String name;//名称
|
||||
|
||||
|
||||
private String sampleNo;//编号
|
||||
|
||||
|
||||
private Integer status;//状态
|
||||
|
||||
private String applyType;//必带条件;样本类型
|
||||
} |
@ -0,0 +1,17 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
|
||||
import lombok.Data; |
||||
|
||||
@Data |
||||
public class SampleInfo { |
||||
|
||||
|
||||
private String sampleId; |
||||
|
||||
|
||||
private String sampleName; |
||||
|
||||
|
||||
private double quality; |
||||
} |
@ -0,0 +1,25 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField; |
||||
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.time.LocalDate; |
||||
import java.time.LocalDateTime; |
||||
|
||||
|
||||
@ApiModel |
||||
@Data |
||||
public class UpdateStorageDateDTO { |
||||
|
||||
|
||||
@ApiModelProperty(value = "id--主键id") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "存放期限") |
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
@JSONField(format = "yyyy-MM-dd") |
||||
private LocalDate storageDate; |
||||
} |
@ -0,0 +1,46 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.util.List; |
||||
|
||||
|
||||
@Data |
||||
@ApiModel(value = "通用对象;需要什么就赋值什么") |
||||
public class UseOutboundDTO { |
||||
|
||||
|
||||
@ApiModelProperty(value = "格子id") |
||||
private String cellId; |
||||
|
||||
@ApiModelProperty(value = "房间号") |
||||
private String roomNo; |
||||
|
||||
@ApiModelProperty(value = "位置") |
||||
private String location; |
||||
|
||||
|
||||
@ApiModelProperty(value = "当前账户密码") |
||||
private String password; |
||||
|
||||
@ApiModelProperty(value = "取检码") |
||||
private String code; |
||||
|
||||
@ApiModelProperty(value = "监督人id") |
||||
private String supervisorId; |
||||
|
||||
@ApiModelProperty(value = "样本id集合") |
||||
private List<String> sampleIds; |
||||
|
||||
|
||||
@ApiModelProperty(value = "样本id") |
||||
private String sampleId; |
||||
|
||||
private Integer type; |
||||
|
||||
private Integer number; |
||||
|
||||
private String cabinetId; |
||||
} |
@ -0,0 +1,18 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
import lombok.Data; |
||||
|
||||
@Data |
||||
public class UserInfoDTO { |
||||
|
||||
|
||||
private String name; |
||||
|
||||
|
||||
private String department;//部门
|
||||
|
||||
|
||||
private String userId; |
||||
|
||||
private String position; |
||||
} |
@ -0,0 +1,25 @@ |
||||
package digital.laboratory.platform.imr.dto; |
||||
|
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.util.List; |
||||
|
||||
|
||||
@Data |
||||
@ApiModel(value = "校验取检码DTO") |
||||
public class VerificationCode { |
||||
|
||||
|
||||
@ApiModelProperty(value = "样本id数组") |
||||
private List<String> sampleIds; |
||||
|
||||
@ApiModelProperty(value = "取检码") |
||||
private String code; |
||||
|
||||
|
||||
@ApiModelProperty(value = "监督人") |
||||
private String supervisor; |
||||
} |
@ -0,0 +1,39 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
@Data |
||||
@TableName(value = "association_open", autoResultMap = true) |
||||
@EqualsAndHashCode(callSuper = false) |
||||
@ApiModel(value = "样本关联开箱记录表") |
||||
public class AssociationOpen extends BaseEntity { |
||||
|
||||
|
||||
/** |
||||
* 主键id |
||||
*/ |
||||
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||
@ApiModelProperty(value="主键id") |
||||
private String id; |
||||
|
||||
/** |
||||
* sample_id |
||||
*/ |
||||
@ApiModelProperty(value="样本id") |
||||
private String sampleId; |
||||
|
||||
|
||||
|
||||
@ApiModelProperty(value="开箱记录id") |
||||
private String openId; |
||||
|
||||
|
||||
} |
@ -0,0 +1,70 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
import java.time.LocalDateTime; |
||||
|
||||
@Data |
||||
@TableName(value = "cabinet_opening_record", autoResultMap = true) |
||||
@EqualsAndHashCode(callSuper = false) |
||||
@ApiModel(value = "智能物证柜开箱记录") |
||||
public class CabinetOpeningRecord extends BaseEntity { |
||||
|
||||
/** |
||||
* 主键id |
||||
*/ |
||||
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||
@ApiModelProperty(value="主键id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 销毁公示id |
||||
*/ |
||||
@ApiModelProperty(value="存储位置:表示那个格子开箱了") |
||||
private String storageLocation; |
||||
|
||||
/** |
||||
* 开箱时间 |
||||
*/ |
||||
@ApiModelProperty(value="开箱时间") |
||||
private LocalDateTime openTime; |
||||
|
||||
|
||||
|
||||
@ApiModelProperty(value="开箱人--检材管理员") |
||||
private String openPerson; |
||||
|
||||
|
||||
|
||||
@ApiModelProperty(value="申请人--检材管理员") |
||||
private String applyPerson; |
||||
|
||||
|
||||
|
||||
@ApiModelProperty(value="监督人--这里直接存名字") |
||||
private String supervisor; |
||||
|
||||
|
||||
|
||||
@ApiModelProperty(value="开箱类型:1.扫码开柜2.取检码开柜3.强制/点选开柜") |
||||
private String openType; |
||||
|
||||
|
||||
|
||||
@ApiModelProperty(value="开箱用途:1.检材出库2.检材入库") |
||||
private String openPurpose; |
||||
|
||||
|
||||
|
||||
@ApiModelProperty(value="仓库,标识是哪一个仓库") |
||||
private String warehouse; |
||||
|
||||
} |
@ -0,0 +1,51 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
|
||||
/** |
||||
* |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-23 11:59:56 |
||||
* @describe 实体类 |
||||
*/ |
||||
@Data |
||||
@TableName(value = "destruction_detail", autoResultMap = true) |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ApiModel(value = "销毁公示明细实体类") |
||||
public class DestructionDetail extends BaseEntity { |
||||
|
||||
/** |
||||
* 主键id |
||||
*/ |
||||
@TableId |
||||
@ApiModelProperty(value="主键id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 销毁公示id |
||||
*/ |
||||
@ApiModelProperty(value="销毁公示id") |
||||
private String destructionId; |
||||
|
||||
/** |
||||
* 销毁样本id |
||||
*/ |
||||
@ApiModelProperty(value="销毁样本id") |
||||
private String sampleId; |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,86 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import digital.laboratory.platform.imr.entity.enums.ReleaseStatus; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import java.io.Serializable; |
||||
import java.time.LocalDate; |
||||
import java.time.LocalDateTime; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
|
||||
/** |
||||
* |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-23 11:57:26 |
||||
* @describe 实体类 |
||||
*/ |
||||
@Data |
||||
@TableName(value = "destruction_publicity", autoResultMap = true) |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ApiModel(value = "检材销毁与公示管理") |
||||
public class DestructionPublicity extends BaseEntity { |
||||
|
||||
/** |
||||
* 主键id |
||||
*/ |
||||
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||
@ApiModelProperty(value="主键id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 申请人id |
||||
*/ |
||||
@ApiModelProperty(value="申请人id") |
||||
private String applicantId; |
||||
|
||||
/** |
||||
* 审核人id |
||||
*/ |
||||
@ApiModelProperty(value="审核人id") |
||||
private String reviewerId; |
||||
|
||||
/** |
||||
* 销毁样本数量 |
||||
*/ |
||||
@ApiModelProperty(value="销毁样本数量") |
||||
private Integer destroyQuantity; |
||||
|
||||
/** |
||||
* 销毁单位 |
||||
*/ |
||||
@ApiModelProperty(value="销毁单位") |
||||
private String destroyCompany; |
||||
|
||||
/** |
||||
* 销毁时间 |
||||
*/ |
||||
@ApiModelProperty(value="销毁时间") |
||||
private LocalDate destroyDate; |
||||
|
||||
/** |
||||
* 备注 |
||||
*/ |
||||
@ApiModelProperty(value="备注") |
||||
private String remarks; |
||||
|
||||
/** |
||||
* 未发布/已发布 |
||||
*/ |
||||
@ApiModelProperty(value="-1未发布/1已发布") |
||||
private Integer status; |
||||
|
||||
|
||||
/** |
||||
* 发布时间 |
||||
*/ |
||||
@ApiModelProperty(value="发布时间") |
||||
private LocalDateTime ReleaseDate; |
||||
|
||||
|
||||
} |
@ -0,0 +1,103 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import lombok.Data; |
||||
|
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
import java.util.Date; |
||||
|
||||
/** |
||||
* 毒品库中关联的案事件信息 |
||||
* @TableName b_drug_case_info |
||||
*/ |
||||
@TableName(value ="b_drug_case_info") |
||||
@Data |
||||
public class DrugCaseInfo extends BaseEntity implements Serializable { |
||||
/** |
||||
* 主键标识 |
||||
*/ |
||||
@TableId |
||||
private String id; |
||||
|
||||
/** |
||||
* 案事件名称 |
||||
*/ |
||||
private String caseName; |
||||
|
||||
/** |
||||
* 案件编号 |
||||
*/ |
||||
private String caseNo; |
||||
|
||||
/** |
||||
* 送缴单位 |
||||
*/ |
||||
private String handingOverOrg; |
||||
|
||||
/** |
||||
* 送缴日期 |
||||
*/ |
||||
private LocalDateTime handingOverDate; |
||||
|
||||
@TableField(exist = false) |
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
@Override |
||||
public boolean equals(Object that) { |
||||
if (this == that) { |
||||
return true; |
||||
} |
||||
if (that == null) { |
||||
return false; |
||||
} |
||||
if (getClass() != that.getClass()) { |
||||
return false; |
||||
} |
||||
DrugCaseInfo other = (DrugCaseInfo) that; |
||||
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) |
||||
&& (this.getCaseName() == null ? other.getCaseName() == null : this.getCaseName().equals(other.getCaseName())) |
||||
&& (this.getCaseNo() == null ? other.getCaseNo() == null : this.getCaseNo().equals(other.getCaseNo())) |
||||
&& (this.getHandingOverOrg() == null ? other.getHandingOverOrg() == null : this.getHandingOverOrg().equals(other.getHandingOverOrg())) |
||||
&& (this.getHandingOverDate() == null ? other.getHandingOverDate() == null : this.getHandingOverDate().equals(other.getHandingOverDate())) |
||||
&& (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime())) |
||||
&& (this.getUpdateTime() == null ? other.getUpdateTime() == null : this.getUpdateTime().equals(other.getUpdateTime())) |
||||
&& (this.getCreateBy() == null ? other.getCreateBy() == null : this.getCreateBy().equals(other.getCreateBy())) |
||||
&& (this.getUpdateBy() == null ? other.getUpdateBy() == null : this.getUpdateBy().equals(other.getUpdateBy())); |
||||
} |
||||
|
||||
@Override |
||||
public int hashCode() { |
||||
final int prime = 31; |
||||
int result = 1; |
||||
result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); |
||||
result = prime * result + ((getCaseName() == null) ? 0 : getCaseName().hashCode()); |
||||
result = prime * result + ((getCaseNo() == null) ? 0 : getCaseNo().hashCode()); |
||||
result = prime * result + ((getHandingOverOrg() == null) ? 0 : getHandingOverOrg().hashCode()); |
||||
result = prime * result + ((getHandingOverDate() == null) ? 0 : getHandingOverDate().hashCode()); |
||||
result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode()); |
||||
result = prime * result + ((getUpdateTime() == null) ? 0 : getUpdateTime().hashCode()); |
||||
result = prime * result + ((getCreateBy() == null) ? 0 : getCreateBy().hashCode()); |
||||
result = prime * result + ((getUpdateBy() == null) ? 0 : getUpdateBy().hashCode()); |
||||
return result; |
||||
} |
||||
|
||||
@Override |
||||
public String toString() { |
||||
StringBuilder sb = new StringBuilder(); |
||||
sb.append(getClass().getSimpleName()); |
||||
sb.append(" ["); |
||||
sb.append("Hash = ").append(hashCode()); |
||||
sb.append(", id=").append(id); |
||||
sb.append(", caseName=").append(caseName); |
||||
sb.append(", caseNo=").append(caseNo); |
||||
sb.append(", handingOverOrg=").append(handingOverOrg); |
||||
sb.append(", handingOverDate=").append(handingOverDate); |
||||
sb.append(", serialVersionUID=").append(serialVersionUID); |
||||
sb.append("]"); |
||||
return sb.toString(); |
||||
} |
||||
} |
@ -0,0 +1,109 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import lombok.Data; |
||||
|
||||
import java.io.Serializable; |
||||
|
||||
/** |
||||
* 毒品库中的毒品检材信息 |
||||
* @TableName b_drug_material_info |
||||
*/ |
||||
@TableName(value ="b_drug_material_info") |
||||
@Data |
||||
public class DrugMaterialInfo extends BaseEntity implements Serializable { |
||||
/** |
||||
* 主键标识 |
||||
*/ |
||||
@TableId |
||||
private String id; |
||||
|
||||
/** |
||||
* 关联的案件id |
||||
*/ |
||||
private String caseId; |
||||
|
||||
/** |
||||
* 毒品检材编号 |
||||
*/ |
||||
private String drugNo; |
||||
|
||||
/** |
||||
* 毒品检材名称 |
||||
*/ |
||||
private String drugName; |
||||
|
||||
/** |
||||
* 质量/体积 |
||||
*/ |
||||
private String massVolume; |
||||
|
||||
/** |
||||
* 包装是否完整, 1 完整 | 0 不完整 |
||||
*/ |
||||
private Integer packageComplete; |
||||
|
||||
@TableField(exist = false) |
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
@Override |
||||
public boolean equals(Object that) { |
||||
if (this == that) { |
||||
return true; |
||||
} |
||||
if (that == null) { |
||||
return false; |
||||
} |
||||
if (getClass() != that.getClass()) { |
||||
return false; |
||||
} |
||||
DrugMaterialInfo other = (DrugMaterialInfo) that; |
||||
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) |
||||
&& (this.getCaseId() == null ? other.getCaseId() == null : this.getCaseId().equals(other.getCaseId())) |
||||
&& (this.getDrugNo() == null ? other.getDrugNo() == null : this.getDrugNo().equals(other.getDrugNo())) |
||||
&& (this.getDrugName() == null ? other.getDrugName() == null : this.getDrugName().equals(other.getDrugName())) |
||||
&& (this.getMassVolume() == null ? other.getMassVolume() == null : this.getMassVolume().equals(other.getMassVolume())) |
||||
&& (this.getPackageComplete() == null ? other.getPackageComplete() == null : this.getPackageComplete().equals(other.getPackageComplete())) |
||||
&& (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime())) |
||||
&& (this.getUpdateTime() == null ? other.getUpdateTime() == null : this.getUpdateTime().equals(other.getUpdateTime())) |
||||
&& (this.getCreateBy() == null ? other.getCreateBy() == null : this.getCreateBy().equals(other.getCreateBy())) |
||||
&& (this.getUpdateBy() == null ? other.getUpdateBy() == null : this.getUpdateBy().equals(other.getUpdateBy())); |
||||
} |
||||
|
||||
@Override |
||||
public int hashCode() { |
||||
final int prime = 31; |
||||
int result = 1; |
||||
result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); |
||||
result = prime * result + ((getCaseId() == null) ? 0 : getCaseId().hashCode()); |
||||
result = prime * result + ((getDrugNo() == null) ? 0 : getDrugNo().hashCode()); |
||||
result = prime * result + ((getDrugName() == null) ? 0 : getDrugName().hashCode()); |
||||
result = prime * result + ((getMassVolume() == null) ? 0 : getMassVolume().hashCode()); |
||||
result = prime * result + ((getPackageComplete() == null) ? 0 : getPackageComplete().hashCode()); |
||||
result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode()); |
||||
result = prime * result + ((getUpdateTime() == null) ? 0 : getUpdateTime().hashCode()); |
||||
result = prime * result + ((getCreateBy() == null) ? 0 : getCreateBy().hashCode()); |
||||
result = prime * result + ((getUpdateBy() == null) ? 0 : getUpdateBy().hashCode()); |
||||
return result; |
||||
} |
||||
|
||||
@Override |
||||
public String toString() { |
||||
StringBuilder sb = new StringBuilder(); |
||||
sb.append(getClass().getSimpleName()); |
||||
sb.append(" ["); |
||||
sb.append("Hash = ").append(hashCode()); |
||||
sb.append(", id=").append(id); |
||||
sb.append(", caseId=").append(caseId); |
||||
sb.append(", drugNo=").append(drugNo); |
||||
sb.append(", drugName=").append(drugName); |
||||
sb.append(", massVolume=").append(massVolume); |
||||
sb.append(", packageComplete=").append(packageComplete); |
||||
sb.append(", serialVersionUID=").append(serialVersionUID); |
||||
sb.append("]"); |
||||
return sb.toString(); |
||||
} |
||||
} |
@ -0,0 +1,102 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import java.io.Serializable; |
||||
import java.math.BigDecimal; |
||||
import java.time.LocalDateTime; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
|
||||
/** |
||||
* |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-05-08 17:32:13 |
||||
* @describe 实体类 |
||||
*/ |
||||
@Data |
||||
@TableName(value = "b_identification_material_transfer_analysis_annex", autoResultMap = true) |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ApiModel(value = "分析样出入库(流转记录附属表)") |
||||
public class IdentificationMaterialTransferAnalysisAnnex extends BaseEntity { |
||||
|
||||
/** |
||||
* 流转附件表id |
||||
*/ |
||||
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||
@ApiModelProperty(value="流转附件表id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 分析样入库时间 |
||||
*/ |
||||
@ApiModelProperty(value="分析样入库时间") |
||||
private LocalDateTime analysisSampleInboundDate; |
||||
|
||||
/** |
||||
* 分析样出库时间 |
||||
*/ |
||||
@ApiModelProperty(value="分析样出库时间") |
||||
private LocalDateTime analysisSampleOutboundDate; |
||||
|
||||
/** |
||||
* 分析样入库质量 |
||||
*/ |
||||
@ApiModelProperty(value="分析样入库质量") |
||||
private BigDecimal analysisSampleInboundQuality; |
||||
|
||||
/** |
||||
* 分析样出库质量 |
||||
*/ |
||||
@ApiModelProperty(value="分析样出库质量") |
||||
private BigDecimal analysisSampleOutboundQuality; |
||||
|
||||
/** |
||||
* 入库样本管理员id |
||||
*/ |
||||
@ApiModelProperty(value="入库样本管理员id") |
||||
private String inboundAdminId; |
||||
|
||||
/** |
||||
* 出库样本管理员id |
||||
*/ |
||||
@ApiModelProperty(value="出库样本管理员id") |
||||
private String outboundAdminId; |
||||
|
||||
/** |
||||
* 入库监督人id |
||||
*/ |
||||
@ApiModelProperty(value="入库监督人id") |
||||
private String inboundAppraiserId; |
||||
|
||||
/** |
||||
* 出库监督人id |
||||
*/ |
||||
@ApiModelProperty(value="出库监督人id") |
||||
private String outboundAppraiserId; |
||||
|
||||
/** |
||||
* 入库经手人 |
||||
*/ |
||||
@ApiModelProperty(value="入库经手人") |
||||
private String inboundHandledBy; |
||||
|
||||
/** |
||||
* 出库经手人 |
||||
*/ |
||||
@ApiModelProperty(value="出库经手人") |
||||
private String outboundHandledBy; |
||||
|
||||
/** |
||||
* 样本id |
||||
*/ |
||||
@ApiModelProperty(value="样本id") |
||||
private String sampleId; |
||||
|
||||
|
||||
} |
@ -0,0 +1,102 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import java.io.Serializable; |
||||
import java.math.BigDecimal; |
||||
import java.time.LocalDateTime; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
|
||||
/** |
||||
* |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-05-08 17:32:13 |
||||
* @describe 实体类 |
||||
*/ |
||||
@Data |
||||
@TableName(value = "b_identification_material_transfer_retained_annex", autoResultMap = true) |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ApiModel(value = "留存样出入库(流转记录附属表)") |
||||
public class IdentificationMaterialTransferRetainedAnnex extends BaseEntity { |
||||
|
||||
/** |
||||
* 流转附件表id |
||||
*/ |
||||
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||
@ApiModelProperty(value="流转附件表id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 留存样入库时间 |
||||
*/ |
||||
@ApiModelProperty(value="留存样入库时间") |
||||
private LocalDateTime retainedSampleInboundDate; |
||||
|
||||
/** |
||||
* 留存样出库时间 |
||||
*/ |
||||
@ApiModelProperty(value="留存样出库时间") |
||||
private LocalDateTime retainedSampleOutboundDate; |
||||
|
||||
/** |
||||
* 留存样入库质量 |
||||
*/ |
||||
@ApiModelProperty(value="留存样入库质量") |
||||
private BigDecimal retainedSampleInboundQuality; |
||||
|
||||
/** |
||||
* 留存样出库质量 |
||||
*/ |
||||
@ApiModelProperty(value="留存样出库质量") |
||||
private BigDecimal retainedSampleOutboundQuality; |
||||
|
||||
/** |
||||
* 入库样本管理员id |
||||
*/ |
||||
@ApiModelProperty(value="入库样本管理员id") |
||||
private String inboundAdminId; |
||||
|
||||
/** |
||||
* 出库样本管理员id |
||||
*/ |
||||
@ApiModelProperty(value="出库样本管理员id") |
||||
private String outboundAdminId; |
||||
|
||||
/** |
||||
* 入库监督人id |
||||
*/ |
||||
@ApiModelProperty(value="入库监督人id") |
||||
private String inboundAppraiserId; |
||||
|
||||
/** |
||||
* 出库监督人id |
||||
*/ |
||||
@ApiModelProperty(value="出库监督人id") |
||||
private String outboundAppraiserId; |
||||
|
||||
/** |
||||
* 入库经手人 |
||||
*/ |
||||
@ApiModelProperty(value="入库经手人") |
||||
private String inboundHandledBy; |
||||
|
||||
/** |
||||
* 出库经手人 |
||||
*/ |
||||
@ApiModelProperty(value="出库经手人") |
||||
private String outboundHandledBy; |
||||
|
||||
/** |
||||
* 样本id |
||||
*/ |
||||
@ApiModelProperty(value="样本id") |
||||
private String sampleId; |
||||
|
||||
|
||||
} |
@ -0,0 +1,24 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
|
||||
import lombok.Data; |
||||
|
||||
@Data |
||||
public class InventorySample { |
||||
|
||||
|
||||
private Integer Number; |
||||
|
||||
|
||||
|
||||
private String sampleNo; |
||||
|
||||
|
||||
private String name; |
||||
|
||||
|
||||
private String sampleType; |
||||
|
||||
|
||||
private String storageLocation; |
||||
} |
@ -0,0 +1,51 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
|
||||
/** |
||||
* 出库明细 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 11:23:41 |
||||
* @describe 出库明细 实体类 |
||||
*/ |
||||
@Data |
||||
@TableName(value = "out_warehouse_detailed", autoResultMap = true) |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ApiModel(value = "出库明细") |
||||
public class OutWarehouseDetailed extends BaseEntity { |
||||
|
||||
/** |
||||
* --主键id |
||||
*/ |
||||
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||
@ApiModelProperty(value="--主键id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 申请id |
||||
*/ |
||||
@ApiModelProperty(value="申请id") |
||||
private String applyId; |
||||
|
||||
/** |
||||
* 样本id |
||||
*/ |
||||
@ApiModelProperty(value="样本id") |
||||
private String sampleId; |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,39 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import io.swagger.annotations.ApiModel; |
||||
import lombok.Data; |
||||
|
||||
import java.time.LocalDateTime; |
||||
|
||||
/** |
||||
* 定时任务 |
||||
*/ |
||||
|
||||
@Data |
||||
|
||||
public class PrintSampleInAndOutInfo { |
||||
|
||||
private Integer Number; |
||||
|
||||
|
||||
private String sampleNo;//执行周期
|
||||
|
||||
|
||||
private String sampleType; |
||||
|
||||
private String warehousingDate;//入库时间
|
||||
|
||||
|
||||
private String outWarehouseDate;//出库时间
|
||||
|
||||
private String appraiserName; |
||||
|
||||
private String imName; |
||||
|
||||
private String remarks; |
||||
|
||||
private String returnTime; |
||||
|
||||
|
||||
} |
@ -0,0 +1,141 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import digital.laboratory.platform.imr.entity.enums.ApplyStatus; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
|
||||
/** |
||||
* 检材申请实体类 |
||||
* |
||||
* 销毁申请+外带申请 |
||||
* 申请状态用于区分两者 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 11:51:42 |
||||
* @describe 检材申请实体类 实体类 |
||||
*/ |
||||
@Data |
||||
@TableName(value = "sample_apply", autoResultMap = true) |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ApiModel(value = "检材申请实体类") |
||||
public class SampleApply extends BaseEntity { |
||||
|
||||
/** |
||||
* 主键id |
||||
*/ |
||||
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||
@ApiModelProperty(value="主键id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 申请人id |
||||
*/ |
||||
@ApiModelProperty(value="申请人id") |
||||
private String applicantId; |
||||
|
||||
/** |
||||
* 申请日期 |
||||
*/ |
||||
@ApiModelProperty(value="申请日期") |
||||
private LocalDateTime applicationDate; |
||||
|
||||
/** |
||||
* 申请状态 |
||||
*/ |
||||
@ApiModelProperty(value="申请状态") |
||||
private ApplyStatus applicationStatus; |
||||
|
||||
/** |
||||
* 申请重量 |
||||
*/ |
||||
@ApiModelProperty(value="申请重量") |
||||
private Double applyQuality; |
||||
|
||||
|
||||
/** |
||||
* 重量单位 |
||||
*/ |
||||
@ApiModelProperty(value="重量单位") |
||||
private String unit; |
||||
|
||||
/** |
||||
* 申请数量 |
||||
*/ |
||||
@ApiModelProperty(value="申请样本数量数量") |
||||
private Integer applyQuantity; |
||||
|
||||
/** |
||||
* 审批人审批时间 |
||||
*/ |
||||
@ApiModelProperty(value="审批人审批时间") |
||||
private LocalDateTime approvalDate; |
||||
|
||||
/** |
||||
* 审批人id |
||||
*/ |
||||
@ApiModelProperty(value="审批人id") |
||||
private String approverId; |
||||
|
||||
/** |
||||
* 审批人意见 |
||||
*/ |
||||
@ApiModelProperty(value="审批人意见") |
||||
private String approverOpinion; |
||||
|
||||
/** |
||||
* 一级审核员id |
||||
*/ |
||||
@ApiModelProperty(value="一级审核员id") |
||||
private String firstAuditorId; |
||||
|
||||
/** |
||||
* -一级审核时间 |
||||
*/ |
||||
@ApiModelProperty(value="-一级审核时间") |
||||
private LocalDateTime firstAuditDate; |
||||
|
||||
/** |
||||
* 一级审核意见 |
||||
*/ |
||||
@ApiModelProperty(value="一级审核意见") |
||||
private String firstAuditOpinion; |
||||
|
||||
/** |
||||
* 申请原因 |
||||
*/ |
||||
@ApiModelProperty(value="申请原因") |
||||
private String reason; |
||||
|
||||
/** |
||||
* 二级审核时间 |
||||
*/ |
||||
@ApiModelProperty(value="二级审核时间") |
||||
private LocalDateTime secondaryAuditDate; |
||||
|
||||
/** |
||||
* 二级审核意见 |
||||
*/ |
||||
@ApiModelProperty(value="二级审核意见") |
||||
private String secondaryAuditOpinion; |
||||
|
||||
/** |
||||
* 二级审核员id |
||||
*/ |
||||
@ApiModelProperty(value="二级审核员id") |
||||
private String secondaryAuditorId; |
||||
|
||||
/** |
||||
* 申请类型 |
||||
*/ |
||||
@ApiModelProperty(value="申请类型:1.检材外带申请;2.检材销毁申请") |
||||
private Integer applyType; |
||||
|
||||
} |
@ -0,0 +1,57 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
|
||||
/** |
||||
* |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-04-16 23:35:51 |
||||
* @describe 实体类 |
||||
*/ |
||||
@Data |
||||
@TableName(value = "sample_apply_detailed", autoResultMap = true) |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ApiModel(value = "样本申请明细") |
||||
public class SampleApplyDetailed extends BaseEntity { |
||||
|
||||
/** |
||||
* id |
||||
*/ |
||||
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||
@ApiModelProperty(value="id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 样本id |
||||
*/ |
||||
@ApiModelProperty(value="样本id") |
||||
private String sampleId; |
||||
|
||||
/** |
||||
* 申请id |
||||
*/ |
||||
@ApiModelProperty(value="申请id") |
||||
private String applyId; |
||||
|
||||
/** |
||||
* 1通过/-1不通过 |
||||
*/ |
||||
@ApiModelProperty(value="1通过/0.待审核审批/-1不通过") |
||||
private Integer status; |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,89 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
|
||||
/** |
||||
* |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-21 10:29:03 |
||||
* @describe 实体类 |
||||
*/ |
||||
@Data |
||||
@TableName(value = "sample_inbound_and_outbound_table", autoResultMap = true) |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ApiModel(value = "检材出入库登记表") |
||||
public class SampleInboundAndOutboundTable extends BaseEntity { |
||||
|
||||
/** |
||||
* 主键id |
||||
*/ |
||||
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||
@ApiModelProperty(value="主键id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 鉴定人 |
||||
*/ |
||||
@ApiModelProperty(value="鉴定人") |
||||
private String appraiserId; |
||||
|
||||
/** |
||||
* 分析样出库时间 |
||||
*/ |
||||
@ApiModelProperty(value="分析样出库时间") |
||||
private LocalDateTime outWarehouseDate; |
||||
|
||||
/** |
||||
* 备注 |
||||
*/ |
||||
@ApiModelProperty(value="备注") |
||||
private String remarks; |
||||
|
||||
/** |
||||
* 样本id |
||||
*/ |
||||
@ApiModelProperty(value="样本id") |
||||
private String sampleId; |
||||
|
||||
/** |
||||
* 入库时间 |
||||
*/ |
||||
@ApiModelProperty(value="入库时间") |
||||
private LocalDateTime warehousingDate; |
||||
|
||||
/** |
||||
* 检材管理员 |
||||
*/ |
||||
@ApiModelProperty(value="检材管理员") |
||||
private String imAdministrators; |
||||
|
||||
/** |
||||
* 存放人 |
||||
*/ |
||||
@ApiModelProperty(value="存放人") |
||||
private String recipient; |
||||
|
||||
@ApiModelProperty(value="归还时间") |
||||
private LocalDateTime returnTime; |
||||
|
||||
@ApiModelProperty(value="入库监督人") |
||||
private String inboundSupervisor; |
||||
|
||||
|
||||
@ApiModelProperty(value="出库监督人") |
||||
private String outboundSupervisor; |
||||
|
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,70 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
|
||||
/** |
||||
* |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-04-10 23:44:10 |
||||
* @describe 实体类 |
||||
*/ |
||||
@Data |
||||
@TableName(value = "sample_inbound_record", autoResultMap = true) |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ApiModel(value = "") |
||||
public class SampleInboundRecord extends BaseEntity { |
||||
|
||||
/** |
||||
* 主键id |
||||
*/ |
||||
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||
@ApiModelProperty(value="主键id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 入库时间 |
||||
*/ |
||||
@ApiModelProperty(value="入库时间") |
||||
private LocalDateTime warehousingDate; |
||||
|
||||
/** |
||||
* 检材管理员 |
||||
*/ |
||||
@ApiModelProperty(value="检材管理员") |
||||
private String imAdministrators; |
||||
|
||||
/** |
||||
* 样本id |
||||
*/ |
||||
@ApiModelProperty(value="样本id") |
||||
private String sampleId; |
||||
|
||||
/** |
||||
* 入库人id |
||||
*/ |
||||
@ApiModelProperty(value="入库人id") |
||||
private String warehousingPersonId; |
||||
|
||||
|
||||
@ApiModelProperty(value="样本名称") |
||||
private String name; |
||||
|
||||
|
||||
/** |
||||
* 备注 |
||||
*/ |
||||
@ApiModelProperty(value="备注") |
||||
private String remarks; |
||||
|
||||
|
||||
} |
@ -0,0 +1,91 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField; |
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import digital.laboratory.platform.imr.entity.enums.OutApplyStatus; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import java.io.Serializable; |
||||
import java.time.LocalDate; |
||||
import java.time.LocalDateTime; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
|
||||
/** |
||||
* 样本出库申请实体类 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 11:51:42 |
||||
* @describe 样本出库申请实体类 实体类 |
||||
*/ |
||||
@Data |
||||
@TableName(value = "sample_out_warehouse_apply", autoResultMap = true) |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ApiModel(value = "样本出库申请实体类") |
||||
public class SampleOutWarehouseApply extends BaseEntity { |
||||
|
||||
/** |
||||
* 主键id |
||||
*/ |
||||
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||
@ApiModelProperty(value="主键id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 申请人id |
||||
*/ |
||||
@ApiModelProperty(value="申请人id") |
||||
private String applicantId; |
||||
|
||||
/** |
||||
* 申请时间 |
||||
*/ |
||||
@ApiModelProperty(value="申请时间") |
||||
private LocalDateTime applicationDate; |
||||
|
||||
/** |
||||
* 出库用途 |
||||
*/ |
||||
@ApiModelProperty(value="出库用途") |
||||
private String purpose; |
||||
|
||||
/** |
||||
* 归还日期 |
||||
*/ |
||||
@ApiModelProperty(value="归还日期") |
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
@JSONField(format = "yyyy-MM-dd") |
||||
private LocalDate returnDate; |
||||
|
||||
/** |
||||
* 取检码 |
||||
*/ |
||||
@ApiModelProperty(value="取检码") |
||||
private String sampleCodeNumber; |
||||
|
||||
/** |
||||
* 鉴定人id |
||||
*/ |
||||
@ApiModelProperty(value="鉴定人id") |
||||
private String appraiserId; |
||||
|
||||
/** |
||||
* 申请状态 |
||||
*/ |
||||
@ApiModelProperty(value="申请状态") |
||||
private OutApplyStatus status; |
||||
|
||||
/** |
||||
* 检材管理员 |
||||
* */ |
||||
|
||||
@ApiModelProperty(value="检材管理员id") |
||||
private String imAdministratorsId; |
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,70 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import digital.laboratory.platform.imr.entity.enums.OutboundType; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
|
||||
/** |
||||
* |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-04-15 10:20:58 |
||||
* @describe 实体类 |
||||
*/ |
||||
@Data |
||||
@TableName(value = "sample_outbound_record", autoResultMap = true) |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ApiModel(value = "样本出库记录") |
||||
public class SampleOutboundRecord extends BaseEntity { |
||||
|
||||
/** |
||||
* 主键id |
||||
*/ |
||||
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||
@ApiModelProperty(value="主键id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 样本id |
||||
*/ |
||||
@ApiModelProperty(value="样本id") |
||||
private String sampleId; |
||||
|
||||
/** |
||||
* 领取人id |
||||
*/ |
||||
@ApiModelProperty(value="领取人id") |
||||
private String recipientId; |
||||
|
||||
/** |
||||
* 原因/备注 |
||||
*/ |
||||
@ApiModelProperty(value="原因/备注") |
||||
private String reason; |
||||
|
||||
/** |
||||
* 样本名称 |
||||
*/ |
||||
@ApiModelProperty(value="样本名称") |
||||
private String name; |
||||
|
||||
|
||||
/** |
||||
* 出库类型:1.领用/2.销毁/3.退还 |
||||
*/ |
||||
@ApiModelProperty(value="出库类型:1.领用/2.销毁/3.退还") |
||||
private OutboundType outboundType; |
||||
|
||||
@ApiModelProperty(value="出库时间") |
||||
private LocalDateTime outboundDate; |
||||
|
||||
|
||||
} |
@ -0,0 +1,150 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
import java.math.BigDecimal; |
||||
import java.time.LocalDate; |
||||
import java.time.LocalDateTime; |
||||
|
||||
/** |
||||
* |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-27 14:50:05 |
||||
* @describe 实体类 |
||||
* |
||||
* 样本存储实体类 |
||||
* 外建表格关联,样本入库时录入 |
||||
* 录入要判断 |
||||
*/ |
||||
@Data |
||||
@TableName(value = "b_sample_storage", autoResultMap = true) |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ApiModel(value = "样本存储") |
||||
public class SampleStorage extends BaseEntity { |
||||
|
||||
/** |
||||
* 主键id |
||||
*/ |
||||
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||
@ApiModelProperty(value="主键id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 存储的样本id |
||||
*/ |
||||
@ApiModelProperty(value="存储的样本id") |
||||
private String sampleId; |
||||
|
||||
/** |
||||
* 存储位置 |
||||
*/ |
||||
@ApiModelProperty(value="存储位置") |
||||
private String storageLocation; |
||||
|
||||
/** |
||||
* 状态:已出库/已入库/待存放 |
||||
*/ |
||||
@ApiModelProperty(value="状态:/1.已入库待存放/2.已入库已存放 3.已出库") |
||||
private Integer status; |
||||
|
||||
/** |
||||
* 存储期限 |
||||
*/ |
||||
@ApiModelProperty(value="存储期限") |
||||
private LocalDateTime storageDate; |
||||
|
||||
|
||||
/** |
||||
* 存放人;拿来入库的人 |
||||
*/ |
||||
@ApiModelProperty(value="存放人ID") |
||||
private String depositorId; |
||||
|
||||
|
||||
/** |
||||
* 领取人id |
||||
*/ |
||||
@ApiModelProperty(value="领取人") |
||||
private String recipientId; |
||||
|
||||
|
||||
/** |
||||
* 入库时间 |
||||
*/ |
||||
@ApiModelProperty(value="入库时间") |
||||
private LocalDateTime inRepositoryDate; |
||||
|
||||
/** |
||||
* 出库时间 |
||||
*/ |
||||
@ApiModelProperty(value="出库时间") |
||||
private LocalDateTime outRepositoryDate; |
||||
|
||||
|
||||
/** |
||||
* 存储格子id |
||||
*/ |
||||
@ApiModelProperty(value="存储格子id") |
||||
private String storageCellId; |
||||
|
||||
|
||||
/** |
||||
* 销毁标识 |
||||
*/ |
||||
@ApiModelProperty(value="销毁标识") |
||||
private Integer earlyWarning; //预留的字段 0.还未到销毁;1.已到销毁时间;(2.销毁审核通过;--后端业务字段)
|
||||
|
||||
|
||||
/** |
||||
* 质量/体积 |
||||
*/ |
||||
@ApiModelProperty(value="质量/体积") |
||||
private BigDecimal quality; |
||||
|
||||
|
||||
/** |
||||
* 计量单位 |
||||
*/ |
||||
@ApiModelProperty(value="计量单位") |
||||
private String unit; |
||||
|
||||
@ApiModelProperty(value="样本名称") |
||||
private String name; |
||||
|
||||
@ApiModelProperty(value = "样本类型") |
||||
private String sampleType; |
||||
|
||||
|
||||
@ApiModelProperty(value = "是否需要归还(-1不需要;1.需要归还)") |
||||
private Integer isReturn; |
||||
|
||||
|
||||
@ApiModelProperty(value = "归还时间") |
||||
private LocalDate returnTime; |
||||
|
||||
|
||||
@ApiModelProperty(value = "出库用途") |
||||
private String purpose; |
||||
|
||||
|
||||
@ApiModelProperty(value="楼层") |
||||
private String buildingLv; |
||||
|
||||
@ApiModelProperty(value="房间号") |
||||
private String roomNo; |
||||
|
||||
@ApiModelProperty(value="柜子名称") |
||||
private String cabinetName; |
||||
|
||||
@ApiModelProperty(value="柜子id") |
||||
private String boxId; |
||||
|
||||
|
||||
} |
@ -0,0 +1,77 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
|
||||
/** |
||||
* |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 11:48:03 |
||||
* @describe 实体类 |
||||
*/ |
||||
@Data |
||||
@TableName(value = "storage_cell", autoResultMap = true) |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ApiModel(value = "存储格子") |
||||
public class StorageCell extends BaseEntity { |
||||
|
||||
/** |
||||
* 主键id |
||||
*/ |
||||
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||
@ApiModelProperty(value="主键id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 格子编号 |
||||
*/ |
||||
@ApiModelProperty(value="格子编号") |
||||
private String cellNo; |
||||
|
||||
/** |
||||
* 状态:可用/不可用 |
||||
*/ |
||||
@ApiModelProperty(value="是否存放物品 true存放/false未存放") |
||||
private Boolean status; |
||||
|
||||
/** |
||||
* 排序 |
||||
*/ |
||||
@ApiModelProperty(value="排序") |
||||
private Long sort; |
||||
|
||||
/** |
||||
* 柜子id |
||||
*/ |
||||
@ApiModelProperty(value="柜子id") |
||||
private String cupboardId; |
||||
|
||||
/** |
||||
* 格子照片 |
||||
*/ |
||||
@ApiModelProperty(value="格子照片") |
||||
private String cellPhoto; |
||||
|
||||
/** |
||||
* 格子描述 |
||||
*/ |
||||
@ApiModelProperty(value="格子描述") |
||||
private String content; |
||||
|
||||
|
||||
/** |
||||
* 文件名称 |
||||
*/ |
||||
@ApiModelProperty(value="文件名称") |
||||
private String fileName; |
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,110 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
|
||||
import io.swagger.models.auth.In; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
|
||||
/** |
||||
* |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 11:45:58 |
||||
* @describe 实体类 |
||||
*/ |
||||
@Data |
||||
@TableName(value = "storage_cupboard", autoResultMap = true) |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ApiModel(value = "") |
||||
public class StorageCupboard extends BaseEntity { |
||||
|
||||
/** |
||||
* 柜子id |
||||
*/ |
||||
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||
@ApiModelProperty(value="柜子id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 柜子名称 |
||||
*/ |
||||
@ApiModelProperty(value="柜子名称") |
||||
private String name; |
||||
|
||||
/** |
||||
* 柜子编号 |
||||
*/ |
||||
@ApiModelProperty(value="柜子编号") |
||||
private String cupboardNo; |
||||
|
||||
/** |
||||
* 规格 |
||||
*/ |
||||
@ApiModelProperty(value="规格") |
||||
private Integer specifications; |
||||
|
||||
/** |
||||
* 存储类型(测试) |
||||
*/ |
||||
@ApiModelProperty(value="存储类型(测试)") |
||||
private String storageType; |
||||
|
||||
/** |
||||
* 状态(存满/为存满)--测试数据 |
||||
*/ |
||||
@ApiModelProperty(value="状态(true.正常使用;false停止使用)--测试数据") |
||||
private Boolean status; |
||||
|
||||
/** |
||||
* 房间id |
||||
*/ |
||||
@ApiModelProperty(value="房间id") |
||||
private String roomId; |
||||
|
||||
/** |
||||
* 柜子照片 |
||||
*/ |
||||
@ApiModelProperty(value="柜子照片") |
||||
private String cupboardPhoto; |
||||
|
||||
|
||||
|
||||
/** |
||||
* updateBy |
||||
*/ |
||||
@ApiModelProperty(value="updateBy") |
||||
private String updateBy; |
||||
|
||||
|
||||
/** |
||||
* 排序 |
||||
*/ |
||||
@ApiModelProperty(value="排序") |
||||
private Long sort; |
||||
|
||||
|
||||
/** |
||||
* 文件名称 |
||||
*/ |
||||
@ApiModelProperty(value="文件名称") |
||||
private String fileName; |
||||
|
||||
|
||||
@ApiModelProperty(value="类型:柜子/货架") |
||||
private String cupboardType; |
||||
|
||||
|
||||
@ApiModelProperty(value="1规则/-1不规则") |
||||
private Integer rule; |
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,75 @@ |
||||
package digital.laboratory.platform.imr.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import digital.laboratory.platform.common.mybatis.base.BaseEntity; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
|
||||
/** |
||||
* |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 11:44:05 |
||||
* @describe 实体类 |
||||
*/ |
||||
@Data |
||||
@TableName(value = "storage_room", autoResultMap = true) |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ApiModel(value = "房间") |
||||
public class StorageRoom extends BaseEntity { |
||||
|
||||
/** |
||||
* 主键id |
||||
*/ |
||||
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||
@ApiModelProperty(value="主键id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 房间名称(冷冻356) |
||||
*/ |
||||
@ApiModelProperty(value="房间名称(冷冻356)") |
||||
private String name; |
||||
|
||||
/** |
||||
* 房间位置(3楼356) |
||||
*/ |
||||
@ApiModelProperty(value="房间位置(3楼356)") |
||||
private String roomLocation; |
||||
|
||||
/** |
||||
* 房间照片 |
||||
*/ |
||||
@ApiModelProperty(value="房间照片") |
||||
private String roomPhoto; |
||||
|
||||
|
||||
|
||||
/** |
||||
* updateBy |
||||
*/ |
||||
@ApiModelProperty(value="updateBy") |
||||
private String updateBy; |
||||
|
||||
|
||||
/** |
||||
* 排序 |
||||
*/ |
||||
@ApiModelProperty(value="排序") |
||||
private Long sort; |
||||
|
||||
|
||||
/** |
||||
* 文件名称 |
||||
*/ |
||||
@ApiModelProperty(value="文件名称") |
||||
private String fileName; |
||||
|
||||
|
||||
} |
@ -0,0 +1,31 @@ |
||||
package digital.laboratory.platform.imr.entity.enums; |
||||
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.EnumValue; |
||||
import com.fasterxml.jackson.annotation.JsonValue; |
||||
import lombok.Getter; |
||||
import lombok.RequiredArgsConstructor; |
||||
|
||||
/** |
||||
* 申请的状态 |
||||
*/ |
||||
@Getter |
||||
@RequiredArgsConstructor |
||||
public enum ApplyStatus { |
||||
|
||||
//FAIL
|
||||
FIRST_LEVEL_FAIL(-2,"一级审核不通过"), |
||||
SECOND_LEVEL_FAIL(-3,"二级审核不通过"), |
||||
APPROVAL_FAILED(-4,"审批不通过"), |
||||
TO_BE_SUBMITTED(0,"已创建待提交"), |
||||
WITHDRAWN(-1,"已撤回"), |
||||
FIRST_LEVEL(1,"待一级审核"), |
||||
SECOND_LEVEL(2,"待二级审核"), |
||||
PENDING_APPROVAL(3,"待审批"), |
||||
APPROVED(4,"审批通过"); |
||||
@EnumValue//标记数据库存的值是status
|
||||
private final int status; |
||||
@JsonValue//标记返回前端字段
|
||||
private final String description; |
||||
|
||||
} |
@ -0,0 +1,26 @@ |
||||
package digital.laboratory.platform.imr.entity.enums; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.EnumValue; |
||||
import com.fasterxml.jackson.annotation.JsonValue; |
||||
import lombok.Getter; |
||||
import lombok.RequiredArgsConstructor; |
||||
|
||||
/** |
||||
* 出库申请状态 |
||||
*/ |
||||
@Getter |
||||
@RequiredArgsConstructor |
||||
public enum OutApplyStatus { |
||||
|
||||
|
||||
TO_BE_CONFIRMED(1,"已创建待确认"), |
||||
|
||||
SUCCESS(2,"已确认待使用"), |
||||
|
||||
ALREADY_USED(3,"已使用"); |
||||
|
||||
@EnumValue//标记数据库存的值是status
|
||||
private final int status; |
||||
@JsonValue//标记返回前端字段
|
||||
private final String description; |
||||
} |
@ -0,0 +1,29 @@ |
||||
package digital.laboratory.platform.imr.entity.enums; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.EnumValue; |
||||
import com.fasterxml.jackson.annotation.JsonValue; |
||||
import lombok.Getter; |
||||
import lombok.RequiredArgsConstructor; |
||||
|
||||
@Getter |
||||
@RequiredArgsConstructor |
||||
|
||||
public enum OutboundType { |
||||
|
||||
|
||||
USE(1,"领用出库"), |
||||
|
||||
DESTRUCTION(2,"销毁出库"), |
||||
|
||||
RETURN(3,"退还出库"), |
||||
|
||||
|
||||
SCANCODE(4,"扫码出库"), |
||||
|
||||
FORCE(5,"强制出库"); |
||||
|
||||
@EnumValue//标记数据库存的值是status
|
||||
private final int status; |
||||
@JsonValue//标记返回前端字段
|
||||
private final String description; |
||||
} |
@ -0,0 +1,24 @@ |
||||
package digital.laboratory.platform.imr.entity.enums; |
||||
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.EnumValue; |
||||
import com.fasterxml.jackson.annotation.JsonValue; |
||||
import lombok.Getter; |
||||
import lombok.RequiredArgsConstructor; |
||||
|
||||
|
||||
/** |
||||
* 公示发布状态 |
||||
*/ |
||||
@Getter |
||||
@RequiredArgsConstructor |
||||
public enum ReleaseStatus { |
||||
|
||||
NOT_PUBLISHED(-1,"未发布"), |
||||
PUBLISHED(1,"已发布"); |
||||
|
||||
@EnumValue//标记数据库存的值是status
|
||||
private final int status; |
||||
@JsonValue//标记返回前端字段
|
||||
private final String description; |
||||
} |
@ -0,0 +1,28 @@ |
||||
package digital.laboratory.platform.imr.entity.enums; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.EnumValue; |
||||
import com.fasterxml.jackson.annotation.JsonValue; |
||||
import lombok.Data; |
||||
import lombok.Getter; |
||||
import lombok.RequiredArgsConstructor; |
||||
|
||||
/** |
||||
* 样本出入库标识 |
||||
*/ |
||||
|
||||
@Getter |
||||
@RequiredArgsConstructor |
||||
public enum WarehouseMark { |
||||
|
||||
|
||||
STORAGE_IN_WAREHOUSE(1,"已入库"), |
||||
|
||||
LEAVE_THE_WAREHOUSE(-1,"已出库"); |
||||
|
||||
|
||||
|
||||
@EnumValue//标记数据库存的值是mark
|
||||
private final int mark; |
||||
@JsonValue//标记返回前端字段
|
||||
private final String description; |
||||
} |
@ -0,0 +1,61 @@ |
||||
package digital.laboratory.platform.imr.feign; |
||||
|
||||
|
||||
import digital.laboratory.platform.common.core.constant.SecurityConstants; |
||||
import digital.laboratory.platform.common.mybatis.security.service.DLPUser; |
||||
import digital.laboratory.platform.imr.feign.dto.UpdateHolderDTO; |
||||
import org.springframework.cloud.openfeign.FeignClient; |
||||
import org.springframework.web.bind.annotation.PathVariable; |
||||
import org.springframework.web.bind.annotation.PostMapping; |
||||
import org.springframework.web.bind.annotation.PutMapping; |
||||
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
||||
import java.math.BigDecimal; |
||||
|
||||
/** |
||||
* 这个feign接口是用于调整流转模块的其他信息 |
||||
*/ |
||||
@FeignClient("dlp-identification-material-transfer") |
||||
public interface TransferFeignService { |
||||
|
||||
|
||||
|
||||
/*@PutMapping(value = "/sample_transfer/test",headers = SecurityConstants.HEADER_FROM_IN) |
||||
@LoadBalanced |
||||
public void testTransfer();*/ |
||||
|
||||
|
||||
/** |
||||
* 修改样本当前持有人 |
||||
*/ |
||||
@PutMapping(value = "/sample/holder",headers = SecurityConstants.HEADER_FROM_IN) |
||||
void updateSampleHolder(@RequestBody UpdateHolderDTO dto );//样本id和当前持有人id
|
||||
|
||||
/** |
||||
* 出库添加流转记录表(不考虑流转质量) |
||||
* 入库-->出库也不需要使用质量 |
||||
*/ |
||||
@PostMapping(value = "/sample_transfer/out/{sampleId}/{userId}",headers = SecurityConstants.HEADER_FROM_IN) |
||||
void addTransferByOut(@PathVariable("sampleId") String sampleId,@PathVariable("userId") String userId); |
||||
|
||||
|
||||
/** |
||||
* 入库添加流转记录表(考虑流转质量) |
||||
*/ |
||||
@PostMapping(value = "/sample_transfer/in/{sampleId}/{unit}/{quality}/{userId}",headers = SecurityConstants.HEADER_FROM_IN) |
||||
void addTransferByIn(@PathVariable("sampleId") String sampleId, @PathVariable("unit") String unit, @PathVariable("quality") BigDecimal quality, @PathVariable("userId") String userId); |
||||
|
||||
/** |
||||
* 入库添加流转记录表(不考虑流转质量) |
||||
*/ |
||||
@PostMapping(value = "/sample_transfer/inbound/{sampleId}/{userId}",headers = SecurityConstants.HEADER_FROM_IN) |
||||
void addTransferByInbound(@PathVariable("sampleId") String sampleId,@PathVariable("userId") String userId); |
||||
|
||||
/** |
||||
* 修改当前样本sample表格中状态 |
||||
*/ |
||||
|
||||
@PostMapping(value = "/sample/updateStatus/{sampleId}/{status}",headers = SecurityConstants.HEADER_FROM_IN) |
||||
void updateStatus(@PathVariable("sampleId") String sampleId,@PathVariable("status") Integer status); |
||||
|
||||
} |
@ -0,0 +1,21 @@ |
||||
package digital.laboratory.platform.imr.feign.dto; |
||||
|
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Data; |
||||
import lombok.NoArgsConstructor; |
||||
|
||||
@Data |
||||
@AllArgsConstructor |
||||
@NoArgsConstructor |
||||
public class UpdateHolderDTO { |
||||
|
||||
|
||||
private String sampleId;//样本id
|
||||
|
||||
|
||||
|
||||
private String holder;//当前持有人
|
||||
|
||||
|
||||
} |
@ -0,0 +1,130 @@ |
||||
//package digital.laboratory.platform.imr.handle;
|
||||
//
|
||||
//import digital.laboratory.platform.common.core.constant.CommonConstants;
|
||||
//import digital.laboratory.platform.common.core.util.R;
|
||||
//import digital.laboratory.platform.sys.entity.Dictionary;
|
||||
//import digital.laboratory.platform.sys.feign.RemoteDictionaryService;
|
||||
//import lombok.RequiredArgsConstructor;
|
||||
//import org.springframework.beans.factory.annotation.Value;
|
||||
//import org.springframework.boot.ApplicationArguments;
|
||||
//import org.springframework.boot.ApplicationRunner;
|
||||
//import org.springframework.stereotype.Component;
|
||||
//
|
||||
//import java.util.HashMap;
|
||||
//import java.util.List;
|
||||
//import java.util.Map;
|
||||
//import java.util.Optional;
|
||||
//
|
||||
///**
|
||||
// * App 启动类
|
||||
// * 当 Spring Application 启动完成后, 会调用这个类的 run() 方法进行一些最后的初始化。
|
||||
// * 我们在这个方法中从数据库加载一些全局的配置
|
||||
// *
|
||||
// * @author Zhang Xiaolong
|
||||
// */
|
||||
//
|
||||
//@Component
|
||||
//@RequiredArgsConstructor
|
||||
//public class AppStartupRunner implements ApplicationRunner {
|
||||
//
|
||||
// // @Value("${dlp.entrustment.processDefinitionId}")
|
||||
// // public static String processDefinitionId;
|
||||
//
|
||||
// //public static boolean clientChoiceCheckers;
|
||||
// //public static boolean checkerChoiceApprovers;
|
||||
// //public static boolean singleOperateUser;
|
||||
//
|
||||
// // @Value("${dlp.entrustment.temporaryPath}")
|
||||
// //public static String temporaryPath;
|
||||
//
|
||||
// @Value("${dlp.entrustment.entrustmentLetterTemplate}")
|
||||
// public static String entrustmentLetterTemplate;
|
||||
//
|
||||
// private final RemoteDictionaryService remoteDictionaryService;
|
||||
//
|
||||
// public static Map<String, String> entrustmentConfig = new HashMap<>();
|
||||
//
|
||||
// public static String getCfg(String code) {
|
||||
// return entrustmentConfig.get(code);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// *
|
||||
// * @param args 参数
|
||||
// * @throws Exception 异常
|
||||
// *
|
||||
// * // @SysLog("委托受理模块初始化") 这里不能使用 @SysLog(), 因为 SysLog 还没有初始化
|
||||
// */
|
||||
// @Override
|
||||
// public void run(ApplicationArguments args) throws Exception {
|
||||
//// BusinessCodeUtils.removeSymbols("x-*/)——0*&……%¥#@xasdf!*&^&%^ 中文、/+)(()\n\\xx\rx");
|
||||
//
|
||||
// {
|
||||
// // 加载 entrustment 在字典中的配置
|
||||
// R<List<Dictionary>> r = remoteDictionaryService.getDictionaryByType(CommonConstants.DLP_TYPE_ENTRUSTMENT);
|
||||
// if (Optional.ofNullable(r).isPresent() && (r.getData() != null)) {
|
||||
// List<Dictionary> itemList = r.getData();
|
||||
// for (Dictionary item : itemList) {
|
||||
// entrustmentConfig.put(item.getCode(), item.getLabel());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// for (String key : entrustmentConfig.keySet()) {
|
||||
// System.out.println(String.format("entrustmentConfig[%s]=%s", key, entrustmentConfig.get(key)));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // {
|
||||
// // R<HashMap<String, String>> r = remoteDictionaryService.innerGetById(CommonConstants.DLP_ENTRUSTMENT_PROCESS_DEFINITION_ID);
|
||||
// // if (Optional.ofNullable(r).isPresent() && (r.getData() != null)) {
|
||||
// // processDefinitionId = r.getData().get("label");
|
||||
// // }
|
||||
// // }
|
||||
// // {
|
||||
// // R<HashMap<String, String>> r = remoteDictionaryService.innerGetById(CommonConstants.DLP_ENTRUSTMENT_CLIENT_CHOICE_CHECKERS);
|
||||
// // if (Optional.ofNullable(r).isPresent() && (r.getData() != null)) {
|
||||
// // clientChoiceCheckers = "1".equals(r.getData().get("label"));
|
||||
// // }
|
||||
// // }
|
||||
// // {
|
||||
// // R<HashMap<String, String>> r = remoteDictionaryService.innerGetById(CommonConstants.DLP_ENTRUSTMENT_CHECKER_CHOICE_APPROVERS);
|
||||
// // if (Optional.ofNullable(r).isPresent() && (r.getData() != null)) {
|
||||
// // checkerChoiceApprovers = "1".equals(r.getData().get("label"));
|
||||
// // }
|
||||
// // }
|
||||
// // {
|
||||
// // R<HashMap<String, String>> r = remoteDictionaryService.innerGetById(CommonConstants.DLP_ENTRUSTMENT_CLIENT_SINGLE_OPERATE_USER);
|
||||
// // if (Optional.ofNullable(r).isPresent() && (r.getData() != null)) {
|
||||
// // singleOperateUser = "1".equals(r.getData().get("label"));
|
||||
// // }
|
||||
// // }
|
||||
// // {
|
||||
// // R<HashMap<String, String>> r = remoteDictionaryService.innerGetById(CommonConstants.DLP_ENTRUSTMENT_TEMPORARY_PATH);
|
||||
// // if (Optional.ofNullable(r).isPresent() && (r.getData() != null)) {
|
||||
// // temporaryPath = r.getData().get("label");
|
||||
// // }
|
||||
// // if (StrUtil.isEmpty(temporaryPath)) {
|
||||
// // temporaryPath =new File(System.getProperty("user.dir")+"/temp").getCanonicalPath();
|
||||
// // }
|
||||
// //
|
||||
// // System.out.printf("临时目录是 %s%n", temporaryPath);
|
||||
// // File tempPathFile = new File(temporaryPath);
|
||||
// // if (! tempPathFile.exists()) {
|
||||
// // System.out.printf("临时目录 %s 不存在, 创建之...%n", tempPathFile.getCanonicalPath());
|
||||
// // if (!tempPathFile.mkdirs()) {
|
||||
// // System.out.printf("创建临时目录 %s 失败!%n", tempPathFile.getCanonicalPath());
|
||||
// // }
|
||||
// // }
|
||||
// // }
|
||||
//
|
||||
// // {
|
||||
// // R<HashMap<String, String>> r = remoteDictionaryService.innerGetById(CommonConstants.DLP_ENTRUSTMENT_LETTER_TEMPLATE_PATH);
|
||||
// // if (Optional.ofNullable(r).isPresent() && (r.getData() != null)) {
|
||||
// // entrustmentLetterTemplate = r.getData().get("label");
|
||||
// // }
|
||||
// // }
|
||||
//
|
||||
// }
|
||||
//
|
||||
//
|
||||
//}
|
@ -0,0 +1,37 @@ |
||||
package digital.laboratory.platform.imr.interceptor; |
||||
|
||||
import feign.RequestInterceptor; |
||||
import feign.RequestTemplate; |
||||
import org.springframework.context.annotation.Configuration; |
||||
import org.springframework.security.core.Authentication; |
||||
import org.springframework.security.core.context.SecurityContext; |
||||
import org.springframework.security.core.context.SecurityContextHolder; |
||||
import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails; |
||||
|
||||
/** |
||||
* Feign 请求拦截器 |
||||
* Feign Client 向业务系统发出请求的时候, 把 Token 带上, 以用户自己的身份调用业务系统。 |
||||
* 目的是在业务系统中识别用户是谁, 允许或禁止用户进行对应的操作。 |
||||
*/ |
||||
|
||||
|
||||
@Configuration |
||||
public class FeignOauth2RequestInterceptor implements RequestInterceptor { |
||||
|
||||
private final String AUTHORIZATION_HEADER = "Authorization"; |
||||
private final String BEARER_TOKEN_TYPE = "Bearer"; |
||||
|
||||
@Override |
||||
public void apply(RequestTemplate requestTemplate) { |
||||
System.out.println(String.format("dlp-repository, FeignOauth2RequestInterceptor()...")); |
||||
SecurityContext securityContext = SecurityContextHolder.getContext(); |
||||
Authentication authentication = securityContext.getAuthentication(); |
||||
if (authentication != null && authentication.getDetails() instanceof OAuth2AuthenticationDetails) { |
||||
OAuth2AuthenticationDetails details = (OAuth2AuthenticationDetails) authentication.getDetails(); |
||||
System.out.println(String.format("FeignOauth2RequestInterceptor() Authorization, token=%s", details.getTokenValue())); |
||||
requestTemplate.header(AUTHORIZATION_HEADER, String.format("%s %s", BEARER_TOKEN_TYPE, details.getTokenValue())); |
||||
} |
||||
|
||||
} |
||||
} |
||||
|
@ -0,0 +1,10 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import digital.laboratory.platform.imr.entity.AssociationOpen; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
|
||||
|
||||
@Mapper |
||||
public interface AssociationOpenMapper extends BaseMapper<AssociationOpen> { |
||||
} |
@ -0,0 +1,24 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import digital.laboratory.platform.imr.entity.CabinetOpeningRecord; |
||||
import digital.laboratory.platform.imr.vo.CabinetSampleVO; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
import java.util.List; |
||||
|
||||
@Mapper |
||||
public interface CabinetOpeningRecordMapper extends BaseMapper<CabinetOpeningRecord> { |
||||
|
||||
|
||||
List<CabinetSampleVO> scanCode(@Param("number") String number); |
||||
|
||||
CabinetSampleVO getSampleById(@Param("sampleId")String sampleId); |
||||
|
||||
List<CabinetSampleVO> batchScanCode(@Param("number")String number); |
||||
|
||||
void updateSampleQuality(@Param("sampleId")String sampleId, |
||||
@Param("sampleQuality")double sampleQuality); |
||||
} |
@ -0,0 +1,38 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.baomidou.mybatisplus.core.toolkit.Constants; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import digital.laboratory.platform.imr.dto.UserInfoDTO; |
||||
import digital.laboratory.platform.imr.entity.DestructionDetail; |
||||
import digital.laboratory.platform.imr.entity.DestructionPublicity; |
||||
import digital.laboratory.platform.imr.vo.DestructionPublicityVO; |
||||
import digital.laboratory.platform.imr.vo.OutSampleVO; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Mapper 接口 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-24 |
||||
* @describe Mapper 类 |
||||
*/ |
||||
@Mapper |
||||
public interface DestructionDetailMapper extends BaseMapper<DestructionDetail> { |
||||
|
||||
/** |
||||
* 查询审核人 |
||||
* @param name |
||||
* @param id |
||||
* @return |
||||
*/ |
||||
List<UserInfoDTO> getApprove(@Param("name") String name,@Param("userId") String id); |
||||
|
||||
|
||||
List<OutSampleVO> getPublicityDetail(String id); |
||||
|
||||
|
||||
} |
@ -0,0 +1,42 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.Constants; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import digital.laboratory.platform.imr.entity.DestructionPublicity; |
||||
import digital.laboratory.platform.imr.vo.DestructionPublicityVO; |
||||
import digital.laboratory.platform.imr.vo.OutSampleVO; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Mapper 接口 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-23 |
||||
* @describe Mapper 类 |
||||
*/ |
||||
@Mapper |
||||
public interface DestructionPublicityMapper extends BaseMapper<DestructionPublicity> { |
||||
|
||||
//List<OutSampleVO> getPublicityDetail(String id);
|
||||
|
||||
/** |
||||
* 查询单个vo |
||||
* @param page |
||||
* @param qw |
||||
* @return |
||||
*/ |
||||
|
||||
|
||||
/* |
||||
分页 |
||||
*/ |
||||
IPage<DestructionPublicityVO> getDestructionPublicityPage(@Param("page") Page<DestructionPublicity> page, @Param(Constants.WRAPPER) QueryWrapper<DestructionPublicity> qw); |
||||
|
||||
DestructionPublicityVO getPublicityVO(String id); |
||||
|
||||
} |
@ -0,0 +1,18 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import digital.laboratory.platform.imr.entity.DrugCaseInfo; |
||||
|
||||
/** |
||||
* @author ChenJiangBao |
||||
* @description 针对表【b_drug_case_info(毒品库中关联的案事件信息)】的数据库操作Mapper |
||||
* @createDate 2024-11-07 12:04:42 |
||||
* @Entity generator.entity.DrugCaseInfo |
||||
*/ |
||||
public interface DrugCaseInfoMapper extends BaseMapper<DrugCaseInfo> { |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,18 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import digital.laboratory.platform.imr.entity.DrugMaterialInfo; |
||||
|
||||
/** |
||||
* @author ChenJiangBao |
||||
* @description 针对表【b_drug_material_info(毒品库中的毒品检材信息)】的数据库操作Mapper |
||||
* @createDate 2024-11-07 12:04:42 |
||||
* @Entity generator.entity.DrugMaterialInfo |
||||
*/ |
||||
public interface DrugMaterialInfoMapper extends BaseMapper<DrugMaterialInfo> { |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,21 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import digital.laboratory.platform.imr.entity.IdentificationMaterialTransferAnalysisAnnex; |
||||
import digital.laboratory.platform.imr.vo.AnalysisSample; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Mapper 接口 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-05-08 |
||||
* @describe Mapper 类 |
||||
*/ |
||||
@Mapper |
||||
public interface IdentificationMaterialTransferAnalysisAnnexMapper extends BaseMapper<IdentificationMaterialTransferAnalysisAnnex> { |
||||
|
||||
List<AnalysisSample> getSampleTransfer(@Param("sampleId") String sampleId); |
||||
} |
@ -0,0 +1,21 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import digital.laboratory.platform.imr.entity.IdentificationMaterialTransferRetainedAnnex; |
||||
import digital.laboratory.platform.imr.vo.RetainedSample; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Mapper 接口 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-05-08 |
||||
* @describe Mapper 类 |
||||
*/ |
||||
@Mapper |
||||
public interface IdentificationMaterialTransferRetainedAnnexMapper extends BaseMapper<IdentificationMaterialTransferRetainedAnnex> { |
||||
|
||||
List<RetainedSample> getSampleTransfer(@Param("sampleId") String sampleId); |
||||
} |
@ -0,0 +1,20 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import digital.laboratory.platform.imr.entity.OutWarehouseDetailed; |
||||
import digital.laboratory.platform.imr.vo.OutSampleVO; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 出库明细 Mapper 接口 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 |
||||
* @describe 出库明细 Mapper 类 |
||||
*/ |
||||
@Mapper |
||||
public interface OutWarehouseDetailedMapper extends BaseMapper<OutWarehouseDetailed> { |
||||
|
||||
} |
@ -0,0 +1,26 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import digital.laboratory.platform.imr.entity.SampleApplyDetailed; |
||||
import digital.laboratory.platform.imr.vo.ApplySampleVO; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Mapper 接口 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-04-17 |
||||
* @describe Mapper 类 |
||||
*/ |
||||
@Mapper |
||||
public interface SampleApplyDetailedMapper extends BaseMapper<SampleApplyDetailed> { |
||||
|
||||
/** |
||||
* 申请id获取样本详情 |
||||
* @param id |
||||
* @return |
||||
*/ |
||||
List<ApplySampleVO> getDetail(String id); |
||||
} |
@ -0,0 +1,52 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.Constants; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import digital.laboratory.platform.imr.entity.SampleApply; |
||||
import digital.laboratory.platform.imr.vo.SampleApplyVO; |
||||
import digital.laboratory.platform.imr.vo.StatusSampleVO; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 检材申请实体类 Mapper 接口 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 |
||||
* @describe 检材申请实体类 Mapper 类 |
||||
*/ |
||||
@Mapper |
||||
public interface SampleApplyMapper extends BaseMapper<SampleApply> { |
||||
|
||||
//SampleApplyVO getSampleApplyInfo(String id);
|
||||
|
||||
/** |
||||
* 申请vo |
||||
* @param page |
||||
* @param qw |
||||
* @return |
||||
*/ |
||||
|
||||
//IPage<SampleApplyVO> getApplyVOPage(@Param("page") Page<SampleApply> page, @Param(Constants.WRAPPER)QueryWrapper<SampleApply> qw);
|
||||
|
||||
SampleApplyVO getSampleApply(String id); |
||||
|
||||
/** |
||||
* |
||||
* @param page |
||||
* @param qw |
||||
* @return |
||||
*/ |
||||
IPage<SampleApplyVO> getApplyPage(@Param("page")Page<SampleApply> page,@Param(Constants.WRAPPER) QueryWrapper<SampleApply> qw); |
||||
|
||||
/** |
||||
* 获取样本状态及其他信息 |
||||
* @param sampleId |
||||
* @return |
||||
*/ |
||||
StatusSampleVO getSampleInfo(String sampleId); |
||||
} |
@ -0,0 +1,82 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import digital.laboratory.platform.imr.entity.SampleInboundAndOutboundTable; |
||||
import digital.laboratory.platform.imr.vo.InAndOutInfos; |
||||
import digital.laboratory.platform.imr.vo.RepositorySampleVO; |
||||
import digital.laboratory.platform.imr.vo.SampleTableVO; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
import java.time.LocalDate; |
||||
import java.util.List; |
||||
|
||||
|
||||
/** |
||||
* Mapper 接口 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-21 |
||||
* @describe Mapper 类 |
||||
*/ |
||||
@Mapper |
||||
public interface SampleInboundAndOutboundTableMapper extends BaseMapper<SampleInboundAndOutboundTable> { |
||||
|
||||
|
||||
|
||||
/** |
||||
* 出入库登记表信息 |
||||
* @param sampleId |
||||
* @return |
||||
*/ |
||||
List<SampleTableVO> getTableVO(String sampleId); |
||||
|
||||
/** |
||||
* 获取单个检材出入库打印对象 |
||||
* @param sampleId |
||||
* @return |
||||
*/ |
||||
List<InAndOutInfos> getInandOutTableInfo(String sampleId); |
||||
//根据时间段
|
||||
List<InAndOutInfos> getInandOutTableInfoByDate(@Param("beginDate") LocalDate beginDate,@Param("finishDate") LocalDate finishDate); |
||||
|
||||
|
||||
|
||||
String getEntrustmentName(@Param("id")String entrustmentId,@Param("name")String name); |
||||
|
||||
String getHairJobName(@Param("id")String hairJobId,@Param("name")String name); |
||||
|
||||
String getSewageJobName(@Param("id")String sewageJobId,@Param("name")String name); |
||||
|
||||
|
||||
String getEventName(@Param("id")String eventId,@Param("name")String name); |
||||
|
||||
|
||||
String getFeatureName(@Param("id")String eventId,@Param("name")String name); |
||||
|
||||
//分组查询毛发任务id
|
||||
List<String> queryHairJob(); |
||||
|
||||
//分组查询污水任务id
|
||||
List<String> querySewageJob(); |
||||
|
||||
//分组查询委托id
|
||||
List<String> queryEntrustment(); |
||||
|
||||
//分组查询事件id
|
||||
List<String> queryEvent(); |
||||
|
||||
|
||||
List<String> queryFeature(); |
||||
|
||||
//委托样本
|
||||
List<String> getSampleIdsByEw(@Param("eventId") String eventId); |
||||
//毛发样本
|
||||
List<String> getSampleIdsByHj(@Param("eventId")String eventId); |
||||
//污水样本
|
||||
List<String> getSampleIdsBySj(@Param("eventId")String eventId); |
||||
|
||||
List<String> getSampleIdsByTy(@Param("eventId")String eventId); |
||||
|
||||
|
||||
List<String> getSampleIdsByTz(@Param("eventId")String eventId); |
||||
} |
@ -0,0 +1,30 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.Constants; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import digital.laboratory.platform.imr.entity.SampleInboundRecord; |
||||
import digital.laboratory.platform.imr.vo.InboundRecordVO; |
||||
import digital.laboratory.platform.imr.vo.RepositorySampleVO; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
/** |
||||
* Mapper 接口 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-04-10 |
||||
* @describe Mapper 类 |
||||
*/ |
||||
@Mapper |
||||
public interface SampleInboundRecordMapper extends BaseMapper<SampleInboundRecord> { |
||||
|
||||
/** |
||||
* 入库记录分页 |
||||
* @param page |
||||
* @param qw |
||||
* @return |
||||
*/ |
||||
IPage<InboundRecordVO> inboundRecord(@Param("page") Page<SampleInboundRecord> page, @Param(Constants.WRAPPER) QueryWrapper<SampleInboundRecord> qw); |
||||
} |
@ -0,0 +1,61 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.Constants; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import digital.laboratory.platform.imr.entity.SampleOutWarehouseApply; |
||||
import digital.laboratory.platform.imr.vo.CellVO; |
||||
import digital.laboratory.platform.imr.vo.SampleOutWarehouseApplyVO; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
/** |
||||
* 样本出库申请实体类 Mapper 接口 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 |
||||
* @describe 样本出库申请实体类 Mapper 类 |
||||
*/ |
||||
@Mapper |
||||
public interface SampleOutWarehouseApplyMapper extends BaseMapper<SampleOutWarehouseApply> { |
||||
|
||||
/** |
||||
* 获取出库申请信息+明细 |
||||
*/ |
||||
SampleOutWarehouseApplyVO getOutApplyDetail(String id); |
||||
|
||||
|
||||
/** |
||||
* 获取出库申请信息+明细第二版 |
||||
*/ |
||||
|
||||
SampleOutWarehouseApplyVO getSampleOutRepositoryInfo(String id); |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* 出库申请分页 |
||||
* @param page |
||||
* @param qw |
||||
* @return |
||||
*/ |
||||
IPage<SampleOutWarehouseApplyVO> getSampleOutWarehouseApplyVOPage(@Param("page") Page<SampleOutWarehouseApply> page, @Param(Constants.WRAPPER)QueryWrapper<SampleOutWarehouseApply> qw); |
||||
|
||||
/** |
||||
* 出库申请列表 |
||||
* @param qw |
||||
* @return |
||||
*/ |
||||
IPage<SampleOutWarehouseApply> getSampleOutWarehouseApplyVOList(@Param(Constants.WRAPPER)QueryWrapper<SampleOutWarehouseApply> qw); |
||||
|
||||
/** |
||||
* 通过取检材码获取出库信息 |
||||
* @param code |
||||
* @return |
||||
*/ |
||||
SampleOutWarehouseApplyVO getInfoByCode(@Param("code") String code); |
||||
//通过格子ID查询他的位置信息
|
||||
CellVO getCellLocation(@Param("id") String id); |
||||
} |
@ -0,0 +1,24 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.Constants; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import digital.laboratory.platform.imr.entity.SampleOutboundRecord; |
||||
import digital.laboratory.platform.imr.vo.OutboundRecordVO; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
/** |
||||
* Mapper 接口 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-04-15 |
||||
* @describe Mapper 类 |
||||
*/ |
||||
@Mapper |
||||
public interface SampleOutboundRecordMapper extends BaseMapper<SampleOutboundRecord> { |
||||
|
||||
IPage<OutboundRecordVO> outboundRecord(@Param("page") Page<SampleOutboundRecord> page,@Param(Constants.WRAPPER) QueryWrapper<SampleOutboundRecord> qw); |
||||
} |
@ -0,0 +1,173 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.Constants; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import digital.laboratory.platform.imr.dto.CombinationOut; |
||||
import digital.laboratory.platform.imr.entity.InventorySample; |
||||
import digital.laboratory.platform.imr.entity.SampleStorage; |
||||
import digital.laboratory.platform.imr.vo.*; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Mapper 接口 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-27 |
||||
* @describe Mapper 类 |
||||
*/ |
||||
@Mapper |
||||
public interface SampleStorageMapper extends BaseMapper<SampleStorage> { |
||||
|
||||
|
||||
|
||||
/** |
||||
* sample_storage表中样本详细信息 |
||||
* @param id |
||||
* @return |
||||
*/ |
||||
RepositorySampleVO getSampleDetailed(String id); |
||||
|
||||
|
||||
/** |
||||
* 通过id获取样本信息 |
||||
* @param sampleId |
||||
* @return |
||||
*/ |
||||
OutSampleVO getSampleById(String sampleId); |
||||
|
||||
/** |
||||
* 通过编号获取样本信息 |
||||
* @param sampleNo |
||||
* @return |
||||
*/ |
||||
OutSampleVO getSampleByNo(String sampleNo); |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* 通过编号获取样本信息集合 |
||||
* @param sampleNo |
||||
* @return |
||||
*/ |
||||
List<OutSampleVO> getSampleListByNo(String sampleNo); |
||||
|
||||
|
||||
/** |
||||
* 待存放样本列表 |
||||
* @param |
||||
* @return |
||||
*/ |
||||
IPage<RepositorySampleVO> getToBeStoredSample(@Param("page") Page<SampleStorage> page,@Param(Constants.WRAPPER)QueryWrapper qw); |
||||
|
||||
/** |
||||
* 仓库现有样本分页 |
||||
* @param page |
||||
* @param qw |
||||
* @return |
||||
*/ |
||||
IPage<RepositorySampleVO> getSampleVOList(@Param("page") Page<SampleStorage> page,@Param(Constants.WRAPPER) QueryWrapper<SampleStorage> qw); |
||||
|
||||
/** |
||||
* 查询仓库现有样本;并且状态不在领用中 |
||||
* @param page |
||||
* @param notIn |
||||
* @return |
||||
*/ |
||||
IPage<OutSampleVO> getSampleInfo(@Param("page")Page<SampleStorage> page, @Param(Constants.WRAPPER)QueryWrapper<SampleStorage> qw); |
||||
List<OutSampleVO> getSampleInfoList(@Param(Constants.WRAPPER)QueryWrapper<SampleStorage> qw); |
||||
|
||||
|
||||
IPage<BaseSampleVO> getSampleInfoTwo(@Param("page")Page<SampleStorage> page, @Param(Constants.WRAPPER)QueryWrapper<SampleStorage> qw); |
||||
|
||||
/** |
||||
* 待归还样本id |
||||
* @param page |
||||
* @param updateTime |
||||
* @return |
||||
*/ |
||||
IPage<ToBeReturnVO> toBeReturned(@Param("page")Page<SampleStorage> page, @Param(Constants.WRAPPER) QueryWrapper<SampleStorage> updateTime); |
||||
|
||||
/* |
||||
归还详情 |
||||
*/ |
||||
RecipientDTO toBeReturnedDetail(String sampleId); |
||||
|
||||
/** |
||||
* 创建申请查询样本接口 |
||||
* @param samplePage |
||||
* @param ne |
||||
* @return |
||||
*/ |
||||
IPage<BaseSampleVO> getSampleInfoByHolder(@Param("page") Page<SampleStorage> samplePage,@Param(Constants.WRAPPER) QueryWrapper<SampleStorage> ne); |
||||
|
||||
IPage<BaseSampleVO> getDestructionSample(@Param("page") Page<SampleStorage> samplePage,@Param(Constants.WRAPPER) QueryWrapper<SampleStorage> ne); |
||||
|
||||
/** |
||||
* 出库清单数据 |
||||
* @param ids |
||||
* @return |
||||
*/ |
||||
List<InventorySample> getSampleInventory(@Param(Constants.WRAPPER) QueryWrapper<SampleStorage> ne); |
||||
|
||||
/** |
||||
* 入库查看样本详情 |
||||
* @param id |
||||
* @return |
||||
*/ |
||||
BaseSampleDetail getSampleDetailInfo(String id); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
String getEntrustmentName(@Param("id")String entrustmentId); |
||||
|
||||
String getHairJobName(@Param("id")String hairJobId); |
||||
|
||||
String getSewageJobName(@Param("id")String sewageJobId); |
||||
|
||||
//通用检材受理
|
||||
String getEventName(@Param("id")String sampleId); |
||||
|
||||
String getFeatureName(@Param("id")String sampleId); |
||||
|
||||
//查询委托方
|
||||
String returnOutboundQuery(@Param("id")String sampleId); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*------------额外的测试接口*/ |
||||
List<OutSampleVO> getWTSample(@Param("dto")CombinationOut combinationOut); |
||||
|
||||
List<OutSampleVO> getWSSample(@Param("dto")CombinationOut combinationOut); |
||||
|
||||
List<OutSampleVO> getMFSample(@Param("dto")CombinationOut combinationOut); |
||||
|
||||
List<OutSampleVO> getSJSample(@Param("dto")CombinationOut combinationOut); |
||||
|
||||
|
||||
List<OutSampleVO> getTZSample(@Param("dto")CombinationOut combinationOut); |
||||
|
||||
Long getTransferCount(String id); |
||||
|
||||
Long getWitnessCount(String id); |
||||
|
||||
|
||||
int queryTransfer(@Param("userId")String userId); |
||||
|
||||
String getUserName(@Param("userId")String userId); |
||||
|
||||
|
||||
List<OutSampleVO> choseSampleList(); |
||||
|
||||
double getQuality(@Param("id")String sampleId); |
||||
} |
@ -0,0 +1,27 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.Constants; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import digital.laboratory.platform.imr.entity.StorageCell; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Mapper 接口 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 |
||||
* @describe Mapper 类 |
||||
*/ |
||||
@Mapper |
||||
public interface StorageCellMapper extends BaseMapper<StorageCell> { |
||||
|
||||
/* |
||||
格子分页 |
||||
*/ |
||||
IPage<StorageCell> getStorageCellPage(@Param("page") Page<StorageCell> page,@Param(Constants.WRAPPER) QueryWrapper<StorageCell> qw); |
||||
} |
@ -0,0 +1,26 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.Constants; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import digital.laboratory.platform.imr.entity.StorageCupboard; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Mapper 接口 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 |
||||
* @describe Mapper 类 |
||||
*/ |
||||
@Mapper |
||||
public interface StorageCupboardMapper extends BaseMapper<StorageCupboard> { |
||||
|
||||
List<StorageCupboard> getStorageCupboardList(@Param(Constants.WRAPPER)QueryWrapper<StorageCupboard> orderByDesc); |
||||
|
||||
IPage<StorageCupboard> getStorageCupboardPage(@Param("page") Page<StorageCupboard> page,@Param(Constants.WRAPPER) QueryWrapper<StorageCupboard> orderByDesc); |
||||
} |
@ -0,0 +1,26 @@ |
||||
package digital.laboratory.platform.imr.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.baomidou.mybatisplus.core.toolkit.Constants; |
||||
import digital.laboratory.platform.imr.entity.StorageRoom; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Mapper 接口 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 |
||||
* @describe Mapper 类 |
||||
*/ |
||||
@Mapper |
||||
public interface StorageRoomMapper extends BaseMapper<StorageRoom> { |
||||
|
||||
|
||||
|
||||
List<StorageRoom> getStorageRoomList(@Param(Constants.WRAPPER) QueryWrapper<StorageRoom> qw); |
||||
|
||||
List<StorageRoom> getStorageRoomPage(@Param(Constants.WRAPPER)QueryWrapper<StorageRoom> orderByDesc); |
||||
} |
@ -0,0 +1,9 @@ |
||||
package digital.laboratory.platform.imr.service; |
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService; |
||||
import digital.laboratory.platform.imr.entity.AssociationOpen; |
||||
import digital.laboratory.platform.imr.entity.CabinetOpeningRecord; |
||||
|
||||
public interface AssociationOpenService extends IService<AssociationOpen> { |
||||
|
||||
} |
@ -0,0 +1,30 @@ |
||||
package digital.laboratory.platform.imr.service; |
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService; |
||||
import digital.laboratory.platform.common.mybatis.security.service.DLPUser; |
||||
import digital.laboratory.platform.imr.dto.DepositToDTO; |
||||
import digital.laboratory.platform.imr.dto.UseOutboundDTO; |
||||
import digital.laboratory.platform.imr.entity.CabinetOpeningRecord; |
||||
import digital.laboratory.platform.imr.entity.DestructionPublicity; |
||||
import digital.laboratory.platform.imr.vo.CabinetSampleVO; |
||||
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
||||
import java.util.List; |
||||
|
||||
public interface CabinetOpeningRecordService extends IService<CabinetOpeningRecord> { |
||||
List<CabinetSampleVO> scanCode(String number); |
||||
|
||||
void scanCodePromptInbound(DepositToDTO dto, DLPUser dlpUser); |
||||
|
||||
void scanCodePromptOutbound(UseOutboundDTO dto, DLPUser dlpUser); |
||||
|
||||
void forceOpen(UseOutboundDTO dto, DLPUser dlpUser); |
||||
|
||||
List<CabinetSampleVO> querySampleByCode(String code,String roomNo); |
||||
|
||||
void useOutbound(UseOutboundDTO dto, DLPUser dlpUser); |
||||
|
||||
List<CabinetSampleVO> batchScanCode(String number); |
||||
|
||||
void updateSampleQuality(String sampleId, double sampleQuality); |
||||
} |
@ -0,0 +1,31 @@ |
||||
package digital.laboratory.platform.imr.service; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import com.baomidou.mybatisplus.extension.service.IService; |
||||
import digital.laboratory.platform.common.mybatis.security.service.DLPUser; |
||||
import digital.laboratory.platform.imr.dto.DestructionPublicityDTO; |
||||
import digital.laboratory.platform.imr.entity.DestructionPublicity; |
||||
import digital.laboratory.platform.imr.vo.DestructionPublicityVO; |
||||
|
||||
/** |
||||
* 服务类 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-23 |
||||
* @describe 服务类 |
||||
*/ |
||||
public interface DestructionPublicityService extends IService<DestructionPublicity> { |
||||
|
||||
DestructionPublicityVO createPublicity(DestructionPublicityDTO dto, DLPUser dlpUser); |
||||
|
||||
DestructionPublicityVO updatePublicity(DestructionPublicityDTO dto, DLPUser dlpUser); |
||||
|
||||
void deleteOneById(String id); |
||||
|
||||
IPage<DestructionPublicityVO> getDestructionPublicityPage(Page<DestructionPublicity> page, QueryWrapper<DestructionPublicity> eq); |
||||
|
||||
DestructionPublicity getOneById(String id); |
||||
|
||||
DestructionPublicity release(String id); |
||||
} |
@ -0,0 +1,13 @@ |
||||
package digital.laboratory.platform.imr.service; |
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService; |
||||
import digital.laboratory.platform.imr.entity.DrugCaseInfo; |
||||
|
||||
/** |
||||
* @author ChenJiangBao |
||||
* @description 针对表【b_drug_case_info(毒品库中关联的案事件信息)】的数据库操作Service |
||||
* @createDate 2024-11-07 12:04:42 |
||||
*/ |
||||
public interface DrugCaseInfoService extends IService<DrugCaseInfo> { |
||||
|
||||
} |
@ -0,0 +1,13 @@ |
||||
package digital.laboratory.platform.imr.service; |
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService; |
||||
import digital.laboratory.platform.imr.entity.DrugMaterialInfo; |
||||
|
||||
/** |
||||
* @author ChenJiangBao |
||||
* @description 针对表【b_drug_material_info(毒品库中的毒品检材信息)】的数据库操作Service |
||||
* @createDate 2024-11-07 12:04:42 |
||||
*/ |
||||
public interface DrugMaterialInfoService extends IService<DrugMaterialInfo> { |
||||
|
||||
} |
@ -0,0 +1,14 @@ |
||||
package digital.laboratory.platform.imr.service; |
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService; |
||||
import digital.laboratory.platform.imr.entity.OutWarehouseDetailed; |
||||
|
||||
/** |
||||
* 出库明细服务类 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 |
||||
* @describe 出库明细 服务类 |
||||
*/ |
||||
public interface OutWarehouseDetailedService extends IService<OutWarehouseDetailed> { |
||||
|
||||
} |
@ -0,0 +1,42 @@ |
||||
package digital.laboratory.platform.imr.service; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import digital.laboratory.platform.common.mybatis.security.service.DLPUser; |
||||
import digital.laboratory.platform.imr.dto.ReviewApprovalDTO; |
||||
import digital.laboratory.platform.imr.entity.SampleApply; |
||||
import digital.laboratory.platform.imr.vo.SampleApplyVO; |
||||
|
||||
import java.util.List; |
||||
|
||||
public interface ReviewApprovalService { |
||||
/** |
||||
* 一级审核 |
||||
* @param dto |
||||
* @param dlpUser |
||||
* @return |
||||
*/ |
||||
SampleApplyVO firstAudit(ReviewApprovalDTO dto, DLPUser dlpUser); |
||||
|
||||
/** |
||||
* 二级审核 |
||||
* @param dto |
||||
* @param dlpUser |
||||
* @return |
||||
*/ |
||||
SampleApplyVO secondaryAudit(ReviewApprovalDTO dto, DLPUser dlpUser); |
||||
|
||||
|
||||
/** |
||||
* 审批 |
||||
* @param dto |
||||
* @param dlpUser |
||||
* @return |
||||
*/ |
||||
SampleApplyVO approval(ReviewApprovalDTO dto, DLPUser dlpUser); |
||||
|
||||
//IPage<SampleApplyVO> getAuditPage(Page<SampleApply> page, QueryWrapper<SampleApply> qw);
|
||||
|
||||
//List<SampleApplyVO> getAuditList(QueryWrapper<SampleApply> qw);
|
||||
} |
@ -0,0 +1,42 @@ |
||||
package digital.laboratory.platform.imr.service; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.Constants; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import com.baomidou.mybatisplus.extension.service.IService; |
||||
import digital.laboratory.platform.common.mybatis.security.service.DLPUser; |
||||
import digital.laboratory.platform.imr.dto.ApplyDTO; |
||||
import digital.laboratory.platform.imr.entity.SampleApply; |
||||
import digital.laboratory.platform.imr.vo.SampleApplyVO; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 检材申请实体类服务类 |
||||
* |
||||
* @author Zhang Xiaolong created at 2023-03-17 |
||||
* @describe 检材申请实体类 服务类 |
||||
*/ |
||||
public interface SampleApplyService extends IService<SampleApply> { |
||||
|
||||
|
||||
SampleApplyVO createAndSave(ApplyDTO dto, DLPUser dlpUser); |
||||
|
||||
SampleApplyVO getDetail(String id); |
||||
|
||||
SampleApplyVO createAndSubmit(ApplyDTO dto, DLPUser dlpUser); |
||||
|
||||
SampleApplyVO submitApplyOne(String id); |
||||
|
||||
IPage<SampleApplyVO> getApplyPage(Page<SampleApply> page,QueryWrapper<SampleApply> orderByDesc); |
||||
|
||||
SampleApplyVO withdrawalOne(String id); |
||||
|
||||
void deleteOne(String id); |
||||
|
||||
SampleApplyVO updateAndSubmit(ApplyDTO dto, DLPUser dlpUser); |
||||
|
||||
SampleApplyVO updateAndSave(ApplyDTO dto, DLPUser dlpUser); |
||||
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue