Browse Source

Merge remote-tracking branch 'origin/20210223' into 20210223

wangyangyang 3 years ago
parent
commit
8ddbfe4c72

+ 1 - 1
operation_manager/src/main/java/com/huaxu/order/controller/WorkOrderManageController.java

@@ -387,7 +387,7 @@ public class WorkOrderManageController {
      * @return
      */
     @GetMapping("/event/list")
-    @ApiOperation(value = "查询事件隐患/所有工单")
+    @ApiOperation(value = "App事件列表")
     public AjaxMessage<Pagination<WorkOrderManageDto>> selectEventList(
             @ApiParam(value = "页数", required = true)@RequestParam Integer pageNum,
             @ApiParam(value = "条数", required = true)@RequestParam Integer pageSize){

+ 134 - 0
operation_manager/src/main/java/com/huaxu/order/controller/WorkOrderStatisticsController.java

@@ -0,0 +1,134 @@
+package com.huaxu.order.controller;
+
+import com.huaxu.model.AjaxMessage;
+import com.huaxu.model.LoginUser;
+import com.huaxu.model.ResultStatus;
+import com.huaxu.order.dto.WorkOrderManageDto;
+import com.huaxu.order.service.WorkOrderManageService;
+import com.huaxu.util.UserUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.DecimalFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/order/workOrderStatistics/")
+@Api(tags = "工单统计")
+public class WorkOrderStatisticsController {
+
+    @Autowired
+    WorkOrderManageService workOrderManageService;
+
+    @RequestMapping(value = "completionStatistics", method = RequestMethod.GET)
+    @ApiOperation(value = "工单完成情况统计")
+    public AjaxMessage<Map<String,Object>> completionStatistics(
+            @ApiParam(value="统计类型:0-按月统计,1-按年统计",required =true) @RequestParam(required = true) int type,
+            @ApiParam(value = "统计时间:月格式(yyyy-MM),年格式(yyyy)", required = true) @RequestParam(required = true) String startDate) throws ParseException {
+        //同比日期
+        String sameStartDate = null;
+        //环比日期
+        String chainStartDate =null;
+        if(type==0){
+            startDate = String.format("%s-01",startDate);
+            sameStartDate = subYear(startDate,-1);
+            chainStartDate = subMonth(startDate,-1);
+        }
+        else if(type==1){
+            startDate = String.format("%s-01-01",startDate);
+            sameStartDate = subYear(startDate, -1);
+            chainStartDate = subYear(startDate,-1);
+        }
+        //根据用户编号,获取用户的权限
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        WorkOrderManageDto workOrderManageDto = new WorkOrderManageDto();
+        workOrderManageDto.setStartDate(startDate);
+        workOrderManageDto.setOrderStatus(type);
+        workOrderManageDto.setProgramItems(loginUser.getProgramItemList());
+        workOrderManageDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        workOrderManageDto.setPermissonType(loginUser.getPermissonType());
+        Map<String,Object> statistics=workOrderManageService.workOrderStatistics(workOrderManageDto);
+        workOrderManageDto.setStartDate(sameStartDate);
+        //同比
+        Map<String,Object> sameStatistic = workOrderManageService.workOrderStatistics(workOrderManageDto);
+        //环比
+        workOrderManageDto.setStartDate(chainStartDate);
+        Map<String,Object> chainStatistic = workOrderManageService.workOrderStatistics(workOrderManageDto);
+
+        DecimalFormat df = new DecimalFormat("#.00");
+
+        if(statistics.get("工单完成率") == null || statistics.get("工单完成率").toString().equals("0")){
+            statistics.put("工单完成率同比",0);
+            statistics.put("工单完成率环比",0);
+        }
+        else {
+            Double finishedSameRate = (Double.parseDouble(statistics.get("工单完成率").toString())-Double.parseDouble(sameStatistic.get("工单完成率").toString()))*100/Double.parseDouble(statistics.get("工单完成率").toString());
+            statistics.put("工单完成率同比",df.format(finishedSameRate));
+            Double finishedChainRate = (Double.parseDouble(statistics.get("工单完成率").toString())-Double.parseDouble(chainStatistic.get("工单完成率").toString()))*100/Double.parseDouble(statistics.get("工单完成率").toString());
+            statistics.put("工单完成率环比",df.format(finishedChainRate));
+        }
+        if(statistics.get("工单总数") == null || statistics.get("工单总数").toString().equals("0")){
+            statistics.put("工单总数同比",0);
+            statistics.put("工单总数环比",0);
+        }
+        else {
+            Double orderSameTotalNumberRate = (Double.parseDouble(statistics.get("工单总数").toString())-Double.parseDouble(sameStatistic.get("工单总数").toString()))*100/Double.parseDouble(statistics.get("工单总数").toString());
+            statistics.put("工单总数同比",df.format(orderSameTotalNumberRate));
+            Double orderChainTotalNumberRate = (Double.parseDouble(statistics.get("工单总数").toString())-Double.parseDouble(chainStatistic.get("工单总数").toString()))*100/Double.parseDouble(statistics.get("工单总数").toString());
+            statistics.put("工单总数环比",df.format(orderChainTotalNumberRate));
+        }
+        if(statistics.get("工单完成数") == null || statistics.get("工单完成数").toString().equals("0")){
+            statistics.put("工单完成数同比",0);
+            statistics.put("工单完成数环比",0);
+        }
+        else {
+            Double finishedSameNumber = (Double.parseDouble(statistics.get("工单完成数").toString())-Double.parseDouble(sameStatistic.get("工单完成数").toString()))*100/Double.parseDouble(statistics.get("工单完成数").toString());
+            statistics.put("工单完成数同比",df.format(finishedSameNumber));
+            Double finishedChainNumber = (Double.parseDouble(statistics.get("工单完成数").toString())-Double.parseDouble(chainStatistic.get("工单完成数").toString()))*100/Double.parseDouble(statistics.get("工单完成数").toString());
+            statistics.put("工单完成数环比",df.format(finishedChainNumber));
+        }
+
+        return new AjaxMessage<>(ResultStatus.OK,  statistics);
+    }
+
+
+
+    /**
+     * 日期增加一年
+     */
+    private  String subYear(String date,int n) throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Date dt = sdf.parse(date);
+        Calendar rightNow = Calendar.getInstance();
+        rightNow.setTime(dt);
+        rightNow.add(Calendar.YEAR, n);
+        Date dt1 = rightNow.getTime();
+        String reStr = sdf.format(dt1);
+        return reStr;
+    }
+
+    /**
+     *日期增加一月
+     */
+    private  String subMonth(String date,int n) throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Date dt = sdf.parse(date);
+        Calendar rightNow = Calendar.getInstance();
+        rightNow.setTime(dt);
+        rightNow.add(Calendar.MONTH, n);
+        Date dt1 = rightNow.getTime();
+        String reStr = sdf.format(dt1);
+        return reStr;
+    }
+}

+ 2 - 1
operation_manager/src/main/java/com/huaxu/order/dao/WorkOrderManageMapper.java

@@ -45,9 +45,10 @@ public interface WorkOrderManageMapper {
 
     Page<WorkOrderManageDto> findPage(IPage<WorkOrderManageDto> page, @Param("order") WorkOrderManageDto workOrderManageDto);
 
-
     Map<String,Object> workOrderStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
 
+    List<Map<String,Object>> eventMonthStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
+
     Page<WorkOrderManageDto> findByNo(IPage<WorkOrderManageDto> page, @Param("order") WorkOrderManageDto workOrderManageDto);
 
     List<WorkOrderManageDto> selectMaintainOrder(@Param("order") WorkOrderManageDto workOrderManageDto);

+ 3 - 0
operation_manager/src/main/java/com/huaxu/order/service/WorkOrderManageService.java

@@ -89,6 +89,9 @@ public interface WorkOrderManageService {
 
 
     Map<String,Object> workOrderStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
+
+
+    List<Map<String,Object>> eventMonthStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
     /**
      * 待处理权限
      */

+ 5 - 0
operation_manager/src/main/java/com/huaxu/order/service/impl/WorkOrderManageServiceImpl.java

@@ -158,6 +158,11 @@ public class WorkOrderManageServiceImpl implements WorkOrderManageService {
         return workOrderManageMapper.workOrderStatistics(workOrderManageDto);
     }
 
+    @Override
+    public List<Map<String, Object>> eventMonthStatistics(WorkOrderManageDto workOrderManageDto) {
+        return workOrderManageMapper.eventMonthStatistics(workOrderManageDto);
+    }
+
     @Override
     public int selectPendingPower(Map<String, Object> map) {
         return workOrderManageMapper.selectPendingPower(map);

+ 61 - 3
operation_manager/src/main/resources/mapper/order/WorkOrderManageMapper.xml

@@ -863,7 +863,6 @@
     </where>
   </select>
 
-
   <!--工单完成情况统计-->
   <select id="workOrderStatistics" resultType="map">
     select  total '工单总数', finished '工单完成数', finished/total '工单完成率' from
@@ -872,8 +871,14 @@
       from sc_work_order_manage t1
       <where>
         t1.order_status != 0
-        and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-        and t1.date_create &lt; date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%c-%d')
+        <if test="order.statsType == 0">
+          and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
+          and t1.date_create &lt; DATE_ADD(date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 MONTH)
+        </if>
+        <if test="order.statsType == 1">
+          and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
+          and t1.date_create &lt; DATE_ADD(date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 YEAR)
+        </if>
         <if test="order.tenantId != null and order.tenantId != ''">
           and t1.tenant_id = #{order.tenantId}
         </if>
@@ -907,4 +912,57 @@
       </where>
     ) a
   </select>
+
+  <!--事件数据月统计-->
+  <select id="eventMonthStatistics" resultType="map">
+    select '数量','日期' from
+    (
+    select count(1) '数量',date_format(date_create,'%Y-%c-%d') '日期'
+    from sc_work_order_manage t1
+    <where>
+      <if test="order.statsType == 0">
+        and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
+        and t1.date_create &lt; DATE_ADD(date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 MONTH)
+      </if>
+      <if test="order.statsType == 1">
+        and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
+        and t1.date_create &lt; DATE_ADD(date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 YEAR)
+      </if>
+      <if test="order.tenantId != null and order.tenantId != ''">
+        and t1.tenant_id = #{order.tenantId}
+      </if>
+      <if test="order.userType!=null and order.userType!=-999 and order.userType!=-9999 and  order.programItems != null and order.programItems.size() > 0">
+        <if test="order.permissonType == 5 or order.permissonType == 2">
+          and ( t1.department_org_id in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          or
+          t1.COMPANY_ORG_ID in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          )
+        </if>
+        <if test="order.permissonType == 4 or order.permissonType == 3">
+          and t1.department_org_id in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+        </if>
+        <if test="order.permissonType == 1">
+          and t1.COMPANY_ORG_ID in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          and (t1.department_org_id is null or t1.department_org_id =0)
+        </if>
+      </if>
+    </where>
+    group by date_format(date_create,'%Y-%c-%d')
+    ) a
+    order by '日期'
+  </select>
+
+
 </mapper>

+ 29 - 0
user_center/src/main/java/com/huaxu/common/Double2Serializer.java

@@ -0,0 +1,29 @@
+package com.huaxu.common;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+
+import java.io.IOException;
+import java.text.DecimalFormat;
+
+public class Double2Serializer extends JsonSerializer<Double> {
+
+    private DecimalFormat df = new DecimalFormat("0.##");
+
+    /**
+     * 小数保留3位返回给前端序列化器
+     * @param data
+     * @param jsonGenerator
+     * @param serializerProvider
+     * @throws IOException
+     */
+    @Override
+    public void serialize(Double data, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
+            throws IOException {
+        if (data != null) {
+            jsonGenerator.writeNumber(df.format(data));
+        }
+    }
+
+}

+ 11 - 0
user_center/src/main/java/com/huaxu/controller/UserController.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huaxu.common.FileUploadUtil;
+import com.huaxu.dto.MaintainerCountDto;
 import com.huaxu.dto.UserListDto;
 import com.huaxu.entity.App;
 import com.huaxu.entity.MenuEntity;
@@ -307,4 +308,14 @@ public class UserController {
         return userService.findUserIdsByPermissonOrg(tenantId,companyOrgId,deptOrgId);
     }
 
+    @ApiOperation(value = "查询运维人员数量情况")
+    @RequestMapping(value = "/findMaintainer", method = RequestMethod.GET)
+    public AjaxMessage<MaintainerCountDto> findMaintainer(
+            @ApiParam(value = "开始时间", required = true) @RequestParam String startTime,
+            @ApiParam(value = "结束时间", required = false) @RequestParam(required = false) String endTime,
+            @ApiParam(value = "统计类型0按月、1按年、2自定义", required = true)@RequestParam Integer type) {
+        MaintainerCountDto maintainerCountDto = userService.findMaintainer(startTime,endTime,type);
+        return new AjaxMessage<>(ResultStatus.OK, maintainerCountDto);
+    }
+
 }

+ 2 - 0
user_center/src/main/java/com/huaxu/dao/UserMapper.java

@@ -45,4 +45,6 @@ public interface UserMapper extends BaseMapper<UserEntity> {
 
 
     List<Integer> findUserIdsByPermissonOrg(@Param("tenantId")String tenantId, @Param("companyOrgId")Integer companyOrgId, @Param("deptOrgId")Integer deptOrgId ,@Param("companyOrgIds")List<Integer> companyOrgIds,@Param("deptOrgIds")List<Integer> deptOrgIds);
+
+    Integer findMaintainer(@Param("user")UserEntity userEntity);
 }

+ 24 - 0
user_center/src/main/java/com/huaxu/dto/MaintainerCountDto.java

@@ -0,0 +1,24 @@
+package com.huaxu.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.huaxu.common.Double2Serializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("运维人员数量情况")
+public class MaintainerCountDto {
+    @ApiModelProperty(value = "人员数量")
+    private Integer count;
+    @ApiModelProperty(value = "环比人员数量")
+    private Integer countMOnM;
+    @ApiModelProperty(value = "同比人员数量")
+    private Integer countYOnY;
+    @ApiModelProperty(value = "环比")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double rateMOnM;
+    @ApiModelProperty(value = "同比")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double rateYOnY;
+}

+ 50 - 0
user_center/src/main/java/com/huaxu/service/UserService.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.huaxu.common.ToolUtil;
 import com.huaxu.dao.OrgMapper;
 import com.huaxu.dao.UserMapper;
+import com.huaxu.dto.MaintainerCountDto;
 import com.huaxu.dto.UserListDto;
 import com.huaxu.entity.Org;
 import com.huaxu.entity.UserEntity;
@@ -30,6 +31,8 @@ import javax.annotation.Resource;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.client.RestTemplate;
 
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -469,4 +472,51 @@ public class UserService extends ServiceImpl<UserMapper,UserEntity> {
 		List<UserEntity> userEntities = userMapper.findUserListByType(userEntity);
 		return userEntities;
 	}
+	public MaintainerCountDto findMaintainer(String startTime, String endTime, Integer type){
+		MaintainerCountDto result=new MaintainerCountDto();
+		try {
+			LoginUser currentUser = UserUtil.getCurrentUser();
+			UserEntity userEntity = new UserEntity();
+			userEntity.setTenantId(currentUser.getTenantId());
+			userEntity.setProgramItems(currentUser.getProgramItemList());
+			//1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+			userEntity.setPermissonType(currentUser.getPermissonType());
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+			Calendar c=Calendar.getInstance();
+			Date thisDate=null, dateMtoM=null,dateYtoY=null;
+			if(type==0){
+				dateMtoM=sdf.parse(startTime+"-1");
+				c.setTime(dateMtoM);
+				c.add(Calendar.MONTH,1);
+				thisDate=c.getTime();
+				c.add(Calendar.YEAR,-1);
+				dateYtoY=c.getTime();
+			}else if(type==1){
+				dateMtoM=sdf.parse(startTime+"-1-1");
+				dateYtoY=dateMtoM;
+				c.setTime(dateMtoM);
+				c.add(Calendar.YEAR,1);
+				thisDate=c.getTime();
+			}else if(type==2){
+				dateMtoM=sdf.parse(startTime+"-1");
+				thisDate=sdf.parse(endTime+"-1");
+				c.setTime(thisDate);
+				c.add(Calendar.MONTH,1);
+				thisDate=c.getTime();
+				c.add(Calendar.YEAR,-1);
+				dateYtoY=c.getTime();
+			}
+			userEntity.setDateCreate(thisDate);
+			result.setCount(userMapper.findMaintainer(userEntity));
+			userEntity.setDateCreate(dateMtoM);
+			result.setCountMOnM(userMapper.findMaintainer(userEntity));
+			userEntity.setDateCreate(dateYtoY);
+			result.setCountYOnY(userMapper.findMaintainer(userEntity));
+			result.setRateMOnM(result.getCountMOnM()!=0?(double)(result.getCount()-result.getCountMOnM())/result.getCountMOnM()*100:null);
+			result.setRateYOnY(result.getCountYOnY()!=0?(double)(result.getCount()-result.getCountYOnY())/result.getCountYOnY()*100:null);
+		}catch (Exception e){
+			e.printStackTrace();
+		}
+		return result;
+	}
 }

+ 44 - 0
user_center/src/main/resources/mapper/UserMapper.xml

@@ -340,4 +340,48 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         )
 
     </select>
+    <select id="findMaintainer" resultType="java.lang.Integer">
+        select count(1) maintainerCount
+        from uims_user a
+        <where>
+            a.status=1 and a.user_type = 3
+            <if test="user.dateCreate != null"> and a.date_create &lt; #{user.dateCreate} </if>
+            <if test="user.tenantId != null  and user.tenantId != ''"> and a.tenant_id = #{user.tenantId} </if>
+
+            <if test="user.deptOrgId != null  and user.deptOrgId != ''">
+                and (a.DEPT_ORG_ID = #{user.deptOrgId}
+                or a.COMPANY_ORG_ID = #{user.companyOrgId}
+                )
+            </if>
+            <if test="user.userType!=null and user.userType!=-999 and user.userType!=-9999 and  user.programItems != null and user.programItems.size() > 0">
+                <if test="user.permissonType == 5 or user.permissonType == 2">
+                    and ( a.DEPT_ORG_ID in
+                    <foreach collection="user.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    or
+                    a.COMPANY_ORG_ID in
+                    <foreach collection="user.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    )
+                </if>
+                <if test="user.permissonType == 4 or user.permissonType == 3">
+                    and a.DEPT_ORG_ID in
+                    <foreach collection="user.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                </if>
+                <if test="user.permissonType == 1">
+                    and a.COMPANY_ORG_ID in
+                    <foreach collection="user.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    and (a.DEPT_ORG_ID is null or a.DEPT_ORG_ID =0)
+                </if>
+            </if>
+
+        </where>
+
+    </select>
 </mapper>