Commit 367d1858 authored by qinhu's avatar qinhu

产值统计优化(减少查询;添加缓存)

parent df0614f4
package cn.wise.sc.cement.business.config; package cn.wise.sc.cement.business.config;
import com.alibaba.fastjson.parser.ParserConfig; import com.alibaba.fastjson.parser.ParserConfig;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.config.SingleServerConfig;
import org.redisson.config.TransportMode;
import org.springframework.cache.CacheManager; import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
...@@ -22,11 +27,11 @@ import java.time.Duration; ...@@ -22,11 +27,11 @@ import java.time.Duration;
@EnableCaching @EnableCaching
public class RedisCacheConfig { public class RedisCacheConfig {
private RedisConnectionFactory redisConnectionFactory; private RedisConnectionFactory redisConnectionFactory;
public RedisCacheConfig(RedisConnectionFactory redisConnectionFactory) { public RedisCacheConfig(RedisConnectionFactory redisConnectionFactory) {
this.redisConnectionFactory = redisConnectionFactory; this.redisConnectionFactory = redisConnectionFactory;
} }
// @Bean // @Bean
// public Jedis jedis() { // public Jedis jedis() {
...@@ -38,49 +43,62 @@ public class RedisCacheConfig { ...@@ -38,49 +43,62 @@ public class RedisCacheConfig {
// return jedisPool.getResource(); // return jedisPool.getResource();
// } // }
/** /**
* 覆盖默认的配置 * 覆盖默认的配置
* *
* @return RedisTemplate * @return RedisTemplate
*/ */
@Bean @Bean
public RedisTemplate<String, Object> redisTemplate() { public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate(); RedisTemplate<String, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory); template.setConnectionFactory(redisConnectionFactory);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class); FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
// 设置value的序列化规则和key的序列化规则 // 设置value的序列化规则和key的序列化规则
template.setKeySerializer(stringRedisSerializer); template.setKeySerializer(stringRedisSerializer);
template.setValueSerializer(fastJsonRedisSerializer); template.setValueSerializer(fastJsonRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer); template.setHashKeySerializer(stringRedisSerializer);
template.setHashValueSerializer(fastJsonRedisSerializer); template.setHashValueSerializer(fastJsonRedisSerializer);
template.setDefaultSerializer(fastJsonRedisSerializer); template.setDefaultSerializer(fastJsonRedisSerializer);
template.afterPropertiesSet(); template.afterPropertiesSet();
return template; return template;
} }
/** /**
* 解决注解方式存放到redis中的值是乱码的情况 * 解决注解方式存放到redis中的值是乱码的情况
* *
* @param factory * @param factory
* @return CacheManager * @return CacheManager
*/ */
@Bean @Bean
public CacheManager cacheManager(RedisConnectionFactory factory) { public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisSerializer<String> redisSerializer = new StringRedisSerializer(); RedisSerializer<String> redisSerializer = new StringRedisSerializer();
FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class); FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
// 配置注解方式的序列化 // 配置注解方式的序列化
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration redisCacheConfiguration =
config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)) config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer)) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer))
//配置注解默认的过期时间 //配置注解默认的过期时间
.entryTtl(Duration.ofDays(1)); .entryTtl(Duration.ofDays(1));
// 加入白名单 https://github.com/alibaba/fastjson/wiki/enable_autotype // 加入白名单 https://github.com/alibaba/fastjson/wiki/enable_autotype
ParserConfig.getGlobalInstance().addAccept("cn.wise"); ParserConfig.getGlobalInstance().addAccept("cn.wise");
return RedisCacheManager.builder(factory).cacheDefaults(redisCacheConfiguration).build(); return RedisCacheManager.builder(factory).cacheDefaults(redisCacheConfiguration).build();
} }
// @Bean
// public RedissonClient redissonClient() {
// Config config = new Config();
// config.useSingleServer()
// .setAddress("redis://127.0.0.1:6379")
// .setConnectionMinimumIdleSize(10)
// .setConnectionPoolSize(50)
// .setPingConnectionInterval(60)
// .setIdleConnectionTimeout(6000)
// .setConnectTimeout(10000)
// .setTimeout(3000);
// return Redisson.create(config);
// }
} }
...@@ -5,14 +5,12 @@ import cn.wise.sc.cement.business.model.BaseResponse; ...@@ -5,14 +5,12 @@ import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.service.impl.WeiXinService; import cn.wise.sc.cement.business.service.impl.WeiXinService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.util.Date; import java.util.Date;
......
...@@ -19,13 +19,14 @@ import java.util.Date; ...@@ -19,13 +19,14 @@ import java.util.Date;
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@Accessors(chain = true) @Accessors(chain = true)
public class EntrustSample { public class EntrustSample {
private String projectName; private String projectName;
private Integer entrustId; private Integer entrustId;
private String entrustCode; private String entrustCode;
private String sampleName; private String sampleName;
private Integer sampleId; private Integer sampleId;
private Integer distributionId; private Integer distributionId;
private Integer teamGroupId; private Integer teamGroupId;
private Integer userId; private Integer userId;
private LocalDateTime finishTime; private LocalDateTime finishTime;
private String content;
} }
...@@ -103,7 +103,8 @@ public class NormProduction implements Serializable { ...@@ -103,7 +103,8 @@ public class NormProduction implements Serializable {
* 标准产值详情 * 标准产值详情
*/ */
@Data @Data
public static class NormProductionDetail { public static class NormProductionDetail implements Serializable{
private static final long serialVersionUID = 42L;
private String userName; private String userName;
private Integer distributionId; private Integer distributionId;
private Integer userId; private Integer userId;
......
...@@ -18,7 +18,7 @@ import java.util.Map; ...@@ -18,7 +18,7 @@ import java.util.Map;
/** /**
* <p> * <p>
* Mapper 接口 * Mapper 接口
* </p> * </p>
* *
* @author ztw * @author ztw
...@@ -27,6 +27,7 @@ import java.util.Map; ...@@ -27,6 +27,7 @@ import java.util.Map;
@Mapper @Mapper
public interface SampleHandleMapper extends BaseMapper<SampleHandle> { public interface SampleHandleMapper extends BaseMapper<SampleHandle> {
List<SampleHandleVo> getSampleHandleList(@Param("params") Map<String, Object> params); List<SampleHandleVo> getSampleHandleList(@Param("params") Map<String, Object> params);
SampleHandleVo getDetail(Integer id); SampleHandleVo getDetail(Integer id);
...@@ -34,5 +35,7 @@ public interface SampleHandleMapper extends BaseMapper<SampleHandle> { ...@@ -34,5 +35,7 @@ public interface SampleHandleMapper extends BaseMapper<SampleHandle> {
@Select("select MIN(accept_time) from sample_handle where sample_id = #{sampleId} and status>0") @Select("select MIN(accept_time) from sample_handle where sample_id = #{sampleId} and status>0")
LocalDateTime getNo1AcceptTime(Integer sampleId); LocalDateTime getNo1AcceptTime(Integer sampleId);
List<EntrustSample> getEntrustSample(); List<EntrustSample> getEntrustSample();
List<EntrustSample> getEntrustSampleOptimize(@Param("params") Map<String, Object> params);
} }
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
</sql> </sql>
<sql id="sampleDisWhere"> <sql id="sampleDisWhere">
<where> <where>
`status` > 5 `status` > 5 AND d.distribution_id IS NOT NULL
<if test="params.start_time != null and params.start_time != ''"> <if test="params.start_time != null and params.start_time != ''">
and d.finish_time <![CDATA[>=]]> #{params.start_time} and d.finish_time <![CDATA[>=]]> #{params.start_time}
</if> </if>
...@@ -77,24 +77,24 @@ ...@@ -77,24 +77,24 @@
<select id="getSampleCheckGroupList" resultType="cn.wise.sc.cement.business.model.vo.SampleCheckGroupVo"> <select id="getSampleCheckGroupList" resultType="cn.wise.sc.cement.business.model.vo.SampleCheckGroupVo">
select sd.team_group_id as teamGroupId, tg.name as teamGroupName, select sd.team_group_id as teamGroupId, tg.name as teamGroupName,
sd.user_id as userId, su.name as userName sd.user_id as userId, su.name as userName
from sample_distribution sd from sample_distribution sd
left join team_group tg on tg.id = sd.team_group_id left join team_group tg on tg.id = sd.team_group_id
left join sys_user su on su.id = sd.user_id left join sys_user su on su.id = sd.user_id
where sd.sample_id = #{sampleId} where sd.sample_id = #{sampleId}
group by sd.team_group_id,sd.user_id group by sd.team_group_id,sd.user_id
order by sd.team_group_id order by sd.team_group_id
</select> </select>
<select id="getEntrustSample" <select id="getEntrustSample"
resultType="cn.wise.sc.cement.business.entity.EntrustSample"> resultType="cn.wise.sc.cement.business.entity.EntrustSample">
SELECT e.project_name,e.entrust_code,g.distribution_id,g.entrust_id,g.`sample_name`,g.user_id,g.sample_id FROM SELECT e.project_name,e.entrust_code,g.distribution_id,g.entrust_id,g.`sample_name`,g.user_id,g.sample_id,e.`status` FROM entrust e
entrust e
RIGHT JOIN RIGHT JOIN
(SELECT s.`name` as sample_name,d.distribution_id,s.entrust_id,d.user_id,s.id as sample_id FROM sample s (SELECT s.`name` as sample_name,d.distribution_id,s.entrust_id,d.user_id,s.id as sample_id FROM sample s
RIGHT JOIN RIGHT JOIN
(SELECT user_id, id as distribution_id,sample_id FROM sample_distribution ) d on s.id = d.sample_id ) g (SELECT user_id, id as distribution_id,sample_id FROM sample_distribution ) d on s.id = d.sample_id ) g
ON g.entrust_id = e.id ON g.entrust_id = e.id
WHERE e.status > 5
</select> </select>
<select id="getSampleDistribution" resultType="cn.wise.sc.cement.business.entity.EntrustSample"> <select id="getSampleDistribution" resultType="cn.wise.sc.cement.business.entity.EntrustSample">
......
...@@ -28,8 +28,21 @@ ...@@ -28,8 +28,21 @@
</if> </if>
</where> </where>
</sql> </sql>
<sql id="sampleDisWhere">
<where>
e.status > 4 AND h.id IS NOT NULL
<if test="params.start_time != null and params.start_time != ''">
and h.finish_time <![CDATA[>=]]> #{params.start_time}
</if>
<if test="params.end_time != null and params.end_time != ''">
and h.finish_time <![CDATA[<=]]> #{params.end_time}
</if>
<if test="params.user_id != null and params.user_id != ''">
and h.user_id = #{params.user_id}
</if>
</where>
</sql>
<select id="getSampleHandleList" resultType="cn.wise.sc.cement.business.model.vo.SampleHandleVo"> <select id="getSampleHandleList" resultType="cn.wise.sc.cement.business.model.vo.SampleHandleVo">
select t.*, p.id as projectId, p.name as projectName, p.code as projectCode, select t.*, p.id as projectId, p.name as projectName, p.code as projectCode,
e.sample_num as sampleNum, e.sample_num as sampleNum,
...@@ -76,7 +89,7 @@ ...@@ -76,7 +89,7 @@
</select> </select>
<select id="getEntrustSample" resultType="cn.wise.sc.cement.business.entity.EntrustSample"> <select id="getEntrustSample" resultType="cn.wise.sc.cement.business.entity.EntrustSample">
SELECT project_name,entrust_code,h.id,s.entrust_id,h.user_id,s.id as sample_id,e.status FROM entrust e SELECT project_name,entrust_code,h.id as distribution_id ,s.entrust_id,h.user_id,s.id as sample_id,e.status FROM entrust e
LEFT JOIN LEFT JOIN
(SELECT * FROM sample) s (SELECT * FROM sample) s
ON e.id = s.entrust_id ON e.id = s.entrust_id
...@@ -85,6 +98,18 @@ ...@@ -85,6 +98,18 @@
ON h.sample_id = s.id ON h.sample_id = s.id
WHERE e.status > 4 AND h.id IS NOT NULL WHERE e.status > 4 AND h.id IS NOT NULL
</select> </select>
<select id="getEntrustSampleOptimize" resultType="cn.wise.sc.cement.business.entity.EntrustSample">
SELECT project_name,entrust_code,h.id,s.entrust_id,h.user_id,s.id as sample_id,e.status,h.content,h.finish_time
FROM entrust e
LEFT JOIN
(SELECT * FROM sample) s
ON e.id = s.entrust_id
LEFT JOIN
(SELECT * FROM sample_handle) h
ON h.sample_id = s.id
<include refid="sampleDisWhere"/>
</select>
</mapper> </mapper>
...@@ -3,12 +3,14 @@ package cn.wise.sc.cement.business.service; ...@@ -3,12 +3,14 @@ package cn.wise.sc.cement.business.service;
import cn.wise.sc.cement.business.entity.EntrustSample; import cn.wise.sc.cement.business.entity.EntrustSample;
import cn.wise.sc.cement.business.entity.SampleHandle; import cn.wise.sc.cement.business.entity.SampleHandle;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* <p> * <p>
* 服务类 * 服务类
* </p> * </p>
* *
* @author ztw * @author ztw
...@@ -16,10 +18,16 @@ import java.util.List; ...@@ -16,10 +18,16 @@ import java.util.List;
*/ */
public interface ISampleHandleService extends IService<SampleHandle> { public interface ISampleHandleService extends IService<SampleHandle> {
/** /**
* 获取处理信息 * 获取处理信息
* * @return list
* @return list */
*/ List<EntrustSample> getEntrustSample();
List<EntrustSample> getEntrustSample();
/**
* 根据条件获取处理信息
* @param params 参数条件
* @return
*/
List<EntrustSample> getEntrustSampleOptimize(Map<String, Object> params);
} }
...@@ -5,14 +5,16 @@ import cn.wise.sc.cement.business.entity.SampleHandle; ...@@ -5,14 +5,16 @@ import cn.wise.sc.cement.business.entity.SampleHandle;
import cn.wise.sc.cement.business.mapper.SampleHandleMapper; import cn.wise.sc.cement.business.mapper.SampleHandleMapper;
import cn.wise.sc.cement.business.service.ISampleHandleService; import cn.wise.sc.cement.business.service.ISampleHandleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* <p> * <p>
* 服务实现类 * 服务实现类
* </p> * </p>
* *
* @author ztw * @author ztw
...@@ -21,11 +23,16 @@ import java.util.List; ...@@ -21,11 +23,16 @@ import java.util.List;
@Service @Service
public class SampleHandleServiceImpl extends ServiceImpl<SampleHandleMapper, SampleHandle> implements ISampleHandleService { public class SampleHandleServiceImpl extends ServiceImpl<SampleHandleMapper, SampleHandle> implements ISampleHandleService {
@Autowired @Autowired
SampleHandleMapper sampleHandleMapper; SampleHandleMapper sampleHandleMapper;
@Override @Override
public List<EntrustSample> getEntrustSample() { public List<EntrustSample> getEntrustSample() {
return sampleHandleMapper.getEntrustSample(); return sampleHandleMapper.getEntrustSample();
} }
@Override
public List<EntrustSample> getEntrustSampleOptimize(Map<String, Object> params) {
return sampleHandleMapper.getEntrustSampleOptimize(params);
}
} }
...@@ -167,15 +167,14 @@ public class RedisUtil { ...@@ -167,15 +167,14 @@ public class RedisUtil {
* 将list集合放入List缓存,并设置时间 * 将list集合放入List缓存,并设置时间
* *
* @param key key值 * @param key key值
* @param value 数据的值 * @param listStr 数据的值
* @param time 缓存的时间 * @param time 缓存的时间
* @return true插入成功,否则返回异常信息 * @return true插入成功,否则返回异常信息
*/ */
public Boolean setListAll(String key, Object value, long time) { public Boolean setListAll(String key, String listStr, long time) {
try { try {
if (time > 0) { if (time > 0) {
redisTemplate.opsForList().rightPushAll(key, value); setString(key,listStr,time);
this.expire(key, time);
return true; return true;
} }
return false; return false;
......
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