yujian
2019-08-22 33bfa1b3d03236922cc95b9435d7d10c91e8c4e5
明细
9个文件已修改
778 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/IntegralControllerV2.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/integral/IntegralTaskRecordMapper.java 188 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/integral/IntegralTaskRecordMapper.xml 365 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/integral/IntegralExchangeServiceImpl.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/integral/IntegralTaskClassServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/integral/IntegralTaskRecordServiceImpl.java 150 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/integral/IntegralTaskClassService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/src/main/java/org/yeshi/utils/DateUtil.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/IntegralControllerV2.java
@@ -55,7 +55,6 @@
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.annotation.RequestSerializableByKey;
import com.yeshi.fanli.vo.integral.DailySignVO;
import com.yeshi.fanli.vo.integral.ExchangeTipVO;
import com.yeshi.fanli.vo.integral.IntegralDetailVO;
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/integral/IntegralTaskRecordMapper.java
@@ -1,89 +1,99 @@
package com.yeshi.fanli.dao.mybatis.integral;
import java.util.Date;
import java.util.List;
import java.util.Set;
import org.apache.ibatis.annotations.Param;
import com.yeshi.fanli.dao.BaseMapper;
import com.yeshi.fanli.entity.integral.IntegralTaskRecord;
public interface IntegralTaskRecordMapper extends BaseMapper<IntegralTaskRecord> {
    /**
     * 未领取金币
     *
     * @param count
     * @param uid
     * @return
     */
    List<IntegralTaskRecord> listNotReceived(@Param("count") int count, @Param("uid") Long uid);
    /**
     * 未领取金币- 排除id
     *
     * @param count
     * @param uid
     * @return
     */
    List<IntegralTaskRecord> listNotReceivedExcludeId(@Param("count") int count, @Param("uid") Long uid,
            @Param("list") Set<Long> idList);
    /**
     * 总完成
     *
     * @param uid
     * @param dateType
     * @return
     */
    Integer getTotalGoldCoin(@Param("uid") Long uid, @Param("cid") Long cid, @Param("dateType") Integer dateType);
    /**
     * 统计完成数量
     *
     * @param uid
     * @param cid
     * @param dateType
     * @return
     */
    Integer countFinished(@Param("uid") Long uid, @Param("cid") Long cid, @Param("dateType") Integer dateType);
    /**
     * 近7天签到情况
     *
     * @param uid
     * @param cid
     * @param sortState
     *            1倒序-创建时间
     * @return
     */
    List<IntegralTaskRecord> listDaySignRecord(@Param("uid") Long uid, @Param("cid") Long cid);
    /**
     * 未领取金币
     *
     * @param count
     * @param uid
     * @return
     */
    int countTotalGoldCoin(@Param("uid") Long uid);
    /**
     * 更新领取状态
     *
     * @param uid
     */
    void updateReceived(@Param("uid") Long uid);
    /**
     * 根据任务ID与时间段查询任务完成数量
     *
     * @param taskId
     * @param uid
     * @param minTime
     * @param maxTime
     */
    int countGetCountByTaskIdAndDay(@Param("taskId") Long taskId,@Param("uid")Long uid, @Param("minTime") Date minTime,
            @Param("maxTime") Date maxTime);
}
package com.yeshi.fanli.dao.mybatis.integral;
import java.util.Date;
import java.util.List;
import java.util.Set;
import org.apache.ibatis.annotations.Param;
import com.yeshi.fanli.dao.BaseMapper;
import com.yeshi.fanli.entity.integral.IntegralTaskRecord;
public interface IntegralTaskRecordMapper extends BaseMapper<IntegralTaskRecord> {
    /**
     * 未领取金币
     *
     * @param count
     * @param uid
     * @return
     */
    List<IntegralTaskRecord> listNotReceived(@Param("count") int count, @Param("uid") Long uid);
    /**
     * 未领取金币- 排除id
     *
     * @param count
     * @param uid
     * @return
     */
    List<IntegralTaskRecord> listNotReceivedExcludeId(@Param("count") int count, @Param("uid") Long uid,
            @Param("list") Set<Long> idList);
    /**
     * 总完成
     *
     * @param uid
     * @param dateType
     * @return
     */
    Integer getTotalGoldCoin(@Param("uid") Long uid, @Param("cid") Long cid, @Param("dateType") Integer dateType);
    /**
     * 统计完成数量
     *
     * @param uid
     * @param cid
     * @param dateType
     * @return
     */
    Integer countFinished(@Param("uid") Long uid, @Param("cid") Long cid, @Param("dateType") Integer dateType);
    /**
     * 近7天签到情况
     *
     * @param uid
     * @param cid
     * @param sortState
     *            1倒序-创建时间
     * @return
     */
    List<IntegralTaskRecord> listDaySignRecord(@Param("uid") Long uid, @Param("cid") Long cid);
    /**
     * 未领取金币
     *
     * @param count
     * @param uid
     * @return
     */
    int countTotalGoldCoin(@Param("uid") Long uid);
    /**
     * 更新领取状态
     *
     * @param uid
     */
    void updateReceived(@Param("uid") Long uid);
    /**
     * 根据任务ID与时间段查询任务完成数量
     *
     * @param taskId
     * @param uid
     * @param minTime
     * @param maxTime
     */
    int countGetCountByTaskIdAndDay(@Param("taskId") Long taskId,@Param("uid")Long uid, @Param("minTime") Date minTime,
            @Param("maxTime") Date maxTime);
    /**
     * 统计今日第几次完成的任务
     *
     * @param count
     * @param uid
     * @return
     */
    int countByTaskIdTodayNum(@Param("uid") Long uid, @Param("tid") Long tid, @Param("date") Date date);
}
fanli/src/main/java/com/yeshi/fanli/mapping/integral/IntegralTaskRecordMapper.xml
@@ -1,179 +1,186 @@
<?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.yeshi.fanli.dao.mybatis.integral.IntegralTaskRecordMapper">
    <resultMap id="BaseResultMap"
        type="com.yeshi.fanli.entity.integral.IntegralTaskRecord">
        <id column="ir_id" property="id" jdbcType="BIGINT" />
        <result column="ir_cid" property="cid" jdbcType="BIGINT" />
        <result column="ir_task_id" property="taskId" jdbcType="BIGINT" />
        <result column="ir_uid" property="uid" jdbcType="BIGINT" />
        <result column="ir_gold_coin" property="goldCoin" jdbcType="INTEGER" />
        <result column="ir_state" property="state" jdbcType="INTEGER" />
        <result column="ir_create_time" property="createTime" jdbcType="TIMESTAMP" />
        <result column="ir_update_time" property="updateTime" jdbcType="TIMESTAMP" />
        <result column="taskName" property="taskName" jdbcType="VARCHAR" />
    </resultMap>
    <sql id="Base_Column_List">ir_id,ir_cid,ir_task_id,ir_uid,ir_gold_coin,ir_state,ir_create_time,ir_update_time
    </sql>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap"
        parameterType="java.lang.Long">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_integral_task_record where ir_id = #{id,jdbcType=BIGINT}
    </select>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from
        yeshi_ec_integral_task_record where ir_id = #{id,jdbcType=BIGINT}
    </delete>
    <insert id="insert" parameterType="com.yeshi.fanli.entity.integral.IntegralTaskRecord"
        useGeneratedKeys="true" keyProperty="id">insert into
        yeshi_ec_integral_task_record
        (ir_id,ir_cid,ir_task_id,ir_uid,ir_gold_coin,ir_state,ir_create_time,ir_update_time)
        values
        (#{id,jdbcType=BIGINT},#{cid,jdbcType=BIGINT},#{taskId,jdbcType=BIGINT},#{uid,jdbcType=BIGINT},#{goldCoin,jdbcType=INTEGER},#{state,jdbcType=INTEGER},#{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP})
    </insert>
    <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.integral.IntegralTaskRecord"
        useGeneratedKeys="true" keyProperty="id">
        insert into yeshi_ec_integral_task_record
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">ir_id,</if>
            <if test="cid != null">ir_cid,</if>
            <if test="taskId != null">ir_task_id,</if>
            <if test="uid != null">ir_uid,</if>
            <if test="goldCoin != null">ir_gold_coin,</if>
            <if test="state != null">ir_state,</if>
            <if test="createTime != null">ir_create_time,</if>
            <if test="updateTime != null">ir_update_time,</if>
        </trim>
        values
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id,jdbcType=BIGINT},</if>
            <if test="cid != null">#{cid,jdbcType=BIGINT},</if>
            <if test="taskId != null">#{taskId,jdbcType=BIGINT},</if>
            <if test="uid != null">#{uid,jdbcType=BIGINT},</if>
            <if test="goldCoin != null">#{goldCoin,jdbcType=INTEGER},</if>
            <if test="state != null">#{state,jdbcType=INTEGER},</if>
            <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if>
        </trim>
    </insert>
    <update id="updateByPrimaryKey" parameterType="com.yeshi.fanli.entity.integral.IntegralTaskRecord">update
        yeshi_ec_integral_task_record set ir_cid =
        #{cid,jdbcType=BIGINT},ir_task_id = #{taskId,jdbcType=BIGINT},ir_uid =
        #{uid,jdbcType=BIGINT},ir_gold_coin =
        #{goldCoin,jdbcType=INTEGER},ir_state =
        #{state,jdbcType=INTEGER},ir_create_time =
        #{createTime,jdbcType=TIMESTAMP},ir_update_time =
        #{updateTime,jdbcType=TIMESTAMP} where ir_id = #{id,jdbcType=BIGINT}
    </update>
    <update id="updateByPrimaryKeySelective" parameterType="com.yeshi.fanli.entity.integral.IntegralTaskRecord">
        update yeshi_ec_integral_task_record
        <set>
            <if test="cid != null">ir_cid=#{cid,jdbcType=BIGINT},</if>
            <if test="taskId != null">ir_task_id=#{taskId,jdbcType=BIGINT},</if>
            <if test="uid != null">ir_uid=#{uid,jdbcType=BIGINT},</if>
            <if test="goldCoin != null">ir_gold_coin=#{goldCoin,jdbcType=INTEGER},</if>
            <if test="state != null">ir_state=#{state,jdbcType=INTEGER},</if>
            <if test="createTime != null">ir_create_time=#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">ir_update_time=#{updateTime,jdbcType=TIMESTAMP},</if>
        </set>
        where ir_id = #{id,jdbcType=BIGINT}
    </update>
    <update id="updateReceived" parameterType="Long">
        UPDATE
        yeshi_ec_integral_task_record SET ir_state = 1,ir_update_time = NOW()
        WHERE ir_state = 0 AND ir_uid = #{uid}
    </update>
    <select id="listNotReceived" resultMap="BaseResultMap">
        SELECT tc.`tc_name` AS
        taskName,d.* FROM yeshi_ec_integral_task_record d
        LEFT JOIN
        `yeshi_ec_integral_task_class` tc ON tc.`tc_id` = d.`ir_cid`
        WHERE
        d.`ir_uid` = #{uid} AND d.ir_state = 0
        ORDER BY d.ir_create_time
        LIMIT
        #{count}
    </select>
    <select id="listNotReceivedExcludeId" resultMap="BaseResultMap">
        SELECT tc.`tc_name` AS taskName,d.* FROM yeshi_ec_integral_task_record
        d
        LEFT JOIN `yeshi_ec_integral_task_class` tc ON tc.`tc_id` =
        d.`ir_cid`
        WHERE d.`ir_uid` = #{uid} AND d.ir_state = 0
        <if test="list != null">
            AND d.ir_id not in
            <foreach collection="list" item="item" open="(" separator=","
                close=")">
                ${item}
            </foreach>
        </if>
        ORDER BY d.ir_create_time
        LIMIT #{count}
    </select>
    <select id="getTotalGoldCoin" resultType="Integer">
        SELECT IFNULL(SUM(tr.`ir_gold_coin`),0) FROM
        yeshi_ec_integral_task_record tr
        WHERE tr.ir_uid = #{uid} AND
        tr.`ir_cid`=#{cid} <!-- tr.ir_state <![CDATA[<>]]>2 AND -->
        <if test="dateType == 1">
            AND TO_DAYS(tr.ir_create_time) = TO_DAYS(NOW())
        </if>
    </select>
    <select id="countFinished" resultType="Integer">
        SELECT IFNULL(COUNT(tr.`ir_id`),0) FROM yeshi_ec_integral_task_record
        tr
        WHERE tr.ir_uid = #{uid} AND tr.`ir_cid`=#{cid}
        <if test="dateType == 1">
            AND TO_DAYS(tr.ir_create_time) = TO_DAYS(NOW())
        </if>
    </select>
    <select id="listDaySignRecord" resultMap="BaseResultMap">
        SELECT * FROM yeshi_ec_integral_task_record d
        WHERE d.`ir_uid` = #{uid}
        <if test="cid!=null">
            and d.ir_cid=#{cid}
        </if>
        AND DATE_SUB(CURDATE(), INTERVAL 7 DAY) <![CDATA[<=]]>
        DATE(d.ir_create_time)
        ORDER BY d.ir_create_time desc
    </select>
    <select id="countTotalGoldCoin" resultType="Integer">
        SELECT
        IFNULL(SUM(d.`ir_gold_coin`),0) FROM `yeshi_ec_integral_task_record`
        d
        WHERE d.`ir_uid` = #{uid} AND d.`ir_state` = 0
    </select>
    <select id="countGetCountByTaskIdAndDay" resultType="Integer">
        SELECT count(*) FROM `yeshi_ec_integral_task_record`
        d
        WHERE
        d.ir_task_id = #{taskId}
        <if test="uid!=null">
            and ir_uid=#{uid}
        </if>
        <if test="minTime!=null">
            and ir_create_time>=#{minTime}
        </if>
        <if test="maxTime!=null">
            and #{maxTime}>ir_uid
        </if>
    </select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeshi.fanli.dao.mybatis.integral.IntegralTaskRecordMapper">
    <resultMap id="BaseResultMap"
        type="com.yeshi.fanli.entity.integral.IntegralTaskRecord">
        <id column="ir_id" property="id" jdbcType="BIGINT" />
        <result column="ir_cid" property="cid" jdbcType="BIGINT" />
        <result column="ir_task_id" property="taskId" jdbcType="BIGINT" />
        <result column="ir_uid" property="uid" jdbcType="BIGINT" />
        <result column="ir_gold_coin" property="goldCoin" jdbcType="INTEGER" />
        <result column="ir_state" property="state" jdbcType="INTEGER" />
        <result column="ir_create_time" property="createTime" jdbcType="TIMESTAMP" />
        <result column="ir_update_time" property="updateTime" jdbcType="TIMESTAMP" />
        <result column="taskName" property="taskName" jdbcType="VARCHAR" />
    </resultMap>
    <sql id="Base_Column_List">ir_id,ir_cid,ir_task_id,ir_uid,ir_gold_coin,ir_state,ir_create_time,ir_update_time
    </sql>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap"
        parameterType="java.lang.Long">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_integral_task_record where ir_id = #{id,jdbcType=BIGINT}
    </select>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from
        yeshi_ec_integral_task_record where ir_id = #{id,jdbcType=BIGINT}
    </delete>
    <insert id="insert" parameterType="com.yeshi.fanli.entity.integral.IntegralTaskRecord"
        useGeneratedKeys="true" keyProperty="id">insert into
        yeshi_ec_integral_task_record
        (ir_id,ir_cid,ir_task_id,ir_uid,ir_gold_coin,ir_state,ir_create_time,ir_update_time)
        values
        (#{id,jdbcType=BIGINT},#{cid,jdbcType=BIGINT},#{taskId,jdbcType=BIGINT},#{uid,jdbcType=BIGINT},#{goldCoin,jdbcType=INTEGER},#{state,jdbcType=INTEGER},#{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP})
    </insert>
    <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.integral.IntegralTaskRecord"
        useGeneratedKeys="true" keyProperty="id">
        insert into yeshi_ec_integral_task_record
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">ir_id,</if>
            <if test="cid != null">ir_cid,</if>
            <if test="taskId != null">ir_task_id,</if>
            <if test="uid != null">ir_uid,</if>
            <if test="goldCoin != null">ir_gold_coin,</if>
            <if test="state != null">ir_state,</if>
            <if test="createTime != null">ir_create_time,</if>
            <if test="updateTime != null">ir_update_time,</if>
        </trim>
        values
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id,jdbcType=BIGINT},</if>
            <if test="cid != null">#{cid,jdbcType=BIGINT},</if>
            <if test="taskId != null">#{taskId,jdbcType=BIGINT},</if>
            <if test="uid != null">#{uid,jdbcType=BIGINT},</if>
            <if test="goldCoin != null">#{goldCoin,jdbcType=INTEGER},</if>
            <if test="state != null">#{state,jdbcType=INTEGER},</if>
            <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if>
        </trim>
    </insert>
    <update id="updateByPrimaryKey" parameterType="com.yeshi.fanli.entity.integral.IntegralTaskRecord">update
        yeshi_ec_integral_task_record set ir_cid =
        #{cid,jdbcType=BIGINT},ir_task_id = #{taskId,jdbcType=BIGINT},ir_uid =
        #{uid,jdbcType=BIGINT},ir_gold_coin =
        #{goldCoin,jdbcType=INTEGER},ir_state =
        #{state,jdbcType=INTEGER},ir_create_time =
        #{createTime,jdbcType=TIMESTAMP},ir_update_time =
        #{updateTime,jdbcType=TIMESTAMP} where ir_id = #{id,jdbcType=BIGINT}
    </update>
    <update id="updateByPrimaryKeySelective" parameterType="com.yeshi.fanli.entity.integral.IntegralTaskRecord">
        update yeshi_ec_integral_task_record
        <set>
            <if test="cid != null">ir_cid=#{cid,jdbcType=BIGINT},</if>
            <if test="taskId != null">ir_task_id=#{taskId,jdbcType=BIGINT},</if>
            <if test="uid != null">ir_uid=#{uid,jdbcType=BIGINT},</if>
            <if test="goldCoin != null">ir_gold_coin=#{goldCoin,jdbcType=INTEGER},</if>
            <if test="state != null">ir_state=#{state,jdbcType=INTEGER},</if>
            <if test="createTime != null">ir_create_time=#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">ir_update_time=#{updateTime,jdbcType=TIMESTAMP},</if>
        </set>
        where ir_id = #{id,jdbcType=BIGINT}
    </update>
    <update id="updateReceived" parameterType="Long">
        UPDATE
        yeshi_ec_integral_task_record SET ir_state = 1,ir_update_time = NOW()
        WHERE ir_state = 0 AND ir_uid = #{uid}
    </update>
    <select id="listNotReceived" resultMap="BaseResultMap">
        SELECT tc.`tc_name` AS
        taskName,d.* FROM yeshi_ec_integral_task_record d
        LEFT JOIN
        `yeshi_ec_integral_task_class` tc ON tc.`tc_id` = d.`ir_cid`
        WHERE
        d.`ir_uid` = #{uid} AND d.ir_state = 0
        ORDER BY d.ir_create_time
        LIMIT
        #{count}
    </select>
    <select id="listNotReceivedExcludeId" resultMap="BaseResultMap">
        SELECT tc.`tc_name` AS taskName,d.* FROM yeshi_ec_integral_task_record
        d
        LEFT JOIN `yeshi_ec_integral_task_class` tc ON tc.`tc_id` =
        d.`ir_cid`
        WHERE d.`ir_uid` = #{uid} AND d.ir_state = 0
        <if test="list != null">
            AND d.ir_id not in
            <foreach collection="list" item="item" open="(" separator=","
                close=")">
                ${item}
            </foreach>
        </if>
        ORDER BY d.ir_create_time
        LIMIT #{count}
    </select>
    <select id="getTotalGoldCoin" resultType="Integer">
        SELECT IFNULL(SUM(tr.`ir_gold_coin`),0) FROM
        yeshi_ec_integral_task_record tr
        WHERE tr.ir_uid = #{uid} AND
        tr.`ir_cid`=#{cid} <!-- tr.ir_state <![CDATA[<>]]>2 AND -->
        <if test="dateType == 1">
            AND TO_DAYS(tr.ir_create_time) = TO_DAYS(NOW())
        </if>
    </select>
    <select id="countFinished" resultType="Integer">
        SELECT IFNULL(COUNT(tr.`ir_id`),0) FROM yeshi_ec_integral_task_record
        tr
        WHERE tr.ir_uid = #{uid} AND tr.`ir_cid`=#{cid}
        <if test="dateType == 1">
            AND TO_DAYS(tr.ir_create_time) = TO_DAYS(NOW())
        </if>
    </select>
    <select id="listDaySignRecord" resultMap="BaseResultMap">
        SELECT * FROM yeshi_ec_integral_task_record d
        WHERE d.`ir_uid` = #{uid}
        <if test="cid!=null">
            and d.ir_cid=#{cid}
        </if>
        AND DATE_SUB(CURDATE(), INTERVAL 7 DAY) <![CDATA[<=]]>
        DATE(d.ir_create_time)
        ORDER BY d.ir_create_time desc
    </select>
    <select id="countTotalGoldCoin" resultType="Integer">
        SELECT
        IFNULL(SUM(d.`ir_gold_coin`),0) FROM `yeshi_ec_integral_task_record`
        d
        WHERE d.`ir_uid` = #{uid} AND d.`ir_state` = 0
    </select>
    <select id="countGetCountByTaskIdAndDay" resultType="Integer">
        SELECT count(*) FROM `yeshi_ec_integral_task_record`
        d
        WHERE
        d.ir_task_id = #{taskId}
        <if test="uid!=null">
            and ir_uid=#{uid}
        </if>
        <if test="minTime!=null">
            and ir_create_time>=#{minTime}
        </if>
        <if test="maxTime!=null">
            and #{maxTime}>ir_uid
        </if>
    </select>
    <select id="countByTaskIdTodayNum" resultType="Integer">
        SELECT IFNULL(COUNT(tr.`ir_id`),0) FROM yeshi_ec_integral_task_record tr
        WHERE tr.ir_uid = #{uid} AND tr.`ir_task_id`= #{tid}
              AND TO_DAYS(tr.ir_create_time) = TO_DAYS(${date}) AND tr.ir_create_time <![CDATA[<=]]>${date}
    </select>
</mapper>
fanli/src/main/java/com/yeshi/fanli/service/impl/integral/IntegralExchangeServiceImpl.java
@@ -16,6 +16,7 @@
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.bus.user.UserSystemCoupon;
import com.yeshi.fanli.entity.integral.CodePublishRecord;
import com.yeshi.fanli.entity.integral.IntegralDetail;
import com.yeshi.fanli.entity.integral.IntegralExchange;
import com.yeshi.fanli.entity.integral.IntegralExchange.ExchangeTypeEnum;
import com.yeshi.fanli.entity.money.UserMoneyDetail;
@@ -24,6 +25,7 @@
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service;
import com.yeshi.fanli.service.inter.integral.CodePublishRecordService;
import com.yeshi.fanli.service.inter.integral.IntegralDetailService;
import com.yeshi.fanli.service.inter.integral.IntegralExchangeRecordService;
import com.yeshi.fanli.service.inter.integral.IntegralExchangeService;
import com.yeshi.fanli.service.inter.msg.MsgInviteDetailService;
@@ -80,6 +82,8 @@
    @Resource
    private MsgInviteDetailService msgInviteDetailService;
    
    @Resource
    private IntegralDetailService integralDetailService;
    
    @Override
@@ -212,33 +216,41 @@
        }
        
        String thing = "";
        String thingNum = "";
        int couponNews = 0;
        try {
            if (ExchangeTypeEnum.freeCouponBuy == type) {
                thing = "自购免单券";
                thingNum = "1张";
                userSystemCouponService.exchangeCoupon(uid, type.name(), UserSystemCoupon.SOURCE_EXCHANGE, null);
                
                couponNews = 1;
            } else if (ExchangeTypeEnum.freeCouponGive == type) {
                thing = "赠送免单券";
                thingNum = "1张";
                userSystemCouponService.exchangeCoupon(uid, type.name(), UserSystemCoupon.SOURCE_EXCHANGE, null);
                couponNews = 1;
            } else if (ExchangeTypeEnum.rebatePercentCoupon == type) {
                thing = "奖励免单券";
                thingNum = "3天";
                String percent = configService.get("exchange_rebate_percent");
                userSystemCouponService.exchangeCoupon(uid, type.name(), UserSystemCoupon.SOURCE_EXCHANGE, new BigDecimal(percent));
                couponNews = 1;
            } else if (ExchangeTypeEnum.inviteCodePublish == type) {
                thing = "邀请码发布卡";
                thingNum = "1组";
                if(codePublishRecordService.countValidRecord(uid) > 0)
                    throw new IntegralExchangeException(1, "三天之内不可重复兑换");
                codePublishRecordService.publishInviteCode(uid);
            } else if (ExchangeTypeEnum.taoLiJin == type) {
                thing = "推广红包";
                thingNum = exchange.getAmount() + "元";
                userTaoLiJinOriginService.exchangeMoney(uid, exchange.getAmount());
            } else if (ExchangeTypeEnum.cash == type) {
                thing = "现金红包";
                BigDecimal money = exchange.getAmount();
                thingNum = money + "元";
                // 1、插入红包数据
                HongBaoV2 hongBaoV2 = new HongBaoV2();
                hongBaoV2.setMoney(money);
@@ -282,6 +294,14 @@
            
            // 添加兑换记录
            integralExchangeRecordService.addExchangeRecord(id, uid);
            // 加入明细
            IntegralDetail detail = new IntegralDetail();
            detail.setUid(uid);
            detail.setTitle("金币兑换-" + thing + "-" + thingNum);
            detail.setMoney(-goldCoin);
            detail.setCreateTime(new Date());
            integralDetailService.insertSelective(detail);
            
            // 消息 
            final String things = thing;
@@ -392,7 +412,14 @@
            extraUpdate.setGoldCoin(surplus);
            userInfoExtraService.saveUserInfoExtra(extraUpdate);
            
            // 加入明细
            IntegralDetail detail = new IntegralDetail();
            detail.setUid(uid);
            detail.setTitle("金币兑换-邀请码激活卡-1组");
            detail.setMoney(-goldCoin);
            detail.setCreateTime(new Date());
            integralDetailService.insertSelective(detail);
            // 添加兑换记录
            integralExchangeRecordService.addExchangeRecord(id, uid);
            
fanli/src/main/java/com/yeshi/fanli/service/impl/integral/IntegralTaskClassServiceImpl.java
@@ -52,6 +52,12 @@
    
    @Override
    public IntegralTaskClass selectByPrimaryKey(Long id) {
        return integralTaskClassMapper.selectByPrimaryKey(id);
    }
    @Override
    public List<IntegralTaskClassVO> getIntegralTaskClassVO(Long uid, long start, int count) {
        return integralTaskClassMapper.getIntegralTaskClassVO(start, count);
    }
fanli/src/main/java/com/yeshi/fanli/service/impl/integral/IntegralTaskRecordServiceImpl.java
@@ -16,11 +16,14 @@
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.integral.IntegralDetail;
import com.yeshi.fanli.entity.integral.IntegralTask;
import com.yeshi.fanli.entity.integral.IntegralTask.FrequencyEnum;
import com.yeshi.fanli.entity.integral.IntegralTaskClass;
import com.yeshi.fanli.entity.integral.IntegralTaskRecord;
import com.yeshi.fanli.exception.integral.IntegralTaskRecordException;
import com.yeshi.fanli.exception.user.UserInfoExtraException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.integral.IntegralDetailService;
import com.yeshi.fanli.service.inter.integral.IntegralTaskClassService;
import com.yeshi.fanli.service.inter.integral.IntegralTaskRecordService;
import com.yeshi.fanli.service.inter.integral.IntegralTaskService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
@@ -34,14 +37,15 @@
    @Resource
    private UserInfoExtraService userInfoExtraService;
    @Resource
    private IntegralDetailService integralDetailService;
    @Resource
    private IntegralTaskService integralTaskService;
    @Resource
    private IntegralTaskClassService integralTaskClassService;
    @Override
    public Integer getTotalGoldCoin(long uid, Long cid, Integer dateType) {
@@ -151,47 +155,14 @@
        if (userInfoExtra == null)
            throw new IntegralTaskRecordException(1, "用户信息不全");
        List<IntegralTaskRecord> list = integralTaskRecordMapper.listNotReceived(Integer.MAX_VALUE, uid);
        if (list == null || list.size() == 0)
            throw new IntegralTaskRecordException(1, "暂无可领取");
        Integer totalGoldCoin = 0;
        List<IntegralTaskRecord> list = integralTaskRecordMapper.listNotReceived(Integer.MAX_VALUE, uid);
        if (list == null || list.size() == 0)
            throw new IntegralTaskRecordException(1, "暂无可领取");
        Integer totalGoldCoin = 0;
        for (IntegralTaskRecord record : list) {
            Long uid2 = record.getUid();
            if (uid2 == null || uid.longValue() != uid2.longValue())
                continue; // 用户id不符合
            if (record.getState() != null && record.getState().intValue() == 1) {
                continue; // 已领取
            }
            IntegralTaskRecord taskRecord = new IntegralTaskRecord();
            taskRecord.setId(record.getId());
            taskRecord.setState(1); // 已领取
            taskRecord.setUpdateTime(new Date());
            integralTaskRecordMapper.updateByPrimaryKeySelective(taskRecord);
            Long taskId = record.getTaskId();
            if (taskId == null)
                continue;
            IntegralTask integralTask = integralTaskService.selectByPrimaryKey(taskId);
            if (integralTask == null)
                continue;
            // 加入明细
            IntegralDetail detail = new IntegralDetail();
            detail.setUid(uid);
            detail.setCreateTime(new Date());
            detail.setMoney(record.getGoldCoin());
            detail.setTitle(integralTask.getName());
            integralDetailService.insertSelective(detail);
            totalGoldCoin += record.getGoldCoin();
            if (addDetail(uid, record))
                totalGoldCoin += record.getGoldCoin();
        }
        Integer goldCoin = userInfoExtra.getGoldCoin();
@@ -228,39 +199,8 @@
            if (record == null)
                continue;
            Long uid2 = record.getUid();
            if (uid2 == null || uid.longValue() != uid2.longValue())
                continue; // 用户id不符合
            if (record.getState() != null && record.getState().intValue() == 1) {
                continue; // 已领取
            }
            IntegralTaskRecord taskRecord = new IntegralTaskRecord();
            taskRecord.setId(record.getId());
            taskRecord.setState(1); // 已领取
            taskRecord.setUpdateTime(new Date());
            integralTaskRecordMapper.updateByPrimaryKeySelective(taskRecord);
            Long taskId = record.getTaskId();
            if (taskId == null)
                continue;
            IntegralTask integralTask = integralTaskService.selectByPrimaryKey(taskId);
            if (integralTask == null)
                continue;
            // 加入明细
            IntegralDetail detail = new IntegralDetail();
            detail.setUid(uid);
            detail.setCreateTime(new Date());
            detail.setMoney(record.getGoldCoin());
            detail.setTitle(integralTask.getName());
            integralDetailService.insertSelective(detail);
            totalGoldCoin += record.getGoldCoin();
            if (addDetail(uid, record))
                totalGoldCoin += record.getGoldCoin();
        }
        Integer goldCoin = userInfoExtra.getGoldCoin();
@@ -279,6 +219,62 @@
        return extra.getGoldCoin();
    }
    public boolean addDetail(Long uid, IntegralTaskRecord record) throws IntegralTaskRecordException {
        Long uid2 = record.getUid();
        if (uid2 == null || uid.longValue() != uid2.longValue())
            return false; // 用户id不符合
        if (record.getState() != null && record.getState().intValue() == 1) {
            return false; // 已领取
        }
        IntegralTaskRecord taskRecord = new IntegralTaskRecord();
        taskRecord.setId(record.getId());
        taskRecord.setState(1); // 已领取
        taskRecord.setUpdateTime(new Date());
        integralTaskRecordMapper.updateByPrimaryKeySelective(taskRecord);
        Long cid = record.getCid();
        if (cid == null)
            return false;
        IntegralTaskClass taskClass = integralTaskClassService.selectByPrimaryKey(cid);
        if (taskClass == null)
            return false;
        Long taskId = record.getTaskId();
        if (taskId == null)
            return false;
        IntegralTask integralTask = integralTaskService.selectByPrimaryKey(taskId);
        if (integralTask == null)
            return false;
        int num = 0;
        FrequencyEnum frequency = integralTask.getFrequency();
        if (frequency == FrequencyEnum.everyday) {
            num = integralTaskRecordMapper.countByTaskIdTodayNum(uid, taskId, record.getCreateTime());
        } else if (frequency == FrequencyEnum.onlyOne) {
            num = 1;
        }
        if (num <= 0)
            num = 1;
        String title = taskClass.getName() + "-" + integralTask.getName() + "-" + num + "次";
        // 加入明细
        IntegralDetail detail = new IntegralDetail();
        detail.setUid(uid);
        detail.setTitle(title);
        detail.setMoney(record.getGoldCoin());
        detail.setCreateTime(record.getCreateTime());
        integralDetailService.insertSelective(detail);
        return true;
    }
    @Override
    public Integer countGetCountByTaskIdAndDay(Long taskId, Long uid, Date day) {
        if (day == null)
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
@@ -1266,7 +1266,6 @@
            userSystemCouponRecordService.updateByPrimaryKeySelective(couponRecord);
            UserSystemCoupon userSystemCoupon = couponRecord.getUserSystemCoupon();
            // 状态初始化
            userSystemCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
            userSystemCoupon.setUseTime(null);
@@ -1367,8 +1366,10 @@
        Date now = new Date();
        Date endTime = userCoupon.getEndTime();
        if (endTime != null && endTime.getTime() < now.getTime()) {
            // TODO 过期
            // 过期
            List<UserSystemCoupon> list = new ArrayList<UserSystemCoupon>();
            list.add(userCoupon);
            updateCounponInvalid(list);
            return;
        }
        
@@ -1730,7 +1731,7 @@
                userCouponVO.setCouponPicture(systemCoupon.getPicture());
            }
            if (UserSystemCoupon.STATE_CAN_USE == state) {
            if (UserSystemCoupon.STATE_CAN_USE == state || UserSystemCoupon.STATE_IN_USE == state) {
                int differentDays = 0;
                if (endTime != null && startTime != null) {
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@@ -1830,12 +1831,19 @@
                            }
                            tips = tips.replace("{口令}", tokenRecord.getToken()).replace("{下载链接}", configService.get("app_down_link"));
                        }
                        Date endTimeGive = record.getEndTime();
                        if (endTimeGive != null) {
                            Map<String, Object> remainDays = new HashMap<String, Object>();
                            remainDays.put("content", "剩余" + DateUtil.dateDiff2(new Date(), endTimeGive) + "过期");
                            remainDays.put("fontColor", "#F14242");
                            userCouponVO.setRemainDays(remainDays);
                        }
                    }
                } else {
                    tips = "";
                }
                userCouponVO.setGiveTips(tips);
            } else if (UserSystemCoupon.STATE_END_USE == state) {
                if (give && CouponTypeEnum.freeCouponGive == type) {
                    userCouponVO.setState(UserSystemCoupon.STATE_GIVE_END);
@@ -1983,8 +1991,9 @@
            Date now = new Date();
            Date endTime = userCoupon.getEndTime();
            if (endTime != null && endTime.getTime() < now.getTime()) {
                // TODO 过期
                List<UserSystemCoupon> list = new ArrayList<UserSystemCoupon>();
                list.add(userCoupon);
                updateCounponInvalid(list);
                continue;
            }
            
fanli/src/main/java/com/yeshi/fanli/service/inter/integral/IntegralTaskClassService.java
@@ -47,5 +47,7 @@
     */
    public IntegralTaskClass getByUniqueKey(String uniqueKey);
    public IntegralTaskClass selectByPrimaryKey(Long id);
}
utils/src/main/java/org/yeshi/utils/DateUtil.java
@@ -37,7 +37,7 @@
    public static String dateDiff2(Date startTime, Date endTime) throws Exception {
        String datatime = 0 + "天" + 0 + "小时" + 0 + "分钟";
        String datatime = "0分钟";
        long nm = 1000 * 60;// 一分钟的毫秒数
        long nh = 1000 * 60 * 60;// 一小时的毫秒数
@@ -45,13 +45,19 @@
        // 获得两个时间的毫秒时间差异
        long diff = endTime.getTime() - startTime.getTime();
        long day = diff / nd;// 计算差多少天
        long hour = diff % nd / nh;// 计算差多少小时
        long min = diff % nd % nh / nm;// 计算差多少分钟
        datatime = day + "天" + hour + "小时" + min + "分钟";
        if (day > 0) {
            datatime = day + "天" + hour + "时" + min + "分";
        } else {
            if (hour > 0 ) {
                datatime = hour + "时" + min + "分";
            } else {
                datatime = min + "分";
            }
        }
        return datatime;
    }