提交 3a2a966f 作者: xiaowang

看板数据:用户部分

上级 136e7aae
package com.mmc.iuav.user.model.dto.data;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author LW
* @date 2023/9/16 14:15
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserReportDTO {
@ApiModelProperty(value = "用户数量")
private Integer userCount;
@ApiModelProperty(value = "实名认证数量")
private Integer realNameCount;
@ApiModelProperty(value = "飞手认证数量")
private Integer dronePilotCount;
@ApiModelProperty(value = "昨日新增用户数量")
private Integer yesterdayAddUserCount;
@ApiModelProperty(value = "昨日活跃用户数量")
private Integer yesterdayActiveUserCount;
}
package com.mmc.iuav.user.model.vo.data;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author:lw Date:2023/9/16
* time:11:02
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActiveUserCountVO implements Serializable {
private static final long serialVersionUID = 7301019973858223718L;
private Integer activeUserCount;
private Date activeDate;
}
...@@ -21,6 +21,9 @@ import java.lang.reflect.Method; ...@@ -21,6 +21,9 @@ import java.lang.reflect.Method;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/**
* @author 23214
*/
@Aspect @Aspect
@Component @Component
@Slf4j @Slf4j
...@@ -34,7 +37,7 @@ public class PreventDuplicationAspect { ...@@ -34,7 +37,7 @@ public class PreventDuplicationAspect {
// 使用@Around注解定义一个环绕通知,拦截带有@PreventDuplication注解的方法 // 使用@Around注解定义一个环绕通知,拦截带有@PreventDuplication注解的方法
@Around("preventDuplication()") @Around("preventDuplication()")
public Object before(ProceedingJoinPoint joinPoint) throws Exception { public Object before(ProceedingJoinPoint joinPoint) {
// 获取当前请求的属性 // 获取当前请求的属性
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
// 获取当前请求 // 获取当前请求
...@@ -64,7 +67,7 @@ public class PreventDuplicationAspect { ...@@ -64,7 +67,7 @@ public class PreventDuplicationAspect {
} catch (Throwable throwable) { } catch (Throwable throwable) {
// 如果执行过程中发生异常,则从Redis中删除该键值对,并抛出异常 // 如果执行过程中发生异常,则从Redis中删除该键值对,并抛出异常
redisTemplate.delete(redisKey); redisTemplate.delete(redisKey);
throw new RuntimeException(throwable); return ResultBody.error(throwable.getMessage());
} }
} else { } else {
// 如果已经存在,则返回错误信息,防止重复提交 // 如果已经存在,则返回错误信息,防止重复提交
......
package com.mmc.iuav.user.controller.data;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.dto.data.UserReportDTO;
import com.mmc.iuav.user.service.data.UserReportService;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author LW
* @date 2023/9/16 11:25
* 概要:
*/
@Api(tags = "云享飞用户看板数据")
@RequestMapping("/user/report")
@RestController
public class UserReportController {
@Autowired
private UserReportService userReportService;
@ApiOperation(value = "获取用户报表数据")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = UserReportDTO.class)})
@GetMapping("/getUserReportData")
public ResultBody<UserReportDTO> getUserReportData(@ApiParam(value = "(预留字段暂时不传值)根据时间查询(暂未实现)") @RequestParam(required = false) String date) {
return userReportService.getUserReportData(date);
}
}
...@@ -33,4 +33,6 @@ public interface RealNameAuthDao { ...@@ -33,4 +33,6 @@ public interface RealNameAuthDao {
RealNameAuthDO userDetail(Integer userAccountId); RealNameAuthDO userDetail(Integer userAccountId);
void updateRealNameAuthRemark(Integer id, String remark); void updateRealNameAuthRemark(Integer id, String remark);
int getRealNameAuthCount();
} }
...@@ -2,6 +2,7 @@ package com.mmc.iuav.user.dao; ...@@ -2,6 +2,7 @@ package com.mmc.iuav.user.dao;
import com.mmc.iuav.user.entity.UserAccountDO; import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.entity.UserRcdDO; import com.mmc.iuav.user.entity.UserRcdDO;
import com.mmc.iuav.user.entity.data.ActiveUserCountDO;
import com.mmc.iuav.user.entity.fdd.UserFddDO; import com.mmc.iuav.user.entity.fdd.UserFddDO;
import com.mmc.iuav.user.model.qo.UserAccountQO; import com.mmc.iuav.user.model.qo.UserAccountQO;
import com.mmc.iuav.user.model.qo.UserRcdQO; import com.mmc.iuav.user.model.qo.UserRcdQO;
...@@ -170,4 +171,13 @@ public interface UserServiceDao { ...@@ -170,4 +171,13 @@ public interface UserServiceDao {
UserAccountDO getUserAccountInfoByOpenId(String openid); UserAccountDO getUserAccountInfoByOpenId(String openid);
List<UserFddDO> listUserFddInfo(@Param(value = "unionId") String unionId, @Param(value = "openid") String openid); List<UserFddDO> listUserFddInfo(@Param(value = "unionId") String unionId, @Param(value = "openid") String openid);
int getUsableUserCount();
int getYesterdayAddUserCount();
void insertActiveUserCount(ActiveUserCountDO activeUserCountDO);
ActiveUserCountDO getActiveUserCountByDayNum();
} }
package com.mmc.iuav.user.dao.data;
import org.apache.ibatis.annotations.Mapper;
/**
* @Author LW
* @date 2023/9/16 11:25
* 概要:
*/
@Mapper
public interface UserReportDao {
}
...@@ -63,4 +63,6 @@ public interface PilotCertificationDao { ...@@ -63,4 +63,6 @@ public interface PilotCertificationDao {
int selectFirstApprove(Integer id); int selectFirstApprove(Integer id);
int getDronePilotCount();
} }
package com.mmc.iuav.user.entity.data;
import com.mmc.iuav.user.model.vo.data.ActiveUserCountVO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* author:zhenjie
* Date:2022/2/14
* time:10:16
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActiveUserCountDO implements Serializable {
private static final long serialVersionUID = -6791205305246052945L;
private Integer id;
private Integer dayNum;
private Integer activeUserCount;
private Date activeDate;
private Date createTime;
public ActiveUserCountDO(ActiveUserCountVO param) {
this.activeDate = param.getActiveDate();
this.activeUserCount = param.getActiveUserCount();
}
}
package com.mmc.iuav.user.schedule;
import com.mmc.iuav.user.model.vo.data.ActiveUserCountVO;
import com.mmc.iuav.user.service.data.UserReportService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Calendar;
/**
* @author lw
*/
@Component
//@ConditionalOnProperty(prefix = "scheduling", name = "enabled", havingValue = "true")
public class ManagerLogSchedule {
@Resource
UserReportService userReportService;
/**
* 统计日活量
*/
@Scheduled(cron = "0 0 8 * * ?")
public void calculateActiveUserCount() {
Integer userActiveCount = userReportService.getUserActiveCount();
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -1);
//记录到数据库
ActiveUserCountVO yxfActiveUserCountVO = new ActiveUserCountVO();
yxfActiveUserCountVO.setActiveDate(calendar.getTime());
yxfActiveUserCountVO.setActiveUserCount(userActiveCount);
userReportService.insertActiveUserCount(yxfActiveUserCountVO);
}
}
\ No newline at end of file
...@@ -108,4 +108,7 @@ public interface WxService { ...@@ -108,4 +108,7 @@ public interface WxService {
ResultBody moveSubUserToTest(); ResultBody moveSubUserToTest();
ResultBody moveSubUserUnionIdToTest(); ResultBody moveSubUserUnionIdToTest();
ResultBody getUserPortrait();
} }
package com.mmc.iuav.user.service.data;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.dto.data.UserReportDTO;
import com.mmc.iuav.user.model.vo.data.ActiveUserCountVO;
/**
* @Author LW
* @date 2023/9/16 11:25
* 概要:
*/
public interface UserReportService {
ResultBody<UserReportDTO> getUserReportData(String date);
Integer getUserActiveCount();
void insertActiveUserCount(ActiveUserCountVO param);
}
package com.mmc.iuav.user.service.data.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.dao.RealNameAuthDao;
import com.mmc.iuav.user.dao.UserServiceDao;
import com.mmc.iuav.user.dao.dronepilot.PilotCertificationDao;
import com.mmc.iuav.user.entity.data.ActiveUserCountDO;
import com.mmc.iuav.user.model.dto.data.UserReportDTO;
import com.mmc.iuav.user.model.vo.data.ActiveUserCountVO;
import com.mmc.iuav.user.service.WxService;
import com.mmc.iuav.user.service.data.UserReportService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* @Author LW
* @date 2023/9/16 13:24
* 概要:
*/
@Service
public class UserReportServiceImpl implements UserReportService {
@Resource
private UserServiceDao userServiceDao;
@Resource
private RealNameAuthDao realNameAuthDao;
@Resource
private PilotCertificationDao pilotCertificationDao;
@Resource
WxService wxService;
@Override
public ResultBody<UserReportDTO> getUserReportData(String date) {
UserReportDTO userReportDTO = new UserReportDTO();
// 获取可用用户总数
int userCount = userServiceDao.getUsableUserCount();
userReportDTO.setUserCount(userCount);
// 获取实名认证用户数量
int realNameCount = realNameAuthDao.getRealNameAuthCount();
userReportDTO.setRealNameCount(realNameCount);
// 获取飞手认证用户数量
int dronePilotCount = pilotCertificationDao.getDronePilotCount();
userReportDTO.setDronePilotCount(dronePilotCount);
// 获取昨日新增用户数
int yesterdayUserCount = userServiceDao.getYesterdayAddUserCount();
userReportDTO.setYesterdayAddUserCount(yesterdayUserCount);
// 获取昨日活跃用户数
ActiveUserCountDO activeUserCountByDayNum = userServiceDao.getActiveUserCountByDayNum();
userReportDTO.setYesterdayActiveUserCount(activeUserCountByDayNum.getActiveUserCount());
return ResultBody.success(userReportDTO);
}
@Override
public Integer getUserActiveCount() {
ResultBody resultBody = wxService.getUserPortrait();
if (resultBody != null && resultBody.getCode().equals("200")) {
JSONObject result = JSONObject.parseObject(resultBody.getResult().toString());
JSONArray jsonArray = JSONArray.parseArray(result.get("list").toString());
JSONObject object = (JSONObject) jsonArray.get(0);
return (Integer) object.get("visit_uv");
}
return 0;
}
@Override
public void insertActiveUserCount(ActiveUserCountVO param) {
ActiveUserCountDO activeUserCountDO = new ActiveUserCountDO(param);
userServiceDao.insertActiveUserCount(activeUserCountDO);
}
}
...@@ -8,12 +8,14 @@ import com.mmc.iuav.response.ResultBody; ...@@ -8,12 +8,14 @@ import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.response.ResultEnum; import com.mmc.iuav.response.ResultEnum;
import com.mmc.iuav.user.constant.UserSystemConstant; import com.mmc.iuav.user.constant.UserSystemConstant;
import com.mmc.iuav.user.constant.WxConstant; import com.mmc.iuav.user.constant.WxConstant;
import com.mmc.iuav.user.controller.wx.HttpsOpenUtil;
import com.mmc.iuav.user.dao.UserSubInfoDao; import com.mmc.iuav.user.dao.UserSubInfoDao;
import com.mmc.iuav.user.entity.UserSubInfoDO; import com.mmc.iuav.user.entity.UserSubInfoDO;
import com.mmc.iuav.user.model.vo.AppletMsgVO; import com.mmc.iuav.user.model.vo.AppletMsgVO;
import com.mmc.iuav.user.model.vo.WxLoginVO; import com.mmc.iuav.user.model.vo.WxLoginVO;
import com.mmc.iuav.user.model.vo.WxMsgVO; import com.mmc.iuav.user.model.vo.WxMsgVO;
import com.mmc.iuav.user.service.WxService; import com.mmc.iuav.user.service.WxService;
import com.mmc.iuav.user.util.TDateUtil;
import com.mmc.iuav.user.util.WxApiUtil; import com.mmc.iuav.user.util.WxApiUtil;
import com.mmc.iuav.user.util.XmlToMapUtil; import com.mmc.iuav.user.util.XmlToMapUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -400,4 +402,24 @@ public class WxServiceImpl implements WxService { ...@@ -400,4 +402,24 @@ public class WxServiceImpl implements WxService {
return ResultBody.success(); return ResultBody.success();
} }
@Override
public ResultBody getUserPortrait() {
try {
String accessToken = this.getStableAccessToken();
com.alibaba.fastjson.JSONObject param = new com.alibaba.fastjson.JSONObject();
String date = TDateUtil.getYesterdayDateByType("yyyyMMdd");
param.put("begin_date", date);
// param.put("env_version", UserSystemConstant.AppletEnv);
param.put("end_date", date);
param.put("access_token", accessToken);
String url = "https://api.weixin.qq.com/datacube/getweanalysisappiddailyvisittrend?access_token=" + accessToken;
String res = HttpsOpenUtil.httpSendPost(url, param.toJSONString());
log.info("getUserPortrait: " + JSONObject.toJSONString(res));
return ResultBody.success(res);
} catch (Exception e) {
return ResultBody.error(e.getMessage());
}
}
} }
...@@ -6,10 +6,12 @@ ...@@ -6,10 +6,12 @@
<insert id="addRealNameAuth" parameterType="com.mmc.iuav.user.entity.RealNameAuthDO" useGeneratedKeys="true" <insert id="addRealNameAuth" parameterType="com.mmc.iuav.user.entity.RealNameAuthDO" useGeneratedKeys="true"
keyProperty="id"> keyProperty="id">
insert into real_name_auth(user_account_id, union_id, front_id_img, back_id_img, id_number, user_name, sex, nationality, insert into real_name_auth(user_account_id, union_id, front_id_img, back_id_img, id_number, user_name, sex,
nationality,
birthday, address, issue, birthday, address, issue,
start_date, end_date, is_fake_front, is_fake_back, check_status, remark, create_time) start_date, end_date, is_fake_front, is_fake_back, check_status, remark, create_time)
values (#{userAccountId}, #{unionId}, #{frontIdImg}, #{backIdImg}, #{idNumber}, #{userName}, #{sex}, #{nationality}, values (#{userAccountId}, #{unionId}, #{frontIdImg}, #{backIdImg}, #{idNumber}, #{userName}, #{sex},
#{nationality},
#{birthday}, #{address}, #{issue}, #{birthday}, #{address}, #{issue},
#{startDate}, #{endDate}, #{fakeFront}, #{fakeBack}, #{checkStatus}, #{remark}, NOW()) #{startDate}, #{endDate}, #{fakeFront}, #{fakeBack}, #{checkStatus}, #{remark}, NOW())
</insert> </insert>
...@@ -70,41 +72,100 @@ ...@@ -70,41 +72,100 @@
</update> </update>
<update id="updateRealNameAuthRemark"> <update id="updateRealNameAuthRemark">
update real_name_auth set remark = #{remark} where id = #{id} update real_name_auth
set remark = #{remark}
where id = #{id}
</update> </update>
<select id="existHasBeenAuth" resultType="java.lang.Integer"> <select id="existHasBeenAuth" resultType="java.lang.Integer">
select count(*) from real_name_auth where union_id <![CDATA[<>]]> #{unionId} and id_number = #{idNumber} and check_status = 1 select count(*)
from real_name_auth
where union_id <![CDATA[<>]]> #{unionId}
and id_number = #{idNumber}
and check_status = 1
</select> </select>
<select id="getRealNameAuthByUnionId" resultType="com.mmc.iuav.user.entity.RealNameAuthDO"> <select id="getRealNameAuthByUnionId" resultType="com.mmc.iuav.user.entity.RealNameAuthDO">
select rna.id, rna.user_account_id, rna.union_id, rna.front_id_img, rna.back_id_img, rna.id_number, rna.user_name, rna.sex, rna.nationality, select rna.id,
rna.birthday, rna.address, rna.issue, rna.start_date, rna.end_date, rna.is_fake_front, rna.is_fake_back, rna.check_status, rna.remark, rna.user_account_id,
rna.create_time rna.union_id,
from real_name_auth rna rna.front_id_img,
where rna.union_id = #{unionId} and rna.is_deleted = 0 rna.back_id_img,
rna.id_number,
rna.user_name,
rna.sex,
rna.nationality,
rna.birthday,
rna.address,
rna.issue,
rna.start_date,
rna.end_date,
rna.is_fake_front,
rna.is_fake_back,
rna.check_status,
rna.remark,
rna.create_time
from real_name_auth rna
where rna.union_id = #{unionId}
and rna.is_deleted = 0
</select> </select>
<select id="getRealNameAuthBakByUnionId" resultType="com.mmc.iuav.user.entity.RealNameAuthDO"> <select id="getRealNameAuthBakByUnionId" resultType="com.mmc.iuav.user.entity.RealNameAuthDO">
select rna.id, rna.user_account_id, rna.union_id, rna.front_id_img, rna.back_id_img, rna.id_number, rna.user_name, rna.sex, rna.nationality, select rna.id,
rna.birthday, rna.address, rna.issue, rna.start_date, rna.end_date, rna.is_fake_front, rna.is_fake_back, rna.check_status, rna.remark, rna.user_account_id,
rna.create_time rna.union_id,
from real_name_auth_bak rna rna.front_id_img,
where rna.union_id = #{unionId} and rna.is_deleted = 0 and rna.check_status = 1 rna.back_id_img,
rna.id_number,
rna.user_name,
rna.sex,
rna.nationality,
rna.birthday,
rna.address,
rna.issue,
rna.start_date,
rna.end_date,
rna.is_fake_front,
rna.is_fake_back,
rna.check_status,
rna.remark,
rna.create_time
from real_name_auth_bak rna
where rna.union_id = #{unionId}
and rna.is_deleted = 0
and rna.check_status = 1
</select> </select>
<select id="getRealNameAuthByUId" resultType="com.mmc.iuav.user.entity.RealNameAuthDO"> <select id="getRealNameAuthByUId" resultType="com.mmc.iuav.user.entity.RealNameAuthDO">
select rna.id,rna.union_id,rna.user_name,rna.id_number,rna.check_status,rna.sex select rna.id, rna.union_id, rna.user_name, rna.id_number, rna.check_status, rna.sex
from real_name_auth rna from real_name_auth rna
where rna.user_account_id = #{userAccountId} and rna.is_deleted = 0 where rna.user_account_id = #{userAccountId}
and rna.is_deleted = 0
</select> </select>
<select id="getRealNameAuthById" resultType="com.mmc.iuav.user.entity.RealNameAuthDO"> <select id="getRealNameAuthById" resultType="com.mmc.iuav.user.entity.RealNameAuthDO">
select rna.id, rna.user_account_id, rna.union_id, rna.front_id_img, rna.back_id_img, rna.id_number, rna.user_name, rna.sex, rna.nationality, select rna.id,
rna.birthday, rna.address, rna.issue, rna.start_date, rna.end_date, rna.is_fake_front, rna.is_fake_back, rna.check_status, rna.remark, rna.user_account_id,
rna.create_time rna.union_id,
from real_name_auth rna rna.front_id_img,
where rna.id = #{id} and rna.is_deleted = 0 rna.back_id_img,
rna.id_number,
rna.user_name,
rna.sex,
rna.nationality,
rna.birthday,
rna.address,
rna.issue,
rna.start_date,
rna.end_date,
rna.is_fake_front,
rna.is_fake_back,
rna.check_status,
rna.remark,
rna.create_time
from real_name_auth rna
where rna.id = #{id}
and rna.is_deleted = 0
</select> </select>
<select id="countListRealNameAuth" resultType="java.lang.Integer"> <select id="countListRealNameAuth" resultType="java.lang.Integer">
...@@ -141,10 +202,32 @@ ...@@ -141,10 +202,32 @@
</select> </select>
<select id="userDetail" resultType="com.mmc.iuav.user.entity.RealNameAuthDO"> <select id="userDetail" resultType="com.mmc.iuav.user.entity.RealNameAuthDO">
select rna.id, rna.user_account_id, rna.union_id, rna.front_id_img, rna.back_id_img, rna.id_number, rna.user_name, rna.sex, rna.nationality, select rna.id,
rna.birthday, rna.address, rna.issue, rna.start_date, rna.end_date, rna.is_fake_front, rna.is_fake_back, rna.check_status, rna.remark, rna.user_account_id,
rna.create_time rna.union_id,
from real_name_auth rna rna.front_id_img,
where rna.user_account_id = #{userAccountId} and rna.is_deleted = 0 rna.back_id_img,
rna.id_number,
rna.user_name,
rna.sex,
rna.nationality,
rna.birthday,
rna.address,
rna.issue,
rna.start_date,
rna.end_date,
rna.is_fake_front,
rna.is_fake_back,
rna.check_status,
rna.remark,
rna.create_time
from real_name_auth rna
where rna.user_account_id = #{userAccountId}
and rna.is_deleted = 0
</select>
<select id="getRealNameAuthCount" resultType="java.lang.Integer">
select count(*)
from real_name_auth
where is_deleted = 0
</select> </select>
</mapper> </mapper>
\ No newline at end of file
...@@ -47,6 +47,11 @@ ...@@ -47,6 +47,11 @@
insert into user_rcd (user_account_id, rcd_user_id, create_time) insert into user_rcd (user_account_id, rcd_user_id, create_time)
values (#{userAccountId}, #{rcdUserId}, NOW()); values (#{userAccountId}, #{rcdUserId}, NOW());
</insert> </insert>
<insert id="insertActiveUserCount">
insert into active_user_count
(active_user_count, active_date, create_time)
values (#{activeUserCount}, #{activeDate}, NOW())
</insert>
<update id="update" parameterType="com.mmc.iuav.user.entity.UserAccountDO"> <update id="update" parameterType="com.mmc.iuav.user.entity.UserAccountDO">
update user_account update user_account
...@@ -479,5 +484,20 @@ ...@@ -479,5 +484,20 @@
</if> </if>
</where> </where>
</select> </select>
<select id="getUsableUserCount" resultType="java.lang.Integer">
select count(*)
from user_account
where disable = 0
</select>
<select id="getYesterdayAddUserCount" resultType="java.lang.Integer">
SELECT count(*)
FROM user_account
WHERE DATE (create_time) = CURDATE() - INTERVAL 1 DAY;
</select>
<select id="getActiveUserCountByDayNum" resultType="com.mmc.iuav.user.entity.data.ActiveUserCountDO">
SELECT 1 AS day_num,
COALESCE(SUM(auc.active_user_count), 0) AS active_user_count
FROM active_user_count auc
WHERE (TO_DAYS(NOW()) - TO_DAYS(auc.active_date)) = 1
</select>
</mapper> </mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mmc.iuav.user.dao.data.UserReportDao"></mapper>
\ No newline at end of file
...@@ -360,4 +360,9 @@ ...@@ -360,4 +360,9 @@
from pilot_certification from pilot_certification
where id = #{id} where id = #{id}
</select> </select>
<select id="getDronePilotCount" resultType="java.lang.Integer">
select count(*)
from pilot_certification
where audit_status = 1
</select>
</mapper> </mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论