<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.wisenergy.mapper.WorkTimeOrderMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="cn.wisenergy.model.app.WorkTimeOrder"> <id column="work_id" property="workId" /> <result column="user_id" property="userId" /> <result column="project_id" property="projectId" /> <result column="dept_id" property="deptId" /> <result column="work_time" property="workTime" /> <result column="work_day" property="workDay" /> <result column="status" property="status" /> <result column="reviewer_id" property="reviewerId" /> <result column="des" property="des" /> <result column="reason" property="reason" /> <result column="type" property="type" /> <result column="is_overtime" property="isOvertime" /> <result column="create_time" property="createTime" /> <result column="modify_time" property="modifyTime" /> </resultMap> <!-- 通用查询结果列 --> <sql id="vals"> #{userId},#{projectId},#{deptId},#{workTime},#{workDay},#{status},#{reviewerId},#{des},#{reason},#{type},#{isOvertime},now(),now() </sql> <sql id="cols_exclude_id"> user_id, project_id, dept_id, work_time, work_day, status, reviewer_id, des, reason, type, is_overtime, create_time, modify_time </sql> <sql id="criteria"> <if test="workId != null">and work_id = #{workId}</if> <if test="userId != null">and user_id = #{userId}</if> <if test="projectId != null">and project_id =#{projectId}</if> <if test="deptId != null">and dept_id = #{deptId}</if> <if test="workTime != null">and work_time = #{workTime}</if> <if test="workDay != null">and work_day = #{workDay}</if> <if test=" status != null">and `status` = #{status}</if> <if test=" reviewerId != null">and reviewer_id = #{reviewerId}</if> <if test="des != null">and des =#{des}</if> <if test="reason != null">and reason = #{reason}</if> <if test="type != null">and type = #{type}</if> <if test="isOvertime != null">and is_overtime = #{isOvertime}</if> <if test="createTime != null">and create_time >= #{createTime}</if> <if test="modifyTime != null">and #{modifyTime} >= modify_time</if> </sql> <resultMap id="dayWorkTimeAndType" type="cn.wisenergy.model.dto.DayWorkTimeAndType"> <result property="day" column="day(work_day)"/> <result property="type" column="type"/> <result property="workTime" column="sum(work_time)"/> </resultMap> <resultMap id="monthlyWorkHourStatistics" type="cn.wisenergy.model.dto.MonthlyWorkingHoursStatistics"> <result property="count" column="count(1)"/> <result property="workTime" column="sum(work_time)"/> </resultMap> <sql id="table"> work_time_order </sql> <insert id="save" keyProperty="workId" useGeneratedKeys="true"> insert into <include refid="table"/> (<include refid="cols_exclude_id"/>) value( <include refid="vals"/> ) </insert> <update id="updateByIds"> UPDATE <include refid="table"/> SET status = 2,reviewer_id = #{reviewerId} WHERE work_id IN <foreach collection="ids" item="id" open="(" close=")" separator=","> #{id} </foreach> </update> <update id="updateStatusById"> UPDATE <include refid="table"/> SET status = 3,reason = #{reason},reviewer_id = #{reviewerId},modify_time=now() WHERE work_id = #{id} </update> <select id="getByDay" resultType="cn.wisenergy.model.app.WorkTimeOrder"> SELECT <include refid="Base_Column_List"/> FROM <include refid="table"/> <where> <if test="null !=userId"> <if test="null != userId"> AND user_id = #{userId} </if> <if test="null != workDay"> AND DATE_FORMAT(work_day, '%Y%m%d') = DATE_FORMAT(#{workDay} ,'%Y%m%d') </if> </if> </where> </select> <select id="queryByPage" resultType="cn.wisenergy.model.app.WorkTimeOrder"> SELECT <include refid="Base_Column_List"/> FROM <include refid="table"/> <where> <if test="null != projectId"> AND project_id = #{projectId} </if> <if test="null != status"> AND status = #{status} </if> <if test="null != types"> AND type IN <foreach collection="types" item="type" open="(" close=")" separator=","> #{type} </foreach> </if> </where> ORDER BY work_day,project_id DESC </select> <!-- 通用查询结果列 --> <sql id="Base_Column_List"> work_id, user_id, project_id, dept_id, work_time, work_day, status, reviewer_id, des, reason, type, is_overtime, create_time, modify_time </sql> <select id="statisticsByProjectType" resultMap="monthlyWorkHourStatistics"> select count(1),sum(work_time) from <include refid="table"/> where user_id = #{userId} AND type = #{projectType} AND work_day >=#{currentMonthFirstDay} </select> <select id="listByDateAndUserId" resultMap="dayWorkTimeAndType"> select user_id,day(work_day),CASE when `type` = 3 then 1 when `type` = 4 then 2 else 0 end AS `type`, sum(work_time) from <include refid="table"/> where year(work_day) = #{year} AND month(work_day) = #{month} AND user_id = #{userId} AND status in (2,5) group by user_id,day(work_day), CASE when `type` = 3 then 1 when `type` = 4 then 2 else 0 end order by day(work_day) </select> <select id="getCountByCondition" resultType="integer" parameterType="map"> select count(1) from <include refid="table"/> <where> <include refid="criteria"/> <if test="startDay != null"> AND work_day>=#{startDay} </if> <if test="projectIds != null"> AND project_id IN <foreach collection="projectIds" item="projectId" open="(" close=")" separator=","> #{projectId} </foreach> </if> <if test="statusArray != null"> AND `status` IN <foreach collection="statusArray" item="workStatus" open="(" close=")" separator=",">#{workStatus}</foreach> </if> <if test="typeArray != null"> AND `type` IN <foreach collection="typeArray" item="type" open="(" close=")" separator=","> #{type} </foreach> </if> </where> </select> <select id="getWorkTimeAndCostCollect" resultType="cn.wisenergy.model.dto.WorkTimeAndCostCollect" parameterType="integer"> select case when `type`= 1 then '商机' when `type`= 0 then '项目' end AS type,dept_id, project_id,MIN(work_day) AS firstTime,MAX(work_day) AS lastTime,SUM(work_time)/8 AS totalTime,(SUM(work_time))/8*10 AS cost from <include refid="table"/> where status in (2,5) and project_id in <foreach collection="projectIds" item="projectId" open="(" close=")" separator=","> #{projectId} </foreach> <if test="firstDayOfMonth != null"> AND work_day >= date(#{firstDayOfMonth}) </if> group by `type`,dept_id, project_id </select> <select id="getDaysByDateAndStatus" resultType="date" > select distinct(work_day) from <include refid="table"/> where work_day >= #{firstDayOfMonth} AND user_id = #{userId} </select> </mapper>