完好率统计报表、设备运行记录定时任务

master
wws 2 years ago
parent cfeda7559d
commit 34eb8e75cf

@ -27,4 +27,7 @@ public interface RemoteDeviceService {
@PostMapping("/deviceTask/createMaintenancePlanTask")
public R createMaintenancePlanTask();
@PostMapping("/deviceTask/createEquipmentOperationTask")
public R createEquipmentOperationTask();
}

@ -37,6 +37,11 @@ public class RemoteDeviceFallbackFactory implements FallbackFactory<RemoteDevice
public R createMaintenancePlanTask() {
return R.fail("保养计划创建失败:" + throwable.getMessage());
}
@Override
public R createEquipmentOperationTask() {
return R.fail("设备运行记录生成失败:" + throwable.getMessage());
}
};
}
}

@ -63,4 +63,17 @@ public class DeviceTaskController {
}
return R.fail("保养计划生成失败");
}
/**
*
* @return
*/
@PostMapping("/createEquipmentOperationTask")
public R createEquipmentOperationTask() {
AjaxResult result = taskService.createEquipmentOperationTask();
if (result.isSuccess()){
return R.ok("设备运行记录生成成功");
}
return R.fail("设备运行记录生成失败");
}
}

@ -5,6 +5,9 @@ import org.apache.commons.lang3.builder.ToStringStyle;
import com.op.common.core.annotation.Excel;
import com.op.common.core.web.domain.BaseEntity;
import java.util.Date;
import java.util.List;
/**
* equ_operation
*
@ -92,6 +95,39 @@ public class EquOperation extends BaseEntity {
/** 删除标识 */
private String delFlag;
// 创建日期范围list
private List<Date> createTimeArray;
// 创建日期开始
private String createTimeStart;
// 创建日期结束
private String createTimeEnd;
public String getCreateTimeStart() {
return createTimeStart;
}
public void setCreateTimeStart(String createTimeStart) {
this.createTimeStart = createTimeStart;
}
public String getCreateTimeEnd() {
return createTimeEnd;
}
public void setCreateTimeEnd(String createTimeEnd) {
this.createTimeEnd = createTimeEnd;
}
public List<Date> getCreateTimeArray() {
return createTimeArray;
}
public void setCreateTimeArray(List<Date> createTimeArray) {
this.createTimeArray = createTimeArray;
}
public void setId(String id) {
this.id = id;
}

@ -2,6 +2,7 @@ package com.op.device.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.op.device.domain.EquEquipment;
import com.op.device.domain.EquOperation;
import com.op.device.domain.Equipment;
import java.util.List;

@ -2,7 +2,9 @@ package com.op.device.mapper;
import java.util.List;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.op.device.domain.EquOperation;
import io.lettuce.core.dynamic.annotation.Param;
/**
* Mapper
@ -58,4 +60,16 @@ public interface EquOperationMapper {
* @return
*/
public int deleteEquOperationByIds(String[] ids);
// 获取设备运行时间
@DS("master")
String selectEquipmentOperationTime();
List<EquOperation> selectEquipments();
// 批量插入设备运行记录
int insertEquOperationByBatch(@Param("list") List<EquOperation> subList);
// 校验当天运行记录数量
int checkInsertOperation();
}

@ -17,4 +17,6 @@ public interface IDeviceTaskService {
AjaxResult createPatrolCheckPlanTask();
AjaxResult createMaintenancePlanTask();
AjaxResult createEquipmentOperationTask();
}

@ -79,6 +79,11 @@ public class DeviceTaskServiceImpl implements IDeviceTaskService {
@Autowired
private SparePartsLedgerMapper sparePartsLedgerMapper;
@Autowired
private EquEquipmentMapper equipmentMapper;
@Autowired
private EquOperationMapper equOperationMapper;
/**
*
**/
@ -172,6 +177,39 @@ public class DeviceTaskServiceImpl implements IDeviceTaskService {
return success();
}
/**
*
* @return
*/
@Override
public AjaxResult createEquipmentOperationTask() {
// 加载sf-cloud库的sys_datasource
SysUser sysUser = new SysUser();
sysUser.setUserId(1L);
R<List<Map<String, String>>> dateSources0 = remoteUserService.getPoolNameList(sysUser);
List<Map<String, String>> dateSources = dateSources0.getData();
ExecutorService executorService = new ThreadPoolExecutor(
dateSources.size(),
dateSources.size(),
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
try {
dateSources.forEach(dateSource -> {
logger.info("++++++++++++" + dateSource.get("poolName") + "++++设备运行记录生成开始++++++++++");
Runnable run = () -> createEquipmentOperation(dateSource.get("poolName"));
executorService.execute(run);
});
} catch (Exception e) {
logger.error("service == dataClearTask == exception", e);
return error("service == dataClearTask == exception");
} finally {
executorService.shutdown();
}
return success();
}
public void createSpotCheckPlanFunc(String poolName){
DynamicDataSourceContextHolder.push(poolName);// 这是数据源的key
/**equ_plan equ_plan_equ**/
@ -372,4 +410,59 @@ public class DeviceTaskServiceImpl implements IDeviceTaskService {
}
return sce;
}
private void createEquipmentOperation(String poolName){
DynamicDataSourceContextHolder.push(poolName);// 这是数据源的key
// 当天未生成过运行记录
int checkNum = equOperationMapper.checkInsertOperation();
if (checkNum == 0) {
// 获取字典设备运行时间 device_operation_time
String operationTime = equOperationMapper.selectEquipmentOperationTime();
// 获取所有设备信息(设备编码、设备名称、设备组线、工作中心名称)
List<EquOperation> operationList = equOperationMapper.selectEquipments();
// 统一处理数据
for (EquOperation operation : operationList) {
operation.setId(IdUtils.fastSimpleUUID());// id
operation.setFactoryCode(poolName.replace("ds_",""));// 工厂
operation.setOperationTime(DateUtils.getTime());// 日期
operation.setOperationTime(operationTime);// 运行时间(默认运行时间)
operation.setActualOperationTime(operationTime);// 实际运行时间(默认运行时间)
operation.setCreateBy("jod");
operation.setCreateTime(DateUtils.getNowDate());
}
int batchSize = 200;// 批次数量
// 分批次处理
int batchCount = (operationList.size() + batchSize - 1)/batchSize;// 计算批次数量
for (int i = 0;i < batchCount; i++) {
int startIndex = i * batchSize;// 索引开始值
int endIndex = Math.min((i + 1)*batchSize,operationList.size());// 索引结束值
// 截取列表
List<EquOperation> subList = operationList.subList(startIndex,endIndex);
int num = equOperationMapper.insertEquOperationByBatch(subList);
System.out.println("数据源:"+poolName+"--->"+"第"+i+"轮"+"开始索引:"+startIndex+"________结束索引:"+endIndex+"________成功插入数量:"+num);
}
}else {
System.out.println("数据源:"+poolName+"当天生成过运行记录");
}
}
public static void main(String[] args) {
int batchSize = 200;// 批次数量
// 分批次处理
int batchCount = (500 + batchSize - 1)/batchSize;// 计算批次数量
for (int i = 0;i < batchCount; i++) {
int startIndex = i * batchSize;
int endIndex = Math.min((i + 1)*batchSize,500);
System.out.println("第"+i+"轮"+"开始:"+startIndex+"------结束:"+endIndex);
}
System.out.println("------>"+batchCount);
}
}

@ -1,9 +1,13 @@
package com.op.device.service.impl;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.List;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.op.common.core.utils.DateUtils;
import com.op.common.security.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.op.device.mapper.EquOperationMapper;
@ -42,6 +46,15 @@ public class EquOperationServiceImpl implements IEquOperationService {
@Override
@DS("#header.poolName")
public List<EquOperation> selectEquOperationList(EquOperation equOperation) {
// 创建时间列表不为空
if (equOperation.getCreateTimeArray() != null) {
// 设置创建日期开始和结束值
if (equOperation.getCreateTimeArray().size() == 2) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
equOperation.setCreateTimeStart(formatter.format(equOperation.getCreateTimeArray().get(0)));
equOperation.setCreateTimeEnd(formatter.format(equOperation.getCreateTimeArray().get(1)));
}
}
return equOperationMapper.selectEquOperationList(equOperation);
}
@ -67,6 +80,17 @@ public class EquOperationServiceImpl implements IEquOperationService {
@Override
@DS("#header.poolName")
public int updateEquOperation(EquOperation equOperation) {
// 实际运行时间(运行时间-故障时间)
double result = Double.parseDouble(equOperation.getOperationTime()) - Double.parseDouble(equOperation.getFaultTime());
equOperation.setActualOperationTime(String.valueOf(result));
// 故障率计算(故障时间/运行时间)
BigDecimal faultTimeBD = new BigDecimal(equOperation.getFaultTime());// 故障时间
BigDecimal operationTimeBD = new BigDecimal(equOperation.getOperationTime());// 运行时间
// 将处理好的故障率置入故障率
equOperation.setFailureRate(faultTimeBD.divide(operationTimeBD,2, RoundingMode.HALF_UP).toString()+"%");
equOperation.setUpdateBy(SecurityUtils.getUsername());
equOperation.setUpdateTime(DateUtils.getNowDate());
return equOperationMapper.updateEquOperation(equOperation);
}

@ -5,57 +5,89 @@
<mapper namespace="com.op.device.mapper.EquOperationMapper">
<resultMap type="EquOperation" id="EquOperationResult">
<result property="id" column="id" />
<result property="workshop" column="workshop" />
<result property="groupLine" column="group_Line" />
<result property="equipmentName" column="equipment_name" />
<result property="equipmentCode" column="equipment_code" />
<result property="faultTime" column="fault_time" />
<result property="actualOperationTime" column="actual_operation_time" />
<result property="operationTime" column="operation_time" />
<result property="failureRate" column="failure_rate" />
<result property="failureDescription" column="failure_description" />
<result property="reasonAnalyze" column="reason_analyze" />
<result property="handlingMethod" column="handling_method" />
<result property="repairPerson" column="repair_person" />
<result property="equStatusDes" column="equ_status_des" />
<result property="replaceSpare" column="replace_spare" />
<result property="factoryCode" column="factory_code" />
<result property="attr1" column="attr1" />
<result property="attr2" column="attr2" />
<result property="attr3" column="attr3" />
<result property="delFlag" column="del_flag" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="id" column="id"/>
<result property="workshop" column="workshop"/>
<result property="groupLine" column="group_line"/>
<result property="equipmentName" column="equipment_name"/>
<result property="equipmentCode" column="equipment_code"/>
<result property="faultTime" column="fault_time"/>
<result property="actualOperationTime" column="actual_operation_time"/>
<result property="operationTime" column="operation_time"/>
<result property="failureRate" column="failure_rate"/>
<result property="failureDescription" column="failure_description"/>
<result property="reasonAnalyze" column="reason_analyze"/>
<result property="handlingMethod" column="handling_method"/>
<result property="repairPerson" column="repair_person"/>
<result property="equStatusDes" column="equ_status_des"/>
<result property="replaceSpare" column="replace_spare"/>
<result property="factoryCode" column="factory_code"/>
<result property="attr1" column="attr1"/>
<result property="attr2" column="attr2"/>
<result property="attr3" column="attr3"/>
<result property="delFlag" column="del_flag"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
</resultMap>
<sql id="selectEquOperationVo">
select id, workshop, group_Line, equipment_name, equipment_code, fault_time, actual_operation_time, operation_time, failure_rate, failure_description, reason_analyze, handling_method, repair_person, equ_status_des, replace_spare, factory_code, attr1, attr2, attr3, del_flag, create_by, create_time, update_by, update_time from equ_operation
select id,
workshop,
group_line,
equipment_name,
equipment_code,
fault_time,
actual_operation_time,
operation_time,
failure_rate,
failure_description,
reason_analyze,
handling_method,
repair_person,
equ_status_des,
replace_spare,
factory_code,
attr1,
attr2,
attr3,
del_flag,
create_by,
create_time,
update_by,
update_time
from equ_operation
</sql>
<select id="selectEquOperationList" parameterType="EquOperation" resultMap="EquOperationResult">
<include refid="selectEquOperationVo"/>
<where>
<if test="workshop != null and workshop != ''"> and workshop = #{workshop}</if>
<if test="groupLine != null and groupLine != ''"> and group_Line = #{groupLine}</if>
<if test="equipmentName != null and equipmentName != ''"> and equipment_name like concat('%', #{equipmentName}, '%')</if>
<if test="equipmentCode != null and equipmentCode != ''"> and equipment_code = #{equipmentCode}</if>
<if test="faultTime != null and faultTime != ''"> and fault_time = #{faultTime}</if>
<if test="actualOperationTime != null and actualOperationTime != ''"> and actual_operation_time = #{actualOperationTime}</if>
<if test="operationTime != null and operationTime != ''"> and operation_time = #{operationTime}</if>
<if test="failureRate != null and failureRate != ''"> and failure_rate = #{failureRate}</if>
<if test="failureDescription != null and failureDescription != ''"> and failure_description = #{failureDescription}</if>
<if test="reasonAnalyze != null and reasonAnalyze != ''"> and reason_analyze = #{reasonAnalyze}</if>
<if test="handlingMethod != null and handlingMethod != ''"> and handling_method = #{handlingMethod}</if>
<if test="repairPerson != null and repairPerson != ''"> and repair_person = #{repairPerson}</if>
<if test="equStatusDes != null and equStatusDes != ''"> and equ_status_des = #{equStatusDes}</if>
<if test="replaceSpare != null and replaceSpare != ''"> and replace_spare = #{replaceSpare}</if>
<if test="factoryCode != null and factoryCode != ''"> and factory_code = #{factoryCode}</if>
<if test="attr1 != null and attr1 != ''"> and attr1 = #{attr1}</if>
<if test="attr2 != null and attr2 != ''"> and attr2 = #{attr2}</if>
<if test="attr3 != null and attr3 != ''"> and attr3 = #{attr3}</if>
<if test="workshop != null and workshop != ''">and workshop like concat('%', #{workshop}, '%')</if>
<if test="groupLine != null and groupLine != ''">and group_line like concat('%', #{groupLine}, '%')</if>
<if test="equipmentName != null and equipmentName != ''">and equipment_name like concat('%',
#{equipmentName}, '%')
</if>
<if test="equipmentCode != null and equipmentCode != ''">and equipment_code like concat('%', #{equipmentCode}, '%')</if>
<if test="faultTime != null and faultTime != ''">and fault_time = #{faultTime}</if>
<if test="actualOperationTime != null and actualOperationTime != ''">and actual_operation_time =
#{actualOperationTime}
</if>
<if test="operationTime != null and operationTime != ''">and operation_time = #{operationTime}</if>
<if test="failureRate != null and failureRate != ''">and failure_rate = #{failureRate}</if>
<if test="failureDescription != null and failureDescription != ''">and failure_description =
#{failureDescription}
</if>
<if test="reasonAnalyze != null and reasonAnalyze != ''">and reason_analyze = #{reasonAnalyze}</if>
<if test="handlingMethod != null and handlingMethod != ''">and handling_method = #{handlingMethod}</if>
<if test="repairPerson != null and repairPerson != ''">and repair_person concat('%', #{repairPerson}, '%')</if>
<if test="equStatusDes != null and equStatusDes != ''">and equ_status_des = #{equStatusDes}</if>
<if test="replaceSpare != null and replaceSpare != ''">and replace_spare = #{replaceSpare}</if>
<if test="factoryCode != null and factoryCode != ''">and factory_code = #{factoryCode}</if>
<if test="attr1 != null and attr1 != ''">and attr1 = #{attr1}</if>
<if test="attr2 != null and attr2 != ''">and attr2 = #{attr2}</if>
<if test="attr3 != null and attr3 != ''">and attr3 = #{attr3}</if>
<if test="createTimeStart != null "> and CONVERT(date,create_time) >= #{createTimeStart}</if>
<if test="createTimeEnd != null "> and #{createTimeEnd} >= CONVERT(date,create_time)</if>
</where>
</select>
@ -64,12 +96,35 @@
where id = #{id}
</select>
<select id="selectEquipmentOperationTime" resultType="java.lang.String">
select top 1 da.dict_value
from sys_dict_data da
where dict_type = 'device_operation_time'
order by dict_sort
</select>
<select id="selectEquipments" resultType="com.op.device.domain.EquOperation">
select be.equipment_code AS 'equipmentCode',be.equipment_name AS 'equipmentName',zx.equipment_name AS 'groupLine',be.workshop_name AS 'workshop'
from base_equipment be
left join equ_bind_auxiliary_equipment bae
on bae.auxiliary_equipment_code = be.equipment_code
left join base_equipment zx
on bae.equipment_code = zx.equipment_code
where be.del_flag = '0' and be.equipment_category = '0'
</select>
<select id="checkInsertOperation" resultType="java.lang.Integer">
select count(id)
from equ_operation
where CONVERT(date, create_time) = CONVERT(date, GETDATE())
</select>
<insert id="insertEquOperation" parameterType="EquOperation">
insert into equ_operation
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
<if test="workshop != null">workshop,</if>
<if test="groupLine != null">group_Line,</if>
<if test="groupLine != null">group_line,</if>
<if test="equipmentName != null">equipment_name,</if>
<if test="equipmentCode != null">equipment_code,</if>
<if test="faultTime != null">fault_time,</if>
@ -120,11 +175,24 @@
</trim>
</insert>
<insert id="insertEquOperationByBatch">
insert into equ_operation
(
id,workshop,group_line,equipment_name,equipment_code,actual_operation_time,operation_time,factory_code,create_by,create_time
)
values
<foreach collection="list" index="index" item="item" separator=",">
(
#{item.id},#{item.workshop},#{item.groupLine},#{item.equipmentName},#{item.equipmentCode},#{item.actualOperationTime},#{item.operationTime},#{item.factoryCode},#{item.createBy},#{item.createTime}
)
</foreach>
</insert>
<update id="updateEquOperation" parameterType="EquOperation">
update equ_operation
<trim prefix="SET" suffixOverrides=",">
<if test="workshop != null">workshop = #{workshop},</if>
<if test="groupLine != null">group_Line = #{groupLine},</if>
<if test="groupLine != null">group_line = #{groupLine},</if>
<if test="equipmentName != null">equipment_name = #{equipmentName},</if>
<if test="equipmentCode != null">equipment_code = #{equipmentCode},</if>
<if test="faultTime != null">fault_time = #{faultTime},</if>
@ -151,7 +219,9 @@
</update>
<delete id="deleteEquOperationById" parameterType="String">
delete from equ_operation where id = #{id}
delete
from equ_operation
where id = #{id}
</delete>
<delete id="deleteEquOperationByIds" parameterType="String">

@ -138,4 +138,10 @@ public class RyTask {
logger.info("++保养计划+开始++createMaintenancePlanTask+++++");
remoteDeviceService.createMaintenancePlanTask();
}
/** 设备运行记录生成 **/
public void createEquipmentOperationTask(){
logger.info("++设备运行记录生成任务开始++createEquipmentOperationTask+++++");
remoteDeviceService.createEquipmentOperationTask();
}
}

Loading…
Cancel
Save