<?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="userId" column="user_id"/> <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)"/> <result property="projectType" column="type"/> </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 != type"> AND type = #{type} </if> <if test="null != type"> AND dept_id = #{deptId} </if> </where> ORDER BY work_day 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 CASE WHEN type= 1 THEN "项目" WHEN type= 2 THEN "商机" END AS type, count(1),sum(work_time) from <include refid="table"/> where user_id = #{userId} AND type in (1,2) AND work_day >= #{currentMonthFirstDay} group by type </select> <select id="listByDateAndUserId" resultMap="dayWorkTimeAndType"> select user_id,day(work_day),CASE when `type` = 3 then "请假" when `type` = 4 then "调休" else "正常" end AS `type`, sum(work_time) from <include refid="table"/> where year(work_day) = #{year} AND month(work_day) = #{month} AND (status = 2 OR status=5)AND user_id IN <foreach collection="userIds" separator="," close=")" item="userId" open="("> #{userId} </foreach> group by user_id,day(work_day), CASE when `type` = 3 then "请假" when `type` = 4 then "调休" else "正常" 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 t.type= 1 THEN "项目" WHEN t.type= 2 THEN "商机" END AS type,t.dept_id, t.project_id,MIN(t.work_day) AS firstTime,MAX(t.work_day) AS lastTime,SUM(t.work_time)/8 AS totalTime,(SUM(t.work_time))/8*10 AS cost,dept_name AS deptName,project_name AS projectName from work_time_order t JOIN work_dept d ON t.dept_id=d.id JOIN work_project p ON t.project_id=p.id where status IN (2,5) AND t.type IN (1,2) AND project_id IN <foreach collection="projectIds" item="projectId" open="(" close=")" separator=","> #{projectId} </foreach> <if test="firstDayOfMonth != null"> AND work_day >= #{firstDayOfMonth} </if> group by t.type,dept_id, project_id,dept_name,project_name </select> <select id="getDaysByDateAndStatus" resultType="date" > select distinct(work_day) from <include refid="table"/> where work_day >= #{firstDayOfMonth} AND user_id = #{userId} </select> <select id="geByMonth" resultType="cn.wisenergy.model.app.WorkTimeOrder"> SELECT <include refid="Base_Column_List"/> FROM <include refid="table"/> <where> <if test="null != userId"> AND user_id = #{userId} </if> <if test="null != workMonth"> AND DATE_FORMAT(work_day, '%Y%m') = DATE_FORMAT(#{workMonth} ,'%Y%m') </if> <if test="null != status"> AND status = #{status} </if> </where> </select> </mapper>