feat(watch): 支持Oracle数据库兼容性改进

- 将MyBatis查询中的"LIMIT 1"替换为"FETCH FIRST 1 ROWS ONLY"
- 在XML映射文件中将ROWNUM用于分页查询以提高Oracle兼容性
- 将MySQL特定函数转换为Oracle兼容语法:
  - YEAR()替换为EXTRACT(YEAR FROM)
  - TIMESTAMPDIFF()替换为EXTRACT(HOUR/MINUTE/SECOND FROM) - IFNULL()替换为NVL() - CURDATE()替换为SYSDATE
- 更新复杂查询语句使用ROW_NUMBER()窗口函数替代LEFT JOIN
- 修改表名引用从反引号到双引号以提高数据库兼容性
This commit is contained in:
hejiayang
2026-03-11 09:41:56 +08:00
parent 0b403a559e
commit 3733d442cc
30 changed files with 546 additions and 423 deletions
@@ -894,7 +894,7 @@ public class WatchDataApiServiceImpl implements WatchDataApiService {
WatchStatUserInfoDaySleep::getDataDate)
.eq(WatchStatUserInfoDaySleep::getUserId, userId)
.orderByDesc(WatchStatUserInfoDaySleep::getDataDate)
.last("limit 1");
.last("FETCH FIRST 1 ROWS ONLY");
WatchStatUserInfoDaySleep data = watchStatUserInfoDaySleepMapper.selectOne(queryWrapper);
@@ -1016,7 +1016,7 @@ public class WatchDataApiServiceImpl implements WatchDataApiService {
queryWrapper.eq(WatchData::getUserid, userId)
.orderByDesc(WatchData::getLastUpdateTime)
.eq(WatchData::getType, type)
.last("limit 1");
.last("FETCH FIRST 1 ROWS ONLY");
WatchData watchData = watchDataMapper.selectOne(queryWrapper);
if (watchData == null) {
return null;
@@ -1033,7 +1033,7 @@ public class WatchDataApiServiceImpl implements WatchDataApiService {
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_id", userId)
.orderByDesc("data_date")
.last("limit 1");
.last("FETCH FIRST 1 ROWS ONLY");
return queryWrapper.lambda();
}
@@ -32,6 +32,6 @@ public interface WatchDataHeartRateMapper extends MPJBaseMapper<WatchDataHeartRa
* @param bindUserId
* @return
*/
@Select("select * from watch_data_heart_rate where bind_user_id = #{bindUserId} and data_date = (select MAX(data_date) from watch_data_heart_rate where bind_user_id = #{bindUserId})")
@Select("SELECT * FROM watch_data_heart_rate WHERE bind_user_id = #{bindUserId} AND data_date = (SELECT MAX(data_date) FROM watch_data_heart_rate WHERE bind_user_id = #{bindUserId})")
List<WatchDataHeartRate> latestDataTempByUserId(@Param("bindUserId") String bindUserId);
}
@@ -33,7 +33,7 @@ public interface WatchDataSpo2Mapper extends MPJBaseMapper<WatchDataSpo2> {
* @param bindUserId
* @return
*/
@Select("select * from watch_data_spo2 where bind_user_id = #{bindUserId} and data_date = (select MAX(data_date) from watch_data_spo2 where bind_user_id = #{bindUserId})")
@Select("SELECT * FROM watch_data_spo2 WHERE bind_user_id = #{bindUserId} AND data_date = (SELECT MAX(data_date) FROM watch_data_spo2 WHERE bind_user_id = #{bindUserId})")
List<WatchDataSpo2> latestDataTempByUserId(@Param("bindUserId") String bindUserId);
}
@@ -21,7 +21,7 @@ public interface WatchDataStressMapper extends MPJBaseMapper<WatchDataStress> {
IPage<WatchDataStress> selectStressByYear(IPage<WatchDataStress> page, StatisticsReq req);
@Select("select * from watch_data_stress where bind_user_id = #{bindUserId} order by start_time_stamp desc limit 1")
@Select("SELECT * FROM (SELECT * FROM watch_data_stress WHERE bind_user_id = #{bindUserId} ORDER BY start_time_stamp DESC) WHERE ROWNUM = 1")
WatchDataStress selectWatchDataStressByUserId(@Param("bindUserId") String bindUserId);
/**
@@ -29,7 +29,7 @@ public interface WatchDataStressMapper extends MPJBaseMapper<WatchDataStress> {
* @param bindUserId
* @return
*/
@Select("select * from watch_data_stress where bind_user_id = #{bindUserId} and data_date = (select MAX(data_date) from watch_data_stress where bind_user_id = #{bindUserId})")
@Select("SELECT * FROM watch_data_stress WHERE bind_user_id = #{bindUserId} AND data_date = (SELECT MAX(data_date) FROM watch_data_stress WHERE bind_user_id = #{bindUserId})")
List<WatchDataStress> latestDataTempByUserId(@Param("bindUserId") String bindUserId);
}
@@ -23,7 +23,7 @@ public interface WatchDataTemperatureMapper extends MPJBaseMapper<WatchDataTempe
IPage<WatchDataTemperature> selectTempByYear(@Param("page") IPage<WatchDataTemperature> page, @Param("req") StatisticsReq req);
@Select("select * from watch_data_temperature where bind_user_id = #{bindUserId} and Date(data_date) = Date(#{dateTime}) order by time_stamp")
@Select("SELECT * FROM watch_data_temperature WHERE bind_user_id = #{bindUserId} AND data_date = #{dateTime} ORDER BY time_stamp")
List<WatchDataTemperature> selectTempByUserId(@Param("bindUserId") String bindUserId,@Param("dateTime") Date dateTime);
/**
@@ -31,6 +31,6 @@ public interface WatchDataTemperatureMapper extends MPJBaseMapper<WatchDataTempe
* @param bindUserId
* @return
*/
@Select("select * from watch_data_temperature where bind_user_id = #{bindUserId} and data_date = (select MAX(data_date) from watch_data_temperature where bind_user_id = #{bindUserId})")
@Select("SELECT * FROM watch_data_temperature WHERE bind_user_id = #{bindUserId} AND data_date = (SELECT MAX(data_date) FROM watch_data_temperature WHERE bind_user_id = #{bindUserId})")
List<WatchDataTemperature> latestDataTempByUserId(@Param("bindUserId") String bindUserId);
}
@@ -66,7 +66,7 @@ public interface WatchDeviceMapper extends MPJBaseMapper<WatchDevice> {
List<String> selectDeviceUserId(@Param("deptId") String deptId);
@Select(value = "SELECT LEFT(org_code,6) as orgCode, count(1) as medicalCount FROM watch_device GROUP BY LEFT(org_code,6)")
@Select(value = "SELECT SUBSTR(org_code, 1, 6) as orgCode, COUNT(1) as medicalCount FROM watch_device GROUP BY SUBSTR(org_code, 1, 6)")
List<JSONObject> getWatchSum();
List<WearCount> selectWearCount(@Param("orgCodeList") List<String> orgCodeList);
@@ -16,39 +16,39 @@ import java.util.Map;
@Mapper
public interface WatchMapper {
@Select("SELECT ROUND(SYSDATE - (SELECT CAST(bind_date AS DATE) FROM watch_bind_his WHERE bind_user_id = #{id} ORDER BY bind_date DESC limit 1)) AS days")
@Select("SELECT TRUNC(SYSDATE - CAST(bind_date AS DATE)) AS days FROM (SELECT bind_date FROM watch_bind_his WHERE bind_user_id = #{id} ORDER BY bind_date DESC FETCH FIRST 1 ROWS ONLY)")
Integer getUseDays(@Param("id") String id);
@Select("select length(nm.status) minutes,TO_CHAR(n.data_date,'YYYY-MM-DD') dataDate from watch_data_sleep_new_minute nm left join watch_data_sleep_new n on nm.sleep_id = n.id where n.id = ( select id from watch_data_sleep_new WHERE bind_user_id = #{id} order by data_date desc limit 1) and nm.STATUS not like '%55%' limit 1")
@Select("SELECT LENGTH(nm.status) minutes, TO_CHAR(n.data_date,'YYYY-MM-DD') dataDate FROM watch_data_sleep_new_minute nm LEFT JOIN watch_data_sleep_new n ON nm.sleep_id = n.id WHERE n.id = (SELECT id FROM watch_data_sleep_new WHERE bind_user_id = #{id} ORDER BY data_date DESC FETCH FIRST 1 ROWS ONLY) AND nm.STATUS NOT LIKE '%55%' AND ROWNUM = 1")
WatchDataDTO getDataSleep(@Param("id") String id);
/**
* 查询最新的长睡睡眠时间和时长
* @param id 用户ID
* @param id 用户 ID
* @return
*/
@Select("SELECT long_duration_total minutes, data_date dataDate FROM watch_stat_user_info_day_sleep WHERE user_id = #{id} and long_duration_total > 0 ORDER BY data_date DESC LIMIT 1;")
@Select("SELECT long_duration_total minutes, data_date dataDate FROM watch_stat_user_info_day_sleep WHERE user_id = #{id} AND long_duration_total > 0 ORDER BY data_date DESC FETCH FIRST 1 ROWS ONLY")
WatchDataDTO getDataSleepNew(@Param("id") String id);
@Select("SELECT AVG(ROUND((CAST(d.wake_up_time AS DATE) - CAST(d.fall_asleep_time AS DATE)) * 24 * 60)) AS aveMinute FROM watch_data_sleep_new_day d LEFT JOIN watch_data_sleep_new n ON d.sleep_id = n.id WHERE n.id IN (SELECT id FROM watch_data_sleep_new WHERE bind_user_id = #{id})")
Double getAverageSleep(@Param("id") String id);
@Select("select MAX(data_value) dataValue,data_date dataDate from watch_data_steps where bind_user_id = #{id} group by data_date order by data_date desc limit 1")
@Select("SELECT MAX(data_value) dataValue, data_date dataDate FROM watch_data_steps WHERE bind_user_id = #{id} ORDER BY data_date DESC FETCH FIRST 1 ROWS ONLY")
WatchDataDTO getDataSteps(@Param("id") String id);
@Select("SELECT SUM(data_value) FROM watch_data_distance WHERE bind_user_id = #{id}")
Integer getDataDistance(@Param("id") String id);
@Select("SELECT CAST(data_value as INTEGER) dataValue,data_date dataDate from watch_data_heart_rate where bind_user_id = #{id} order by time_stamp desc limit 1")
@Select("SELECT CAST(data_value AS INTEGER) dataValue, data_date dataDate FROM watch_data_heart_rate WHERE bind_user_id = #{id} ORDER BY time_stamp DESC FETCH FIRST 1 ROWS ONLY")
WatchDataDTO getHeartRate(@Param("id") String id);
@Select("SELECT CAST(data_value as INTEGER) dataValue,data_date dataDate from watch_data_spo2 where bind_user_id = #{id} order by time_stamp desc limit 1")
@Select("SELECT CAST(data_value AS INTEGER) dataValue, data_date dataDate FROM watch_data_spo2 WHERE bind_user_id = #{id} ORDER BY time_stamp DESC FETCH FIRST 1 ROWS ONLY")
WatchDataDTO getDataSpo2(@Param("id") String id);
@Select("select cast(data_value as INTEGER) dataValue,data_date dataDate from watch_data_stress where bind_user_id = #{id} order by end_time_stamp desc limit 1")
@Select("SELECT CAST(data_value AS INTEGER) dataValue, data_date dataDate FROM watch_data_stress WHERE bind_user_id = #{id} ORDER BY end_time_stamp DESC FETCH FIRST 1 ROWS ONLY")
WatchDataDTO getStress(@Param("id") String id);
@Select("select data_value dataValue,data_date dataDate from watch_data_temperature where bind_user_id = #{id} order by time_stamp desc limit 1")
@Select("SELECT data_value dataValue, data_date dataDate FROM watch_data_temperature WHERE bind_user_id = #{id} ORDER BY time_stamp DESC FETCH FIRST 1 ROWS ONLY")
WatchDataDTO getTemp(@Param("id") String id);
@Select("SELECT * FROM watch_data_sleep_new_minute WHERE sleep_id IN (SELECT id FROM watch_data_sleep_new WHERE sleep_flag= '1' AND bind_user_id = #{id} AND data_date = #{date})")
@@ -81,7 +81,7 @@ public interface WatchMapper {
@Select("select max(data_value) maxValue,min(data_value) minValue from watch_data_spo2 where bind_user_id = #{id} and data_date = #{date}")
Map<String, Object> getMapSpo2(@Param("id") String id, @Param("date") Date date);
@Select("select data_value lastValue from watch_data_spo2 where bind_user_id = #{id} and data_date = #{date} order by time_stamp desc limit 1")
@Select("SELECT data_value lastValue FROM watch_data_spo2 WHERE bind_user_id = #{id} AND data_date = #{date} ORDER BY time_stamp DESC FETCH FIRST 1 ROWS ONLY")
Map<String, Object> getMapNewSpo2(@Param("id") String id, @Param("date") Date date);
List<Map<String, Object>> getMapSpo2Format(@Param("id") String id, @Param("date") String date, @Param("format") String format);
@@ -95,6 +95,6 @@ public interface WatchMapper {
Map<String, Object> getAverageDay(@Param("id") String id);
@Select("SELECT watch_no FROM watch_bind_his WHERE bind_user_id = #{id} AND bind_date <= #{date} ORDER BY bind_date DESC limit 1")
@Select("SELECT watch_no FROM watch_bind_his WHERE bind_user_id = #{id} AND bind_date <= #{date} ORDER BY bind_date DESC FETCH FIRST 1 ROWS ONLY")
String getWatchNo(@Param("id") String id, @Param("date") String date);
}
@@ -42,7 +42,7 @@ public interface WatchMonitorDataMapper extends BaseMapper<WatchMonitorData>, MP
List<WatchMonitorData> getMonitorErrorNumsNew(@Param("orgCodes")List<String> orgCodes, @Param("start") Date start, @Param("end") Date end);
@Select("select count(1) from watch_monitor_data where bind_user_id = #{userId} and YEAR(warn_time) = #{year} and event_type = 'fall_down'")
@Select("SELECT COUNT(1) FROM watch_monitor_data WHERE bind_user_id = #{userId} AND EXTRACT(YEAR FROM warn_time) = #{year} AND event_type = 'fall_down'")
int selectUserFallNum(String userId,String year);
List<WatchMonitorData> selectParams(@Param("req") AloneReq req);
@@ -28,7 +28,7 @@ public interface WatchStatUserInfoDayStressMapper extends MPJBaseMapper<WatchSta
List<WatchDataStressRes> selectStressByYear(@Param("dateYear") Date dateYear, @Param("userId")String userId);
@Select("select * from watch_stat_user_info_day_stress where user_id = #{userId} DATE(data_date) = DATE(#{dataDate}) limit 1")
@Select("SELECT * FROM watch_stat_user_info_day_stress WHERE user_id = #{userId} AND data_date = #{dataDate} AND ROWNUM = 1")
WatchDataStressRes selectStressByUserIdAndDate(@Param("dateTime") Date dateTime, @Param("userId")String userId);
void insertStat(WatchStatUserInfoDayStress watchStatUserInfoDayStress);
@@ -3,36 +3,38 @@
<mapper namespace="com.renkang.watch.mapper.ArchivesBodyTypeMapper">
<select id="selectHeartRateData" resultType="com.renkang.watch.entity.ArchivesBodyType">
SELECT
temp.*
FROM
(
SELECT
userid AS userId,
data_value AS dataValue,
"5" AS dataSource,
type AS type,
last_update_time AS createDate
FROM
watch_data
WHERE
userid = #{userId}
AND type = 1 UNION ALL
SELECT
user_id AS userId,
data_value AS dataValue,
data_source AS dataSource,
type AS type,
create_date AS createDate
FROM
archives_body_type
WHERE
user_id = #{userId}
AND type = 1
) temp
ORDER BY
temp.createDate DESC
LIMIT 1;
SELECT * FROM (
SELECT
temp.*
FROM
(
SELECT
userid AS userId,
data_value AS dataValue,
"5" AS dataSource,
type AS type,
last_update_time AS createDate
FROM
watch_data
WHERE
userid = #{userId}
AND type = 1
UNION ALL
SELECT
user_id AS userId,
data_value AS dataValue,
data_source AS dataSource,
type AS type,
create_date AS createDate
FROM
archives_body_type
WHERE
user_id = #{userId}
AND type = 1
) temp
ORDER BY
temp.createDate DESC
) WHERE ROWNUM = 1
</select>
<select id="selectTemperatureData" resultType="com.renkang.watch.entity.ArchivesBodyType">
SELECT
@@ -62,9 +64,9 @@
user_id = #{userId}
AND type = 5
) temp
WHERE ROWNUM = 1
ORDER BY
temp.createDate DESC
LIMIT 1;
</select>
<select id="analysisHeartRateListData" resultType="com.renkang.watch.entity.ArchivesBodyType">
SELECT
@@ -5,9 +5,9 @@
SELECT
*
FROM
`watch_data_heart_rate`
"watch_data_heart_rate"
WHERE
YEAR ( data_date )= #{req.dateYear}
EXTRACT(YEAR FROM data_date) = #{req.dateYear}
AND
bind_user_id=#{req.userId}
order by data_date desc,time_stamp desc
@@ -88,18 +88,18 @@
<select id="selectSevenActiveList" resultType="com.renkang.watch.entity.WatchData">
select
orgcode, IFNULL(COUNT(DISTINCT userid),0) AS "type"
orgcode, NVL(COUNT(DISTINCT userid),0) AS "type"
from watch_data
WHERE last_update_time >= CURDATE() - INTERVAL 6 DAY
WHERE last_update_time >= SYSDATE - 6
GROUP BY orgcode
</select>
<select id="selectThirtyActiveList" resultType="com.renkang.watch.entity.WatchData">
select
orgcode, IFNULL(COUNT(DISTINCT userid),0) AS "type"
orgcode, NVL(COUNT(DISTINCT userid),0) AS "type"
from watch_data
WHERE last_update_time >= CURDATE() - INTERVAL 29 DAY
WHERE last_update_time >= SYSDATE - 29
GROUP BY orgcode
</select>
@@ -127,89 +127,113 @@
SELECT count(1)
FROM watch_data
WHERE watch_no = #{watchNo}
AND last_update_time >= CURDATE() - INTERVAL 7 DAY
AND last_update_time >= SYSDATE - 7
</select>
<insert id="insertHeartRate">
insert into watch_data(id, userid, username, orgcode, watch_no, type, data_value, last_update_time)
(select #{id,jdbcType=VARCHAR}, bind_user_id, #{username,jdbcType=VARCHAR}, #{orgcode,jdbcType=VARCHAR}, watch_no, 1, data_value, data_date
from watch_data_heart_rate force index (bind_user_id)
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
order by time_stamp desc
limit 1);
from (select bind_user_id, watch_no, data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY time_stamp desc) as rn
from watch_data_heart_rate
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR})
where rn = 1);
</insert>
<update id="updateHeartRate">
update watch_data wd left join (select bind_user_id, data_value, data_date
from watch_data_heart_rate force index (bind_user_id)
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
order by time_stamp desc
limit 1) d on d.bind_user_id = wd.userid
update watch_data wd
set wd.orgcode = #{orgcode,jdbcType=VARCHAR},
wd.data_value = d.data_value,
wd.last_update_time = d.data_date
wd.data_value = (select data_value from (
select bind_user_id, data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY time_stamp desc) as rn
from watch_data_heart_rate
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
) where rn = 1),
wd.last_update_time = (select data_date from (
select bind_user_id, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY time_stamp desc) as rn
from watch_data_heart_rate
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
) where rn = 1)
where wd.userid = #{userid,jdbcType=VARCHAR}
and wd.watch_no = #{watchNo,jdbcType=VARCHAR}
and wd.`type` = 1;
and wd.watch_no = #{watchNo,jdbcType=VARCHAR}
and wd."type" = 1;
</update>
<insert id="insertSpo2">
insert into watch_data(id, userid, username, orgcode, watch_no, type, data_value, last_update_time)
(select #{id,jdbcType=VARCHAR}, bind_user_id, #{username,jdbcType=VARCHAR}, #{orgcode,jdbcType=VARCHAR}, watch_no, 2, data_value, data_date
from watch_data_spo2 force index (bind_user_id_index)
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
order by time_stamp desc
limit 1);
from (select bind_user_id, watch_no, data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY time_stamp desc) as rn
from watch_data_spo2
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR})
where rn = 1);
</insert>
<update id="updateSpo2">
update watch_data wd left join (select bind_user_id, data_value, data_date
from watch_data_spo2 force index (bind_user_id_index)
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
order by time_stamp desc
limit 1) d on d.bind_user_id = wd.userid
update watch_data wd
set wd.orgcode = #{orgcode,jdbcType=VARCHAR},
wd.data_value = d.data_value,
wd.last_update_time = d.data_date
wd.data_value = (select data_value from (
select bind_user_id, data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY time_stamp desc) as rn
from watch_data_spo2
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
) where rn = 1),
wd.last_update_time = (select data_date from (
select bind_user_id, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY time_stamp desc) as rn
from watch_data_spo2
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
) where rn = 1)
where userid = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
and `type` = 2;
and "type" = 2;
</update>
<insert id="insertStress">
insert into watch_data(id, userid, username, orgcode, watch_no, type, data_value, last_update_time)
(select #{id,jdbcType=VARCHAR}, bind_user_id, #{username,jdbcType=VARCHAR}, #{orgcode,jdbcType=VARCHAR}, watch_no, 3, data_value, data_date
from watch_data_stress force index (bind_user_id)
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
order by start_time_stamp desc
limit 1);
from (select bind_user_id, watch_no, data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY start_time_stamp desc) as rn
from watch_data_stress
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR})
where rn = 1);
</insert>
<update id="updateStress">
update watch_data wd left join (select bind_user_id, data_value, data_date
from watch_data_stress force index (bind_user_id)
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
order by start_time_stamp desc
limit 1) d on d.bind_user_id = wd.userid
update watch_data wd
set wd.orgcode = #{orgcode,jdbcType=VARCHAR},
wd.data_value = d.data_value,
wd.last_update_time = d.data_date
wd.data_value = (select data_value from (
select bind_user_id, data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY start_time_stamp desc) as rn
from watch_data_stress
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
) where rn = 1),
wd.last_update_time = (select data_date from (
select bind_user_id, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY start_time_stamp desc) as rn
from watch_data_stress
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
) where rn = 1)
where userid = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
and `type` = 3;
and watch_no = #{watchNo,jdbcType=VARCHAR}
and "type" = 3;
</update>
<insert id="insertSleep">
insert into watch_data(id, userid, username, orgcode, watch_no, type, data_value, last_update_time)
(select #{id,jdbcType=VARCHAR}, bind_user_id,
#{username,jdbcType=VARCHAR}, #{orgcode,jdbcType=VARCHAR}, #{watchNo,jdbcType=VARCHAR}, 4,
sum(time_to_sec(timediff(sm.end_time, sm.start_time))) / 60 as deep_light_times, data_date
NVL(SUM(EXTRACT(HOUR FROM (sm.end_time - sm.start_time)) * 60 + EXTRACT(MINUTE FROM (sm.end_time - sm.start_time))), 0) as deep_light_times, data_date
from watch_data_sleep_new s
left join watch_data_sleep_new_minute sm on s.id = sm.sleep_id
where s.bind_user_id = #{userid,jdbcType=VARCHAR}
@@ -217,132 +241,172 @@
and s.sleep_flag = '1'
group by s.bind_user_id, s.watch_no, s.data_date
order by data_date desc
limit 1);
FETCH FIRST 1 ROWS ONLY);
</insert>
<update id="updateSleep">
update watch_data wd left join (select s.bind_user_id,
sum(time_to_sec(timediff(sm.end_time, sm.start_time))) / 60 as deep_light_times,
data_date
from watch_data_sleep_new s
left join watch_data_sleep_new_minute sm on s.id = sm.sleep_id
where s.bind_user_id = #{userid,jdbcType=VARCHAR}
and s.watch_no = #{watchNo,jdbcType=VARCHAR}
and s.sleep_flag = '1'
group by s.bind_user_id, s.watch_no, s.data_date
order by data_date desc
limit 1) d on d.bind_user_id = wd.userid
update watch_data wd
set wd.orgcode = #{orgcode,jdbcType=VARCHAR},
wd.data_value = d.deep_light_times,
wd.last_update_time = d.data_date
wd.data_value = (select NVL(SUM(EXTRACT(HOUR FROM (sm.end_time - sm.start_time)) * 60 + EXTRACT(MINUTE FROM (sm.end_time - sm.start_time))), 0)
from watch_data_sleep_new s
left join watch_data_sleep_new_minute sm on s.id = sm.sleep_id
where s.bind_user_id = #{userid,jdbcType=VARCHAR}
and s.watch_no = #{watchNo,jdbcType=VARCHAR}
and s.sleep_flag = '1'
group by s.bind_user_id, s.watch_no, s.data_date
order by data_date desc
FETCH FIRST 1 ROWS ONLY),
wd.last_update_time = (select data_date from (
select data_date
from watch_data_sleep_new
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
and sleep_flag = '1'
order by data_date desc
) where ROWNUM = 1)
where userid = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
and `type` = 4;
and "type" = 4;
</update>
<insert id="insertTemperature">
insert into watch_data(id, userid, username, orgcode, watch_no, type, data_value, last_update_time)
(select #{id,jdbcType=VARCHAR}, bind_user_id, #{username,jdbcType=VARCHAR}, #{orgcode,jdbcType=VARCHAR}, watch_no, 5, data_value, data_date
from watch_data_temperature force index (bind_user_id)
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
order by time_stamp desc
limit 1);
from (select bind_user_id, watch_no, data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY time_stamp desc) as rn
from watch_data_temperature
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR})
where rn = 1);
</insert>
<update id="updateTemperature">
update watch_data wd left join (select bind_user_id, data_value, data_date
from watch_data_temperature force index (bind_user_id)
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
order by time_stamp desc
limit 1) d on d.bind_user_id = wd.userid
update watch_data wd
set wd.orgcode = #{orgcode,jdbcType=VARCHAR},
wd.data_value = d.data_value,
wd.last_update_time = d.data_date
wd.data_value = (select data_value from (
select bind_user_id, data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY time_stamp desc) as rn
from watch_data_temperature
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
) where rn = 1),
wd.last_update_time = (select data_date from (
select bind_user_id, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY time_stamp desc) as rn
from watch_data_temperature
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
) where rn = 1)
where userid = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
and `type` = 5;
and watch_no = #{watchNo,jdbcType=VARCHAR}
and "type" = 5;
</update>
<insert id="insertWorkout">
insert into watch_data(id, userid, username, orgcode, watch_no, type, data_value, last_update_time)
(select #{id,jdbcType=VARCHAR}, bind_user_id, #{username,jdbcType=VARCHAR}, #{orgcode,jdbcType=VARCHAR}, watch_no, 6, sum(calorie), data_date
from watch_data_workout force index (bind_user_id)
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
group by bind_user_id, watch_no, data_date
order by data_date desc
limit 1);
from (select bind_user_id, watch_no, sum(calorie) as calorie, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY data_date desc) as rn
from watch_data_workout
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
group by bind_user_id, watch_no, data_date)
where rn = 1);
</insert>
<update id="updateWorkout">
update watch_data wd left join (select bind_user_id, sum(calorie) as data_value, data_date
from watch_data_workout force index (bind_user_id)
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
group by bind_user_id, watch_no, data_date
order by data_date desc
limit 1) d on d.bind_user_id = wd.userid
update watch_data wd
set wd.orgcode = #{orgcode,jdbcType=VARCHAR},
wd.data_value = d.data_value,
wd.last_update_time = d.data_date
wd.data_value = (select sum(calorie) from (
select bind_user_id, watch_no, sum(calorie) as calorie, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY data_date desc) as rn
from watch_data_workout
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
group by bind_user_id, watch_no, data_date
) where rn = 1),
wd.last_update_time = (select data_date from (
select bind_user_id, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY data_date desc) as rn
from watch_data_workout
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
group by bind_user_id, watch_no, data_date
) where rn = 1)
where userid = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
and `type` = 6;
and watch_no = #{watchNo,jdbcType=VARCHAR}
and "type" = 6;
</update>
<insert id="insertDistance">
insert into watch_data(id, userid, username, orgcode, watch_no, type, data_value, last_update_time)
(select #{id,jdbcType=VARCHAR}, bind_user_id, #{username,jdbcType=VARCHAR}, #{orgcode,jdbcType=VARCHAR}, watch_no, 7, max(data_value), data_date
from watch_data_distance force index (bind_user_id)
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
group by bind_user_id, watch_no, data_date
order by data_date desc
limit 1);
from (select bind_user_id, watch_no, max(data_value) as data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY data_date desc) as rn
from watch_data_distance
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
group by bind_user_id, watch_no, data_date)
where rn = 1);
</insert>
<update id="updateDistance">
update watch_data wd left join (select bind_user_id,max(data_value) as data_value, data_date
from watch_data_distance force index (bind_user_id)
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
group by bind_user_id, watch_no, data_date
order by data_date desc
limit 1) d on d.bind_user_id = wd.userid
update watch_data wd
set wd.orgcode = #{orgcode,jdbcType=VARCHAR},
wd.data_value = d.data_value,
wd.last_update_time = d.data_date
wd.data_value = (select max(data_value) from (
select bind_user_id, watch_no, max(data_value) as data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY data_date desc) as rn
from watch_data_distance
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
group by bind_user_id, watch_no, data_date
) where rn = 1),
wd.last_update_time = (select data_date from (
select bind_user_id, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY data_date desc) as rn
from watch_data_distance
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
group by bind_user_id, watch_no, data_date
) where rn = 1)
where userid = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
and `type` = 7;
and watch_no = #{watchNo,jdbcType=VARCHAR}
and "type" = 7;
</update>
<insert id="insertSteps">
insert into watch_data(id, userid, username, orgcode, watch_no, type, data_value, last_update_time)
(select #{id,jdbcType=VARCHAR}, bind_user_id, #{username,jdbcType=VARCHAR}, #{orgcode,jdbcType=VARCHAR}, watch_no, 8, max(data_value), data_date
from watch_data_steps force index (bind_user_id)
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
group by bind_user_id, watch_no, data_date
order by data_date desc
limit 1);
from (select bind_user_id, watch_no, max(data_value) as data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY data_date desc) as rn
from watch_data_steps
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
group by bind_user_id, watch_no, data_date)
where rn = 1);
</insert>
<update id="updateSteps">
update watch_data wd left join (select bind_user_id,max(data_value) as data_value, data_date
from watch_data_steps force index (bind_user_id)
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
group by bind_user_id, watch_no, data_date
order by data_date desc
limit 1) d on d.bind_user_id = wd.userid
update watch_data wd
set wd.orgcode = #{orgcode,jdbcType=VARCHAR},
wd.data_value = d.data_value,
wd.last_update_time = d.data_date
wd.data_value = (select max(data_value) from (
select bind_user_id, watch_no, max(data_value) as data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY data_date desc) as rn
from watch_data_steps
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
group by bind_user_id, watch_no, data_date
) where rn = 1),
wd.last_update_time = (select data_date from (
select bind_user_id, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id, watch_no ORDER BY data_date desc) as rn
from watch_data_steps
where bind_user_id = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
group by bind_user_id, watch_no, data_date
) where rn = 1)
where userid = #{userid,jdbcType=VARCHAR}
and watch_no = #{watchNo,jdbcType=VARCHAR}
and `type` = 8;
and watch_no = #{watchNo,jdbcType=VARCHAR}
and "type" = 8;
</update>
</mapper>
@@ -34,7 +34,7 @@
wdsnm.start_time as startTime,
wdsnm.end_time as endTime,
wdsnm.sleep_type as sleepType,
TIMESTAMPDIFF(MINUTE,wdsnm.start_time,wdsnm.end_time) as times
EXTRACT(MINUTE FROM (wdsnm.end_time - wdsnm.start_time)) as times
from
watch_data_sleep_new wdsn
inner join watch_data_sleep_new_minute wdsnm on wdsnm.sleep_id=wdsn.id
@@ -5,9 +5,9 @@
SELECT
*
FROM
`watch_data_spo2`
"watch_data_spo2"
WHERE
YEAR ( data_date )= #{req.dateYear}
EXTRACT(YEAR FROM data_date) = #{req.dateYear}
AND
bind_user_id=#{req.userId}
order by data_date desc,time_stamp desc
@@ -5,9 +5,9 @@
SELECT
*
FROM
`watch_data_stress`
"watch_data_stress"
WHERE
YEAR ( data_date )= #{req.dateYear}
EXTRACT(YEAR FROM data_date) = #{req.dateYear}
AND
bind_user_id=#{req.userId}
order by data_date desc,start_time_stamp asc ,end_time_stamp asc
@@ -5,9 +5,9 @@
SELECT
*
FROM
`watch_data_temperature`
"watch_data_temperature"
WHERE
YEAR ( data_date )= #{req.dateYear}
EXTRACT(YEAR FROM data_date) = #{req.dateYear}
AND
bind_user_id=#{req.userId}
order by data_date desc,
@@ -5,7 +5,7 @@
<select id="selectSportCostList" resultType="com.renkang.watch.entity.WatchDataWorkout">
SELECT
DATE(start_time_stamp) as "dataDate",
IFNULL(SUM(calorie),0) AS calorie,
NVL(SUM(calorie),0) AS calorie,
SUM(
CASE
WHEN workout_type IN (1, 3, 11, 12, 13, 17, 18, 102, 103, 107, 108, 109, 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 122, 127, 129, 137, 138, 142, 143, 151, 153, 154, 155, 156, 157, 163, 164, 166, 167, 169, 177, 179, 180, 181, 182, 183) THEN calorie * 0.30
@@ -19,25 +19,25 @@
WHEN workout_type IN (2, 4, 5, 6, 7, 8, 9, 10, 14, 15, 16, 19, 20, 21, 101, 104, 105, 106, 111, 121, 123, 124, 125, 126, 128, 130, 131, 132, 133, 134, 135, 136, 139, 140, 141, 144, 145, 146, 147, 148, 149, 150, 158, 159, 160, 161, 162, 165, 168, 170, 171, 172, 173, 174, 175, 176, 178, 184, 185) THEN calorie-FLOOR(calorie * 0.50)
ELSE 0
END
) AS sugarCalories
) AS sugarCalories,
SUM(NVL(EXTRACT(SECOND FROM (end_time_stamp - start_time_stamp)) +
EXTRACT(MINUTE FROM (end_time_stamp - start_time_stamp)) * 60 +
EXTRACT(HOUR FROM (end_time_stamp - start_time_stamp)) * 3600, 0)) as "totalTime"
FROM
watch_data_workout
watch_data_workout
WHERE
FIND_IN_SET(workout_type,'1,2,3,109,144,6,7,101,113,145')
and bind_user_id = #{watchDataWorkout.bindUserId}
<if test="watchDataWorkout.endTime != null and watchDataWorkout.startTime != null">
and DATE(start_time_stamp) &gt;= DATE(#{watchDataWorkout.startTime})
and DATE(start_time_stamp) &lt;= DATE(#{watchDataWorkout.endTime})
</if>
GROUP BY
dataDate
order by dataDate
INSTR(',' || '1,2,3,109,144,6,7,101,113,145' || ',', ',' || workout_type || ',') > 0
<if test="watchDataWorkout.endTime != null and watchDataWorkout.startTime != null">
and DATE(start_time_stamp) &gt;= DATE(#{watchDataWorkout.startTime})
and DATE(start_time_stamp) &lt;= DATE(#{watchDataWorkout.endTime})
</if>
and bind_user_id = #{watchDataWorkout.bindUserId}
</select>
<select id="selectSportCostTotal" resultType="com.renkang.watch.entity.WatchDataWorkout">
SELECT
IFNULL(SUM(calorie),0) AS calorie,
NVL(SUM(calorie),0) AS calorie,
SUM(
CASE
WHEN workout_type IN (1, 3, 11, 12, 13, 17, 18, 102, 103, 107, 108, 109, 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 122, 127, 129, 137, 138, 142, 143, 151, 153, 154, 155, 156, 157, 163, 164, 166, 167, 169, 177, 179, 180, 181, 182, 183) THEN calorie * 0.30
@@ -88,27 +88,31 @@
ELSE 0
END
AS sugarCalories,
IFNULL(TIMESTAMPDIFF(SECOND, start_time_stamp, end_time_stamp),0) as "totalTime"
NVL(EXTRACT(SECOND FROM (end_time_stamp - start_time_stamp)) +
EXTRACT(MINUTE FROM (end_time_stamp - start_time_stamp)) * 60 +
EXTRACT(HOUR FROM (end_time_stamp - start_time_stamp)) * 3600, 0) as "totalTime"
from
watch_data_workout
WHERE
bind_user_id = #{watchDataWorkout.bindUserId}
and DATE(start_time_stamp) = DATE(#{watchDataWorkout.dataDate})
and FIND_IN_SET(workout_type,'1,2,3,109,144,6,7,101,113,145')
and INSTR(',' || '1,2,3,109,144,6,7,101,113,145' || ',', ',' || workout_type || ',') > 0
order by start_time_stamp desc
</select>
<select id="selectselectSportTimingTotal" resultType="com.renkang.watch.entity.WatchDataWorkout">
select
IFNULL(SUM(calorie),0) as "calorie",
IFNULL(SUM(TIMESTAMPDIFF(SECOND, start_time_stamp, end_time_stamp)),0) as "totalTime"
NVL(SUM(calorie),0) as "calorie",
NVL(SUM(EXTRACT(SECOND FROM (end_time_stamp - start_time_stamp)) +
EXTRACT(MINUTE FROM (end_time_stamp - start_time_stamp)) * 60 +
EXTRACT(HOUR FROM (end_time_stamp - start_time_stamp)) * 3600),0) as "totalTime"
from
watch_data_workout
WHERE
bind_user_id = #{watchDataWorkout.bindUserId}
and DATE(start_time_stamp) = DATE(#{watchDataWorkout.dataDate})
and FIND_IN_SET(workout_type,'1,2,3,109,144,6,7,101,113,145')
and INSTR(',' || '1,2,3,109,144,6,7,101,113,145' || ',', ',' || workout_type || ',') > 0
</select>
@@ -193,7 +197,7 @@
bind_user_id = #{watchDataWorkout.bindUserId}
and DATE(start_time_stamp) &gt;= DATE(#{watchDataWorkout.startTime})
and DATE(start_time_stamp) &lt;= DATE(#{watchDataWorkout.endTime})
and FIND_IN_SET(workout_type,'1,2,3,109,144,6,7,101,113,145')
and INSTR(',' || '1,2,3,109,144,6,7,101,113,145' || ',', ',' || workout_type || ',') > 0
order by start_time_stamp
</select>
@@ -240,8 +244,10 @@
<select id="selectselectSportTimingTotalNew" resultType="com.renkang.watch.entity.WatchDataWorkout">
select
IFNULL(SUM(calorie),0) as "calorie",
IFNULL(SUM(TIMESTAMPDIFF(SECOND, start_time_stamp, end_time_stamp)),0) as "totalTime",
NVL(SUM(calorie),0) as "calorie",
NVL(SUM(EXTRACT(SECOND FROM (end_time_stamp - start_time_stamp)) +
EXTRACT(MINUTE FROM (end_time_stamp - start_time_stamp)) * 60 +
EXTRACT(HOUR FROM (end_time_stamp - start_time_stamp)) * 3600),0) as "totalTime",
MIN(start_time_stamp) AS "dataDate"
from
watch_data_workout
@@ -16,9 +16,9 @@
END AS watch_status,
wd.bind_date,
wd.bind_user_id,
GROUP_CONCAT(wds.wd_type) AS wd_types,
GROUP_CONCAT(wds.switch_flag) AS switch_flags,
GROUP_CONCAT(IFNULL(wds.update_date, '') SEPARATOR ',') AS update_dates
LISTAGG(wds.wd_type, ',') WITHIN GROUP (ORDER BY wds.wd_type) AS wd_types,
LISTAGG(wds.switch_flag, ',') WITHIN GROUP (ORDER BY wds.switch_flag) AS switch_flags,
LISTAGG(NVL(TO_CHAR(wds.update_date, 'YYYY-MM-DD HH24:MI:SS'), '') || ',') WITHIN GROUP (ORDER BY wds.update_date) AS update_dates
FROM
watch_device wd
LEFT JOIN
@@ -45,7 +45,13 @@
${permissionSql}
</where>
GROUP BY
wd.id,wd.watch_no, wd.dept_id, wd.create_date, watch_status, wd.bind_date, wd.bind_user_id
wd.id, wd.watch_no, wd.dept_id, wd.create_date,
CASE
WHEN wd.bind_user_id IS NULL THEN 0
WHEN wd.bind_user_id = '' THEN 0
ELSE 1
END,
wd.bind_date, wd.bind_user_id
ORDER BY
wd.create_date DESC;
</select>
@@ -147,7 +153,7 @@
count(1)
from watch_device
where org_code = #{orgCode}
and Date(create_date) <![CDATA[ <= ]]> #{endDate}
and TRUNC(create_date) <![CDATA[ <= ]]> #{endDate}
</select>
@@ -425,7 +431,7 @@
COALESCE(steps.step_value, 0) AS stepValue,
COALESCE(steps.last_upload_time, NULL) AS stepTime,
COALESCE(workout.start_time_stamp, NULL) AS durationTime,
COALESCE(TIMESTAMPDIFF(MINUTE, workout.start_time_stamp, workout.end_time_stamp),0) AS durationTotalValue,
COALESCE(EXTRACT(MINUTE FROM (workout.end_time_stamp - workout.start_time_stamp)),0) AS durationTotalValue,
workout.workout_type AS workoutType,
COALESCE(hr.errorNum, 0) AS rateAbnormalValue,
@@ -109,7 +109,7 @@
AND TO_CHAR(data_date, 'YYYY-MM') = #{date}
ORDER BY
data_date DESC
LIMIT #{pageSize} OFFSET #{startNo}
OFFSET #{startNo} ROWS FETCH NEXT #{pageSize} ROWS ONLY
</select>
<select id="getAverageDay" resultType="java.util.Map">
SELECT
@@ -7,7 +7,7 @@
bind_user_id,
count( DISTINCT bind_user_id )
FROM
`watch_monitor_data`
"watch_monitor_data"
<where>
<if test="startTime!=null">
and warn_time &gt;= #{startTime}
@@ -23,7 +23,7 @@
SELECT
count(*)
FROM
`watch_monitor_data`
"watch_monitor_data"
<where>
and org_code like concat(#{orgCode},'%')
<if test="type != null">
@@ -215,6 +215,6 @@
lon_gd IS NOT NULL
AND lat_gd IS NOT NULL
AND NVL(address_gd, '') = ''
limit 100
WHERE ROWNUM &lt;= 100
</select>
</mapper>
@@ -6,15 +6,15 @@
SELECT
id as id ,
user_id as userId,
step_value as `stepValue`,
step_value as "stepValue",
distance_value as distanceValue,
calorie_value as calorieValue,
data_date as dataDate,
TO_CHAR( data_date, 'MM' ) AS dateStr
FROM
`watch_stat_user_info_day_sdc`
"watch_stat_user_info_day_sdc"
WHERE
YEAR ( data_date )= #{dateYear}
EXTRACT(YEAR FROM data_date) = #{dateYear}
and
user_id=#{userId}
</select>
@@ -22,14 +22,14 @@
SELECT
id as id ,
user_id as userId,
step_value as `stepValue`,
step_value as "stepValue",
distance_value as distanceValue,
calorie_value as calorieValue,
data_date as dataDate
FROM
`watch_stat_user_info_day_sdc`
"watch_stat_user_info_day_sdc"
WHERE
YEAR ( data_date )= #{req.dateYear}
EXTRACT(YEAR FROM data_date) = #{req.dateYear}
and
user_id=#{req.userId}
order by data_date desc
@@ -170,26 +170,26 @@
(select #{id,jdbcType=VARCHAR},
#{userId,jdbcType=VARCHAR},
(select max(data_value)
from watch_data_steps force index (bind_user_id)
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}
group by data_date
order by data_date desc
limit 1) as step_value,
from (select data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id ORDER BY data_date desc) as rn
from watch_data_steps
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE})
where rn = 1) as step_value,
(select max(data_value)
from watch_data_distance force index (bind_user_id)
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}
group by data_date
order by data_date desc
limit 1) as distance_value,
from (select data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id ORDER BY data_date desc) as rn
from watch_data_distance
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE})
where rn = 1) as distance_value,
(select max(data_value)
from watch_data_calorie force index (bind_user_id)
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}
group by data_date
order by data_date desc
limit 1) as calorie_value,
from (select data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id ORDER BY data_date desc) as rn
from watch_data_calorie
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE})
where rn = 1) as calorie_value,
#{lastUploadTime,jdbcType=TIMESTAMP},
#{dataDate,jdbcType=DATE},
#{orgCode,jdbcType=VARCHAR}
@@ -198,34 +198,27 @@
<update id="updateStat">
update watch_stat_user_info_day_sdc stat
left join (select #{userId,jdbcType=VARCHAR} as bind_user_id,
(select max(data_value)
from watch_data_steps force index (bind_user_id)
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}
group by data_date
order by data_date desc
limit 1) as step_value,
(select max(data_value)
from watch_data_distance force index (bind_user_id)
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}
group by data_date
order by data_date desc
limit 1) as distance_value,
(select max(data_value)
from watch_data_calorie force index (bind_user_id)
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}
group by data_date
order by data_date desc
limit 1) as calorie_value,
#{lastUploadTime,jdbcType=TIMESTAMP} as last_upload_time,
#{dataDate,jdbcType=DATE} as data_date
from dual) data on stat.user_id = data.bind_user_id
set stat.step_value = data.step_value,
stat.distance_value = data.distance_value,
stat.calorie_value = data.calorie_value,
set stat.step_value = (select max(data_value)
from (select data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id ORDER BY data_date desc) as rn
from watch_data_steps
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE})
where rn = 1),
stat.distance_value = (select max(data_value)
from (select data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id ORDER BY data_date desc) as rn
from watch_data_distance
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE})
where rn = 1),
stat.calorie_value = (select max(data_value)
from (select data_value, data_date,
ROW_NUMBER() OVER (PARTITION BY bind_user_id ORDER BY data_date desc) as rn
from watch_data_calorie
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE})
where rn = 1),
stat.last_upload_time = #{lastUploadTime,jdbcType=TIMESTAMP},
stat.org_code = #{orgCode,jdbcType=VARCHAR}
where stat.user_id = #{userId,jdbcType=VARCHAR}
@@ -6,7 +6,7 @@
SELECT
id as id ,
user_id as userId,
sleep_avg as `sleepAvg`,
sleep_avg as "sleepAvg",
long_duration_avg as longDurationAvg,
short_duration_avg as shortDurationAvg,
long_duration_max as longDurationMax,
@@ -18,9 +18,9 @@
data_date as dataDate,
TO_CHAR( data_date, 'MM' ) AS dateStr
FROM
`watch_stat_user_info_day_sleep`
"watch_stat_user_info_day_sleep"
WHERE
YEAR ( data_date )= #{dateYear}
EXTRACT(YEAR FROM data_date) = #{dateYear}
and
user_id=#{userId}
</select>
@@ -6,15 +6,15 @@
SELECT
id as id ,
user_id as userId,
max_value as `maxValue`,
max_value as "maxValue",
min_value as minValue,
avg_value as avgValue,
data_date as dataDate,
TO_CHAR( data_date, 'MM' ) AS dateStr
FROM
`watch_stat_user_info_day_spo2`
"watch_stat_user_info_day_spo2"
WHERE
YEAR ( data_date )= #{dateYear}
EXTRACT(YEAR FROM data_date) = #{dateYear}
and
user_id=#{userId}
@@ -36,16 +36,16 @@
group by user_id
</select>
<!-- 切记 此代码不能直接平移至四合一项目 ,该sql只适用mysql8.0及以上版本 ,四合一项目开发测试环境的mysql版本过低 , 但不影响正式环境-->
<!-- 切记 此代码不能直接平移至四合一项目 ,该 sql 只适用 mysql8.0 及以上版本 ,四合一项目开发测试环境的 mysql 版本过低 , 但不影响正式环境-->
<insert id="insertStat">
insert into watch_stat_user_info_day_spo2(id, user_id, max_value, min_value, avg_value, last_upload_time,
new_value, data_date, org_code)
(SELECT #{id,jdbcType=VARCHAR},
bind_user_id,
IFNULL(MAX(wd.data_value), 0),
IFNULL(MIN(wd.data_value), 0),
IFNULL(AVG(wd.data_value), 0),
IFNULL(MAX(wd.time_stamp), 0),
NVL(MAX(wd.data_value), 0),
NVL(MIN(wd.data_value), 0),
NVL(AVG(wd.data_value), 0),
NVL(MAX(wd.time_stamp), TO_TIMESTAMP('1970-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')),
MAX(CASE WHEN wd.rn = 1 THEN wd.data_value END),
data_date,
#{orgCode,jdbcType=VARCHAR}
@@ -57,32 +57,40 @@
wd.data_date);
</insert>
<!-- 切记 此代码不能直接平移至四合一项目 ,该sql只适用mysql8.0及以上版本 ,四合一项目开发测试环境的mysql版本过低 , 但不影响正式环境-->
<!-- 切记 此代码不能直接平移至四合一项目 ,该 sql 只适用 mysql8.0 及以上版本 ,四合一项目开发测试环境的 mysql 版本过低 , 但不影响正式环境-->
<update id="updateStat">
UPDATE watch_stat_user_info_day_spo2 stat
LEFT JOIN (
SELECT
wd.bind_user_id,
wd.data_date,
IFNULL( MAX( wd.data_value ), 0 ) AS max_value,
IFNULL( MIN( wd.data_value ), 0 ) AS min_value,
IFNULL( AVG( wd.data_value ), 0 ) AS avg_value,
IFNULL( MAX( wd.time_stamp ), 0 ) AS last_upload_time,
MAX( CASE WHEN wd.rn = 1 THEN wd.data_value END ) AS new_value
FROM
( SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn FROM watch_data_spo2 where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY
wd.bind_user_id,
wd.data_date
) DATA ON stat.user_id = DATA.bind_user_id
AND stat.data_date = DATA.data_date
SET stat.max_value = DATA.max_value,
stat.min_value = DATA.min_value,
stat.avg_value = DATA.avg_value,
stat.last_upload_time = DATA.last_upload_time,
stat.new_value = DATA.new_value,
stat.org_code = #{orgCode,jdbcType=VARCHAR}
SET stat.max_value = (SELECT NVL(MAX(wd.data_value), 0) AS max_value
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn
FROM watch_data_spo2
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.min_value = (SELECT NVL(MIN(wd.data_value), 0) AS min_value
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn
FROM watch_data_spo2
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.avg_value = (SELECT NVL(AVG(wd.data_value), 0) AS avg_value
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn
FROM watch_data_spo2
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.last_upload_time = (SELECT NVL(MAX(wd.time_stamp), TO_TIMESTAMP('1970-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'))
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn
FROM watch_data_spo2
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.new_value = (SELECT MAX(CASE WHEN wd.rn = 1 THEN wd.data_value END)
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn
FROM watch_data_spo2
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.org_code = #{orgCode,jdbcType=VARCHAR}
where stat.user_id = #{userId,jdbcType=VARCHAR}
and stat.data_date = #{dataDate,jdbcType=DATE};
</update>
@@ -6,35 +6,35 @@
SELECT
id as id ,
user_id as userId,
max_value as `maxValue`,
max_value as "maxValue",
min_value as minValue,
avg_value as avgValue,
data_date as dataDate,
TO_CHAR( data_date, 'MM' ) AS dateStr
FROM
`watch_stat_user_info_day_stress`
"watch_stat_user_info_day_stress"
WHERE
YEAR ( data_date )= #{dateYear}
EXTRACT(YEAR FROM data_date) = #{dateYear}
and
user_id=#{userId}
</select>
<!-- 切记 此代码不能直接平移至四合一项目 ,该sql只适用mysql8.0及以上版本 ,四合一项目开发测试环境的mysql版本过低 , 但不影响正式环境-->
<!-- 切记 此代码不能直接平移至四合一项目 ,该 sql 只适用 mysql8.0 及以上版本 ,四合一项目开发测试环境的 mysql 版本过低 , 但不影响正式环境-->
<insert id="insertStat">
insert into watch_stat_user_info_day_stress(id, user_id, max_value, min_value, avg_value, data_date, last_upload_time, new_value, org_code)
(
SELECT
#{id,jdbcType=VARCHAR},
bind_user_id,
IFNULL( MAX( wd.data_value ), 0 ),
IFNULL( MIN( wd.data_value ), 0 ),
IFNULL( AVG( wd.data_value ), 0 ),
NVL(MAX(wd.data_value), 0),
NVL(MIN(wd.data_value), 0),
NVL(AVG(wd.data_value), 0),
data_date,
IFNULL(MAX( wd.end_time_stamp ),NOW()),
MAX( CASE WHEN wd.rn = 1 THEN wd.data_value END ),
NVL(MAX(wd.end_time_stamp), SYSDATE),
MAX(CASE WHEN wd.rn = 1 THEN wd.data_value END),
#{orgCode,jdbcType=VARCHAR}
FROM
( SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY end_time_stamp DESC ) AS rn FROM watch_data_stress
(SELECT *, ROW_NUMBER() OVER (PARTITION BY bind_user_id, data_date ORDER BY end_time_stamp DESC) AS rn FROM watch_data_stress
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY
@@ -43,34 +43,41 @@
);
</insert>
<!-- 切记 此代码不能直接平移至四合一项目 ,该sql只适用mysql8.0及以上版本 ,四合一项目开发测试环境的mysql版本过低 , 但不影响正式环境-->
<!-- 切记 此代码不能直接平移至四合一项目 ,该 sql 只适用 mysql8.0 及以上版本 ,四合一项目开发测试环境的 mysql 版本过低 , 但不影响正式环境-->
<update id="updateStat">
UPDATE watch_stat_user_info_day_stress stat
LEFT JOIN (
SELECT
wd.bind_user_id,
wd.data_date,
IFNULL( MAX( wd.data_value ), 0 ) AS max_value,
IFNULL( MIN( wd.data_value ), 0 ) AS min_value,
IFNULL( AVG( wd.data_value ), 0 ) AS avg_value,
IFNULL(MAX( wd.end_time_stamp ),NOW()) AS last_upload_time,
MAX( CASE WHEN wd.rn = 1 THEN wd.data_value END ) AS new_value
FROM
( SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY end_time_stamp DESC ) AS rn FROM watch_data_stress
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY
wd.bind_user_id,
wd.data_date
) DATA ON stat.user_id = DATA.bind_user_id
AND stat.data_date = DATA.data_date
SET stat.max_value = DATA.max_value,
stat.min_value = DATA.min_value,
stat.avg_value = DATA.avg_value,
stat.last_upload_time = DATA.last_upload_time,
stat.new_value = DATA.new_value,
stat.org_code = #{orgCode,jdbcType=VARCHAR}
where stat.user_id = #{userId,jdbcType=VARCHAR}
and stat.data_date = #{dataDate,jdbcType=DATE};
SET stat.max_value = (SELECT NVL(MAX(wd.data_value), 0)
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY end_time_stamp DESC ) AS rn
FROM watch_data_stress
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.min_value = (SELECT NVL(MIN(wd.data_value), 0)
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY end_time_stamp DESC ) AS rn
FROM watch_data_stress
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.avg_value = (SELECT NVL(AVG(wd.data_value), 0)
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY end_time_stamp DESC ) AS rn
FROM watch_data_stress
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.last_upload_time = (SELECT NVL(MAX(wd.end_time_stamp), SYSDATE)
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY end_time_stamp DESC ) AS rn
FROM watch_data_stress
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.new_value = (SELECT MAX(CASE WHEN wd.rn = 1 THEN wd.data_value END)
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY end_time_stamp DESC ) AS rn
FROM watch_data_stress
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.org_code = #{orgCode,jdbcType=VARCHAR}
where stat.user_id = #{userId,jdbcType=VARCHAR}
and stat.data_date = #{dataDate,jdbcType=DATE};
</update>
</mapper>
@@ -34,20 +34,19 @@
order by data_date
</select>
<!-- 切记 此代码不能直接平移至四合一项目 ,该sql只适用mysql8.0及以上版本 ,四合一项目开发测试环境的mysql版本过低 , 但不影响正式环境-->
<!-- 切记 此代码不能直接平移至四合一项目 ,该 sql 只适用 mysql8.0 及以上版本 ,四合一项目开发测试环境的 mysql 版本过低 , 但不影响正式环境-->
<insert id="insertStat">
insert into watch_stat_user_info_day_temp(id, user_id, max_value, min_value, avg_value, skin_max_value,
skin_min_value, skin_avg_value, last_upload_time, new_value,
skin_new_value, data_date, org_code)
insert into watch_stat_user_info_day_temp(id, user_id, max_value, min_value, avg_value, skin_max_value, skin_min_value,
skin_avg_value, last_upload_time, new_value, skin_new_value, data_date, org_code)
(SELECT #{id,jdbcType=VARCHAR},
bind_user_id,
IFNULL(MAX(wd.data_value), 0),
IFNULL(MIN(wd.data_value), 0),
IFNULL(AVG(wd.data_value), 0),
IFNULL(MAX(wd.skin_tempera), 0),
IFNULL(MIN(wd.skin_tempera), 0),
IFNULL(AVG(wd.skin_tempera), 0),
IFNULL(MAX(wd.time_stamp), NOW()),
NVL(MAX(wd.data_value), 0),
NVL(MIN(wd.data_value), 0),
NVL(AVG(wd.data_value), 0),
NVL(MAX(wd.skin_tempera), 0),
NVL(MIN(wd.skin_tempera), 0),
NVL(AVG(wd.skin_tempera), 0),
NVL(MAX(wd.time_stamp), SYSDATE),
MAX(CASE WHEN wd.rn = 1 THEN wd.data_value END),
MAX(CASE WHEN wd.rn = 1 THEN wd.skin_tempera END),
data_date,
@@ -60,44 +59,65 @@
wd.data_date);
</insert>
<!-- 切记 此代码不能直接平移至四合一项目 ,该sql只适用mysql8.0及以上版本 ,四合一项目开发测试环境的mysql版本过低 , 但不影响正式环境-->
<!-- 切记 此代码不能直接平移至四合一项目 ,该 sql 只适用 mysql8.0 及以上版本 ,四合一项目开发测试环境的 mysql 版本过低 , 但不影响正式环境-->
<update id="updateStat">
UPDATE watch_stat_user_info_day_temp stat
LEFT JOIN (
SELECT
wd.bind_user_id,
wd.data_date,
IFNULL( MAX( wd.data_value ), 0 ) AS max_value,
IFNULL( MIN( wd.data_value ), 0 ) AS min_value,
IFNULL( AVG( wd.data_value ), 0 ) AS avg_value,
IFNULL( MAX( wd.skin_tempera ), 0 ) AS skin_max_value,
IFNULL( MIN( wd.skin_tempera ), 0 ) AS skin_min_value,
IFNULL( AVG( wd.skin_tempera ), 0 ) AS skin_avg_value,
IFNULL(
MAX( wd.time_stamp ),
NOW()) AS last_upload_time,
MAX( CASE WHEN wd.rn = 1 THEN wd.data_value END ) AS new_value,
MAX( CASE WHEN wd.rn = 1 THEN wd.skin_tempera END ) AS skin_new_value
FROM
( SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn FROM watch_data_temperature
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY
wd.bind_user_id,
wd.data_date
) DATA ON stat.user_id = DATA.bind_user_id
AND stat.data_date = DATA.data_date
SET stat.max_value = DATA.max_value,
stat.min_value = DATA.min_value,
stat.avg_value = DATA.avg_value,
stat.skin_max_value = DATA.skin_max_value,
stat.skin_min_value = DATA.skin_min_value,
stat.skin_avg_value = DATA.skin_avg_value,
stat.last_upload_time = DATA.last_upload_time,
stat.new_value = DATA.new_value,
stat.skin_new_value = COALESCE ( NULLIF( DATA.skin_new_value, 0 ), stat.skin_new_value ),
stat.org_code = #{orgCode,jdbcType=VARCHAR}
where stat.user_id = #{userId,jdbcType=VARCHAR}
and stat.data_date = #{dataDate,jdbcType=DATE};
SET stat.max_value = (SELECT NVL(MAX(wd.data_value), 0)
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn
FROM watch_data_temperature
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.min_value = (SELECT NVL(MIN(wd.data_value), 0)
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn
FROM watch_data_temperature
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.avg_value = (SELECT NVL(AVG(wd.data_value), 0)
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn
FROM watch_data_temperature
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.skin_max_value = (SELECT NVL(MAX(wd.skin_tempera), 0)
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn
FROM watch_data_temperature
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.skin_min_value = (SELECT NVL(MIN(wd.skin_tempera), 0)
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn
FROM watch_data_temperature
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.skin_avg_value = (SELECT NVL(AVG(wd.skin_tempera), 0)
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn
FROM watch_data_temperature
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.last_upload_time = (SELECT NVL(MAX(wd.time_stamp), SYSDATE)
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn
FROM watch_data_temperature
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.new_value = (SELECT MAX(CASE WHEN wd.rn = 1 THEN wd.data_value END)
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn
FROM watch_data_temperature
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.skin_new_value = (SELECT NVL(MAX(CASE WHEN wd.rn = 1 THEN wd.skin_tempera END), stat.skin_new_value)
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn
FROM watch_data_temperature
where bind_user_id = #{userId,jdbcType=VARCHAR}
and data_date = #{dataDate,jdbcType=DATE}) wd
GROUP BY wd.bind_user_id, wd.data_date),
stat.org_code = #{orgCode,jdbcType=VARCHAR}
where stat.user_id = #{userId,jdbcType=VARCHAR}
and stat.data_date = #{dataDate,jdbcType=DATE};
</update>
</mapper>
@@ -158,7 +158,7 @@ public class WatchBindHisServiceImpl extends ServiceImpl<WatchBindHisMapper, Wat
.le(WatchBindHis::getBindDate, bindDate)
.isNull(WatchBindHis::getBindEndDate)
.orderByDesc(WatchBindHis::getBindDate)
.last("LIMIT 1"));
.last("FETCH FIRST 1 ROWS ONLY"));
if (watchBindHis != null) {
return watchBindHis.getBindUserId();
}
@@ -167,8 +167,11 @@ public class WatchBindHisServiceImpl extends ServiceImpl<WatchBindHisMapper, Wat
@Override
public String getWatchNo(String bindUserId, Date bindDate) {
WatchBindHis watchBindHis = getOne(new LambdaQueryWrapper<WatchBindHis>().eq(WatchBindHis::getBindUserId, bindUserId)
.eq(WatchBindHis::getBindDate, bindDate).orderByDesc(WatchBindHis::getBindDate).last("LIMIT 1"));
WatchBindHis watchBindHis = getOne(new LambdaQueryWrapper<WatchBindHis>()
.eq(WatchBindHis::getBindUserId, bindUserId)
.eq(WatchBindHis::getBindDate, bindDate)
.orderByDesc(WatchBindHis::getBindDate)
.last("FETCH FIRST 1 ROWS ONLY"));
if (watchBindHis != null) {
return watchBindHis.getWatchNo();
}
@@ -812,7 +812,7 @@ public class WatchDeviceServiceImpl extends ServiceImpl<WatchDeviceMapper, Watch
binHisQueryWrapper.isNull(WatchBindHis::getBindEndDate);
binHisQueryWrapper.eq(WatchBindHis::getWatchNo, watchDevice.getWatchNo());
binHisQueryWrapper.orderByDesc(WatchBindHis::getCreateDate);
binHisQueryWrapper.last("limit 1");
binHisQueryWrapper.last("FETCH FIRST 1 ROWS ONLY");
WatchBindHis watchBindHis = watchBindHisService.getOne(binHisQueryWrapper);
if (watchBindHis == null) {
return false;
@@ -224,7 +224,9 @@ public class WatchMqttNoticeServiceImpl extends ServiceImpl<WatchMqttNoticeMappe
private String getUserWatchNo(String userId) {
LambdaQueryWrapper<WatchBindHis> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(WatchBindHis::getBindUserId, userId).orderByDesc(WatchBindHis::getBindDate).last(" limit 1");
queryWrapper.eq(WatchBindHis::getBindUserId, userId)
.orderByDesc(WatchBindHis::getBindDate)
.last("FETCH FIRST 1 ROWS ONLY");
WatchBindHis watchBindHis = watchBindHisMapper.selectOne(queryWrapper);
if (watchBindHis != null) {
return watchBindHis.getWatchNo();
@@ -586,7 +586,7 @@ public class WatchServiceImpl implements IWatchService {
wrapper.selectAs(WatchStatUserInfoDaySleep::getDataDate,WatchH5IndexItemNewVo::getDataDate);
wrapper.eq(WatchStatUserInfoDaySleep::getUserId, userId);
wrapper.orderByDesc(WatchStatUserInfoDaySleep::getDataDate);
wrapper.last("limit 1");
wrapper.last("FETCH FIRST 1 ROWS ONLY");
return daySleepMapper.selectJoinOne(WatchH5IndexItemNewVo.class,wrapper);
}
@@ -597,13 +597,13 @@ public class WatchServiceImpl implements IWatchService {
wrapper.selectAs(WatchStatUserInfoDaySdc::getDataDate,WatchH5IndexItemNewVo::getDataDate);
wrapper.eq(WatchStatUserInfoDaySdc::getUserId, userId);
wrapper.orderByDesc(WatchStatUserInfoDaySdc::getDataDate);
wrapper.last("limit 1");
wrapper.last("FETCH FIRST 1 ROWS ONLY");
return statSdcMapper.selectJoinOne(WatchH5IndexItemNewVo.class,wrapper);
}
private WatchH5IndexItemNewVo latestHeartRateData(String userId) {
MPJLambdaWrapper<WatchStatUserInfoDayHeartRate> wrapper = new MPJLambdaWrapper<>();
// 必须是watch_stat_user_info_day_heart_rate表中new_data字段启用后才能这样查
// 必须是 watch_stat_user_info_day_heart_rate 表中 new_data 字段启用后才能这样查
wrapper.selectAs(WatchStatUserInfoDayHeartRate::getNewValue,WatchH5IndexItemNewVo::getDataValue);
wrapper.selectAs(WatchStatUserInfoDayHeartRate::getMaxValue,WatchH5IndexItemNewVo::getDataMax);
wrapper.selectAs(WatchStatUserInfoDayHeartRate::getMinValue,WatchH5IndexItemNewVo::getDataMin);
@@ -611,13 +611,13 @@ public class WatchServiceImpl implements IWatchService {
wrapper.selectAs(WatchStatUserInfoDayHeartRate::getDataDate,WatchH5IndexItemNewVo::getDataDate);
wrapper.eq(WatchStatUserInfoDayHeartRate::getUserId, userId);
wrapper.orderByDesc(WatchStatUserInfoDayHeartRate::getDataDate);
wrapper.last("limit 1");
wrapper.last("FETCH FIRST 1 ROWS ONLY");
return dayHeartRateMapper.selectJoinOne(WatchH5IndexItemNewVo.class,wrapper);
}
private WatchH5IndexItemNewVo latestSpo2Data(String userId) {
MPJLambdaWrapper<WatchStatUserInfoDaySpo2> wrapper = new MPJLambdaWrapper<>();
// 必须是watch_stat_user_info_day_spo2表中new_data字段启用后才能这样查
// 必须是 watch_stat_user_info_day_spo2 表中 new_data 字段启用后才能这样查
wrapper.selectAs(WatchStatUserInfoDaySpo2::getNewValue,WatchH5IndexItemNewVo::getDataValue);
wrapper.selectAs(WatchStatUserInfoDaySpo2::getMaxValue,WatchH5IndexItemNewVo::getDataMax);
wrapper.selectAs(WatchStatUserInfoDaySpo2::getMinValue,WatchH5IndexItemNewVo::getDataMin);
@@ -625,13 +625,13 @@ public class WatchServiceImpl implements IWatchService {
wrapper.selectAs(WatchStatUserInfoDaySpo2::getDataDate,WatchH5IndexItemNewVo::getDataDate);
wrapper.eq(WatchStatUserInfoDaySpo2::getUserId, userId);
wrapper.orderByDesc(WatchStatUserInfoDaySpo2::getDataDate);
wrapper.last("limit 1");
wrapper.last("FETCH FIRST 1 ROWS ONLY");
return daySpo2Mapper.selectJoinOne(WatchH5IndexItemNewVo.class,wrapper);
}
private WatchH5IndexItemNewVo latestStressData(String userId) {
MPJLambdaWrapper<WatchStatUserInfoDayStress> wrapper = new MPJLambdaWrapper<>();
// 必须是watch_stat_user_info_day_stress表中new_data字段启用后才能这样查
// 必须是 watch_stat_user_info_day_stress 表中 new_data 字段启用后才能这样查
wrapper.selectAs(WatchStatUserInfoDayStress::getNewValue,WatchH5IndexItemNewVo::getDataValue);
wrapper.selectAs(WatchStatUserInfoDayStress::getMaxValue,WatchH5IndexItemNewVo::getDataMax);
wrapper.selectAs(WatchStatUserInfoDayStress::getMinValue,WatchH5IndexItemNewVo::getDataMin);
@@ -639,13 +639,13 @@ public class WatchServiceImpl implements IWatchService {
wrapper.selectAs(WatchStatUserInfoDayStress::getDataDate,WatchH5IndexItemNewVo::getDataDate);
wrapper.eq(WatchStatUserInfoDayStress::getUserId, userId);
wrapper.orderByDesc(WatchStatUserInfoDayStress::getDataDate);
wrapper.last("limit 1");
wrapper.last("FETCH FIRST 1 ROWS ONLY");
return dayStressMapper.selectJoinOne(WatchH5IndexItemNewVo.class,wrapper);
}
private WatchH5IndexItemNewVo latestTempData(String userId) {
MPJLambdaWrapper<WatchStatUserInfoDayTemp> wrapper = new MPJLambdaWrapper<>();
// 必须是watch_stat_user_info_day_temp表中new_data字段启用后才能这样查
// 必须是 watch_stat_user_info_day_temp 表中 new_data 字段启用后才能这样查
wrapper.selectAs(WatchStatUserInfoDayTemp::getNewValue,WatchH5IndexItemNewVo::getDataValue);
wrapper.selectAs(WatchStatUserInfoDayTemp::getMaxValue,WatchH5IndexItemNewVo::getDataMax);
wrapper.selectAs(WatchStatUserInfoDayTemp::getMinValue,WatchH5IndexItemNewVo::getDataMin);
@@ -653,7 +653,7 @@ public class WatchServiceImpl implements IWatchService {
wrapper.selectAs(WatchStatUserInfoDayTemp::getDataDate,WatchH5IndexItemNewVo::getDataDate);
wrapper.eq(WatchStatUserInfoDayTemp::getUserId, userId);
wrapper.orderByDesc(WatchStatUserInfoDayTemp::getDataDate);
wrapper.last("limit 1");
wrapper.last("FETCH FIRST 1 ROWS ONLY");
return dayTempMapper.selectJoinOne(WatchH5IndexItemNewVo.class,wrapper);
}
@@ -662,7 +662,7 @@ public class WatchServiceImpl implements IWatchService {
LambdaQueryWrapper<WatchBindHis> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(WatchBindHis::getBindUserId, userId);
wrapper.orderByDesc(WatchBindHis::getBindDate);
wrapper.last("limit 1");
wrapper.last("FETCH FIRST 1 ROWS ONLY");
return bindHisMapper.selectOne(wrapper);
}
@@ -903,8 +903,10 @@ public class WatchServiceImpl implements IWatchService {
WatchH5WorkoutDayVo watchH5WorkoutDayVo = new WatchH5WorkoutDayVo();
WatchBindHis watchBindHis = bindHisMapper.selectOne(new LambdaQueryWrapper<WatchBindHis>()
.eq(WatchBindHis::getBindUserId, userId).le(WatchBindHis::getBindDate, queryDate)
.orderByDesc(WatchBindHis::getBindDate).last("limit 1"));
.eq(WatchBindHis::getBindUserId, userId)
.le(WatchBindHis::getBindDate, queryDate)
.orderByDesc(WatchBindHis::getBindDate)
.last("FETCH FIRST 1 ROWS ONLY"));
String watchNo = null;
if (watchBindHis != null) {
@@ -1021,8 +1023,10 @@ public class WatchServiceImpl implements IWatchService {
}
WatchH5StepsDayVo watchH5StepsDayVo = this.getStepsData(userId, queryDate);
WatchBindHis watchBindHis = bindHisMapper.selectOne(new LambdaQueryWrapper<WatchBindHis>()
.eq(WatchBindHis::getBindUserId, userId).le(WatchBindHis::getBindDate, queryDate)
.orderByDesc(WatchBindHis::getBindDate).last("limit 1"));
.eq(WatchBindHis::getBindUserId, userId)
.le(WatchBindHis::getBindDate, queryDate)
.orderByDesc(WatchBindHis::getBindDate)
.last("FETCH FIRST 1 ROWS ONLY"));
String watchNo = null;
if (watchBindHis != null) {
watchNo = watchBindHis.getWatchNo();
@@ -1082,8 +1086,10 @@ public class WatchServiceImpl implements IWatchService {
public WatchH5WorkoutResultVO getWorkoutWeekDayList(String userId, Date queryDate) {
WatchBindHis watchBindHis = bindHisMapper.selectOne(new LambdaQueryWrapper<WatchBindHis>()
.eq(WatchBindHis::getBindUserId, userId).le(WatchBindHis::getBindDate, queryDate)
.orderByDesc(WatchBindHis::getBindDate).last("limit 1"));
.eq(WatchBindHis::getBindUserId, userId)
.le(WatchBindHis::getBindDate, queryDate)
.orderByDesc(WatchBindHis::getBindDate)
.last("FETCH FIRST 1 ROWS ONLY"));
String watchNo = null;
if (watchBindHis != null) {
watchNo = watchBindHis.getWatchNo();
@@ -1103,8 +1109,10 @@ public class WatchServiceImpl implements IWatchService {
@Override
public WatchH5StepsResultVO getStepsWeekDayList(String userId, Date queryDate) {
WatchBindHis watchBindHis = bindHisMapper.selectOne(new LambdaQueryWrapper<WatchBindHis>()
.eq(WatchBindHis::getBindUserId, userId).le(WatchBindHis::getBindDate, queryDate)
.orderByDesc(WatchBindHis::getBindDate).last("limit 1"));
.eq(WatchBindHis::getBindUserId, userId)
.le(WatchBindHis::getBindDate, queryDate)
.orderByDesc(WatchBindHis::getBindDate)
.last("FETCH FIRST 1 ROWS ONLY"));
String watchNo = null;
if (watchBindHis != null) {
watchNo = watchBindHis.getWatchNo();
@@ -23,7 +23,9 @@ public class WatchSynMaxIdServiceImpl extends ServiceImpl<WatchSynMaxIdMapper, W
@Override
public String getMaxId(String wdType) {
WatchSynMaxId watchSynMaxId = getOne(new QueryWrapper<WatchSynMaxId>()
.eq("wd_type", wdType).last("limit 1"));
.eq("wd_type", wdType)
.orderByDesc("max_id")
.last("FETCH FIRST 1 ROWS ONLY"));
if (watchSynMaxId != null) {
return watchSynMaxId.getMaxId() == null ? "0" : watchSynMaxId.getMaxId();
}
@@ -34,7 +36,9 @@ public class WatchSynMaxIdServiceImpl extends ServiceImpl<WatchSynMaxIdMapper, W
@Transactional(rollbackFor = Exception.class)
public void setMaxId(String wdType, String maxId) {
WatchSynMaxId watchSynMaxId = getOne(new QueryWrapper<WatchSynMaxId>()
.eq("wd_type", wdType).last("limit 1"));
.eq("wd_type", wdType)
.orderByDesc("max_id")
.last("FETCH FIRST 1 ROWS ONLY"));
if (watchSynMaxId != null) {
if (StrUtil.isNotEmpty(maxId)) {
watchSynMaxId.setMaxId(maxId);