Bladeren bron

大中型计件统计查询

wucl 3 weken geleden
bovenliggende
commit
3210ce2bf7

+ 66 - 1
biz-base/src/main/java/com/dayou/controller/MajorAppraiserUnitController.java

@@ -1,13 +1,19 @@
 package com.dayou.controller;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dayou.common.RestResponse;
 import com.dayou.dto.MajorAppraiserUnitDTO;
 import com.dayou.service.IMajorAppraiserUnitService;
+import com.dayou.vo.MajorOrderStatEvaluateUnitVO;
+import com.dayou.vo.UserRateVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
 
 /**
  * 大中型估价人员计件数(人力资源部统计)
@@ -18,7 +24,7 @@ import javax.validation.Valid;
 @RestController
 @RequestMapping("majorAppraiserUnit")
 @Slf4j
-public class MajorAppraiserUnitController {
+public class MajorAppraiserUnitController extends BaseController {
 
     @Autowired
     private IMajorAppraiserUnitService majorAppraiserUnitService;
@@ -44,4 +50,63 @@ public class MajorAppraiserUnitController {
         MajorAppraiserUnitDTO ret = majorAppraiserUnitService.select(id);
         return RestResponse.success(ret);
     }
+
+    /**
+     *  项目计件数统计
+     * @param unit
+     * @param page
+     * @return
+     */
+    @GetMapping("/order/stat")
+    public RestResponse<Page<MajorOrderStatEvaluateUnitVO>> getOrderStat(MajorOrderStatEvaluateUnitVO unit, Page page){
+        Page<MajorOrderStatEvaluateUnitVO> ret = majorAppraiserUnitService.getOrderStat(page,unit);
+        return RestResponse.success(ret);
+    }
+
+    /**
+     *  项目计件数统计导出
+     * @param unit
+     * @return
+     */
+    @GetMapping("/orderUnitExport")
+    public void exportOrderExport(MajorOrderStatEvaluateUnitVO unit, HttpServletResponse response) throws IOException {
+        List<MajorOrderStatEvaluateUnitVO> ret = majorAppraiserUnitService.exportOrderExport(unit);
+        exportPlus(response,"项目计件数",ret, MajorOrderStatEvaluateUnitVO.class);
+    }
+
+    /**
+     *  人员计件数统计
+     * @param rate
+     * @param page
+     * @return
+     */
+    @GetMapping("/user/stat")
+    public RestResponse<Page<UserRateVO>> getUserStat(UserRateVO rate, Page page){
+        Page<UserRateVO> ret = majorAppraiserUnitService.getUserStat(page,rate);
+        return RestResponse.success(ret);
+    }
+
+
+    /**
+     *  人员计件数统计导出
+     * @param rate
+     * @return
+     */
+    @GetMapping("/userUnitExport")
+    public void exportUserExport(UserRateVO rate, HttpServletResponse response) throws IOException {
+        List<UserRateVO> ret = majorAppraiserUnitService.exportUserExport(rate);
+        exportPlus(response,"人员计件数",ret, UserRateVO.class);
+    }
+
+    /**
+     *  人员计件数详情列表
+     * @param unit
+     * @param page
+     * @return
+     */
+    @GetMapping("/user/detail")
+    public RestResponse<Page<MajorOrderStatEvaluateUnitVO>> getUserDetail(MajorOrderStatEvaluateUnitVO unit, Page page){
+        Page<MajorOrderStatEvaluateUnitVO> ret = majorAppraiserUnitService.getUserDetail(page,unit);
+        return RestResponse.success(ret);
+    }
 }

+ 16 - 0
dao/src/main/java/com/dayou/mapper/MajorAppraiserUnitMapper.java

@@ -1,7 +1,23 @@
 package com.dayou.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dayou.entity.MajorAppraiserUnit;
+import com.dayou.vo.MajorOrderStatEvaluateUnitVO;
+import com.dayou.vo.UserRateVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 public interface MajorAppraiserUnitMapper extends BaseMapper<MajorAppraiserUnit> {
+
+    Page<MajorOrderStatEvaluateUnitVO> getOrderStat(Page page, @Param("unit") MajorOrderStatEvaluateUnitVO unit);
+
+    List<MajorOrderStatEvaluateUnitVO> exportOrderExport(@Param("unit")MajorOrderStatEvaluateUnitVO unit);
+
+    Page<UserRateVO> getUserStat(Page page, @Param("rate")UserRateVO rate);
+
+    List<UserRateVO> getUserStatExport(@Param("rate")UserRateVO rate);
+
+    Page<MajorOrderStatEvaluateUnitVO> getUserDetail(Page page, @Param("unit")MajorOrderStatEvaluateUnitVO unit);
 }

+ 151 - 1
dao/src/main/resources/mapper/MajorAppraiserUnitMapper.xml

@@ -2,5 +2,155 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.dayou.mapper.MajorAppraiserUnitMapper">
 
+    <resultMap id="orderStatMap" type="com.dayou.vo.MajorOrderStatEvaluateUnitVO">
+        <result column="id" property="id" />
+        <result column="orderName" property="orderName" />
+        <result column="orderId" property="orderId" />
+        <result column="evaluateUnit" property="evaluateUnit" />
+        <result column="businessObjectType" property="businessObjectType"/>
+        <result column="clientManager" property="clientManager"/>
+        <result column="principal" property="principal"/>
+        <result column="department" property="department"/>
+        <result column="created" property="createTime"/>
+        <collection property="allotUnits" ofType="com.dayou.vo.UserRateVO" select="selectUserRate" column="id"/>
 
-</mapper>
+    </resultMap>
+
+    <sql id="getOrderStatSQL">
+        SELECT
+        m.id AS id,
+        m.NAME as orderName,
+        m.order_id as orderId,
+        u.NAME AS clientManager,
+        u1.NAME AS principal,
+        d.NAME AS department,
+        m.business_object_type as businessObjectType,
+        m.financial,
+        m.allot_type as allotType,
+        m.evaluate_unit as evaluateUnit,
+        m.created
+        FROM
+        major m
+        LEFT JOIN user u ON u.id = m.client_manager_id
+        LEFT JOIN user u1 ON u1.id = m.principal_id
+        LEFT JOIN department d ON d.id = m.department_id
+        WHERE
+        m.deleted = 0 and m.evaluate_unit is not null
+        <if test="unit!=null and unit.orderName!=null and unit.orderName!=''">
+            and m.name like concat('%',#{unit.orderName},'%')
+        </if>
+        <if test="unit!=null and unit.orderId!=null and unit.orderId!=''">
+            and m.order_id like concat('%',#{unit.orderId},'%')
+        </if>
+        <if test="unit!=null and unit.principal!=null and unit.principal!=''">
+            and u1.NAME like concat('%',#{unit.principal},'%')
+        </if>
+        order by m.created desc
+    </sql>
+    <select id="getOrderStat" parameterType="com.dayou.vo.MajorOrderStatEvaluateUnitVO" resultMap="orderStatMap">
+       <include refid="getOrderStatSQL" />
+    </select>
+
+    <select id="selectUserRate" parameterType="java.lang.Long" resultType="com.dayou.vo.UserRateVO">
+        SELECT
+            u.NAME AS userName,
+            round(ma.unit_rate,1) as userRate
+        FROM
+            major_appraiser_unit ma
+                LEFT JOIN user u ON u.id = ma.user_id
+        WHERE
+            ma.deleted = 0
+          AND ma.major_id = #{id}
+    </select>
+
+    <select id="exportOrderExport" parameterType="com.dayou.vo.MajorOrderStatEvaluateUnitVO" resultMap="orderStatMap">
+        <include refid="getOrderStatSQL" />
+    </select>
+
+    <sql id="userStatSQL">
+        SELECT
+        dy.*,
+        dx.department,
+        @rank := @rank+1  as ranks
+        FROM
+        (
+        SELECT
+        u.id as userId,
+        u.NAME AS userName,
+        ur.userRate
+        FROM
+        ( SELECT user_id, sum( round(unit_rate,1) ) AS userRate FROM major_appraiser_unit
+        WHERE deleted = 0
+        <if test="rate!=null and rate.startDate!=null and rate.startDate!=''">
+            AND created &gt;= #{rate.startDate}
+        </if>
+        <if test="rate!=null and rate.endDate!=null and rate.endDate!=''">
+            AND created &lt;= #{rate.endDate}
+        </if>
+        GROUP BY user_id ) ur
+        LEFT JOIN USER u ON u.id = ur.user_id
+        ) dy
+        LEFT JOIN (
+        SELECT
+        d.id,
+        d.NAME AS department,
+        dp.user_id
+        FROM
+        ( SELECT DISTINCT p.department_id, up.user_id FROM user_post up LEFT JOIN post p ON up.post_id = p.id ) dp
+        LEFT JOIN department d ON d.id = dp.department_id
+        ) dx ON dx.user_id = dy.userId ,(select @rank:=0) b where dy.userRate!=0
+        <if test="rate!=null and rate.departmentId!=null">
+            and dx.id = #{rate.departmentId}
+        </if>
+        <if test="rate!=null and rate.userName!=null and rate.userName!=''">
+            and dy.userName like concat('%',#{rate.userName},'%')
+        </if>
+        order by dy.userRate desc
+    </sql>
+    <select id="getUserStat" parameterType="com.dayou.vo.UserRateVO" resultType="com.dayou.vo.UserRateVO">
+       <include refid="userStatSQL" />
+    </select>
+
+    <select id="getUserStatExport" parameterType="com.dayou.vo.UserRateVO" resultType="com.dayou.vo.UserRateVO">
+        <include refid="userStatSQL" />
+    </select>
+
+    <select id="getUserDetail" parameterType="com.dayou.vo.MajorOrderStatEvaluateUnitVO" resultType="com.dayou.vo.MajorOrderStatEvaluateUnitVO">
+        SELECT
+            m.id AS majorId,
+            m.NAME AS orderName,
+            m.order_id AS orderId,
+            u.NAME AS clientManager,
+            u1.NAME AS principal,
+            d.NAME AS department,
+            m.business_object_type AS businessObjectType,
+            m.financial,
+            m.allot_type AS allotType,
+            m.evaluate_unit AS evaluateUnit,
+            ma.userRate,
+            ma.created as createTime
+        FROM
+            ( SELECT round( unit_rate, 1 ) AS userRate,major_id,created FROM major_appraiser_unit
+                WHERE user_id = #{unit.userId} AND deleted = 0
+                    <if test="unit!=null and unit.startDate!=null and unit.startDate!=''">
+                        AND created &gt;= #{unit.startDate}
+                    </if>
+                    <if test="unit!=null and unit.endDate!=null and unit.endDate!=''">
+                        AND created &lt;= #{unit.endDate}
+                    </if>
+                ) ma
+                LEFT JOIN major m ON m.id = ma.major_id
+                LEFT JOIN user u ON u.id = m.client_manager_id
+                LEFT JOIN user u1 ON u1.id = m.principal_id
+                LEFT JOIN department d ON d.id = m.department_id
+        <where>
+            <if test="unit!=null and unit.orderName!=null and unit.orderName!=''">
+                and m.name like concat('%',#{unit.orderName},'%')
+            </if>
+            <if test="unit!=null and unit.orderId!=null and unit.orderId!=''">
+                and m.order_id like concat('%',#{unit.orderId},'%')
+            </if>
+        </where>
+        order by m.id desc
+    </select>
+ </mapper>

+ 67 - 0
domain/src/main/java/com/dayou/vo/MajorOrderStatEvaluateUnitVO.java

@@ -0,0 +1,67 @@
+package com.dayou.vo;
+
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.dayou.annotation.Excel;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class MajorOrderStatEvaluateUnitVO {
+
+    private Long id;
+    @Excel(name = "项目名称")
+    private String orderName;
+
+    @Excel(name = "订单号")
+    private String orderId;
+
+    @Excel(name = "客户经理")
+    private String clientManager;
+
+    @Excel(name = "负责人")
+    private String principal;
+
+    @Excel(name = "接单部门")
+    private String department;
+
+    @Excel(name = "计件总数")
+    private String evaluateUnit;
+
+    @Excel(name = "计件分配")
+    private String allotUnitStr;
+
+
+    @Excel(name = "估价对象类型")
+    private String businessObjectType;
+
+    @Excel(name = "分单类型")
+    private String allotType;
+
+    @Excel(name = "分配时间", dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    private List<UserRateVO> allotUnits;
+
+    private Boolean financial;
+
+    private String userRate;
+
+    private String startDate;
+
+    private String endDate;
+
+    private Long userId;
+
+    public String getAllotUnitStrs(){
+        StringBuilder allotUnitStrs = new StringBuilder();
+        if (CollectionUtils.isNotEmpty(allotUnits)){
+            for (UserRateVO u : allotUnits) {
+                allotUnitStrs.append(u.getUserName()+":"+u.getUserRate()+";");
+            }
+        }
+        return allotUnitStrs.toString();
+    }
+
+}

+ 26 - 0
domain/src/main/java/com/dayou/vo/UserRateVO.java

@@ -0,0 +1,26 @@
+package com.dayou.vo;
+
+import com.dayou.annotation.Excel;
+import lombok.Data;
+
+@Data
+public class UserRateVO {
+
+    private Long userId;
+    @Excel(name ="估价人员")
+    private String userName;
+
+    @Excel(name ="部门")
+    private String department;
+
+    @Excel(name ="计件合计")
+    private String userRate;
+
+    @Excel(name ="排名")
+    private Integer ranks;
+
+    private String startDate;
+    private String endDate;
+    private Long departmentId;
+
+}

+ 15 - 0
service/src/main/java/com/dayou/service/IMajorAppraiserUnitService.java

@@ -1,12 +1,27 @@
 package com.dayou.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.dayou.dto.MajorAppraiserUnitDTO;
 import com.dayou.entity.MajorAppraiserUnit;
+import com.dayou.vo.MajorOrderStatEvaluateUnitVO;
+import com.dayou.vo.UserRateVO;
+
+import java.util.List;
 
 public interface IMajorAppraiserUnitService extends IService<MajorAppraiserUnit> {
 
     Boolean saveUnit(MajorAppraiserUnitDTO majorAppraiserUnitDTO);
 
     MajorAppraiserUnitDTO select(Long id);
+
+    Page<MajorOrderStatEvaluateUnitVO> getOrderStat(Page page, MajorOrderStatEvaluateUnitVO unit);
+
+    List<MajorOrderStatEvaluateUnitVO> exportOrderExport(MajorOrderStatEvaluateUnitVO unit);
+
+    Page<UserRateVO> getUserStat(Page page, UserRateVO rate);
+
+    List<UserRateVO> exportUserExport(UserRateVO rate);
+
+    Page<MajorOrderStatEvaluateUnitVO> getUserDetail(Page page, MajorOrderStatEvaluateUnitVO unit);
 }

+ 36 - 0
service/src/main/java/com/dayou/service/impl/MajorAppraiserUnitServiceImpl.java

@@ -2,6 +2,7 @@ package com.dayou.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dayou.common.BaseEntity;
 import com.dayou.dto.MajorAppraiserUnitDTO;
@@ -11,10 +12,13 @@ import com.dayou.exception.ErrorCode;
 import com.dayou.mapper.MajorAppraiserUnitMapper;
 import com.dayou.service.IMajorAppraiserUnitService;
 import com.dayou.service.IMajorService;
+import com.dayou.vo.MajorOrderStatEvaluateUnitVO;
+import com.dayou.vo.UserRateVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.Collections;
 import java.util.List;
 
 @Service
@@ -23,6 +27,9 @@ public class MajorAppraiserUnitServiceImpl extends ServiceImpl<MajorAppraiserUni
     @Autowired
     private IMajorService majorService;
 
+    @Autowired
+    private MajorAppraiserUnitMapper majorAppraiserUnitMapper;
+
     @Override
     public Boolean saveUnit(MajorAppraiserUnitDTO majorAppraiserUnitDTO) {
 
@@ -62,4 +69,33 @@ public class MajorAppraiserUnitServiceImpl extends ServiceImpl<MajorAppraiserUni
         majorAppraiserUnitDTO.setUserUnit(list);
         return majorAppraiserUnitDTO;
     }
+
+    @Override
+    public Page<MajorOrderStatEvaluateUnitVO> getOrderStat(Page page, MajorOrderStatEvaluateUnitVO unit) {
+        return majorAppraiserUnitMapper.getOrderStat(page,unit);
+    }
+
+    @Override
+    public List<MajorOrderStatEvaluateUnitVO> exportOrderExport(MajorOrderStatEvaluateUnitVO unit) {
+        List<MajorOrderStatEvaluateUnitVO> list = majorAppraiserUnitMapper.exportOrderExport(unit);
+        list.stream().forEach(x->{
+            x.setAllotUnitStr(x.getAllotUnitStrs());
+        });
+        return list;
+    }
+
+    @Override
+    public Page<UserRateVO> getUserStat(Page page, UserRateVO rate) {
+        return majorAppraiserUnitMapper.getUserStat(page,rate);
+    }
+
+    @Override
+    public List<UserRateVO> exportUserExport(UserRateVO rate) {
+        return majorAppraiserUnitMapper.getUserStatExport(rate);
+    }
+
+    @Override
+    public Page<MajorOrderStatEvaluateUnitVO> getUserDetail(Page page, MajorOrderStatEvaluateUnitVO unit) {
+        return majorAppraiserUnitMapper.getUserDetail(page,unit);
+    }
 }