护理记录:总护理次数,本年护理次数,本月护理次数,本周护理次数

master
382696293@qq.com 2 years ago
parent 2306e15515
commit ae9afa472f

@ -64,4 +64,6 @@ public interface WxNursingLogMapper {
public int deleteWxNursingLogByIds(Long[] ids);
List<WxNursingLog> selectWxNursingLogByIdList(@Param("idList") List<Integer> idList);
WxNursingLog selectLastNursingLogByUserId(@Param("userId") Long userId, @Param("instrumentId") Long instrumentId);
}

@ -19,10 +19,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="nursingDays" column="nursing_days" />
<result property="nursingDaysWeek" column="nursing_days_week" />
<result property="nursingDaysMonth" column="nursing_days_month" />
<result property="nursingDaysYear" column="nursing_days_year" />
</resultMap>
<sql id="selectWxNursingLogVo">
select id, user_id, instrument_id, instrument_name, online, mode_id, mode_name, nursing_time, completion_percentage, status, create_by, create_time, update_by, update_time from wx_nursing_log
select id, user_id, instrument_id, instrument_name, online, mode_id, mode_name, nursing_time, completion_percentage, status, create_by, create_time, update_by, update_time, nursing_days, nursing_days_week, nursing_days_month, nursing_days_year from wx_nursing_log
</sql>
<select id="selectWxNursingLogList" parameterType="WxNursingLog" resultMap="WxNursingLogResult">
@ -97,6 +101,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</foreach>
</select>
<select id="selectLastNursingLogByUserId" resultMap="WxNursingLogResult">
<include refid="selectWxNursingLogVo"/>
WHERE
user_id = #{userId}
AND instrument_id = #{instrumentId}
ORDER BY
update_time DESC
LIMIT 1
</select>
<insert id="insertWxNursingLog" parameterType="WxNursingLog" useGeneratedKeys="true" keyProperty="id">
insert into wx_nursing_log
<trim prefix="(" suffix=")" suffixOverrides=",">
@ -113,6 +127,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="nursingDays != null">nursing_days,</if>
<if test="nursingDaysWeek != null">nursing_days_week,</if>
<if test="nursingDaysMonth != null">nursing_days_month,</if>
<if test="nursingDaysYear != null">nursing_days_year,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="userId != null">#{userId},</if>
@ -128,6 +146,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="nursingDays != null">#{nursingDays},</if>
<if test="nursingDaysWeek != null">#{nursingDaysWeek},</if>
<if test="nursingDaysMonth != null">#{nursingDaysMonth},</if>
<if test="nursingDaysYear != null">#{nursingDaysYear},</if>
</trim>
</insert>
@ -147,6 +169,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="nursingDays != null">nursing_days = #{nursingDays},</if>
<if test="nursingDaysWeek != null">nursing_days_week = #{nursingDaysWeek},</if>
<if test="nursingDaysMonth != null">nursing_days_month = #{nursingDaysMonth},</if>
<if test="nursingDaysYear != null">nursing_days_year = #{nursingDaysYear},</if>
</trim>
where id = #{id}
</update>

@ -1,9 +1,6 @@
package com.flossom.miniProgram.service.impl;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.*;
import java.time.temporal.TemporalAdjusters;
import java.util.List;
import java.util.Map;
@ -191,6 +188,65 @@ public class WxNursingLogServiceImpl implements IWxNursingLogService {
wxNursingLog.setUpdateBy(SecurityUtils.getLoginUser().getWxUserMember().getNickname());
wxNursingLog.setUpdateTime(DateUtils.getNowDate());
wxNursingLog.setStatus(Status.OK.getCode().longValue());
/* 护理天数计算 */
// 1、获取最近一条护理记录
WxNursingLog lastNursingLog = wxNursingLogMapper.selectLastNursingLogByUserId(SecurityUtils.getLoginUser().getWxUserMember().getId(), wxNursingLog.getInstrumentId());
if (lastNursingLog != null) {
// 2、有最近的一条护理记录
// 获取护理时间和当前时间,转为 localDateTime
LocalDateTime nursingDateTime = LocalDateTime.ofInstant(lastNursingLog.getCreateTime().toInstant(), ZoneId.systemDefault());
LocalDateTime nowDateTime = LocalDateTime.now();
// 2.1、总护理天数:直接 +1
if (lastNursingLog.getNursingDays() != null) {
wxNursingLog.setNursingDays(lastNursingLog.getNursingDays() + 1);
} else {
// 总护理天数为null说明之前没有计算总数目前是直接重新开始
wxNursingLog.setNursingDays(1);
}
// 2.2、本年护理天数:判断是否是本年的记录,是 +1不是则为1
LocalDateTime firstDateOfYear = nowDateTime.with(TemporalAdjusters.firstDayOfYear()).with(LocalTime.MIN);
LocalDateTime lastDateOfYear = nowDateTime.with(TemporalAdjusters.lastDayOfYear()).with(LocalTime.MAX);
if (lastNursingLog.getNursingDaysYear() != null && (
nursingDateTime.isEqual(firstDateOfYear) || nursingDateTime.isEqual(lastDateOfYear)
|| (nursingDateTime.isAfter(firstDateOfYear) && nursingDateTime.isBefore(lastDateOfYear))
)) {
wxNursingLog.setNursingDaysYear(lastNursingLog.getNursingDaysYear() + 1);
} else {
// 本年护理天数为null有两种情况要么之前没有计算要么是新的一年的第一条护理记录目前是直接重新开始
wxNursingLog.setNursingDaysYear(1);
}
// 2.3、本月护理天数:判断是否是本月的记录,是 +1不是则为1
LocalDateTime firstDateOfMonth = nowDateTime.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
LocalDateTime lastDateOfMonth = nowDateTime.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX);
if (lastNursingLog.getNursingDaysMonth() != null && (
nursingDateTime.isEqual(firstDateOfMonth) || nursingDateTime.isEqual(lastDateOfMonth)
|| (nursingDateTime.isAfter(firstDateOfMonth) && nursingDateTime.isBefore(lastDateOfMonth))
)) {
wxNursingLog.setNursingDaysMonth(lastNursingLog.getNursingDaysMonth() + 1);
} else {
// 本月护理天数为null有两种情况要么之前没有计算要么是新的一月的第一条护理记录目前是直接重新开始
wxNursingLog.setNursingDaysMonth(1);
}
// 2.4、本周护理天数:判断是否是本周的记录,是 +1不是则为1
LocalDateTime firstDateOfWeek = nowDateTime.toLocalDate().with(DayOfWeek.MONDAY).atStartOfDay();
LocalDateTime lastDateOfWeek = nowDateTime.toLocalDate().with(DayOfWeek.SUNDAY).atTime(LocalTime.MAX);
if (lastNursingLog.getNursingDaysWeek() != null && (
nursingDateTime.isEqual(firstDateOfWeek) || nursingDateTime.isEqual(lastDateOfWeek)
|| (nursingDateTime.isAfter(firstDateOfWeek) && nursingDateTime.isBefore(lastDateOfWeek))
)) {
wxNursingLog.setNursingDaysWeek(lastNursingLog.getNursingDaysWeek() + 1);
} else {
// 本周护理天数为null有两种情况要么之前没有计算要么是新的一周的第一条护理记录目前是直接重新开始
wxNursingLog.setNursingDaysWeek(1);
}
} else {
// 3、没有最近的一条护理记录
wxNursingLog.setNursingDays(1);
wxNursingLog.setNursingDaysYear(1);
wxNursingLog.setNursingDaysMonth(1);
wxNursingLog.setNursingDaysWeek(1);
}
wxNursingLogMapper.insertWxNursingLog(wxNursingLog);
}
}

Loading…
Cancel
Save