Commit ec5ec0ba authored by liqin's avatar liqin 💬

Merge branch 'master' of http://111.203.232.171:8888/lee/chnmuseum-party into master

parents c88a2b62 b8810ebd
package cn.wisenergy.chnmuseum.party.common.util;
import java.math.BigDecimal;
import java.text.DecimalFormat;
public class CurrencyMathUtil {
private static int SCALE = 18;
public static int compare(String str1, String str2) {
BigDecimal a = new BigDecimal(str1).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal b = new BigDecimal(str2).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
return a.compareTo(b);
}
/**
* 乘法
* @param str1
* @param str2
* @return
*/
public static String multiply(String str1, String str2) {
BigDecimal a = new BigDecimal(str1).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal b = new BigDecimal(str2).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal c = a.multiply(b).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
return c.stripTrailingZeros().toPlainString();
}
/**
* 除法
* @param str1
* @param str2
* @return
*/
public static String divide(String str1, String str2) {
BigDecimal a = new BigDecimal(str1).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal b = new BigDecimal(str2).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal c = a.divide(b, SCALE, BigDecimal.ROUND_HALF_DOWN);
return c.stripTrailingZeros().toPlainString();
}
/**
* 加法
* @param str1
* @param str2
* @return
*/
public static String add(String str1, String str2) {
BigDecimal a = new BigDecimal(str1).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal b = new BigDecimal(str2).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal c = a.add(b).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
return c.stripTrailingZeros().toPlainString();
}
public static String add(Integer str1, Integer str2) {
BigDecimal a = new BigDecimal(str1.toString()).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal b = new BigDecimal(str2.toString()).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal c = a.add(b).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
return c.stripTrailingZeros().toPlainString();
}
public static Double add(Double d1, Double d2) {
BigDecimal a = new BigDecimal(d1.toString()).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal b = new BigDecimal(d2.toString()).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal c = a.add(b).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
return c.stripTrailingZeros().doubleValue();
}
/**
* 减法
* @param str1
* @param str2
* @return
*/
public static String subtract(String str1, String str2) {
BigDecimal a = new BigDecimal(str1).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal b = new BigDecimal(str2).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal c = a.subtract(b).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
return c.stripTrailingZeros().toPlainString();
}
public static Double subtract(Double str1, Double str2) {
BigDecimal a = new BigDecimal(str1.toString()).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal b = new BigDecimal(str2.toString()).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal c = a.subtract(b).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
return c.stripTrailingZeros().doubleValue();
}
public static String gweiToWei(String gwei) {
BigDecimal a = new BigDecimal(gwei).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal b = new BigDecimal("1000000000").setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal c = a.multiply(b).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
return c.stripTrailingZeros().toPlainString();
}
public static String ethToWei(String eth) {
BigDecimal a = new BigDecimal(eth).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal b = new BigDecimal("1000000000000000000").setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal c = a.multiply(b).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
return c.stripTrailingZeros().toPlainString();
}
public static String ethToGwei(String eth) {
BigDecimal a = new BigDecimal(eth).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal b = new BigDecimal("1000000000").setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal c = a.multiply(b).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
return c.stripTrailingZeros().toPlainString();
}
public static String gweiToEth(String gwei) {
BigDecimal a = new BigDecimal(gwei).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal b = new BigDecimal("1000000000").setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal c = a.divide(b).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
return c.stripTrailingZeros().toPlainString();
}
public static String weiToEth(String gwei) {
BigDecimal a = new BigDecimal(gwei).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal b = new BigDecimal("1000000000000000000").setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
BigDecimal c = a.divide(b).setScale(SCALE, BigDecimal.ROUND_HALF_DOWN);
return c.stripTrailingZeros().toPlainString();
}
public static String roundByScale(double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
if (scale == 0) {
return new DecimalFormat("0").format(v);
}
String formatStr = "0.";
for (int i = 0; i < scale; i++) {
formatStr = formatStr + "0";
}
return new DecimalFormat(formatStr).format(v);
}
}
package cn.wisenergy.chnmuseum.party.core.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Created by xulinglin on 2019/1/24
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RedisLock {
/**
* 上锁key值
* @return
*/
String value() default "";
/**
* 上锁超时时间
* @return
*/
long timeOut() default 3000;
/**
* 是否循环等待获取锁进行执行方法
* @return
*/
boolean required() default false;
/**
* 循环等待多少时间 时间单位秒
* @return
*/
long timeLock() default 0;
/**
* 是否开启事务
* 默认开启
* @return
*/
boolean transaction() default true;
}
package cn.wisenergy.chnmuseum.party.core.aop;
import cn.wisenergy.chnmuseum.party.common.util.RedisUtil;
import cn.wisenergy.chnmuseum.party.core.annotations.RedisLock;
import lombok.extern.java.Log;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.annotation.Order;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
/**
* Created by xulinglin on 2019/1/24
*/
@Aspect
@Order(-1)//保证该AOP在@Transactional之前执行
@Component
@Log
public class RedisLockInterceptor {
@Resource
private RedisTemplate<String, Object> redisTemplate;
@Resource
private RedisUtil redisUtil;
@Pointcut("@annotation(redisLock)")
public void pointCut(RedisLock redisLock) {}
/**
* 环绕通知
* @param proceedingJoinPoint
* @param redisLock
* @return
* @throws Throwable
*/
@Around("pointCut(redisLock)")
public Object around(ProceedingJoinPoint proceedingJoinPoint, RedisLock redisLock) throws Throwable {
//方法执行前时间
long currentTimeMillis= System.currentTimeMillis();
//获取当前值
String lockKey = redisLock.value();
//获取上锁超时时间
long time = redisLock.timeOut();
//获取循环等待多少时间
long timeLock = redisLock.timeLock();
//控制当前循环
boolean required = redisLock.required();
required = timeLock > 0;
//获取事务是否开启
boolean transaction = redisLock.transaction();
//获取随机id
String name = String.valueOf(UUID.randomUUID());
boolean flag = false;
try {
do {
//set到redis
flag = redisUtil.lock(lockKey,currentTimeMillis+"");
//执行添加了注解的方法并返回
if(flag){
Object result = proceedingJoinPoint.proceed();
return result;
}
}while (required);
}catch (Exception e){
e.printStackTrace();
}catch (Throwable throwable) {
throwable.printStackTrace();
}finally {
//最后在finally中删除
if(flag){
redisUtil.del(lockKey);
}
}
return null;
}
}
package cn.wisenergy.chnmuseum.party.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import cn.wisenergy.chnmuseum.party.model.TBoardPlayRank;
/**
* <pre>
* 展板播放排行 Mapper 接口
* </pre>
*
* @author Danny Lee
* @since 2021-03-26
*/
public interface TBoardPlayRankMapper extends BaseMapper<TBoardPlayRank> {
}
package cn.wisenergy.chnmuseum.party.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import cn.wisenergy.chnmuseum.party.model.TBoardPlayTrend;
/**
* <pre>
* 展板播放趋势 Mapper 接口
* </pre>
*
* @author Danny Lee
* @since 2021-03-26
*/
public interface TBoardPlayTrendMapper extends BaseMapper<TBoardPlayTrend> {
}
package cn.wisenergy.chnmuseum.party.mapper;
import cn.wisenergy.chnmuseum.party.model.TBoardPlayRank;
import cn.wisenergy.chnmuseum.party.model.TBoardPlayTrend;
import cn.wisenergy.chnmuseum.party.model.TDistrictBoardStatistic;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import cn.wisenergy.chnmuseum.party.model.TBoardStatistic;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.mapstruct.Mapper;
import java.util.List;
/**
* <pre>
* 展板统计信息表 Mapper 接口
* </pre>
*
* @author Danny Lee
* @since 2021-03-25
*/
@Mapper
public interface TBoardStatisticMapper extends BaseMapper<TBoardStatistic> {
public List<TBoardPlayRank> getBoardRankPageList(Page<TBoardPlayRank> page,TBoardPlayRank rank);
public List<TBoardPlayTrend> getBoardTrendPageList(Page<TBoardPlayTrend> page, TBoardPlayTrend trend);
public List<TDistrictBoardStatistic> getBoardDistrictPageList(Page<TDistrictBoardStatistic> page, TDistrictBoardStatistic trend);
}
package cn.wisenergy.chnmuseum.party.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import cn.wisenergy.chnmuseum.party.model.TDistrictBoardStatistic;
/**
* <pre>
* 地区看板播放统计 Mapper 接口
* </pre>
*
* @author Danny Lee
* @since 2021-03-26
*/
public interface TDistrictBoardStatisticMapper extends BaseMapper<TDistrictBoardStatistic> {
}
package cn.wisenergy.chnmuseum.party.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import cn.wisenergy.chnmuseum.party.common.validator.groups.Add;
import cn.wisenergy.chnmuseum.party.common.validator.groups.Update;
/**
* <p>
* 展板播放排行
* </p>
*
* @author Danny Lee
* @since 2021-03-26
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@TableName("t_board_play_rank")
@ApiModel(value = "展板播放排行", description = "展板播放排行")
public class TBoardPlayRank implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("ID")
@TableId(value = "id", type = IdType.ASSIGN_ID)
@NotNull(message = "ID不能为空", groups = {Update.class})
private String id;
@ApiModelProperty("看板ID")
@TableField("board_id")
@NotBlank(message = "看板ID不能为空", groups = {Add.class, Update.class})
private String boardId;
@ApiModelProperty("看板名称")
@TableField("board_name")
@NotBlank(message = "看板名称不能为空", groups = {Add.class, Update.class})
private String boardName;
@ApiModelProperty("播放次数")
@TableField("play_number")
private Integer playNumber;
@ApiModelProperty("机构id")
@TableField("organ_id")
private String organId;
@ApiModelProperty("播放时间")
@TableField("play_date")
private String playDate;
}
package cn.wisenergy.chnmuseum.party.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDate;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import cn.wisenergy.chnmuseum.party.common.validator.groups.Add;
import cn.wisenergy.chnmuseum.party.common.validator.groups.Update;
import com.baomidou.mybatisplus.annotation.TableField;
/**
* <p>
* 展板播放趋势
* </p>
*
* @author Danny Lee
* @since 2021-03-26
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@TableName("t_board_play_trend")
@ApiModel(value = "展板播放趋势", description = "展板播放趋势")
public class TBoardPlayTrend implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("播放次数")
@TableField("play_number")
private Integer playNumber;
@ApiModelProperty("播放时间 yyyy 统计周期为年 yyyyMM 统计周期为月")
@TableField(exist = false)
private String playDate;
@ApiModelProperty("机构id")
@TableField("organ_id")
private Integer organId;
}
package cn.wisenergy.chnmuseum.party.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import cn.wisenergy.chnmuseum.party.common.validator.groups.Add;
import cn.wisenergy.chnmuseum.party.common.validator.groups.Update;
/**
* <p>
* 展板统计信息表
* </p>
*
* @author Danny Lee
* @since 2021-03-25
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@TableName("t_board_statistic")
@ApiModel(value = "展板统计信息表", description = "展板统计信息表")
public class TBoardStatistic implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("主键id")
@TableId(value = "id", type = IdType.ASSIGN_ID)
@NotNull(message = "主键id不能为空", groups = {Update.class})
private String id;
@ApiModelProperty("展板id")
@TableField("board_id")
@NotBlank(message = "展板id不能为空", groups = {Add.class, Update.class})
private String boardId;
@ApiModelProperty("展板名称")
@TableField("board_name")
private String boardName;
@ApiModelProperty("播放机构id")
@TableField("organ_id")
private String organId;
@ApiModelProperty("机构所在地区id")
@TableField("area_id")
private Integer areaId;
@ApiModelProperty("播放次数")
@TableField("play_number")
private Integer playNumber;
@ApiModelProperty("播放日期yyyy-MM-dd")
@TableField("play_date")
private String playDate;
@ApiModelProperty("用户id")
@TableField(exist = false)
private String userId;
}
package cn.wisenergy.chnmuseum.party.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import cn.wisenergy.chnmuseum.party.common.validator.groups.Add;
import cn.wisenergy.chnmuseum.party.common.validator.groups.Update;
import com.baomidou.mybatisplus.annotation.TableField;
/**
* <p>
* 地区看板播放统计
* </p>
*
* @author Danny Lee
* @since 2021-03-26
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@TableName("t_district_board_statistic")
@ApiModel(value = "地区看板播放统计", description = "地区看板播放统计")
public class TDistrictBoardStatistic implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("播放次数")
@TableField("play_number")
private Integer playNumber;
@ApiModelProperty("地区名称")
@TableField(exist = false)
private String areaName;
@ApiModelProperty("看板数量")
@TableField(exist = false)
private Integer boardCnt;
}
package cn.wisenergy.chnmuseum.party.service;
import cn.wisenergy.chnmuseum.party.model.TBoardPlayRank;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 展板播放排行 服务接口
* </p>
*
* @author Danny Lee
* @since 2021-03-26
*/
public interface TBoardPlayRankService extends IService<TBoardPlayRank> {
}
package cn.wisenergy.chnmuseum.party.service;
import cn.wisenergy.chnmuseum.party.model.TBoardPlayTrend;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 展板播放趋势 服务接口
* </p>
*
* @author Danny Lee
* @since 2021-03-26
*/
public interface TBoardPlayTrendService extends IService<TBoardPlayTrend> {
}
package cn.wisenergy.chnmuseum.party.service;
import cn.wisenergy.chnmuseum.party.model.TBoardPlayRank;
import cn.wisenergy.chnmuseum.party.model.TBoardPlayTrend;
import cn.wisenergy.chnmuseum.party.model.TBoardStatistic;
import cn.wisenergy.chnmuseum.party.model.TDistrictBoardStatistic;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 展板统计信息表 服务接口
* </p>
*
* @author Danny Lee
* @since 2021-03-25
*/
public interface TBoardStatisticService extends IService<TBoardStatistic> {
Object boardStatisticInfo(TBoardStatistic tBoardStatistic, boolean autoUpdate);
/**
* 更新展板统计信息
*/
void updateBoardStatisticInfo(List<TBoardStatistic> statisticList, String redisKey);
/**
* 获取展板播放排行
* @param page
* @param rank
* @return
*/
Page<TBoardPlayRank> getBoardRankPageList(Page<TBoardPlayRank> page,TBoardPlayRank rank);
/**
* 获取展板播放趋势
* @param page
* @param rank
* @return
*/
Page<TBoardPlayTrend> getBoardTrendPageList(Page<TBoardPlayTrend> page, TBoardPlayTrend rank);
/**
* 获取地区看板统计信息
* @param page
* @param district
* @return
*/
Page<TDistrictBoardStatistic> getBoardDistrictPageList(Page<TDistrictBoardStatistic> page, TDistrictBoardStatistic district);
}
package cn.wisenergy.chnmuseum.party.service;
import cn.wisenergy.chnmuseum.party.model.TDistrictBoardStatistic;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 地区看板播放统计 服务接口
* </p>
*
* @author Danny Lee
* @since 2021-03-26
*/
public interface TDistrictBoardStatisticService extends IService<TDistrictBoardStatistic> {
}
package cn.wisenergy.chnmuseum.party.service.impl;
import cn.wisenergy.chnmuseum.party.model.TBoardPlayRank;
import cn.wisenergy.chnmuseum.party.mapper.TBoardPlayRankMapper;
import cn.wisenergy.chnmuseum.party.service.TBoardPlayRankService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
/**
* <pre>
* 展板播放排行 服务实现类
* </pre>
*
* @author Danny Lee
* @since 2021-03-26
*/
@Slf4j
@Service
public class TBoardPlayRankServiceImpl extends ServiceImpl<TBoardPlayRankMapper, TBoardPlayRank> implements TBoardPlayRankService {
@Autowired
private TBoardPlayRankMapper tBoardPlayRankMapper;
}
package cn.wisenergy.chnmuseum.party.service.impl;
import cn.wisenergy.chnmuseum.party.model.TBoardPlayTrend;
import cn.wisenergy.chnmuseum.party.mapper.TBoardPlayTrendMapper;
import cn.wisenergy.chnmuseum.party.service.TBoardPlayTrendService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
/**
* <pre>
* 展板播放趋势 服务实现类
* </pre>
*
* @author Danny Lee
* @since 2021-03-26
*/
@Slf4j
@Service
public class TBoardPlayTrendServiceImpl extends ServiceImpl<TBoardPlayTrendMapper, TBoardPlayTrend> implements TBoardPlayTrendService {
@Autowired
private TBoardPlayTrendMapper tBoardPlayTrendMapper;
}
package cn.wisenergy.chnmuseum.party.service.impl;
import cn.wisenergy.chnmuseum.party.common.util.CurrencyMathUtil;
import cn.wisenergy.chnmuseum.party.common.util.DateUtil;
import cn.wisenergy.chnmuseum.party.common.util.RedisUtil;
import cn.wisenergy.chnmuseum.party.core.annotations.RedisLock;
import cn.wisenergy.chnmuseum.party.model.*;
import cn.wisenergy.chnmuseum.party.mapper.TBoardStatisticMapper;
import cn.wisenergy.chnmuseum.party.service.TBoardStatisticService;
import cn.wisenergy.chnmuseum.party.service.TUserService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <pre>
* 展板统计信息表 服务实现类
* </pre>
*
* @author Danny Lee
* @since 2021-03-25
*/
@Slf4j
@Service
public class TBoardStatisticServiceImpl extends ServiceImpl<TBoardStatisticMapper, TBoardStatistic> implements TBoardStatisticService {
@Autowired
private TBoardStatisticMapper boardStatisticMapper;
@Autowired
private TUserService userService;
@Autowired
private RedisUtil redisUtil;
@Autowired
private RedisTemplate<String,? extends Object> redisTemplate;
private static String STATISTIC_BOARD_INFO_KEY = "STATISTIC_BOARD_INFO_KEY"; // 展板统计信息key
@Override
@RedisLock(value = "boardLock",timeLock = 20 ,required = true,timeOut = 1100000)
public Object boardStatisticInfo(TBoardStatistic tBoardStatistic, boolean autoUpdate) {
// 根据用户id获取用户信息
TUser user = userService.selectById(tBoardStatistic.getUserId());
tBoardStatistic.setOrganId(user.getOrgId()); // 用户所属机构
tBoardStatistic.setAreaId(Integer.parseInt(user.getAreaId()));// 用户所属地区
if (StringUtils.isEmpty(tBoardStatistic.getPlayDate())){
// 获取当前日期
tBoardStatistic.setPlayDate(DateUtil.getCurrentDate("yyyyMMdd"));
}
List<TBoardStatistic> statisticList = new ArrayList<>();
String redisKey = STATISTIC_BOARD_INFO_KEY;
// 获取统计信息缓存数据
String businessJsonArray = (String) redisUtil.get(redisKey);
// 缓存数据不为空,转换数据
if (StringUtils.isNotEmpty(businessJsonArray)){
statisticList = JSONObject.parseArray(businessJsonArray, TBoardStatistic.class);
}
statisticList.add(tBoardStatistic);
redisUtil.set(redisKey, JSON.toJSON(statisticList).toString());
// 统计记录数等于100 时,或者需要自动更新时 汇总统计数据
if (statisticList.size() >= 100 || autoUpdate){
// 更新展板统计信息
updateBoardStatisticInfo(statisticList,redisKey);
}
return true;
}
@Override
public Page<TBoardPlayRank> getBoardRankPageList(Page<TBoardPlayRank> page,TBoardPlayRank rank) {
page.setRecords(boardStatisticMapper.getBoardRankPageList(page,rank));
return page;
}
@Override
public Page<TBoardPlayTrend> getBoardTrendPageList(Page<TBoardPlayTrend> page, TBoardPlayTrend rank) {
page.setRecords(boardStatisticMapper.getBoardTrendPageList(page,rank));
return page;
}
@Override
public Page<TDistrictBoardStatistic> getBoardDistrictPageList(Page<TDistrictBoardStatistic> page, TDistrictBoardStatistic district){
page.setRecords(boardStatisticMapper.getBoardDistrictPageList(page,district));
return page;
}
/**
* 更新展板统计信息
*/
@Override
public void updateBoardStatisticInfo(List<TBoardStatistic> statisticList,String redisKey) {
Map<String,TBoardStatistic> map = new HashMap<>();
statisticList.stream().forEach(s->{
String key = s.getBoardId()+"_"+s.getOrganId()+"_"+s.getPlayDate();
// 如果有对应的展板记录,累计播放量
if (map.containsKey(key)){
TBoardStatistic boardStatistic = map.get(key);
boardStatistic.setPlayNumber(Integer.parseInt(CurrencyMathUtil.add(boardStatistic.getPlayNumber(),s.getPlayNumber())));
map.put(key,boardStatistic);
}else {
// 如果无对应的展板记录,插入到map中
map.put(key,s);
}
});
// 更新数据库展板统计信息
for (String key : map.keySet()){
TBoardStatistic bs = map.get(key);
// 查询数据库是否有对应的记录
QueryWrapper<TBoardStatistic> qw = new QueryWrapper<>();
qw.eq("board_id",bs.getBoardId());
qw.eq("organ_id",bs.getOrganId());
qw.eq("play_date",bs.getPlayDate());
TBoardStatistic tbDB = this.getOne(qw);
// 如果数据库存在统计记录,则累计统计数量
if (tbDB != null){
tbDB.setPlayNumber(Integer.parseInt(CurrencyMathUtil.add(bs.getPlayNumber(),tbDB.getPlayNumber())));
this.updateById(tbDB);
map.put(key,tbDB);
}else {
// 如果数据库不存在统计记录,则增加统计数据
this.save(bs);
}
}
// 更新展板播放排行 t_board_play_rank
// 插入
// 看板播放趋势
// 地区看板播放统计
// 播放数据概览
// 清空redis
redisUtil.del(redisKey);
}
}
package cn.wisenergy.chnmuseum.party.service.impl;
import cn.wisenergy.chnmuseum.party.model.TDistrictBoardStatistic;
import cn.wisenergy.chnmuseum.party.mapper.TDistrictBoardStatisticMapper;
import cn.wisenergy.chnmuseum.party.service.TDistrictBoardStatisticService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
/**
* <pre>
* 地区看板播放统计 服务实现类
* </pre>
*
* @author Danny Lee
* @since 2021-03-26
*/
@Slf4j
@Service
public class TDistrictBoardStatisticServiceImpl extends ServiceImpl<TDistrictBoardStatisticMapper, TDistrictBoardStatistic> implements TDistrictBoardStatisticService {
@Autowired
private TDistrictBoardStatisticMapper tDistrictBoardStatisticMapper;
}
...@@ -4,10 +4,12 @@ import cn.wisenergy.chnmuseum.party.auth.SHA256PasswordEncryptionService; ...@@ -4,10 +4,12 @@ import cn.wisenergy.chnmuseum.party.auth.SHA256PasswordEncryptionService;
import cn.wisenergy.chnmuseum.party.auth.util.JwtTokenUtil; import cn.wisenergy.chnmuseum.party.auth.util.JwtTokenUtil;
import cn.wisenergy.chnmuseum.party.common.enums.LanguageEnum; import cn.wisenergy.chnmuseum.party.common.enums.LanguageEnum;
import cn.wisenergy.chnmuseum.party.common.util.TimeUtils; import cn.wisenergy.chnmuseum.party.common.util.TimeUtils;
import cn.wisenergy.chnmuseum.party.common.validator.groups.Add;
import cn.wisenergy.chnmuseum.party.common.vo.GenericPageParam; import cn.wisenergy.chnmuseum.party.common.vo.GenericPageParam;
import cn.wisenergy.chnmuseum.party.model.*; import cn.wisenergy.chnmuseum.party.model.*;
import cn.wisenergy.chnmuseum.party.service.ExhibitionBoardService; import cn.wisenergy.chnmuseum.party.service.ExhibitionBoardService;
import cn.wisenergy.chnmuseum.party.service.RunLogService; import cn.wisenergy.chnmuseum.party.service.RunLogService;
import cn.wisenergy.chnmuseum.party.service.TBoardStatisticService;
import cn.wisenergy.chnmuseum.party.service.impl.*; import cn.wisenergy.chnmuseum.party.service.impl.*;
import cn.wisenergy.chnmuseum.party.web.controller.base.BaseController; import cn.wisenergy.chnmuseum.party.web.controller.base.BaseController;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
...@@ -23,12 +25,14 @@ import org.apache.commons.lang3.StringUtils; ...@@ -23,12 +25,14 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils; import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.DisabledAccountException; import org.apache.shiro.authc.DisabledAccountException;
import org.apache.shiro.authc.IncorrectCredentialsException; import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations; import org.springframework.data.redis.core.ValueOperations;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
...@@ -69,6 +73,9 @@ public class ChinaMobileRestApiController extends BaseController { ...@@ -69,6 +73,9 @@ public class ChinaMobileRestApiController extends BaseController {
@Resource @Resource
private ExhibitionBoardService exhibitionBoardService; private ExhibitionBoardService exhibitionBoardService;
@Resource
private TBoardStatisticService tBoardStatisticService;
private static final String SHIRO_JWT_TOKEN = "shiro:jwt:token:"; private static final String SHIRO_JWT_TOKEN = "shiro:jwt:token:";
//用户登录次数计数 redisKey 前缀 //用户登录次数计数 redisKey 前缀
private static final String SHIRO_LOGIN_COUNT = "shiro_login_count_"; private static final String SHIRO_LOGIN_COUNT = "shiro_login_count_";
...@@ -419,4 +426,26 @@ public class ChinaMobileRestApiController extends BaseController { ...@@ -419,4 +426,26 @@ public class ChinaMobileRestApiController extends BaseController {
return resultMap; return resultMap;
} }
@PostMapping("/equitment/playLog")
@RequiresPermissions("t:board:statistic:statisticBoardInfo")
@ApiOperation(value = "播放记录信息反馈", notes = "播放记录信息反馈")
public Map<String, Object> boardStatisticInfo(@Validated(value = {Add.class}) TBoardStatistic tBoardStatistic) {
// 展板信息统计
try{
Object result = tBoardStatisticService.boardStatisticInfo(tBoardStatistic,false);
// 返回操作结果
if (result != null && (boolean)result) {
return getSuccessResult();
}
}catch (Exception e){
e.printStackTrace();
}
// 保存失败
return getFailResult();
}
} }
package cn.wisenergy.chnmuseum.party.web.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import cn.wisenergy.chnmuseum.party.web.controller.base.BaseController;
import cn.wisenergy.chnmuseum.party.model.TBoardPlayRank;
import cn.wisenergy.chnmuseum.party.service.TBoardPlayRankService;
import cn.wisenergy.chnmuseum.party.common.enums.AuditStatusEnum;
import cn.wisenergy.chnmuseum.party.common.validator.groups.Add;
import cn.wisenergy.chnmuseum.party.common.validator.groups.Update;
import cn.wisenergy.chnmuseum.party.common.vo.GenericPageParam;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.stereotype.Controller;
import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
/**
* <pre>
* 展板播放排行 前端控制器
* </pre>
*
* @author Danny Lee
* @since 2021-03-26
*/
@Slf4j
@RestController
@RequestMapping("/tBoardPlayRank")
@Api(tags = {"展板播放排行操作接口"})
public class TBoardPlayRankController extends BaseController {
@Resource
private TBoardPlayRankService tBoardPlayRankService;
@PostMapping("/batchSave")
@RequiresPermissions("t:board:play:rank:batch:save")
@ApiOperation(value = "批量添加展板播放排行", notes = "批量添加展板播放排行")
public Map<String, Object> batchSaveTBoardPlayRank(@Validated(value = {Add.class}) List<TBoardPlayRank> tBoardPlayRankList) {
// 保存业务节点信息
boolean result = tBoardPlayRankService.saveBatch(tBoardPlayRankList);
// 返回操作结果
if (result) {
return getSuccessResult();
} else {
// 保存失败
return getFailResult();
}
}
@PostMapping("/save")
@RequiresPermissions("t:board:play:rank:save")
@ApiOperation(value = "添加展板播放排行", notes = "添加展板播放排行")
public Map<String, Object> saveTBoardPlayRank(@Validated(value = {Add.class}) TBoardPlayRank tBoardPlayRank) {
// 保存业务节点信息
boolean result = tBoardPlayRankService.save(tBoardPlayRank);
// 返回操作结果
if (result) {
return getSuccessResult();
} else {
// 保存失败
return getFailResult();
}
}
@PutMapping("/update")
@RequiresPermissions("t:board:play:rank:update")
@ApiOperation(value = "修改展板播放排行信息", notes = "修改展板播放排行信息")
public Map<String, Object> updateTBoardPlayRank(@Validated(value = {Update.class}) TBoardPlayRank tBoardPlayRank) {
boolean flag = tBoardPlayRankService.updateById(tBoardPlayRank);
if (flag) {
return getSuccessResult();
}
return getFailResult();
}
// @PutMapping("/updateAuditStatus/{id}")
// @RequiresPermissions("t:board:play:rank:update:audit:status")
// @ApiOperation(value = "更新展板播放排行审核状态", notes = "更新展板播放排行审核状态")
// @ApiImplicitParams(value = {
// @ApiImplicitParam(name = "id", value = "标识ID", dataType = "String", paramType = "path"),
// @ApiImplicitParam(name = "status", value = "状态", paramType = "query", dataType = "String")
// })
// public Map<String, Object> updateStatus(@NotNull(message = "展板播放排行ID不能为空") @PathVariable("id") String id, @RequestParam("status") AuditStatusEnum status) {
// UpdateWrapper<TBoardPlayRank> updateWrapper = new UpdateWrapper<>();
// updateWrapper.eq("id", id);
// updateWrapper.eq("audit_status", status.name());
// boolean flag = tBoardPlayRankService.update(updateWrapper);
// if (flag) {
// return getSuccessResult();
// }
// return getFailResult();
// }
@DeleteMapping("/delete/{id}")
@RequiresPermissions("t:board:play:rank:delete")
@ApiOperation(value = "根据ID删除展板播放排行", notes = "根据ID删除展板播放排行")
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "id", value = "标识ID", paramType = "path", dataType = "String")
})
public Map<String, Object> deleteTBoardPlayRank(@PathVariable("id") String id) {
boolean result = tBoardPlayRankService.removeById(id);
if (result) {
return getSuccessResult();
}
return getFailResult();
}
@GetMapping("/getList")
@RequiresPermissions("t:board:play:rank:list")
@ApiOperation(value = "获取展板播放排行全部列表(无分页)", notes = "获取展板播放排行全部列表(无分页)")
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "auditStatus", value = "审核状态", paramType = "query", dataType = "String")
})
public Map<String, Object> getTBoardPlayRankList(@RequestParam(value = "auditStatus", defaultValue = "APPROVED_FINAL", required = false) AuditStatusEnum auditStatus) {
List<TBoardPlayRank> tBoardPlayRankList = tBoardPlayRankService.list();
return getResult(tBoardPlayRankList);
}
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "_index", value = "分页起始偏移量", paramType = "query", dataType = "Integer"),
@ApiImplicitParam(name = "_size", value = "返回条数", paramType = "query", dataType = "Integer"),
@ApiImplicitParam(name = "nameOrCode", value = "名称或编码", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = "startDate", value = "创建时间-开始", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = "endDate", value = "创建时间-结束", paramType = "query", dataType = "String")
})
@PostMapping("/getPageList")
@RequiresPermissions("t:board:play:rank:page")
@ApiOperation(value = "获取展板播放排行分页列表", notes = "获取展板播放排行分页列表")
public Map<String, Object> getTBoardPlayRankPageList(GenericPageParam genericPageParam) {
LambdaQueryWrapper<TBoardPlayRank> queryWrapper = new LambdaQueryWrapper<>();
// // 对名称或编码模糊查询
// if (StringUtils.isNotBlank(genericPageParam.getNameOrCode())) {
// queryWrapper.like(TBoardPlayRank::getName, genericPageParam.getNameOrCode());
// }
// // 根据创建时间区间检索
// if (genericPageParam.getStartDate() != null && genericPageParam.getEndDate() != null) {
// queryWrapper.ge(TBoardPlayRank::getCreateTime, genericPageParam.getStartDate().atTime(0, 0, 0))
// .le(TBoardPlayRank::getCreateTime, genericPageParam.getEndDate().atTime(23, 59, 59));
// }
// // 设置排序规则
// queryWrapper.orderByDesc(TBoardPlayRank::getCreateTime);
// // 设置查询内容
// queryWrapper.select(
// TBoardPlayRank::getId,
// TBoardPlayRank::getName,
// TBoardPlayRank::getAuditStatus,
// TBoardPlayRank::getCreateTime,
// TBoardPlayRank::getUpdateTime);
Page<TBoardPlayRank> page = this.tBoardPlayRankService.page(getPage(), queryWrapper);
for (TBoardPlayRank tBoardPlayRank : page.getRecords()) {
}
return getResult(page);
}
@ApiOperation(value = "获取展板播放排行详情", notes = "获取展板播放排行详情")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "标识ID", dataType = "String", paramType = "path")
})
@GetMapping("/get/{id}")
@RequiresPermissions("t:board:play:rank:get:id")
public Map<String, Object> getById(@PathVariable("id") String id) {
TBoardPlayRank tBoardPlayRank = tBoardPlayRankService.getById(id);
return getResult(tBoardPlayRank);
}
}
//package cn.wisenergy.chnmuseum.party.web.controller;
//
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import cn.wisenergy.chnmuseum.party.web.controller.base.BaseController;
//import cn.wisenergy.chnmuseum.party.model.TBoardPlayTrend;
//import cn.wisenergy.chnmuseum.party.service.TBoardPlayTrendService;
//import cn.wisenergy.chnmuseum.party.common.enums.AuditStatusEnum;
//import cn.wisenergy.chnmuseum.party.common.validator.groups.Add;
//import cn.wisenergy.chnmuseum.party.common.validator.groups.Update;
//import cn.wisenergy.chnmuseum.party.common.vo.GenericPageParam;
//
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiImplicitParam;
//import io.swagger.annotations.ApiImplicitParams;
//import io.swagger.annotations.ApiOperation;
//
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.apache.shiro.authz.annotation.RequiresPermissions;
//import org.springframework.validation.annotation.Validated;
//import org.springframework.web.bind.annotation.*;
//import org.springframework.stereotype.Controller;
//
//import javax.annotation.Resource;
//import javax.validation.constraints.NotNull;
//import java.util.List;
//import java.util.Map;
//
///**
// * <pre>
// * 展板播放趋势 前端控制器
// * </pre>
// *
// * @author Danny Lee
// * @since 2021-03-26
// */
//@Slf4j
//@RestController
//@RequestMapping("/tBoardPlayTrend")
//@Api(tags = {"展板播放趋势操作接口"})
//public class TBoardPlayTrendController extends BaseController {
//
// @Resource
// private TBoardPlayTrendService tBoardPlayTrendService;
//
// @PostMapping("/batchSave")
// @RequiresPermissions("t:board:play:trend:batch:save")
// @ApiOperation(value = "批量添加展板播放趋势", notes = "批量添加展板播放趋势")
// public Map<String, Object> batchSaveTBoardPlayTrend(@Validated(value = {Add.class}) List<TBoardPlayTrend> tBoardPlayTrendList) {
// // 保存业务节点信息
// boolean result = tBoardPlayTrendService.saveBatch(tBoardPlayTrendList);
// // 返回操作结果
// if (result) {
// return getSuccessResult();
// } else {
// // 保存失败
// return getFailResult();
// }
// }
//
// @PostMapping("/save")
// @RequiresPermissions("t:board:play:trend:save")
// @ApiOperation(value = "添加展板播放趋势", notes = "添加展板播放趋势")
// public Map<String, Object> saveTBoardPlayTrend(@Validated(value = {Add.class}) TBoardPlayTrend tBoardPlayTrend) {
// // 保存业务节点信息
// boolean result = tBoardPlayTrendService.save(tBoardPlayTrend);
// // 返回操作结果
// if (result) {
// return getSuccessResult();
// } else {
// // 保存失败
// return getFailResult();
// }
// }
//
// @PutMapping("/update")
// @RequiresPermissions("t:board:play:trend:update")
// @ApiOperation(value = "修改展板播放趋势信息", notes = "修改展板播放趋势信息")
// public Map<String, Object> updateTBoardPlayTrend(@Validated(value = {Update.class}) TBoardPlayTrend tBoardPlayTrend) {
// boolean flag = tBoardPlayTrendService.updateById(tBoardPlayTrend);
// if (flag) {
// return getSuccessResult();
// }
// return getFailResult();
// }
//
//// @PutMapping("/updateAuditStatus/{id}")
//// @RequiresPermissions("t:board:play:trend:update:audit:status")
//// @ApiOperation(value = "更新展板播放趋势审核状态", notes = "更新展板播放趋势审核状态")
//// @ApiImplicitParams(value = {
//// @ApiImplicitParam(name = "id", value = "标识ID", dataType = "String", paramType = "path"),
//// @ApiImplicitParam(name = "status", value = "状态", paramType = "query", dataType = "String")
//// })
//// public Map<String, Object> updateStatus(@NotNull(message = "展板播放趋势ID不能为空") @PathVariable("id") String id, @RequestParam("status") AuditStatusEnum status) {
//// UpdateWrapper<TBoardPlayTrend> updateWrapper = new UpdateWrapper<>();
//// updateWrapper.eq("id", id);
//// updateWrapper.eq("audit_status", status.name());
//// boolean flag = tBoardPlayTrendService.update(updateWrapper);
//// if (flag) {
//// return getSuccessResult();
//// }
//// return getFailResult();
//// }
//
// @DeleteMapping("/delete/{id}")
// @RequiresPermissions("t:board:play:trend:delete")
// @ApiOperation(value = "根据ID删除展板播放趋势", notes = "根据ID删除展板播放趋势")
// @ApiImplicitParams(value = {
// @ApiImplicitParam(name = "id", value = "标识ID", paramType = "path", dataType = "String")
// })
// public Map<String, Object> deleteTBoardPlayTrend(@PathVariable("id") String id) {
// boolean result = tBoardPlayTrendService.removeById(id);
// if (result) {
// return getSuccessResult();
// }
// return getFailResult();
// }
//
// @GetMapping("/getList")
// @RequiresPermissions("t:board:play:trend:list")
// @ApiOperation(value = "获取展板播放趋势全部列表(无分页)", notes = "获取展板播放趋势全部列表(无分页)")
// @ApiImplicitParams(value = {
// @ApiImplicitParam(name = "auditStatus", value = "审核状态", paramType = "query", dataType = "String")
// })
// public Map<String, Object> getTBoardPlayTrendList(@RequestParam(value = "auditStatus", defaultValue = "APPROVED_FINAL", required = false) AuditStatusEnum auditStatus) {
// List<TBoardPlayTrend> tBoardPlayTrendList = tBoardPlayTrendService.list();
// return getResult(tBoardPlayTrendList);
// }
//
// @ApiImplicitParams(value = {
// @ApiImplicitParam(name = "_index", value = "分页起始偏移量", paramType = "query", dataType = "Integer"),
// @ApiImplicitParam(name = "_size", value = "返回条数", paramType = "query", dataType = "Integer"),
// @ApiImplicitParam(name = "nameOrCode", value = "名称或编码", paramType = "query", dataType = "String"),
// @ApiImplicitParam(name = "startDate", value = "创建时间-开始", paramType = "query", dataType = "String"),
// @ApiImplicitParam(name = "endDate", value = "创建时间-结束", paramType = "query", dataType = "String")
// })
// @PostMapping("/getPageList")
// @RequiresPermissions("t:board:play:trend:page")
// @ApiOperation(value = "获取展板播放趋势分页列表", notes = "获取展板播放趋势分页列表")
// public Map<String, Object> getTBoardPlayTrendPageList(GenericPageParam genericPageParam) {
// LambdaQueryWrapper<TBoardPlayTrend> queryWrapper = new LambdaQueryWrapper<>();
// // 对名称或编码模糊查询
//// if (StringUtils.isNotBlank(genericPageParam.getNameOrCode())) {
//// queryWrapper.like(TBoardPlayTrend::getName, genericPageParam.getNameOrCode());
//// }
//// // 根据创建时间区间检索
//// if (genericPageParam.getStartDate() != null && genericPageParam.getEndDate() != null) {
//// queryWrapper.ge(TBoardPlayTrend::getCreateTime, genericPageParam.getStartDate().atTime(0, 0, 0))
//// .le(TBoardPlayTrend::getCreateTime, genericPageParam.getEndDate().atTime(23, 59, 59));
//// }
//// // 设置排序规则
//// queryWrapper.orderByDesc(TBoardPlayTrend::getCreateTime);
//// // 设置查询内容
//// queryWrapper.select(
//// TBoardPlayTrend::getId,
//// TBoardPlayTrend::getName,
//// TBoardPlayTrend::getAuditStatus,
//// TBoardPlayTrend::getCreateTime,
//// TBoardPlayTrend::getUpdateTime);
// Page<TBoardPlayTrend> page = this.tBoardPlayTrendService.page(getPage(), queryWrapper);
// for (TBoardPlayTrend tBoardPlayTrend : page.getRecords()) {
//
// }
// return getResult(page);
// }
//
// @ApiOperation(value = "获取展板播放趋势详情", notes = "获取展板播放趋势详情")
// @ApiImplicitParams({
// @ApiImplicitParam(name = "id", value = "标识ID", dataType = "String", paramType = "path")
// })
// @GetMapping("/get/{id}")
// @RequiresPermissions("t:board:play:trend:get:id")
// public Map<String, Object> getById(@PathVariable("id") String id) {
// TBoardPlayTrend tBoardPlayTrend = tBoardPlayTrendService.getById(id);
// return getResult(tBoardPlayTrend);
// }
//
//}
//
//package cn.wisenergy.chnmuseum.party.web.controller;
//
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import cn.wisenergy.chnmuseum.party.web.controller.base.BaseController;
//import cn.wisenergy.chnmuseum.party.model.TDistrictBoardStatistic;
//import cn.wisenergy.chnmuseum.party.service.TDistrictBoardStatisticService;
//import cn.wisenergy.chnmuseum.party.common.enums.AuditStatusEnum;
//import cn.wisenergy.chnmuseum.party.common.validator.groups.Add;
//import cn.wisenergy.chnmuseum.party.common.validator.groups.Update;
//import cn.wisenergy.chnmuseum.party.common.vo.GenericPageParam;
//
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiImplicitParam;
//import io.swagger.annotations.ApiImplicitParams;
//import io.swagger.annotations.ApiOperation;
//
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.apache.shiro.authz.annotation.RequiresPermissions;
//import org.springframework.validation.annotation.Validated;
//import org.springframework.web.bind.annotation.*;
//import org.springframework.stereotype.Controller;
//
//import javax.annotation.Resource;
//import javax.validation.constraints.NotNull;
//import java.util.List;
//import java.util.Map;
//
///**
// * <pre>
// * 地区看板播放统计 前端控制器
// * </pre>
// *
// * @author Danny Lee
// * @since 2021-03-26
// */
//@Slf4j
//@RestController
//@RequestMapping("/tDistrictBoardStatistic")
//@Api(tags = {"地区看板播放统计操作接口"})
//public class TDistrictBoardStatisticController extends BaseController {
//
// @Resource
// private TDistrictBoardStatisticService tDistrictBoardStatisticService;
//
// @PostMapping("/batchSave")
// @RequiresPermissions("t:district:board:statistic:batch:save")
// @ApiOperation(value = "批量添加地区看板播放统计", notes = "批量添加地区看板播放统计")
// public Map<String, Object> batchSaveTDistrictBoardStatistic(@Validated(value = {Add.class}) List<TDistrictBoardStatistic> tDistrictBoardStatisticList) {
// // 保存业务节点信息
// boolean result = tDistrictBoardStatisticService.saveBatch(tDistrictBoardStatisticList);
// // 返回操作结果
// if (result) {
// return getSuccessResult();
// } else {
// // 保存失败
// return getFailResult();
// }
// }
//
// @PostMapping("/save")
// @RequiresPermissions("t:district:board:statistic:save")
// @ApiOperation(value = "添加地区看板播放统计", notes = "添加地区看板播放统计")
// public Map<String, Object> saveTDistrictBoardStatistic(@Validated(value = {Add.class}) TDistrictBoardStatistic tDistrictBoardStatistic) {
// // 保存业务节点信息
// boolean result = tDistrictBoardStatisticService.save(tDistrictBoardStatistic);
// // 返回操作结果
// if (result) {
// return getSuccessResult();
// } else {
// // 保存失败
// return getFailResult();
// }
// }
//
// @PutMapping("/update")
// @RequiresPermissions("t:district:board:statistic:update")
// @ApiOperation(value = "修改地区看板播放统计信息", notes = "修改地区看板播放统计信息")
// public Map<String, Object> updateTDistrictBoardStatistic(@Validated(value = {Update.class}) TDistrictBoardStatistic tDistrictBoardStatistic) {
// boolean flag = tDistrictBoardStatisticService.updateById(tDistrictBoardStatistic);
// if (flag) {
// return getSuccessResult();
// }
// return getFailResult();
// }
//
//// @PutMapping("/updateAuditStatus/{id}")
//// @RequiresPermissions("t:district:board:statistic:update:audit:status")
//// @ApiOperation(value = "更新地区看板播放统计审核状态", notes = "更新地区看板播放统计审核状态")
//// @ApiImplicitParams(value = {
//// @ApiImplicitParam(name = "id", value = "标识ID", dataType = "String", paramType = "path"),
//// @ApiImplicitParam(name = "status", value = "状态", paramType = "query", dataType = "String")
//// })
//// public Map<String, Object> updateStatus(@NotNull(message = "地区看板播放统计ID不能为空") @PathVariable("id") String id, @RequestParam("status") AuditStatusEnum status) {
//// UpdateWrapper<TDistrictBoardStatistic> updateWrapper = new UpdateWrapper<>();
//// updateWrapper.eq("id", id);
//// updateWrapper.eq("audit_status", status.name());
//// boolean flag = tDistrictBoardStatisticService.update(updateWrapper);
//// if (flag) {
//// return getSuccessResult();
//// }
//// return getFailResult();
//// }
//
// @DeleteMapping("/delete/{id}")
// @RequiresPermissions("t:district:board:statistic:delete")
// @ApiOperation(value = "根据ID删除地区看板播放统计", notes = "根据ID删除地区看板播放统计")
// @ApiImplicitParams(value = {
// @ApiImplicitParam(name = "id", value = "标识ID", paramType = "path", dataType = "String")
// })
// public Map<String, Object> deleteTDistrictBoardStatistic(@PathVariable("id") String id) {
// boolean result = tDistrictBoardStatisticService.removeById(id);
// if (result) {
// return getSuccessResult();
// }
// return getFailResult();
// }
//
// @GetMapping("/getList")
// @RequiresPermissions("t:district:board:statistic:list")
// @ApiOperation(value = "获取地区看板播放统计全部列表(无分页)", notes = "获取地区看板播放统计全部列表(无分页)")
// @ApiImplicitParams(value = {
// @ApiImplicitParam(name = "auditStatus", value = "审核状态", paramType = "query", dataType = "String")
// })
// public Map<String, Object> getTDistrictBoardStatisticList(@RequestParam(value = "auditStatus", defaultValue = "APPROVED_FINAL", required = false) AuditStatusEnum auditStatus) {
// List<TDistrictBoardStatistic> tDistrictBoardStatisticList = tDistrictBoardStatisticService.list();
// return getResult(tDistrictBoardStatisticList);
// }
//
// @ApiImplicitParams(value = {
// @ApiImplicitParam(name = "_index", value = "分页起始偏移量", paramType = "query", dataType = "Integer"),
// @ApiImplicitParam(name = "_size", value = "返回条数", paramType = "query", dataType = "Integer"),
// @ApiImplicitParam(name = "nameOrCode", value = "名称或编码", paramType = "query", dataType = "String"),
// @ApiImplicitParam(name = "startDate", value = "创建时间-开始", paramType = "query", dataType = "String"),
// @ApiImplicitParam(name = "endDate", value = "创建时间-结束", paramType = "query", dataType = "String")
// })
// @PostMapping("/getPageList")
// @RequiresPermissions("t:district:board:statistic:page")
// @ApiOperation(value = "获取地区看板播放统计分页列表", notes = "获取地区看板播放统计分页列表")
// public Map<String, Object> getTDistrictBoardStatisticPageList(GenericPageParam genericPageParam) {
// LambdaQueryWrapper<TDistrictBoardStatistic> queryWrapper = new LambdaQueryWrapper<>();
// // 对名称或编码模糊查询
//// if (StringUtils.isNotBlank(genericPageParam.getNameOrCode())) {
//// queryWrapper.like(TDistrictBoardStatistic::getName, genericPageParam.getNameOrCode());
//// }
//// // 根据创建时间区间检索
//// if (genericPageParam.getStartDate() != null && genericPageParam.getEndDate() != null) {
//// queryWrapper.ge(TDistrictBoardStatistic::getCreateTime, genericPageParam.getStartDate().atTime(0, 0, 0))
//// .le(TDistrictBoardStatistic::getCreateTime, genericPageParam.getEndDate().atTime(23, 59, 59));
//// }
//// // 设置排序规则
//// queryWrapper.orderByDesc(TDistrictBoardStatistic::getCreateTime);
//// // 设置查询内容
//// queryWrapper.select(
//// TDistrictBoardStatistic::getId,
//// TDistrictBoardStatistic::getName,
//// TDistrictBoardStatistic::getAuditStatus,
//// TDistrictBoardStatistic::getCreateTime,
//// TDistrictBoardStatistic::getUpdateTime);
// Page<TDistrictBoardStatistic> page = this.tDistrictBoardStatisticService.page(getPage(), queryWrapper);
// for (TDistrictBoardStatistic tDistrictBoardStatistic : page.getRecords()) {
//
// }
// return getResult(page);
// }
//
// @ApiOperation(value = "获取地区看板播放统计详情", notes = "获取地区看板播放统计详情")
// @ApiImplicitParams({
// @ApiImplicitParam(name = "id", value = "标识ID", dataType = "String", paramType = "path")
// })
// @GetMapping("/get/{id}")
// @RequiresPermissions("t:district:board:statistic:get:id")
// public Map<String, Object> getById(@PathVariable("id") String id) {
// TDistrictBoardStatistic tDistrictBoardStatistic = tDistrictBoardStatisticService.getById(id);
// return getResult(tDistrictBoardStatistic);
// }
//
//}
//
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.wisenergy.chnmuseum.party.mapper.TBoardPlayRankMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.wisenergy.chnmuseum.party.model.TBoardPlayRank">
<id column="id" property="id" />
<result column="board_id" property="boardId" />
<result column="board_name" property="boardName" />
<result column="play_number" property="playNumber" />
<result column="year" property="year" />
<result column="month" property="month" />
<result column="organ_id" property="organId" />
<result column="play_date" property="playDate" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, board_id, board_name, play_number, year, month, organ_id, play_date
</sql>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.wisenergy.chnmuseum.party.mapper.TBoardPlayTrendMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.wisenergy.chnmuseum.party.model.TBoardPlayTrend">
<id column="id" property="id" />
<result column="board_id" property="boardId" />
<result column="board_name" property="boardName" />
<result column="play_number" property="playNumber" />
<result column="data_time" property="dataTime" />
<result column="organ_id" property="organId" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, board_id, board_name, play_number, data_time, organ_id
</sql>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.wisenergy.chnmuseum.party.mapper.TBoardStatisticMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.wisenergy.chnmuseum.party.model.TBoardStatistic">
<id column="id" property="id" />
<result column="board_id" property="boardId" />
<result column="board_name" property="boardName" />
<result column="organ_id" property="organId" />
<result column="area_id" property="areaId" />
<result column="play_number" property="playNumber" />
<result column="play_date" property="playDate" />
</resultMap>
<!-- 播放排行结果 -->
<resultMap id="rankMap" type="cn.wisenergy.chnmuseum.party.model.TBoardPlayRank">
<id column="id" property="id"/>
<result column="board_id" property="boardId"/>
<result column="board_name" property="boardName"/>
<result column="play_number" property="playNumber"/>
<result column="play_date" property="playDate"/>
</resultMap>
<resultMap id="trendMap" type="cn.wisenergy.chnmuseum.party.model.TBoardPlayTrend">
<result column="play_number" property="playNumber"/>
<result column="play_date" property="playDate"/>
</resultMap>
<!-- 地区看板统计 -->
<resultMap id="districtMap" type="cn.wisenergy.chnmuseum.party.model.TDistrictBoardStatistic">
<result column="area_name" property="areaName"/>
<result column="play_number" property="playNumber"/>
<result column="board_cnt" property="boardCnt"/>
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, board_id, board_name, organ_id, area_id, play_number, play_date
</sql>
<!-- 展板播放量统计 -->
<select id="getBoardRankPageList" parameterType="cn.wisenergy.chnmuseum.party.model.TBoardPlayRank" resultMap="rankMap">
SELECT board_id,board_name,sum(play_number) play_number from t_board_statistic
<where>
<if test="rank.playDate != null">
and play_date like concat( #{rank.playDate}, '%')
</if>
<if test="rank.organId != null">
and organ_id = #{rank.organId}
</if>
</where>
GROUP BY board_id,board_name
ORDER BY sum(play_number) desc
</select>
<!-- 播放趋势统计 -->
<select id="getBoardTrendPageList" parameterType="cn.wisenergy.chnmuseum.party.model.TBoardPlayTrend" resultMap="trendMap">
<if test="trend.playDate != null and trend.playDate.length() == 4">
SELECT sum(play_number) play_number,left(play_date,6) play_date from t_board_statistic
where left(play_date,4) = ${trend.playDate}
GROUP BY left(play_date,6)
ORDER BY left(play_date,6)
</if>
<if test="trend.playDate != null and trend.playDate.length() == 6">
SELECT sum(play_number) play_number,play_date from t_board_statistic
where left(play_date,6) = ${trend.playDate}
GROUP BY play_date
ORDER BY play_date
</if>
</select>
<!-- 地区展板播放统计 -->
<select id="getBoardDistrictPageList" resultMap="districtMap">
SELECT a.name area_name,sum(play_number) play_number,count(board_id) board_cnt from t_board_statistic s
left join t_area a on s.area_id = a.id
GROUP BY area_id
order by sum(play_number) desc,count(board_id) desc
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.wisenergy.chnmuseum.party.mapper.TDistrictBoardStatisticMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.wisenergy.chnmuseum.party.model.TDistrictBoardStatistic">
<id column="id" property="id" />
<result column="board_id" property="boardId" />
<result column="board_name" property="boardName" />
<result column="play_number" property="playNumber" />
<result column="year" property="year" />
<result column="month" property="month" />
<result column="organ_id" property="organId" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, board_id, board_name, play_number, year, month, organ_id
</sql>
</mapper>
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