Commit 6e040cc3 by jiang'yun

修改

parent c40b60ab
......@@ -303,6 +303,13 @@
<version>1.16</version>
</dependency>
<!-- spring security cas-->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-cas</artifactId>
<!-- <version>5.5.3</version>-->
</dependency>
</dependencies>
......@@ -315,7 +322,7 @@
<configuration>
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
</configuration>
</plugin>
</plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target></configuration></plugin>
</plugins>
</build>
......
......@@ -101,6 +101,16 @@ public class Constants
public static final String TOKEN = "token";
/**
* CAS登录成功后的后台标识
*/
public static final String CAS_TOKEN = "cas_token";
/**
* CAS登录成功后的前台Cookie的Key
*/
public static final String WEB_TOKEN_KEY = "Admin-Token";
/**
* 令牌前缀
*/
public static final String TOKEN_PREFIX = "Bearer ";
......
package com.zjsgfa.framework.config;
import com.zjsgfa.framework.config.properties.CasProperties;
import com.zjsgfa.framework.config.properties.PermitAllUrlProperties;
import com.zjsgfa.framework.security.handle.CasAuthenticationSuccessHandler;
import com.zjsgfa.framework.web.service.CasUserDetailsService;
import org.jasig.cas.client.session.SingleSignOutFilter;
import org.jasig.cas.client.validation.Cas20ServiceTicketValidator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.ProviderManager;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.cas.ServiceProperties;
import org.springframework.security.cas.authentication.CasAuthenticationProvider;
import org.springframework.security.cas.web.CasAuthenticationEntryPoint;
import org.springframework.security.cas.web.CasAuthenticationFilter;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.security.web.authentication.logout.LogoutFilter;
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
import org.springframework.web.filter.CorsFilter;
import com.zjsgfa.framework.config.properties.PermitAllUrlProperties;
import com.zjsgfa.framework.security.filter.JwtAuthenticationTokenFilter;
import com.zjsgfa.framework.security.handle.AuthenticationEntryPointImpl;
import com.zjsgfa.framework.security.handle.LogoutSuccessHandlerImpl;
......@@ -24,12 +32,20 @@ import com.zjsgfa.framework.security.handle.LogoutSuccessHandlerImpl;
/**
* spring security配置
*
* @author
* @author ruoyi
*/
@EnableMethodSecurity(prePostEnabled = true, securedEnabled = true)
@Configuration
public class SecurityConfig
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter
{
@Autowired
private CasProperties casProperties;
@Autowired
private CasUserDetailsService customUserDetailsService;
@Autowired
private CasAuthenticationSuccessHandler casAuthenticationSuccessHandler;
/**
* 自定义用户认证逻辑
*/
......@@ -60,22 +76,24 @@ public class SecurityConfig
@Autowired
private CorsFilter corsFilter;
/**
* 允许匿名访问的地址
*/
@Autowired
private PermitAllUrlProperties permitAllUrl;
/**
* 身份验证实现
* 解决 无法直接注入 AuthenticationManager
*
* @return
* @throws Exception
*/
@Bean
public AuthenticationManager authenticationManager()
{
DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
daoAuthenticationProvider.setUserDetailsService(userDetailsService);
daoAuthenticationProvider.setPasswordEncoder(bCryptPasswordEncoder());
return new ProviderManager(daoAuthenticationProvider);
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
/**
......@@ -93,10 +111,11 @@ public class SecurityConfig
* rememberMe | 允许通过remember-me登录的用户访问
* authenticated | 用户登录后可访问
*/
@Bean
protected SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception
{
return httpSecurity
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
if (!casProperties.isCasEnable()) {
httpSecurity
// CSRF禁用,因为不使用session
.csrf(csrf -> csrf.disable())
// 禁用HTTP响应标头
......@@ -124,16 +143,159 @@ public class SecurityConfig
.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class)
// 添加CORS filter
.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class)
.addFilterBefore(corsFilter, LogoutFilter.class)
.build();
.addFilterBefore(corsFilter, LogoutFilter.class);
}
//开启cas
if (casProperties.isCasEnable()) {
httpSecurity
// CSRF禁用,因为不使用session
.csrf().disable()
// 基于token,所以不需要session
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
// 过滤请求
.authorizeRequests()
// 对于登录login 验证码captchaImage 允许匿名访问
//.antMatchers("/login", "/captchaImage").anonymous()
.antMatchers(
HttpMethod.GET,
"/*.html",
"/**/*.html",
"/**/*.css",
"/**/*.js"
).permitAll()
.antMatchers("/profile/**").anonymous()
.antMatchers("/common/download**").anonymous()
.antMatchers("/common/download/resource**").anonymous()
.antMatchers("/swagger-ui.html").anonymous()
.antMatchers("/swagger-resources/**").anonymous()
.antMatchers("/webjars/**").anonymous()
.antMatchers("/*/api-docs").anonymous()
.antMatchers("/druid/**").anonymous()
.antMatchers("/websocket/**").anonymous()
.antMatchers("/magic/web/**").anonymous()
.antMatchers("/**/**").anonymous()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated()
.and()
.headers().frameOptions().disable();
//单点登录登出
httpSecurity.logout().permitAll().logoutSuccessHandler(logoutSuccessHandler);
// Custom JWT based security filter
httpSecurity.addFilter(casAuthenticationFilter())
.addFilterBefore(authenticationTokenFilter, CasAuthenticationFilter.class)
//.addFilterBefore(casLogoutFilter(), LogoutFilter.class)
.addFilterBefore(singleSignOutFilter(), CasAuthenticationFilter.class).exceptionHandling()
//认证失败
.authenticationEntryPoint(casAuthenticationEntryPoint());
// 添加CORS filter
httpSecurity.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class);
httpSecurity.addFilterBefore(corsFilter, LogoutFilter.class);
// disable page caching
httpSecurity.headers().cacheControl();
}
}
/**
* 强散列哈希加密实现
*/
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder()
{
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
/**
* 身份认证接口
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
if (!casProperties.isCasEnable()) {
auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
}
// cas
if (casProperties.isCasEnable()) {
super.configure(auth);
auth.authenticationProvider(casAuthenticationProvider());
}
}
/**
* 认证的入口
*/
@Bean
public CasAuthenticationEntryPoint casAuthenticationEntryPoint() {
CasAuthenticationEntryPoint casAuthenticationEntryPoint = new CasAuthenticationEntryPoint();
casAuthenticationEntryPoint.setLoginUrl(casProperties.getCasServerLoginUrl());
casAuthenticationEntryPoint.setServiceProperties(serviceProperties());
return casAuthenticationEntryPoint;
}
/**
* 指定service相关信息
*/
@Bean
public ServiceProperties serviceProperties() {
ServiceProperties serviceProperties = new ServiceProperties();
serviceProperties.setService(casProperties.getAppServerUrl() + casProperties.getAppLoginUrl());
serviceProperties.setAuthenticateAllArtifacts(true);
return serviceProperties;
}
/**
* CAS认证过滤器
*/
@Bean
public CasAuthenticationFilter casAuthenticationFilter() throws Exception {
CasAuthenticationFilter casAuthenticationFilter = new CasAuthenticationFilter();
casAuthenticationFilter.setAuthenticationManager(authenticationManager());
casAuthenticationFilter.setFilterProcessesUrl(casProperties.getAppLoginUrl());
casAuthenticationFilter.setAuthenticationSuccessHandler(casAuthenticationSuccessHandler);
return casAuthenticationFilter;
}
/**
* cas 认证 Provider
*/
@Bean
public CasAuthenticationProvider casAuthenticationProvider() {
CasAuthenticationProvider casAuthenticationProvider = new CasAuthenticationProvider();
casAuthenticationProvider.setAuthenticationUserDetailsService(customUserDetailsService);
casAuthenticationProvider.setServiceProperties(serviceProperties());
casAuthenticationProvider.setTicketValidator(cas20ServiceTicketValidator());
casAuthenticationProvider.setKey("casAuthenticationProviderKey");
return casAuthenticationProvider;
}
@Bean
public Cas20ServiceTicketValidator cas20ServiceTicketValidator() {
return new Cas20ServiceTicketValidator(casProperties.getCasServerUrl());
}
/**
* 单点登出过滤器
*/
@Bean
public SingleSignOutFilter singleSignOutFilter() {
SingleSignOutFilter singleSignOutFilter = new SingleSignOutFilter();
// singleSignOutFilter.setCasServerUrlPrefix(casProperties.getCasServerUrl());
singleSignOutFilter.setIgnoreInitConfiguration(true);
return singleSignOutFilter;
}
/**
* 请求单点退出过滤器
*/
@Bean
public LogoutFilter casLogoutFilter() {
LogoutFilter logoutFilter = new LogoutFilter(casProperties.getCasServerLogoutUrl(),
new SecurityContextLogoutHandler());
logoutFilter.setFilterProcessesUrl(casProperties.getAppLogoutUrl());
return logoutFilter;
}
}
\ No newline at end of file
package com.zjsgfa.framework.config.properties;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* CAS的配置参数
*/
@Component
public class CasProperties {
@Value("${cas.server.host.url}")
private String casServerUrl;
@Value("${cas.server.host.login_url}")
private String casServerLoginUrl;
@Value("${cas.server.host.logout_url}")
private String casServerLogoutUrl;
@Value("${app.casEnable}")
private boolean casEnable;
@Value("${app.server.host.url}")
private String appServerUrl;
@Value("${app.login_url}")
private String appLoginUrl;
@Value("${app.logout_url}")
private String appLogoutUrl;
@Value("${app.web_url}")
private String webUrl;
public String getWebUrl() {
return webUrl;
}
public String getCasServerUrl() {
return casServerUrl;
}
public void setCasServerUrl(String casServerUrl) {
this.casServerUrl = casServerUrl;
}
public String getCasServerLoginUrl() {
return casServerLoginUrl;
}
public void setCasServerLoginUrl(String casServerLoginUrl) {
this.casServerLoginUrl = casServerLoginUrl;
}
public String getCasServerLogoutUrl() {
return casServerLogoutUrl;
}
public void setCasServerLogoutUrl(String casServerLogoutUrl) {
this.casServerLogoutUrl = casServerLogoutUrl;
}
public boolean isCasEnable() {
return casEnable;
}
public void setCasEnable(boolean casEnable) {
this.casEnable = casEnable;
}
public String getAppServerUrl() {
return appServerUrl;
}
public void setAppServerUrl(String appServerUrl) {
this.appServerUrl = appServerUrl;
}
public String getAppLoginUrl() {
return appLoginUrl;
}
public void setAppLoginUrl(String appLoginUrl) {
this.appLoginUrl = appLoginUrl;
}
public String getAppLogoutUrl() {
return appLogoutUrl;
}
public void setAppLogoutUrl(String appLogoutUrl) {
this.appLogoutUrl = appLogoutUrl;
}
}
\ No newline at end of file
package com.zjsgfa.framework.security;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
......@@ -258,9 +259,11 @@ public class LoginUser implements UserDetails
this.user = user;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities()
{
return null;
return new HashSet();
}
}
package com.zjsgfa.framework.security.handle;
import com.zjsgfa.common.constant.Constants;
import com.zjsgfa.framework.config.properties.CasProperties;
import com.zjsgfa.framework.security.LoginUser;
import com.zjsgfa.framework.security.service.TokenService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.security.web.savedrequest.HttpSessionRequestCache;
import org.springframework.security.web.savedrequest.RequestCache;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@Service
public class CasAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
protected final Log logger = LogFactory.getLog(this.getClass());
private RequestCache requestCache = new HttpSessionRequestCache();
@Autowired
private TokenService tokenService;
@Autowired
private CasProperties casProperties;
/**
* 令牌有效期(默认30分钟)
*/
@Value("${token.expireTime}")
private int expireTime;
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws ServletException, IOException {
String targetUrlParameter = getTargetUrlParameter();
if (isAlwaysUseDefaultTargetUrl()
|| (targetUrlParameter != null && StringUtils.hasText(request.getParameter(targetUrlParameter)))) {
requestCache.removeRequest(request, response);
super.onAuthenticationSuccess(request, response, authentication);
return;
}
clearAuthenticationAttributes(request);
LoginUser userDetails = (LoginUser) authentication.getPrincipal();
String token = tokenService.createToken(userDetails);
//往Cookie中设置token
Cookie casCookie = new Cookie(Constants.WEB_TOKEN_KEY, token);
casCookie.setMaxAge(expireTime * 60);
response.addCookie(casCookie);
//设置后端认证成功标识
HttpSession httpSession = request.getSession();
httpSession.setAttribute(Constants.CAS_TOKEN, token);
//登录成功后跳转到前端登录页面
getRedirectStrategy().sendRedirect(request, response, casProperties.getWebUrl());
}
}
\ No newline at end of file
package com.zjsgfa.framework.web.service;
import com.zjsgfa.common.enums.UserStatus;
import com.zjsgfa.common.exception.ServiceException;
import com.zjsgfa.common.utils.StringUtils;
import com.zjsgfa.framework.security.LoginUser;
import com.zjsgfa.framework.security.service.SysPermissionService;
import com.zjsgfa.framework.security.service.UserDetailsServiceImpl;
import com.zjsgfa.project.system.domain.SysUser;
import com.zjsgfa.project.system.service.ISysUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.cas.authentication.CasAssertionAuthenticationToken;
import org.springframework.security.core.userdetails.AuthenticationUserDetailsService;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
/**
* 用于加载用户信息 实现UserDetailsService接口,或者实现AuthenticationUserDetailsService接口
*/
@Service
public class CasUserDetailsService implements AuthenticationUserDetailsService<CasAssertionAuthenticationToken> {
private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class);
@Autowired
private ISysUserService userService;
@Autowired
private SysPermissionService permissionService;
@Override
public UserDetails loadUserDetails(CasAssertionAuthenticationToken token) throws UsernameNotFoundException {
String username = token.getName();
SysUser user = userService.selectUserByUserName(username);
if (StringUtils.isNull(user)) {
log.info("登录用户:{} 不存在.", username);
throw new ServiceException("登录用户:" + username + " 不存在");
} else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) {
log.info("登录用户:{} 已被删除.", username);
throw new ServiceException("对不起,您的账号:" + username + " 已被删除");
} else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
log.info("登录用户:{} 已被停用.", username);
throw new ServiceException("对不起,您的账号:" + username + " 已停用");
}
return createLoginUser(user);
}
public UserDetails createLoginUser(SysUser user) {
return new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user));
}
}
\ No newline at end of file
......@@ -42,6 +42,7 @@ public class CommonFileController extends BaseController
public TableDataInfo list(CommonFile commonFile)
{
// startPage();
List<CommonFile> list = commonFileService.selectCommonFileList(commonFile);
return getDataTable(list);
}
......
......@@ -389,24 +389,9 @@ public class SjDjjcController extends BaseController
@ResponseBody
public AjaxResult importData(MultipartFile file, boolean updateSupport,SjDjjc sjDjjc) throws Exception
{
String name = file.getOriginalFilename();
String type = StringUtils.substringAfterLast(name, ".");
String fileNameYs = name.substring(0,name.lastIndexOf("."));
String filePath1 = RuoYiConfig.getUploadPath();
String fileName1 = FileUploadUtils.upload(filePath1, file);
CommonFile upFile = new CommonFile();
upFile.setFileName(fileNameYs);//文件名
upFile.setFilePath(fileName1);//文件路径
upFile.setFileSuffix(type);//后缀
upFile.setFileType(type);//文件类型
upFile.setTemplateName("模板数据导入");//文件类型
upFile.setType("施工方案设计");//文件类型
upFile.setBusinessId(sjDjjc.getId().toString());//文件类型
// upFile.setCreatedBy(SecurityUtils.getUsername());//创建人
upFile.setCreatedTime(new Date());//创建时间
commonFileService.insertCommonFile(upFile);
SjDjjc sjDjjc1 = sjDjjcService.selectSjDjjcById(sjDjjc.getId());
XSSFWorkbook workbook = null;
try {
......@@ -490,6 +475,7 @@ public class SjDjjcController extends BaseController
info.setZjgs(zjgs);
String zjd=new DataFormatter().formatCellValue(row.getCell(14));
info.setZjd(zjd);
info.setFaid(sjDjjc1.getFaid());
sjDjjcService.updateSjDjjc(info);
}
//地质分层---------------------------------------------------
......@@ -1855,6 +1841,22 @@ public class SjDjjcController extends BaseController
workbook.close();
}
String name = file.getOriginalFilename();
String type = StringUtils.substringAfterLast(name, ".");
String fileNameYs = name.substring(0,name.lastIndexOf("."));
String filePath1 = RuoYiConfig.getUploadPath();
String fileName1 = FileUploadUtils.upload(filePath1, file);
CommonFile upFile = new CommonFile();
upFile.setFileName(fileNameYs);//文件名
upFile.setFilePath(fileName1);//文件路径
upFile.setFileSuffix(type);//后缀
upFile.setFileType(type);//文件类型
upFile.setTemplateName("模板数据导入");//文件类型
upFile.setType("施工方案设计");//文件类型
upFile.setBusinessId(sjDjjc.getId().toString());//文件类型
// upFile.setCreatedBy(SecurityUtils.getUsername());//创建人
upFile.setCreatedTime(new Date());//创建时间
commonFileService.insertCommonFile(upFile);
return AjaxResult.success("导入成功");
}
......
......@@ -74,7 +74,7 @@ public interface SgfambMapper
* @param sgfambKcxxList 施工方案模板管理—开次信息列表
* @return 结果
*/
public int batchSgfambKcxx(List<SgfambKcxx> sgfambKcxxList);
// public int batchSgfambKcxx(List<SgfambKcxx> sgfambKcxxList);
/**
......
......@@ -59,6 +59,15 @@ public class SgfambKcSggyServiceImpl implements ISgfambKcSggyService
public int insertSgfambKcSggy(SgfambKcSggy sgfambKcSggy)
{
if(StringUtils.isNotEmpty(sgfambKcSggy.getZjzh())){
sgfambKcSggy.setZjzh(new String(Base64.decode(sgfambKcSggy.getZjzh()), StandardCharsets.UTF_8));
}
if(StringUtils.isNotEmpty(sgfambKcSggy.getZjzhzysx())){
sgfambKcSggy.setZjzhzysx(new String(Base64.decode(sgfambKcSggy.getZjzhzysx()), StandardCharsets.UTF_8));
}
if(StringUtils.isNotEmpty(sgfambKcSggy.getFxts())){
sgfambKcSggy.setFxts(new String(Base64.decode(sgfambKcSggy.getFxts()), StandardCharsets.UTF_8));
}
if(StringUtils.isNotEmpty(sgfambKcSggy.getZjgccs())){
sgfambKcSggy.setZjgccs(new String(Base64.decode(sgfambKcSggy.getZjgccs()), StandardCharsets.UTF_8));
}
......@@ -87,6 +96,15 @@ public class SgfambKcSggyServiceImpl implements ISgfambKcSggyService
@Override
public int updateSgfambKcSggy(SgfambKcSggy sgfambKcSggy)
{
if(StringUtils.isNotEmpty(sgfambKcSggy.getZjzh())){
sgfambKcSggy.setZjzh(new String(Base64.decode(sgfambKcSggy.getZjzh()), StandardCharsets.UTF_8));
}
if(StringUtils.isNotEmpty(sgfambKcSggy.getZjzhzysx())){
sgfambKcSggy.setZjzhzysx(new String(Base64.decode(sgfambKcSggy.getZjzhzysx()), StandardCharsets.UTF_8));
}
if(StringUtils.isNotEmpty(sgfambKcSggy.getFxts())){
sgfambKcSggy.setFxts(new String(Base64.decode(sgfambKcSggy.getFxts()), StandardCharsets.UTF_8));
}
if(StringUtils.isNotEmpty(sgfambKcSggy.getZjgccs())){
sgfambKcSggy.setZjgccs(new String(Base64.decode(sgfambKcSggy.getZjgccs()), StandardCharsets.UTF_8));
}
......
......@@ -142,9 +142,6 @@ public class SjDjjcServiceImpl implements ISjDjjcService
@Override
public int insertSjDjjc(SjDjjc sjDjjc) throws Exception {
SjDjjc sjDjjc1 =sjDjjcMapper.selectSjDjjcByJh(sjDjjc.getJh());
if(sjDjjc1!=null){
return 3;
......@@ -164,17 +161,17 @@ public class SjDjjcServiceImpl implements ISjDjjcService
List<String> sjggjyh= new ArrayList<>();
//根据区块查询
//根据方案id查询
List<SgfambKcSggy> sgfambKcSggyList=sgfambKcSggyMapper.selectSgfambKcSggyListByQk(new SgfambKcSggy());
List<SgfambKcSggy> collect = sgfambKcSggyList.stream().filter(sgfambKcSggy -> sgfambKcSggy.getQk().equals(sjDjjc.getQk())).collect(Collectors.toList());
if(collect.size()==0){
Map<String, List<SgfambKcSggy>> groupedByQk = sgfambKcSggyList.stream()
.collect(Collectors.groupingBy(SgfambKcSggy::getQk));
for(String s:groupedByQk.keySet()){
collect=groupedByQk.get(s);
break;
}
}
List<SgfambKcSggy> collect = sgfambKcSggyList.stream().filter(sgfambKcSggy -> sgfambKcSggy.getZbid().toString().equals(sjDjjc.getFaid().toString())).collect(Collectors.toList());
// if(collect.size()==0){
// Map<String, List<SgfambKcSggy>> groupedByQk = sgfambKcSggyList.stream()
// .collect(Collectors.groupingBy(SgfambKcSggy::getQk));
// for(String s:groupedByQk.keySet()){
// collect=groupedByQk.get(s);
// break;
// }
// }
for (SgfambKcSggy sgfambKcSggy : collect) {
if (sgfambKcSggy != null) {
......@@ -217,6 +214,46 @@ public class SjDjjcServiceImpl implements ISjDjjcService
}
}
String fxts="";
//邻井风险
if(StringUtils.isNotEmpty( sgfambKcSggy.getFxts())){
SjZysx sjZysx=new SjZysx();
sjZysx.setJh(sjDjjc.getJh());
sjZysx.setLb("喷漏卡塌");
List<SjZysx> sjZysxes = sjZysxMapper.selectSjZysxList(sjZysx);
boolean containsTemplate = sgfambKcSggy.getFxts().contains("{{") && sgfambKcSggy.getFxts().contains("}}");
if (containsTemplate) {
String s= extractFirstVariable(sgfambKcSggy.getFxts());
Mxglpz mxglpz=mxglpzMapper.selectMxglpzByName(s);
if(mxglpz!=null){
String url = mxglpz.getUrl();
String rc = mxglpz.getRc();
ObjectMapper objectMapper = new ObjectMapper();
// 将JSON字符串转换为Map
Map<String, Object> resultMap = objectMapper.readValue(
rc,
new TypeReference<Map<String, Object>>() {}
);
String tokenres = HttpUtil.get(url, resultMap);
System.out.println(tokenres);
fxts=tokenres;
}else {
fxts= s;
}
}else {
fxts= sgfambKcSggy.getFxts();
}
if(sjZysxes.size()>0){
SjZysx sjZysx1 = sjZysxes.get(0);
sjZysx1.setZysx(fxts);
sjZysxMapper.updateSjZysx(sjZysx1);
}else {
sjZysx.setZysx(fxts);
sjZysxMapper.insertSjZysx(sjZysx);
}
}
if (sjFdsgcs1 != null) {
sjFdsgcs1.setJh(sjDjjc.getJh());
sjFdsgcs1.setKc(sgfambKcSggy.getKc());
......@@ -226,6 +263,7 @@ public class SjDjjcServiceImpl implements ISjDjjcService
sjFdsgcs1.setGjyh(sgfambKcSggy.getGjyh());
sjFdsgcs1.setZjycs(sgfambKcSggy.getZjycs());
sjFdsgcs1.setZjgccs(sgfambKcSggy.getZjgccs());
sjFdsgcs1.setZyfx(fxts);
sjFdsgcsMapper.updateSjFdsgcs(sjFdsgcs1);
} else {
sjFdsgcs1 = new SjFdsgcs();
......@@ -237,6 +275,7 @@ public class SjDjjcServiceImpl implements ISjDjjcService
sjFdsgcs1.setGjyh(sgfambKcSggy.getGjyh());
sjFdsgcs1.setZjycs(sgfambKcSggy.getZjycs());
sjFdsgcs1.setZjgccs(sgfambKcSggy.getZjgccs());
sjFdsgcs1.setZyfx(fxts);
sjFdsgcsMapper.insertSjFdsgcs(sjFdsgcs1);
}
SjZtxx sjZtxx = new SjZtxx();
......@@ -270,45 +309,6 @@ public class SjDjjcServiceImpl implements ISjDjjcService
sjZjcsxx.setZjby(sgfambKcSggy.getZjby());
sjZjcsxxMapper.insertSjZjcsxx(sjZjcsxx);
}
//邻井风险
if(StringUtils.isNotEmpty( sgfambKcSggy.getFxts())){
SjZysx sjZysx=new SjZysx();
sjZysx.setJh(sjDjjc.getJh());
sjZysx.setLb("喷漏卡塌");
List<SjZysx> sjZysxes = sjZysxMapper.selectSjZysxList(sjZysx);
boolean containsTemplate = sgfambKcSggy.getFxts().contains("{{") && sgfambKcSggy.getFxts().contains("}}");
String fxts="";
if (containsTemplate) {
String s= extractFirstVariable(sgfambKcSggy.getFxts());
Mxglpz mxglpz=mxglpzMapper.selectMxglpzByName(s);
if(mxglpz!=null){
String url = mxglpz.getUrl();
String rc = mxglpz.getRc();
ObjectMapper objectMapper = new ObjectMapper();
// 将JSON字符串转换为Map
Map<String, Object> resultMap = objectMapper.readValue(
rc,
new TypeReference<Map<String, Object>>() {}
);
String tokenres = HttpUtil.get(url, resultMap);
System.out.println(tokenres);
fxts=tokenres;
}else {
fxts= s;
}
}else {
fxts= sgfambKcSggy.getFxts();
}
if(sjZysxes.size()>0){
SjZysx sjZysx1 = sjZysxes.get(0);
sjZysx1.setZysx(fxts);
sjZysxMapper.updateSjZysx(sjZysx1);
}else {
sjZysx.setZysx(fxts);
sjZysxMapper.insertSjZysx(sjZysx);
}
}
}
......@@ -505,15 +505,18 @@ public class SjDjjcServiceImpl implements ISjDjjcService
// }
//根据区块查询
List<SgfambKcSggy> sgfambKcSggyList=sgfambKcSggyMapper.selectSgfambKcSggyListByQk(new SgfambKcSggy());
List<SgfambKcSggy> collect = sgfambKcSggyList.stream().filter(sgfambKcSggy -> sgfambKcSggy.getQk().equals(sjDjjc.getQk())).collect(Collectors.toList());
if(collect.size()==0){
Map<String, List<SgfambKcSggy>> groupedByQk = sgfambKcSggyList.stream()
.collect(Collectors.groupingBy(SgfambKcSggy::getQk));
for(String s:groupedByQk.keySet()){
collect=groupedByQk.get(s);
break;
}
}
List<SgfambKcSggy> collect = new ArrayList<>();
if(sjDjjc.getFaid()!=null){
collect = sgfambKcSggyList.stream().filter(sgfambKcSggy -> sgfambKcSggy.getZbid().toString().equals(sjDjjc.getFaid().toString())).collect(Collectors.toList());
}
// if(collect.size()==0){
// Map<String, List<SgfambKcSggy>> groupedByQk = sgfambKcSggyList.stream()
// .collect(Collectors.groupingBy(SgfambKcSggy::getQk));
// for(String s:groupedByQk.keySet()){
// collect=groupedByQk.get(s);
// break;
// }
// }
for (SgfambKcSggy sgfambKcSggy : collect) {
if (sgfambKcSggy != null) {
//查询分段施工
......@@ -861,21 +864,21 @@ public class SjDjjcServiceImpl implements ISjDjjcService
djjc.setKc(kc+"");
djjc.setJd(it.getJd());
djjc.setJxzs(it.getJxzs());
Djjc djjc1=djdcService.selectZtsj(djjc);
if(djjc1!=null){
sjLjtjzt.setCj(djjc1.getCj());
}
// Djjc djjc1=djdcService.selectZtsj(djjc);
// if(djjc1!=null){
// sjLjtjzt.setCj(djjc1.getCj());
// }
sjLjtjztList.add(sjLjtjzt);
});
// if(collect.size()>0){
// SjZtgjsj sjZtgjsj1 = collect.get(0);
// sjZtxx.setJh(jh);
// sjZtxx.setLb("邻井推荐");
// sjZtxx.setKc(sjJsjg1.getKc());
// sjZtxx.setZtxh(collect.get(0).getZtxh());
// sjZtxxMapper.deleteSjZtxxByZtxx(sjZtxx);
// sjZtxxMapper.insertSjZtxx(sjZtxx);
// //施工参数
if(collect.size()>0){
SjZtgjsj sjZtgjsj1 = collect.get(0);
sjZtxx.setJh(jh);
sjZtxx.setLb("邻井推荐");
sjZtxx.setKc(sjJsjg1.getKc());
sjZtxx.setZtxh(collect.get(0).getZtxh());
sjZtxxMapper.deleteSjZtxxByZtxx(sjZtxx);
sjZtxxMapper.insertSjZtxx(sjZtxx);
//施工参数
// SjZjcsxx sjZjcsxx =new SjZjcsxx();
// sjZjcsxx.setJh(jh);
// sjZjcsxx.setKc(sjJsjg1.getKc());
......@@ -943,7 +946,7 @@ public class SjDjjcServiceImpl implements ISjDjjcService
// }
// sjSggyZjzhcsMapper.deleteSjSggyZjzhcsByZjzhcs(sjSggyZjzhcs);
// sjSggyZjzhcsMapper.insertSjSggyZjzhcs(sjSggyZjzhcs);
// }
}
}
if(sjLjtjztList.size()>0){
sjLjtjztMapper.deleteSjLjtjztByJh(jh);
......@@ -1011,7 +1014,9 @@ public class SjDjjcServiceImpl implements ISjDjjcService
String jhs = String.join(",", collect);
param2.setJh(jhs);
List<DjZqsjfx> zqshfxList = djdcService.getZqshfxList(param2);
Map<String, List<DjZqsjfx>> result = zqshfxList.stream()
Map<String, List<DjZqsjfx>> result =new HashMap<>();
if(zqshfxList.size()>0){
result = zqshfxList.stream().filter(it->StringUtils.isNotEmpty(it.getKc()) && it.getZb()!=null)
.collect(Collectors.groupingBy(DjZqsjfx::getKc)) // 按开次(kc)分组
.entrySet().stream()
.collect(Collectors.toMap(
......@@ -1021,7 +1026,7 @@ public class SjDjjcServiceImpl implements ISjDjjcService
.limit(5)
.collect(Collectors.toList())
));
}
List<String> list2 = new ArrayList<>();
for (Map.Entry<String, List<DjZqsjfx>> entry : result.entrySet()) {
List<DjZqsjfx> value = entry.getValue();
......
......@@ -67,6 +67,9 @@ public class SjFdsgcsServiceImpl implements ISjFdsgcsService
@Autowired
private DjdcService djdcService;
@Autowired
private SgfambKcSggyMapper sgfambKcSggyMapper;
/**
* 查询设计-分段施工措施
......@@ -242,8 +245,6 @@ public class SjFdsgcsServiceImpl implements ISjFdsgcsService
SjQkztfx sjQkztfx =new SjQkztfx();
sjQkztfx.setJh(sjFdsgcs.getJh());
List<SjQkztfx> sjQkztfxes = sjQkztfxMapper.selectSjQkztfxList(sjQkztfx);
List<ClFxsb> clFxsbList = clFxsbMapper.selectClFxsbList(new ClFxsb());
SjJygjGdsjgdcs sjJygjGdsjgdcs=new SjJygjGdsjgdcs();
......@@ -252,6 +253,12 @@ public class SjFdsgcsServiceImpl implements ISjFdsgcsService
List<String> collect = sjLjjwList.stream().map(SjLjjw::getLjjh).collect(Collectors.toList());
SjDjjc sjDjjc1 = sjDjjcMapper.selectSjDjjcByJh(sjFdsgcs.getJh());
List<SgfambKcSggy> sgfambKcSggyList=sgfambKcSggyMapper.selectSgfambKcSggyListByQk(new SgfambKcSggy());
List<SgfambKcSggy> sgmbySggyList=new ArrayList<>();
if(sjDjjc1.getFaid()!=null){
sgmbySggyList = sgfambKcSggyList.stream().filter(sgfambKcSggy -> sgfambKcSggy.getZbid().toString().equals(sjDjjc1.getFaid().toString())).collect(Collectors.toList());
}
double previousDepth= 0;
double csaa= 0;
......@@ -266,6 +273,12 @@ public class SjFdsgcsServiceImpl implements ISjFdsgcsService
String kc = sjJsjg1.getKc();
sjFdsgcs.setKc(kc);
SjFdsgcs sjFdsgcs1 =sjFdsgcsMapper.selectSjFdsgcsByJhAndKc(sjFdsgcs);
SgfambKcSggy sgfambKcSggy=sgmbySggyList.stream().filter(kcSggy -> kcSggy.getKc().equals(kc)).findFirst().orElse(null);
String zyfx="";
if(sgfambKcSggy!=null){
zyfx=sgfambKcSggy.getFxts();
}
List<String> fzqk=new ArrayList<>();
//查询一趟钻率
int kc1=i+1;
......@@ -286,73 +299,30 @@ public class SjFdsgcsServiceImpl implements ISjFdsgcsService
List<Jsqa> jsqaList=jsqaMapper.getJsqaByjhAndJs(jsqa);
String zjycs="";
String zjgccs="";
String zyfx="";
if(jsqaList.size()>0){
for(Jsqa item: jsqaList){
fzqk.add(item.getJh()+"在"+item.getJs()+"时发生"+item.getFzqk());
if(StringUtils.isNotEmpty(zjycs)){
for(ClFxsb clFxsb :clFxsbList){
if(StringUtils.isNotEmpty(clFxsb.getPdtj())){
if(clFxsb.getPdtj().contains(item.getFzqk())){
if(!zjycs.contains(item.getFzqk())){
zjycs=zjycs+";"+item.getFzqk()+":钻井液措施:"+clFxsb.getZjycs();
}
}
}
}
}else {
for(ClFxsb clFxsb :clFxsbList){
if(StringUtils.isNotEmpty(clFxsb.getPdtj())){
if(clFxsb.getPdtj().contains(item.getFzqk())){
zjycs=item.getFzqk()+":钻井液措施:"+clFxsb.getZjycs();
}
}
}
//
}
List<String> collect3 = jsqaList.stream().map(Jsqa::getFzqk).distinct().collect(Collectors.toList());
//复杂情况
for(String s : collect3){
ClFxsb clFxsb1 = clFxsbList.stream().filter(clFxsb -> StringUtils.isNotEmpty(clFxsb.getPdtj())).collect(Collectors.toList()).stream().filter(clFxsb -> clFxsb.getPdtj().contains(s)).findFirst().orElse(null);
if(clFxsb1!=null){
if(StringUtils.isNotEmpty(zjgccs)){
for(ClFxsb clFxsb :clFxsbList){
if(StringUtils.isNotEmpty(clFxsb.getPdtj())){
if(clFxsb.getPdtj().contains(item.getFzqk())){
if(!zjgccs.contains(item.getFzqk())){
zjgccs=zjgccs+";"+item.getFzqk()+":钻井工程措施:"+clFxsb.getGcjscs();
}
}
}
}
zjgccs=zjgccs+";"+s+":钻井工程措施:"+clFxsb1.getGcjscs();
zjycs=zjycs+";"+s+":钻井液措施:"+clFxsb1.getZjycs();
}else {
for(ClFxsb clFxsb :clFxsbList){
if(StringUtils.isNotEmpty(clFxsb.getPdtj())){
if(clFxsb.getPdtj().contains(item.getFzqk())){
zjgccs=item.getFzqk()+":钻井工程措施:"+clFxsb.getGcjscs();
zjycs=zjycs+":钻井液措施:"+clFxsb1.getZjycs();
zjgccs=zjgccs+";"+s+":钻井工程措施:"+clFxsb1.getGcjscs();
}
}
}
}
for(Jsqa item: jsqaList){
fzqk.add(item.getJh()+"在"+item.getJs()+"时发生"+item.getFzqk());
ClFxsb clFxsb1 = clFxsbList.stream().filter(clFxsb -> StringUtils.isNotEmpty(clFxsb.getPdtj())).collect(Collectors.toList()).stream().filter(clFxsb -> clFxsb.getPdtj().contains(item.getFzqk())).findFirst().orElse(null);
if(clFxsb1!=null){
if(StringUtils.isNotEmpty(zyfx)){
for(ClFxsb clFxsb :clFxsbList){
if(StringUtils.isNotEmpty(clFxsb.getPdtj())){
if(clFxsb.getPdtj().contains(item.getFzqk())){
if(!zyfx.contains(item.getFzqk())){
zyfx=zyfx+";邻井"+item.getJh()+"在"+item.getJs()+"m发生"+item.getFzqk()+",风险描述:"+clFxsb.getFxms();
}
}
}
}
zyfx=zyfx+";<br>"+item.getJh()+"在"+item.getJs()+"m发生"+item.getFzqk();
}else {
for(ClFxsb clFxsb :clFxsbList){
if(StringUtils.isNotEmpty(clFxsb.getPdtj())){
if(clFxsb.getPdtj().contains(item.getFzqk())){
zyfx="邻井"+item.getJh()+"在"+item.getJs()+"m发生"+item.getFzqk()+",风险描述:"+clFxsb.getFxms();
}
}
zyfx="邻井存在风险:"+item.getJh()+"在"+item.getJs()+"m发生"+item.getFzqk();
}
}
}
......@@ -400,9 +370,6 @@ public class SjFdsgcsServiceImpl implements ISjFdsgcsService
}
sjFdsgcsMapper.insertSjFdsgcs(sjFdsgcs);
}else {
//查询是否有复杂情况
if(collect.size()>0){
Jsqa jsqa= new Jsqa();
......@@ -411,74 +378,31 @@ public class SjFdsgcsServiceImpl implements ISjFdsgcsService
List<Jsqa> jsqaList=jsqaMapper.getJsqaByjhAndJs(jsqa);
String zjycs="";
String zjgccs="";
String zyfx="";
if(jsqaList.size()>0){
// List<String> fzqk=new ArrayList<>();
for(Jsqa item: jsqaList){
fzqk.add(item.getJh()+"在"+item.getJs()+"时发生"+item.getFzqk());
if(StringUtils.isNotEmpty(zjycs)){
for(ClFxsb clFxsb :clFxsbList){
if(StringUtils.isNotEmpty(clFxsb.getPdtj())){
if(clFxsb.getPdtj().contains(item.getFzqk())){
if(!zjycs.contains(item.getFzqk())){
zjycs=zjycs+";"+item.getFzqk()+":钻井液措施:"+clFxsb.getZjycs();
}
}
}
}
}else {
for(ClFxsb clFxsb :clFxsbList){
if(StringUtils.isNotEmpty(clFxsb.getPdtj())){
if(clFxsb.getPdtj().contains(item.getFzqk())){
zjycs=item.getFzqk()+":钻井液措施:"+clFxsb.getZjycs();
}
}
}
//
}
List<String> collect3 = jsqaList.stream().map(Jsqa::getFzqk).distinct().collect(Collectors.toList());
//复杂情况
for(String s : collect3){
ClFxsb clFxsb1 = clFxsbList.stream().filter(clFxsb -> StringUtils.isNotEmpty(clFxsb.getPdtj())).collect(Collectors.toList()).stream().filter(clFxsb -> clFxsb.getPdtj().contains(s)).findFirst().orElse(null);
if(clFxsb1!=null){
if(StringUtils.isNotEmpty(zjgccs)){
for(ClFxsb clFxsb :clFxsbList){
if(StringUtils.isNotEmpty(clFxsb.getPdtj())){
if(clFxsb.getPdtj().contains(item.getFzqk())){
if(!zjgccs.contains(item.getFzqk())){
zjgccs=zjgccs+";"+item.getFzqk()+":钻井工程措施:"+clFxsb.getGcjscs();
}
}
}
}
zjgccs=zjgccs+";"+s+":钻井工程措施:"+clFxsb1.getGcjscs();
zjycs=zjycs+";"+s+":钻井液措施:"+clFxsb1.getZjycs();
}else {
for(ClFxsb clFxsb :clFxsbList){
if(StringUtils.isNotEmpty(clFxsb.getPdtj())){
if(clFxsb.getPdtj().contains(item.getFzqk())){
zjgccs=item.getFzqk()+":钻井工程措施:"+clFxsb.getGcjscs();
zjycs=zjycs+":钻井液措施:"+clFxsb1.getZjycs();
zjgccs=zjgccs+";"+s+":钻井工程措施:"+clFxsb1.getGcjscs();
}
}
}
}
for(Jsqa item: jsqaList){
fzqk.add(item.getJh()+"在"+item.getJs()+"时发生"+item.getFzqk());
ClFxsb clFxsb1 = clFxsbList.stream().filter(clFxsb -> StringUtils.isNotEmpty(clFxsb.getPdtj())).collect(Collectors.toList()).stream().filter(clFxsb -> clFxsb.getPdtj().contains(item.getFzqk())).findFirst().orElse(null);
if(clFxsb1!=null){
if(StringUtils.isNotEmpty(zyfx)){
for(ClFxsb clFxsb :clFxsbList){
if(StringUtils.isNotEmpty(clFxsb.getPdtj())){
if(clFxsb.getPdtj().contains(item.getFzqk())){
if(!zyfx.contains(item.getFzqk())){
zyfx=zyfx+";邻井"+item.getJh()+"在"+item.getJs()+"m发生"+item.getFzqk()+",风险描述:"+clFxsb.getFxms();
}
}
}
}
zyfx=zyfx+";<br>"+item.getJh()+"在"+item.getJs()+"m发生"+item.getFzqk();
}else {
for(ClFxsb clFxsb :clFxsbList){
if(StringUtils.isNotEmpty(clFxsb.getPdtj())){
if(clFxsb.getPdtj().contains(item.getFzqk())){
zyfx="邻井"+item.getJh()+"在"+item.getJs()+"m发生"+item.getFzqk()+",风险描述:"+clFxsb.getFxms();
}
}
zyfx="邻井存在风险:"+item.getJh()+"在"+item.getJs()+"m发生"+item.getFzqk();
}
}
}
......
......@@ -105,7 +105,9 @@ public class SjJygjGdsjgdcsServiceImpl implements ISjJygjGdsjgdcsService
Map sptymap =new HashMap();
List spList = new ArrayList<>();
sptymap.put("data",spList);
if(gjlist.size()==0){
return back("数据不存在");
}
// 垂直投影
Map cztymap =new HashMap();
List czList = new ArrayList<>();
......@@ -179,6 +181,9 @@ public class SjJygjGdsjgdcsServiceImpl implements ISjJygjGdsjgdcsService
List swList = new ArrayList<>();
swmap.put("lineData",swList);
if(gjlist.size()==0){
return back("数据不存在");
}
Double maxcs =gjlist.stream().map(SjJygjGdsjgdcs::getCs).max(Double::compare).get();;
Double maxnb = 0.0;
......
......@@ -5,6 +5,7 @@ import java.util.*;
import java.util.stream.Collectors;
import com.zjsgfa.common.utils.DateUtils;
import com.zjsgfa.project.zjsgfa.domain.SjZjyFdxnb;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zjsgfa.project.zjsgfa.mapper.SjSggyZjyFdxnbMapper;
......@@ -35,6 +36,17 @@ public class SjSggyZjyFdxnbServiceImpl implements ISjSggyZjyFdxnbService
return sjSggyZjyFdxnbMapper.selectSjSggyZjyFdxnbById(id);
}
private static int extractStartNumber(String jd) {
if (jd == null || !jd.contains("~")) {
return 0; // 处理异常情况
}
String numberPart = jd.split("~")[0];
try {
return Integer.parseInt(numberPart.trim());
} catch (NumberFormatException e) {
return 0; // 处理转换失败情况
}
}
/**
* 查询设计信息-施工概要-分段钻井液性能设计列表
*
......@@ -62,9 +74,13 @@ public class SjSggyZjyFdxnbServiceImpl implements ISjSggyZjyFdxnbService
// 提取井段(去重,按顺序排列)
List<String> wellSegments = list.stream()
.map(SjSggyZjyFdxnb::getJd)
.distinct()
.distinct().sorted((s1, s2) -> {
// 提取第一个数值
int num1 = extractStartNumber(s1);
int num2 = extractStartNumber(s2);
return Integer.compare(num1, num2);
})
.collect(Collectors.toList());
// 表格数据:每行对应一个固定项目,每列对应一个井段
List<Map<String, String>> tableData = new ArrayList<>();
......
......@@ -5,6 +5,7 @@ import java.util.*;
import java.util.stream.Collectors;
import com.zjsgfa.common.utils.DateUtils;
import com.zjsgfa.project.zjsgfa.domain.SjFdsgcsZjyFdxnb;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zjsgfa.project.zjsgfa.mapper.SjZjyFdxnbMapper;
......@@ -35,6 +36,17 @@ public class SjZjyFdxnbServiceImpl implements ISjZjyFdxnbService
return sjZjyFdxnbMapper.selectSjZjyFdxnbById(id);
}
private static int extractStartNumber(String jd) {
if (jd == null || !jd.contains("~")) {
return 0; // 处理异常情况
}
String numberPart = jd.split("~")[0];
try {
return Integer.parseInt(numberPart.trim());
} catch (NumberFormatException e) {
return 0; // 处理转换失败情况
}
}
/**
* 查询设计信息-分段钻井液性能设计列表
*
......@@ -62,7 +74,12 @@ public class SjZjyFdxnbServiceImpl implements ISjZjyFdxnbService
// 提取井段(去重,按顺序排列)
List<String> wellSegments = list.stream()
.map(SjZjyFdxnb::getJd)
.distinct()
.distinct().sorted((s1, s2) -> {
// 提取第一个数值
int num1 = extractStartNumber(s1);
int num2 = extractStartNumber(s2);
return Integer.compare(num1, num2);
})
.collect(Collectors.toList());
// 表格数据:每行对应一个固定项目,每列对应一个井段
......
......@@ -4,12 +4,14 @@ import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.*;
import com.zjsgfa.common.utils.StringUtils;
import com.zjsgfa.common.utils.poi.ExcelUtil;
import com.zjsgfa.framework.web.domain.AjaxResult;
import com.zjsgfa.project.zjsgfa.domain.ClYxsj;
import com.zjsgfa.project.zt.domain.*;
import com.zjsgfa.project.zt.domain.vo.ApiResponse;
import com.zjsgfa.project.zt.domain.vo.JsgaVo;
import com.zjsgfa.project.zt.domain.vo.JswaVo;
import com.zjsgfa.project.zt.service.DjdcService;
......@@ -405,6 +407,46 @@ public class DjdcController {
}
/**
* 实钻分析结果长城大模型调用
* @param
* @return
*/
@PostMapping(value = "/zskwd")
public AjaxResult zskwd(@RequestBody LjSzfxjg ljSzfxjg,HttpServletResponse response) throws IOException {
Map<String, Object> map = new HashMap<>();
map.put("stream", false);
Map<String, Object> map2 = new HashMap<>();
map2.put("field_name","data");
map2.put("type","input");
String s =JSON.toJSONString (ljSzfxjg.getList());
map2.put("value",s);
// map2.put("value",commonParam.getDmxnr());
List<Map> listMap =new ArrayList<>();
listMap.add(map2);
map.put("content",listMap);
String url = "https://agent.ai.sinopec.com/aicoapi/gateway/v2/workflow/api_run/6d7d9423836f46f0862c62eb17bf56e2";
String key="c8hXPRzzhakAyTW8brMGkH4DPpUqw0zk";
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(map);
String result2 = HttpRequest.post(url).body(json).execute().body();
System.out.println(result2);
// // 解析API响应
String textPresentation ="由于您没有提供具体的各开次时效最大的前5口钻具组合分析统计结果数据,我无法进行实际的数据分析和推荐。不过,我可以为您提供一个通用的分析框架和示例输出,您可以根据实际数据填充具体内容。\\n\\n通用分析框架:\\n\\n1. 数据分析:\\n- 对于每个开次(如一开、二开、三开等),查看时效最高的5个钻具组合\\n- 比较它们的机械钻速、钻头寿命、稳定性等关键指标\\n- 分析地层特点与钻具组合的匹配程度\\n\\n2. 选择最优钻具组合:\\n- 优先选择时效最高的组合\\n- 在时效相近时,选择稳定性更好的组合\\n- 考虑钻头寿命与更换频率的平衡\\n\\n3. 理由阐明:\\n- 该组合在类似地层中表现最佳\\n- 机械钻速与钻压、转速等参数匹配最优\\n- 振动控制良好,减少非生产时间\\n\\n示例输出(请用实际数据替换):\\n\\n```json\\n{\\n \\\"bit_recommendations\\\": {\\n \\\"section_1\\\": {\\n \\\"recommended_bit\\\": \\\"Φ444.5mm PDC钻头 + Φ203.2mm钻铤×6根 + Φ177.8mm钻铤×9根 + 随钻震击器\\\",\\n \\\"rationale\\\": \\\"该组合在一开表层钻井中平均机械钻速达到35m/h,比第二名的28m/h高出25%,且振动幅度控制在安全范围内,起下钻次数最少。\\\"\\n },\\n \\\"section_2\\\": {\\n \\\"recommended_bit\\\": \\\"Φ311.2mm 混合钻头 + Φ228.6mm钻铤×9根 + Φ203.2mm钻铤×6根 + 螺杆钻具\\\",\\n \\\"rationale\\\": \\\"在二开井段硬夹层地层中,该组合时效达到22m/h,钻头寿命达180小时,无需中途更换,综合时效比使用牙轮钻头提高40%。\\\"\\n },\\n \\\"section_3\\\": {\\n \\\"recommended_bit\\\": \\\"Φ215.9mm 5刀翼PDC钻头 + Φ165.1mm钻铤×12根 + 随钻测斜仪 + 涡轮增压器\\\",\\n \\\"rationale\\\": \\\"针对三开深部复杂地层,该组合在保持18m/h钻速的同时,有效控制井斜在1°以内,减少纠斜时间,综合时效最优。\\\"\\n }\\n }\\n}\\n```\\n\\n请提供具体的各开次前5名钻具组合的详细统计数据(包括但不限于:钻头类型、钻具组合、机械钻速、钻头寿命、振动数据等),我可以为您做出更精确的分析和推荐。";
// try {
// // 创建ObjectMapper实例
// ObjectMapper objectMapper = new ObjectMapper();
// // 解析JSON为ApiResponse对象
// ApiResponse res = objectMapper.readValue(json, ApiResponse.class);
// // 提取"文本呈现"的内容
// textPresentation = res.getData().getInnerData().getTextPresentation();
// // 打印结果
// System.out.println("文本呈现内容:\n" + textPresentation);
// } catch (Exception e) {
// e.printStackTrace();
// }
return AjaxResult.success(textPresentation);
}
/**
* 实钻分析结果长城大模型调用
......@@ -412,21 +454,39 @@ public class DjdcController {
* @return
*/
@PostMapping(value = "/szfxjgccdy")
public void ccdmxdy(@RequestBody LjSzfxjg ljSzfxjg,HttpServletResponse response) throws IOException {
public AjaxResult ccdmxdy(@RequestBody LjSzfxjg ljSzfxjg,HttpServletResponse response) throws IOException {
Map<String, Object> map = new HashMap<>();
map.put("stream", true);
Map<String, Object> map2 = new HashMap<>();
map2.put("field_name","data");
map2.put("type","input");
String s =JSON.toJSONString (ljSzfxjg.getList());
// String s =JSON.toJSONString (ljSzfxjgs);
map2.put("value",s);
List<Map> listMap =new ArrayList<>();
listMap.add(map2);
map.put("content",listMap);
String url = "https://agent.ai.sinopec.com/aicoapi/gateway/v2/workflow/api_run/6d7d9423836f46f0862c62eb17bf56e2";
String key="c8hXPRzzhakAyTW8brMGkH4DPpUqw0zk";
dymxcom(map,url,key,response);
// dymxcom(map,url,key,response);
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(map);
// String result2 = HttpRequest.post(url).header("Authorization","Bearer "+key).body(json).execute().body();
// System.out.println(result2);
// // 解析API响应
String textPresentation ="由于您没有提供具体的各开次时效最大的前5口钻具组合分析统计结果数据,我无法进行实际的数据分析和推荐。不过,我可以为您提供一个通用的分析框架和示例输出,您可以根据实际数据填充具体内容。\\n\\n通用分析框架:\\n\\n1. 数据分析:\\n- 对于每个开次(如一开、二开、三开等),查看时效最高的5个钻具组合\\n- 比较它们的机械钻速、钻头寿命、稳定性等关键指标\\n- 分析地层特点与钻具组合的匹配程度\\n\\n2. 选择最优钻具组合:\\n- 优先选择时效最高的组合\\n- 在时效相近时,选择稳定性更好的组合\\n- 考虑钻头寿命与更换频率的平衡\\n\\n3. 理由阐明:\\n- 该组合在类似地层中表现最佳\\n- 机械钻速与钻压、转速等参数匹配最优\\n- 振动控制良好,减少非生产时间\\n\\n示例输出(请用实际数据替换):\\n\\n```json\\n{\\n \\\"bit_recommendations\\\": {\\n \\\"section_1\\\": {\\n \\\"recommended_bit\\\": \\\"Φ444.5mm PDC钻头 + Φ203.2mm钻铤×6根 + Φ177.8mm钻铤×9根 + 随钻震击器\\\",\\n \\\"rationale\\\": \\\"该组合在一开表层钻井中平均机械钻速达到35m/h,比第二名的28m/h高出25%,且振动幅度控制在安全范围内,起下钻次数最少。\\\"\\n },\\n \\\"section_2\\\": {\\n \\\"recommended_bit\\\": \\\"Φ311.2mm 混合钻头 + Φ228.6mm钻铤×9根 + Φ203.2mm钻铤×6根 + 螺杆钻具\\\",\\n \\\"rationale\\\": \\\"在二开井段硬夹层地层中,该组合时效达到22m/h,钻头寿命达180小时,无需中途更换,综合时效比使用牙轮钻头提高40%。\\\"\\n },\\n \\\"section_3\\\": {\\n \\\"recommended_bit\\\": \\\"Φ215.9mm 5刀翼PDC钻头 + Φ165.1mm钻铤×12根 + 随钻测斜仪 + 涡轮增压器\\\",\\n \\\"rationale\\\": \\\"针对三开深部复杂地层,该组合在保持18m/h钻速的同时,有效控制井斜在1°以内,减少纠斜时间,综合时效最优。\\\"\\n }\\n }\\n}\\n```\\n\\n请提供具体的各开次前5名钻具组合的详细统计数据(包括但不限于:钻头类型、钻具组合、机械钻速、钻头寿命、振动数据等),我可以为您做出更精确的分析和推荐。";
// try {
// // 创建ObjectMapper实例
// ObjectMapper objectMapper = new ObjectMapper();
// // 解析JSON为ApiResponse对象
// ApiResponse res = objectMapper.readValue(json, ApiResponse.class);
// // 提取"文本呈现"的内容
// textPresentation = res.getData().getInnerData().getTextPresentation();
// // 打印结果
// System.out.println("文本呈现内容:\n" + textPresentation);
// } catch (Exception e) {
// e.printStackTrace();
// }
return AjaxResult.success(textPresentation);
}
......
......@@ -78,4 +78,6 @@ public class CommonParam {
private String dc;
private String dmxnr;
}
package com.zjsgfa.project.zt.domain.vo;
import lombok.Data;
@Data
public class ApiResponse {
private int code;
private String msg;
private DataWrapper data;
// getter和setter
public int getCode() { return code; }
public void setCode(int code) { this.code = code; }
public String getMsg() { return msg; }
public void setMsg(String msg) { this.msg = msg; }
public DataWrapper getData() { return data; }
public void setData(DataWrapper data) { this.data = data; }
}
package com.zjsgfa.project.zt.domain.vo;
import com.fasterxml.jackson.annotation.JsonProperty;
public class DataWrapper {
private String event;
private String session_id;
@JsonProperty("data") // 内层的data字段
private InnerData innerData;
// getter和setter
public String getEvent() { return event; }
public void setEvent(String event) { this.event = event; }
public String getSession_id() { return session_id; }
public void setSession_id(String session_id) { this.session_id = session_id; }
public InnerData getInnerData() { return innerData; }
public void setInnerData(InnerData innerData) { this.innerData = innerData; }
}
package com.zjsgfa.project.zt.domain.vo;
import com.fasterxml.jackson.annotation.JsonProperty;
public class InnerData {
@JsonProperty("文本呈现") // 映射JSON中的"文本呈现"字段
private String textPresentation;
// getter和setter
public String getTextPresentation() { return textPresentation; }
public void setTextPresentation(String textPresentation) { this.textPresentation = textPresentation; }
}
......@@ -6,7 +6,8 @@ spring:
druid:
# 主库数据源
master:
url: jdbc:mysql://192.168.31.167:3306/zjsgfa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
# url: jdbc:mysql://192.168.31.167:3306/zjsgfa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
url: jdbc:mysql://192.168.31.167:3306/zjsgfa-fwq?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
username: root
password: qianhe2024
# url: jdbc:mysql://127.0.0.1:3306/zjsgfa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
......@@ -18,10 +19,10 @@ spring:
enabled: true
driverClassName: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@192.168.31.167:1521/qianhe
username: HHZJJS
password: HHZJJS
# username: DISUSER1
# password: dis#2022
# username: HHZJJS
# password: HHZJJS
username: DISUSER1
password: dis#2022
# slave:
# # 从数据源开关/默认关闭
# enabled: true
......
......@@ -78,8 +78,8 @@ spring:
port: 7789
# 密码
password: qianheRedis2021
#host: 192.168.31.167
# 端口,默认为6379
# host: 192.168.31.167
## 端口,默认为6379
# port: 6379
# password: qianhe2024
# host: 127.0.0.1
......@@ -153,3 +153,26 @@ gen:
tablePrefix: sys_
# 是否允许生成文件覆盖到本地(自定义路径),默认不允许
allowOverwrite: false
#CAS
cas:
server:
host:
#CAS服务地址
url: http://10.68.224.14:8800/cas
#CAS服务登录地址
login_url: ${cas.server.host.url}/login
#CAS服务登出地址
logout_url: ${cas.server.host.url}/logout?service=${app.server.host.url}
# 应用访问地址
app:
#开启cas
casEnable: false
server:
host:
url: http://10.68.249.136:${server.port}
#应用登录地址
login_url: /dev-api
#应用登出地址
logout_url: /logout
#前端登录地址
web_url: http://localhost/login?redirect=/index
\ No newline at end of file
......@@ -95,4 +95,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id}
</foreach>
</delete>
<delete id="deleteSgfambKcxxByZbids">
delete from sgfamb_kcxx where zbid in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<delete id="deleteSgfambKcxxByZbid">
delete from sgfamb_kcxx where zbid = #{id}
</delete>
</mapper>
\ No newline at end of file
......@@ -74,6 +74,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="jhjdzt != null and jhjdzt != ''"> and jhjdzt = #{jhjdzt}</if>
<if test="flzt != null and flzt != ''"> and flzt = #{flzt}</if>
</where>
order by created_time desc
</select>
<select id="selectSjDjjcById" parameterType="Long" resultMap="SjDjjcResult">
......
......@@ -225,10 +225,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getZqshfxList" resultType="com.zjsgfa.project.zt.domain.DjZqsjfx">
select a.jh,c.kc,ksjs,c.js,d.zb,to_char((case when kc ='1' then b.KZRQ1 when kc ='2' then b.KZRQ2 when kc ='3' then b.KZRQ3 when kc ='4' then b.KZRQ4 when kc ='5' then b.KZRQ5 else null end ),'YYYY-MM-DD') || ' ' ||
TO_CHAR(TO_DATE((case when kc ='1' then b.KZSJ1 when kc ='2' then b.KZSJ2 when kc ='3' then b.KZSJ3 when kc ='4' then b.KZSJ4 when kc ='5' then b.KZSJ5 else null end ), 'HH24MI'), 'HH24:MI') || ':00' AS kssj
,to_char((case when kc ='1' then b.KZRQ2 when kc ='2' then (case when KZRQ3 is null or KZRQ3 ='' then WJRQ else KZRQ3 end ) when kc ='3' then (case when KZRQ4 is null or KZRQ4 ='' then WJRQ else KZRQ4 end ) when kc ='4' then (case when KZRQ5 is null or KZRQ5 ='' then WJRQ else KZRQ5 end ) when kc ='5' then b.WJRQ else null end ),'YYYY-MM-DD') || ' ' ||
TO_CHAR(TO_DATE((case when kc ='1' then b.KZSJ2 when kc ='2' then (case when KZRQ3 is null or KZRQ3 ='' then WJSJ else KZSJ3 end ) when kc ='3' then (case when KZRQ4 is null or KZRQ4 ='' then WJSJ else KZSJ4 end ) when kc ='4' then (case when KZRQ5 is null or KZRQ5 ='' then WJSJ else KZSJ5 end ) when kc ='5' then b.WJSJ else null end ), 'HH24MI'), 'HH24:MI') || ':00' AS JSSJ
select a.jh,c.kc,ksjs,c.js,d.zb,to_char((case when c.kc ='1' then b.KZRQ1 when c.kc ='2' then b.KZRQ2 when c.kc ='3' then b.KZRQ3 when c.kc ='4' then b.KZRQ4 when c.kc ='5' then b.KZRQ5 else null end ),'YYYY-MM-DD') || ' ' ||
TO_CHAR(TO_DATE((case when c.kc ='1' then b.KZSJ1 when c.kc ='2' then b.KZSJ2 when c.kc ='3' then b.KZSJ3 when c.kc ='4' then b.KZSJ4 when c.kc ='5' then b.KZSJ5 else null end ), 'HH24MI'), 'HH24:MI') || ':00' AS kssj
,to_char((case when c.kc ='1' then b.KZRQ2 when c.kc ='2' then (case when KZRQ3 is null or KZRQ3 ='' then WJRQ else KZRQ3 end ) when c.kc ='3' then (case when KZRQ4 is null or KZRQ4 ='' then WJRQ else KZRQ4 end ) when c.kc ='4' then (case when KZRQ5 is null or KZRQ5 ='' then WJRQ else KZRQ5 end ) when c.kc ='5' then b.WJRQ else null end ),'YYYY-MM-DD') || ' ' ||
TO_CHAR(TO_DATE((case when c.kc ='1' then b.KZSJ2 when c.kc ='2' then (case when KZRQ3 is null or KZRQ3 ='' then WJSJ else KZSJ3 end ) when c.kc ='3' then (case when KZRQ4 is null or KZRQ4 ='' then WJSJ else KZSJ4 end ) when c.kc ='4' then (case when KZRQ5 is null or KZRQ5 ='' then WJSJ else KZSJ5 end ) when c.kc ='5' then b.WJSJ else null end ), 'HH24MI'), 'HH24:MI') || ':00' AS JSSJ
from JSBA a
left join jsaa b on a.jh = b.jh
left join (
......@@ -239,12 +240,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
FROM JSDB jsdb
where jsdb.tgcc not like '%导管%'
order by jh) c on a.jh=c.jh
left join (select jh,
ZZJS,
ROUND(SUM(jc) / case when SUM(JCSJHJ) / 24 = 0 then 1 else SUM(JCSJHJ) / 24 end, 2) zb
from JSHA
group by jh, ZZJS -- 按 jh 和 ZZJS 分组,确保对应关系
order by ZZJS) d on a.JH = d.jh and d.zzjs > c.ksjs and d.zzjs &lt;= c.js
left join (
SELECT
a.jh,
ROUND(
SUM( jc ) /
CASE
WHEN SUM( JCSJHJ ) / 24 = 0 THEN
1 ELSE SUM( JCSJHJ ) / 24
END,
2
) zb,
b.kc
FROM
JSHA a
LEFT JOIN (
SELECT
jh,
ROW_NUMBER () OVER ( PARTITION BY jh ORDER BY js ) AS kc,
JS,
LAG ( JS, 1, 0 ) OVER ( PARTITION BY jh ORDER BY js ) AS ksjs
FROM
JSDB
) b ON a.JH = b.jh and a.ZZJS>ksjs and a.ZZJS &lt;=js
GROUP BY
a.jh,
kc
ORDER BY
kc
) d on a.JH = d.jh
where 1=1
<if test="jdhzb!=null">
and ABS(#{jdhzb} - a.jdhzb) &lt; #{jl}
......@@ -420,7 +445,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{item}
</foreach>
</if>
order by jkjl asc) where ROWNUM &lt;= 8
order by jkjl asc) where ROWNUM &lt;= 5
union all
select *
from (
......@@ -476,6 +501,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="js!=null">
and b.wjjs &lt;= #{js}
</if>
<if test="ksjs!=null">
and b.wjjs >= #{ksjs}
</if>
<if test="jxs != null and jxs.size() > 0">
AND a.jx IN
<foreach item="item" collection="jxs" open="(" separator="," close=")">
......@@ -490,7 +518,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if>
order by jdjl asc
) where ROWNUM &lt; =8
) where ROWNUM &lt; =5
) a order by jkjl
......@@ -731,35 +759,42 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="getGzbjList" resultType="com.zjsgfa.project.zt.domain.LjGzbj">
select a.jh,
a.QK,
d.zb,
t.*,
ROUND(NVL(c.SJTS, 0) * 24, 2)sjts,
case when c.SJTS is not null then ROUND((nvl(JD2,0)-nvl(JD1,0)) / (ROUND(NVL(c.SJTS,0)*24,2)),2) else 0 end zs
select a.jh, a.qk, d.zb, d.kc, t.JS,
ROUND( NVL( c.SJTS, 0 ) , 2 ) sjts,
CASE WHEN c.SJTS IS NOT NULL THEN
ROUND(
( nvl( JD2, 0 ) - nvl( JD1, 0 ) ) / ( ROUND( NVL( c.SJTS, 0 ) , 2 ) ),
2
) ELSE 0
END zs
from JSaa a
LEFT JOIN (SELECT a.jh,
ROUND(SUM(jc) / CASE WHEN SUM(JCSJHJ) / 24 = 0 THEN 1 ELSE SUM(JCSJHJ) / 24 END, 2) zb,
b.kc
FROM JSHA a
LEFT JOIN (SELECT jh,
ROW_NUMBER() OVER ( PARTITION BY jh ORDER BY js ) AS kc,
JS,
LAG(JS, 1, 0) OVER ( PARTITION BY jh ORDER BY js ) AS ksjs
FROM JSDB) b ON a.JH = b.jh and a.ZZJS > ksjs and a.ZZJS &lt;= js
GROUP BY a.jh,
kc
ORDER BY kc) d ON a.JH = d.jh
left join (SELECT jh,
ztzj,
kc,
(CASE WHEN kc = 1 THEN 0 ELSE LAG_JS END) ksjs,
js,
CONCAT(CASE WHEN kc = 1 THEN '0-' ELSE LAG_JS || '-' END, JS) AS jd
FROM (SELECT jh,
ZTZJ,
ROW_NUMBER() OVER (PARTITION BY jh ORDER BY js) AS kc, JS,
LAG(JS, 1, 0) OVER (PARTITION BY jh ORDER BY js) AS LAG_JS
FROM JSDB) t) t on a.JH = t.JH
left join (select *
from JSTA
where NVL(JD1, 0) != NVL(JD2,0)) c on a.JH = c.JH and t.js = c.JD2
left join (
select jh,
ZZJS,
ROUND(SUM(jc) / case when SUM(JCSJHJ) / 24 = 0 then 1 else SUM(JCSJHJ) / 24 end, 2) zb
from JSHA
group by jh, ZZJS -- 按 jh 和 ZZJS 分组,确保对应关系
order by ZZJS
) d on a.JH=d.jh and d.zzjs>ksjs and d.zzjs &lt;=js
ROW_NUMBER() OVER ( PARTITION BY jh ORDER BY js ) AS kc,
JS,
LAG(JS, 1, 0) OVER ( PARTITION BY jh ORDER BY js ) AS ksjs
FROM JSDB) t on d.jh = t.JH and d.kc = t.kc
LEFT JOIN ( select a.*,b.kc from (
SELECT jh,
ROW_NUMBER() OVER ( PARTITION BY jh ORDER BY js ) AS kc,
JS,
LAG(JS, 1, 0) OVER ( PARTITION BY jh ORDER BY js ) AS ksjs
FROM JSDB) b
LEFT JOIN jsta a on b.JH = a.jh and nvl(a.JD1, 0) >= ksjs and a.JD2 &lt;= js
and NVL(JD1, 0) != NVL(JD2, 0) ) c ON d.JH = c.JH and d.kc=c.kc
AND t.js = c.JD2
where
1=1
<if test="qk!=null and qk!=''">
......@@ -779,7 +814,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</foreach>
</if>
order by zb desc
order by kc,zb desc
</select>
<select id="getJsgaList" resultType="com.zjsgfa.project.zt.domain.vo.JsgaVo">
select distinct a.jh,a.QSJS,a.ZZJS,a.JC,a.JXZS,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment