工程统计
This commit is contained in:
parent
73f9f1d258
commit
b000f4a841
|
|
@ -0,0 +1,74 @@
|
|||
package com.bonus.bmw.controller;
|
||||
|
||||
import com.bonus.bmw.domain.po.HomePagePo;
|
||||
import com.bonus.bmw.domain.vo.HomePageSubProVo;
|
||||
import com.bonus.bmw.service.ProStatisticsService;
|
||||
import com.bonus.common.core.web.controller.BaseController;
|
||||
import com.bonus.common.core.web.domain.AjaxResult;
|
||||
import com.bonus.common.core.web.page.TableDataInfo;
|
||||
import com.bonus.common.log.annotation.SysLog;
|
||||
import com.bonus.common.log.enums.OperaType;
|
||||
import com.bonus.common.security.annotation.InnerAuth;
|
||||
import com.bonus.common.security.annotation.RequiresPermissions;
|
||||
import com.bonus.common.security.annotation.RequiresPermissionsOrInnerAuth;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 工程统计
|
||||
* @author fly
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/proStatistics")
|
||||
public class ProStatisticsController extends BaseController {
|
||||
/**
|
||||
* 服务对象
|
||||
*/
|
||||
@Autowired
|
||||
private ProStatisticsService service;
|
||||
|
||||
/**
|
||||
* 工程统计
|
||||
* @param o
|
||||
* @return
|
||||
*/
|
||||
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth(isUser = false), requiresPermissions = @RequiresPermissions("pro:statistics:query"))
|
||||
@GetMapping("/getProStatisticsTable")
|
||||
@SysLog(title = "工程统计", businessType = OperaType.QUERY, logType = 0, module = "工程统计->工程统计", details = "工程统计")
|
||||
public TableDataInfo getProStatisticsTable(HomePagePo o) {
|
||||
try {
|
||||
startPage();
|
||||
List<HomePageSubProVo> list = service.getProStatisticsTable(o);
|
||||
return getDataTable(list);
|
||||
} catch (Exception e) {
|
||||
logger.error(e.toString(), e);
|
||||
}
|
||||
return getDataTableError(new ArrayList<>());
|
||||
}
|
||||
|
||||
/**
|
||||
* 工程-数据概览
|
||||
* @param o
|
||||
* @return
|
||||
*/
|
||||
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth(isUser = false), requiresPermissions = @RequiresPermissions("pro:statistics:query"))
|
||||
@GetMapping("/getProDataOverview")
|
||||
@SysLog(title = "数据概览", businessType = OperaType.QUERY, logType = 0, module = "工程统计->数据概览", details = "数据概览")
|
||||
public AjaxResult getDataOverview(HomePagePo o) {
|
||||
try {
|
||||
return service.getProDataOverview(o);
|
||||
} catch (Exception e) {
|
||||
logger.error(e.toString(), e);
|
||||
}
|
||||
return error("系统异常,请联系管理员");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -52,4 +52,5 @@ public class HomePageSubProVo {
|
|||
|
||||
private String attTime;
|
||||
|
||||
private String proAddress;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,101 @@
|
|||
package com.bonus.bmw.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ProStatisticsPo {
|
||||
|
||||
/**
|
||||
* 项目总数
|
||||
*/
|
||||
private Integer proNum;
|
||||
|
||||
private String proId;
|
||||
private String proName;
|
||||
private String subCompanyName;
|
||||
private String proType;
|
||||
private String volLevel;
|
||||
private String proStatus;
|
||||
|
||||
/**
|
||||
* 入场
|
||||
*/
|
||||
private String einNum;
|
||||
/**
|
||||
* 考勤
|
||||
*/
|
||||
private String attNum;
|
||||
/**
|
||||
* 黄灯状态
|
||||
*/
|
||||
private String yellowNum;
|
||||
/**
|
||||
* 绿灯状态
|
||||
*/
|
||||
private String greenNum;
|
||||
/**
|
||||
* 黄灯超七天状态
|
||||
*/
|
||||
private String yellowThanSevenDayNum;
|
||||
/**
|
||||
* 分包数
|
||||
*/
|
||||
private String subNum;
|
||||
/**
|
||||
* 班组数
|
||||
*/
|
||||
private String teamNum;
|
||||
/**
|
||||
* 是否考勤
|
||||
*/
|
||||
private String isAtt;
|
||||
/**
|
||||
* 入场时间
|
||||
*/
|
||||
private String einTime;
|
||||
/**
|
||||
* 出场时间
|
||||
*/
|
||||
private String exitTime;
|
||||
|
||||
/**
|
||||
* 考勤时间
|
||||
*/
|
||||
private String attTime;
|
||||
/**
|
||||
* 出场有文件人数
|
||||
*/
|
||||
private String exitUploadFile;
|
||||
/**
|
||||
* 出场无文件人数
|
||||
*/
|
||||
private String noExitUploadFile;
|
||||
/**
|
||||
* 累计入场
|
||||
*/
|
||||
private Long einNumHis;
|
||||
/**
|
||||
* 累计考勤
|
||||
*/
|
||||
private Long attNumHis;
|
||||
/**
|
||||
* 申请补卡次数
|
||||
*/
|
||||
private Long repairPersonNum;
|
||||
/**
|
||||
* 累计补卡次数
|
||||
*/
|
||||
private Long repairNumHis;
|
||||
/**
|
||||
* 累计工资总数
|
||||
*/
|
||||
private Double salaryMoneyNum;
|
||||
/**
|
||||
* 工资册数量
|
||||
*/
|
||||
private Double payrollNum;
|
||||
/**
|
||||
* 发放工资人次
|
||||
*/
|
||||
private Double payrollWorkerTime;
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.bonus.bmw.mapper;
|
||||
|
||||
import com.bonus.bmw.domain.po.HomePagePo;
|
||||
import com.bonus.bmw.domain.vo.HomePageSubProVo;
|
||||
import com.bonus.bmw.domain.vo.ProStatisticsPo;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface ProStatisticsMapper {
|
||||
|
||||
|
||||
List<HomePageSubProVo> getProStatisticsTable(HomePagePo o);
|
||||
|
||||
ProStatisticsPo getEinNumByHis(HomePagePo o);
|
||||
|
||||
ProStatisticsPo getEinWorkerLight(HomePagePo o);
|
||||
|
||||
ProStatisticsPo getWorkerAttAndRepair(HomePagePo o);
|
||||
|
||||
int getProRepairNum(HomePagePo o);
|
||||
|
||||
ProStatisticsPo getWorkerWage(HomePagePo o);
|
||||
|
||||
int getWorkerSalaryNum(HomePagePo o);
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package com.bonus.bmw.service;
|
||||
|
||||
import com.bonus.bmw.domain.po.HomePagePo;
|
||||
import com.bonus.bmw.domain.vo.HomePageSubProVo;
|
||||
import com.bonus.common.core.web.domain.AjaxResult;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ProStatisticsService {
|
||||
|
||||
/**
|
||||
* 获取工程统计
|
||||
* @param o
|
||||
* @return
|
||||
*/
|
||||
List<HomePageSubProVo> getProStatisticsTable(HomePagePo o);
|
||||
|
||||
/**
|
||||
* 获取工程数据概览
|
||||
* @param o
|
||||
* @return
|
||||
*/
|
||||
AjaxResult getProDataOverview(HomePagePo o);
|
||||
}
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
package com.bonus.bmw.service.impl;
|
||||
|
||||
import com.bonus.bmw.domain.po.HomePagePo;
|
||||
import com.bonus.bmw.domain.vo.HomePageSubProVo;
|
||||
import com.bonus.bmw.domain.vo.ProStatisticsPo;
|
||||
import com.bonus.bmw.mapper.ProStatisticsMapper;
|
||||
import com.bonus.bmw.service.ProStatisticsService;
|
||||
import com.bonus.common.core.web.domain.AjaxResult;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class ProStatisticsServiceImpl implements ProStatisticsService {
|
||||
|
||||
@Autowired
|
||||
private ProStatisticsMapper mapper;
|
||||
|
||||
|
||||
@Override
|
||||
public List<HomePageSubProVo> getProStatisticsTable(HomePagePo o) {
|
||||
return mapper.getProStatisticsTable(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult getProDataOverview(HomePagePo o) {
|
||||
Map<String,Object> map = new HashMap<>();
|
||||
List<HomePageSubProVo> list = mapper.getProStatisticsTable(o);
|
||||
if(list != null && !list.isEmpty()){
|
||||
map.put("subNum",list.get(0).getSubNum());
|
||||
map.put("teamNum",list.get(0).getTeamNum());
|
||||
map.put("einNum",list.get(0).getEinNum());
|
||||
}else{
|
||||
map.put("subNum",0);
|
||||
map.put("teamNum",0);
|
||||
map.put("einNum",0);
|
||||
}
|
||||
//累计入场
|
||||
ProStatisticsPo einNum = mapper.getEinNumByHis(o);
|
||||
if(einNum != null){
|
||||
map.put("einNumHis",einNum.getEinNumHis());
|
||||
map.put("exitNum",einNum.getEinNumHis() - Long.parseLong((String) map.get("einNum")) );
|
||||
map.put("einTime",einNum.getEinTime());
|
||||
map.put("exitTime",einNum.getExitTime());
|
||||
map.put("exitUploadFile",einNum.getExitUploadFile());
|
||||
map.put("noExitUploadFile",einNum.getNoExitUploadFile());
|
||||
}else{
|
||||
map.put("einNumHis",0);
|
||||
map.put("exitNum",0);
|
||||
map.put("einTime","");
|
||||
map.put("exitTime","");
|
||||
map.put("exitUploadFile",0);
|
||||
map.put("noExitUploadFile",0);
|
||||
}
|
||||
//在场灯状态
|
||||
ProStatisticsPo lightStatus = mapper.getEinWorkerLight(o);
|
||||
if(lightStatus != null){
|
||||
map.put("yellowNum",lightStatus.getYellowNum());
|
||||
map.put("greenNum",lightStatus.getGreenNum());
|
||||
map.put("yellowThanSevenDayNum",lightStatus.getYellowThanSevenDayNum());
|
||||
}else{
|
||||
map.put("yellowNum",0);
|
||||
map.put("greenNum",0);
|
||||
map.put("yellowThanSevenDayNum",0);
|
||||
}
|
||||
//考勤
|
||||
ProStatisticsPo attAndRepair = mapper.getWorkerAttAndRepair(o);
|
||||
if(attAndRepair != null){
|
||||
map.put("attNumHis",attAndRepair.getAttNumHis());
|
||||
map.put("repairPersonNum",attAndRepair.getRepairPersonNum());
|
||||
map.put("repairNumHis",attAndRepair.getRepairNumHis());
|
||||
}else{
|
||||
map.put("attNumHis",0);
|
||||
map.put("repairPersonNum",0);
|
||||
map.put("repairNumHis",0);
|
||||
}
|
||||
//申请补卡次数
|
||||
int proRepairNum = mapper.getProRepairNum(o);
|
||||
map.put("proRepairNum",proRepairNum);
|
||||
//工资
|
||||
ProStatisticsPo workerWage = mapper.getWorkerWage(o);
|
||||
if(workerWage != null){
|
||||
map.put("salaryMoneyNum",workerWage.getSalaryMoneyNum());
|
||||
map.put("payrollNum",workerWage.getPayrollNum());
|
||||
map.put("payrollWorkerTime",workerWage.getPayrollWorkerTime());
|
||||
}else{
|
||||
map.put("salaryMoneyNum",0);
|
||||
map.put("payrollNum",0);
|
||||
map.put("payrollWorkerTime",0);
|
||||
}
|
||||
//发放工资人数
|
||||
int workerSalaryNum = mapper.getWorkerSalaryNum(o);
|
||||
map.put("workerSalaryNum",workerSalaryNum);
|
||||
|
||||
return AjaxResult.success(map);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,123 @@
|
|||
<?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.bonus.bmw.mapper.ProStatisticsMapper">
|
||||
|
||||
<resultMap id="BaseResultMap" type="com.bonus.bmw.domain.vo.HomePageVo">
|
||||
<result column="mainProNum" property="mainProNum" />
|
||||
<result column="proNum" property="proNum" />
|
||||
<result column="yellowNum" property="yellowNum"/>
|
||||
<result column="yellowThanSevenDayNum" property="yellowThanSevenDayNum"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="getProStatisticsTable" resultType="com.bonus.bmw.domain.vo.HomePageSubProVo">
|
||||
SELECT
|
||||
pp.id AS pro_id,
|
||||
pp.pro_name,
|
||||
psc.sub_company_name,
|
||||
pp.pro_type,
|
||||
pp.vol_level,
|
||||
pp.pro_status,
|
||||
pp.pro_address,
|
||||
count(DISTINCT ps.id) AS subNum,
|
||||
count(DISTINCT psc.id) AS teamNum,
|
||||
count(DISTINCT bwem.worker_id) AS einNum
|
||||
FROM
|
||||
pm_project pp
|
||||
LEFT JOIN pm_sub_company psc ON pp.sub_com_id = psc.id
|
||||
LEFT JOIN bm_worker_ein_msg bwem ON pp.id = bwem.pro_id
|
||||
AND bwem.is_active = 1
|
||||
LEFT JOIN bm_sub_contract bsc ON pp.id = bsc.pro_id
|
||||
AND bsc.is_active = 1
|
||||
AND bsc.sub_ein_status = 1
|
||||
LEFT JOIN pm_sub ps ON ps.id = bsc.sub_id
|
||||
AND bsc.is_active = 1
|
||||
LEFT JOIN pm_sub_team_contract pstc ON pp.id = pstc.pro_id
|
||||
AND pstc.is_active = 1
|
||||
AND pstc.team_ein_status = 1
|
||||
LEFT JOIN pm_sub_team pst ON pst.id = pstc.team_id
|
||||
AND pst.is_active = 1
|
||||
WHERE
|
||||
pp.is_active = 1
|
||||
<if test="proName != null">
|
||||
AND locate(#{proName},pp.pro_name)
|
||||
</if>
|
||||
<if test="proStatus != null">
|
||||
AND pp.pro_status = #{proStatus}
|
||||
</if>
|
||||
<if test="proId != null">
|
||||
AND pp.id = #{proId}
|
||||
</if>
|
||||
GROUP BY
|
||||
pp.id
|
||||
</select>
|
||||
|
||||
<select id="getEinNumByHis" resultType="com.bonus.bmw.domain.vo.ProStatisticsPo">
|
||||
SELECT
|
||||
count(DISTINCT pp.worker_id) AS einNumHis,
|
||||
min(pp.ein_time) as einTime,
|
||||
max(pp.exit_time) as exitTime,
|
||||
sum(if(ein_status=2 and is_upload_file = 1,1,0)) as exitUploadFile,
|
||||
sum(if(ein_status=2 and is_upload_file = 0,1,0)) as noExitUploadFile
|
||||
FROM
|
||||
bm_worker_ein_pro_record pp
|
||||
where
|
||||
pp.pro_id = #{proId}
|
||||
</select>
|
||||
|
||||
<select id="getEinWorkerLight" resultType="com.bonus.bmw.domain.vo.ProStatisticsPo">
|
||||
|
||||
SELECT
|
||||
sum(if(light_status=1,1,0)) as yellowNum,
|
||||
sum(if(light_status=2,1,0)) as greenNum,
|
||||
COUNT(DISTINCT IF(light_status = 1 AND DATE_SUB(CURDATE(), INTERVAL 7 DAY) > IF(yellow_date is null, CURRENT_DATE, yellow_date), worker_id, null)) as yellowThanSevenDayNum
|
||||
|
||||
FROM
|
||||
bm_worker_ein_msg pp
|
||||
where
|
||||
pp.pro_id = #{proId}
|
||||
</select>
|
||||
|
||||
<select id="getWorkerAttAndRepair" resultType="com.bonus.bmw.domain.vo.ProStatisticsPo">
|
||||
|
||||
SELECT
|
||||
count(pp.worker_id) AS attNumHis,
|
||||
count(DISTINCT if(pp.is_repair = 1,pp.worker_id,null)) AS repairPersonNum,
|
||||
sum(if(pp.is_repair = 1,1,0)) AS repairNumHis
|
||||
FROM
|
||||
bm_att_person pp
|
||||
WHERE
|
||||
pp.pro_id = #{proId}
|
||||
</select>
|
||||
|
||||
<select id="getProRepairNum" resultType="int">
|
||||
|
||||
SELECT
|
||||
count(pp.id) AS proRepairNum
|
||||
FROM
|
||||
bm_repair_card_apply pp
|
||||
WHERE
|
||||
pp.pro_id = #{proId} and pp.check_status = 1
|
||||
</select>
|
||||
|
||||
<select id="getWorkerWage" resultType="com.bonus.bmw.domain.vo.ProStatisticsPo">
|
||||
SELECT
|
||||
sum(pp.net_salary) AS salaryMoneyNum,
|
||||
sum(pp.id) AS payrollNum,
|
||||
sum(pp.pay_num) AS payrollWorkerTime
|
||||
FROM
|
||||
tb_pro_month_table pp
|
||||
WHERE
|
||||
pp.pro_id = #{proId}
|
||||
</select>
|
||||
|
||||
<select id="getWorkerSalaryNum" resultType="int">
|
||||
|
||||
SELECT
|
||||
count(distinct pp.user_id) AS workerSalaryNum
|
||||
FROM
|
||||
tb_pro_month_table_roster pp
|
||||
WHERE
|
||||
pp.pro_id = #{proId}
|
||||
|
||||
</select>
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue