Commit 8645ba16 authored by 李驰骋's avatar 李驰骋

设备看板测试数据添加

parent 61f71cf7
package com.ximai.mes.kanban.controller;
import com.ximai.common.core.domain.AjaxResult;
import com.ximai.mes.kanban.dto.abnormal.AbnormalMonthStatDto;
import com.ximai.mes.kanban.dto.equipment.EquipmentQuery;
import com.ximai.mes.kanban.dto.equipment.EquipmentStatDto;
import com.ximai.mes.kanban.service.KanbanAbnormalService;
import com.ximai.mes.kanban.service.KanbanEquipmentService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api("看板设备数据接口")
@RestController
@RequestMapping("/kanban/equipment")
public class KanbanEquipmentController {
@Autowired
KanbanEquipmentService kanbanEquipmentService;
@ApiOperation("当月设备分布数据")
@PostMapping("/currentMonthStat")
public AjaxResult<EquipmentStatDto> currentMonthStat(@RequestBody EquipmentQuery equipmentQuery) {
EquipmentStatDto rst = kanbanEquipmentService.currentMonthStat(equipmentQuery);
return AjaxResult.success(rst);
}
}
package com.ximai.mes.kanban.dto.equipment;
import lombok.Data;
@Data
public class EquipmentQuery {
String lineName;
}
package com.ximai.mes.kanban.dto.equipment;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
@Data
public class EquipmentStatDto {
@ApiModelProperty("利用率")
BigDecimal equipAvailability;
@ApiModelProperty("总产量")
BigDecimal totalOutput;
@ApiModelProperty("设备数")
Integer equipNum=0;
@ApiModelProperty("合格率")
BigDecimal qualifiedRatio;
@ApiModelProperty("异常数")
Integer abnormalNum=0;
@ApiModelProperty("待处理数")
Integer unProcessNum=0;
@ApiModelProperty("设备列表")
Map<String, List<EquipmentInfo>> equipMap;
@ApiModelProperty("异常信息列表")
List<AbnormalInfo> abnormalInfoList;
@Data
public static class EquipmentInfo{
@ApiModelProperty("产线名称")
String lineName;
@ApiModelProperty("设备名称")
String equipmentNo;
@ApiModelProperty("设备名称")
String equipmentName;
@ApiModelProperty("日产出")
BigDecimal output;
@ApiModelProperty("产出率")
BigDecimal outputRatio;
@ApiModelProperty("状态,0:加工中、1:未加工,2:停工")
int state;
}
@Data
public static class AbnormalInfo{
@ApiModelProperty("设备名称")
String equipmentNo;
@ApiModelProperty("设备名称")
String equipmentName;
@ApiModelProperty("原因")
String cause;
@ApiModelProperty("状态,NOT:待处理,SUBMIT:处理中")
String state;
}
}
package com.ximai.mes.kanban.service;
import cn.hutool.core.map.MapUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ximai.common.utils.data.StringUtils;
import com.ximai.mes.constant.QcAbnormalTypeEnum;
import com.ximai.mes.constant.TaskWorkunitStatusEnum;
import com.ximai.mes.kanban.dto.abnormal.AbnormalMonthStatDto;
import com.ximai.mes.kanban.dto.equipment.EquipmentQuery;
import com.ximai.mes.kanban.dto.equipment.EquipmentStatDto;
import com.ximai.mes.kanban.dto.task.TaskStatDto;
import com.ximai.mes.md.domain.MdWorkunit;
import com.ximai.mes.md.service.IMdWorkunitService;
import com.ximai.mes.md.vo.MdWorkunitVo;
import com.ximai.mes.pro.domain.ProFeedback;
import com.ximai.mes.pro.domain.task.ProTaskWorkunit;
import com.ximai.mes.pro.dto.ProFeedbackDto;
import com.ximai.mes.pro.dto.task.ProTaskWorkunitDto;
import com.ximai.mes.pro.mapper.task.ProTaskWorkunitMapper;
import com.ximai.mes.pro.service.IProFeedbackService;
import com.ximai.mes.pro.service.task.IProTaskWorkunitService;
import com.ximai.mes.qc.domain.QcAbnormalReport;
import com.ximai.mes.qc.dto.QcAbnormalReportDto;
import com.ximai.mes.qc.dto.QcAbnormalReportStatusEnum;
import com.ximai.mes.qc.service.IQcAbnormalReportService;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
@Service
public class KanbanEquipmentService {
@Autowired
private IProTaskWorkunitService taskWorkunitService;
@Autowired
private IProFeedbackService feedbackService;
@Autowired
private ProTaskWorkunitMapper taskWorkunitMapper;
@Autowired
private IMdWorkunitService workunitService;
@Autowired
IQcAbnormalReportService abnormalReportService;
@ApiOperation("设备统计")
@PostMapping("/currentMonthStat")
public EquipmentStatDto currentMonthStat(EquipmentQuery equipmentQuery) {
EquipmentStatDto rst = new EquipmentStatDto();
//查询所有设备
List<MdWorkunit> list = workunitService.selectListByQw(new QueryWrapper<MdWorkunit>().eq("t1.enable_flag","Y")
.orderByAsc("t1.serial","t1.create_time"));
Map<String, List<MdWorkunit>> equipMap = list.stream().map(s->{
s.setLineName(org.apache.commons.lang.StringUtils.defaultString(s.getLineName(),"未指定"));
return s;
}).collect(Collectors.groupingBy(s->s.getLineName()));
List<MdWorkunit> tempList = null;
if(StringUtils.isNotEmpty(equipmentQuery.getLineName())){
tempList = equipMap.get(equipmentQuery.getLineName());
}else{
tempList = list;
}
Map<String,List<EquipmentStatDto.EquipmentInfo>> equipInfoMap = this.getEquipmentInfo(tempList);
rst.setEquipMap(MapUtil.sort(equipInfoMap));
//查询当日设备报异常
LocalDateTime currDate = LocalDateTime.now().with(LocalTime.MIN);
QueryWrapper<QcAbnormalReport> query = new QueryWrapper<>();
query.ge("t1.create_time", currDate);
query.eq("t1.abnormal_type", QcAbnormalTypeEnum.DEVI.getType());
List<QcAbnormalReportDto> abnormalList = abnormalReportService.selectQcAbnormalReportJoinTaskWorkunitDtoList(query);
List<EquipmentStatDto.AbnormalInfo> abnormalInfoList = this.getAbnormalInfo(tempList, abnormalList);
rst.setAbnormalInfoList(abnormalInfoList);
rst.setEquipNum(tempList.size());//总设备
rst.setQualifiedRatio(new BigDecimal("55"));
rst.setEquipAvailability(new BigDecimal("65"));//利用率
rst.setTotalOutput(new BigDecimal("2000"));//总产量
rst.setAbnormalNum(abnormalList.size());//异常数
rst.setUnProcessNum(5);//历史待处理数
return rst;
}
private Map<String,List<EquipmentStatDto.EquipmentInfo>> getEquipmentInfo(List<MdWorkunit> list){
List<EquipmentStatDto.EquipmentInfo> rst = new ArrayList<>();
list.forEach(s->{
EquipmentStatDto.EquipmentInfo info = new EquipmentStatDto.EquipmentInfo();
info.setEquipmentNo(s.getWorkunitCode());
info.setEquipmentName(s.getWorkunitName());
info.setOutputRatio(new BigDecimal("15"));
info.setOutput(new BigDecimal(new Random().nextInt(100)));
info.setState(new Random().nextInt(3));
info.setLineName(s.getLineName());
rst.add(info);
});
return rst.stream().collect(Collectors.groupingBy(s->s.getLineName()));
}
private List<EquipmentStatDto.AbnormalInfo> getAbnormalInfo(List<MdWorkunit> list, List<QcAbnormalReportDto> abnormalList){
List<EquipmentStatDto.AbnormalInfo> rst = new ArrayList<>();
abnormalList.forEach(s->{
//未关闭
if(QcAbnormalReportStatusEnum.NOT.getStatus().equals( s.getAbnormalStatus())||
QcAbnormalReportStatusEnum.SUBMIT.getStatus().equals( s.getAbnormalStatus())){
//在查询设备范围内
list.stream().filter(e->e.getWorkunitId().equals(s.getWorkunitId())).findFirst().ifPresent(e->{
EquipmentStatDto.AbnormalInfo temp = new EquipmentStatDto.AbnormalInfo();
temp.setEquipmentNo(e.getWorkunitCode());
temp.setEquipmentName(e.getWorkunitName());
temp.setState(s.getAbnormalStatus());
temp.setCause(s.getAbnormalReason());
rst.add(temp);
});
}
});
return rst;
}
}
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ximai.common.annotation.Excel;
import com.ximai.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
......@@ -118,4 +119,7 @@ public class QcAbnormalReportDto extends BaseEntity
private Long timeConsuming;
private String remarks;
@ApiModelProperty("设备ID")
private Long workunitId;
}
......@@ -44,6 +44,17 @@ public interface QcAbnormalReportMapper extends BaseMapper<QcAbnormalReport>
"${ew.customSqlSegment}")
public List<QcAbnormalReportDto> selectQcAbnormalReportDtoList(@Param("ew") QueryWrapper<QcAbnormalReport> query);
/**
* 查询车间异常单列表
*
* @param query 车间异常单
* @return 车间异常单集合
*/
@Select(value = "select t1.*,t2.workunit_id from qc_abnormal_report t1 left join pro_task_workunit t2 on t1.task_workunit_id = t2.task_workunit_id\n" +
"${ew.customSqlSegment}")
public List<QcAbnormalReportDto> selectQcAbnormalReportJoinTaskWorkunitDtoList(@Param("ew") QueryWrapper<QcAbnormalReport> query);
/**
* 新增车间异常单
*
......
......@@ -38,6 +38,14 @@ public interface IQcAbnormalReportService {
*/
public List<QcAbnormalReportDto> selectQcAbnormalReportDtoList(QueryWrapper<QcAbnormalReport> query);
/**
* 查询车间异常单列表
*
* @param query 车间异常单
* @return 车间异常单集合
*/
public List<QcAbnormalReportDto> selectQcAbnormalReportJoinTaskWorkunitDtoList(QueryWrapper<QcAbnormalReport> query);
/**
* 新增车间异常单
*
......
......@@ -92,6 +92,11 @@ public class QcAbnormalReportServiceImpl implements IQcAbnormalReportService {
return qcAbnormalReportMapper.selectQcAbnormalReportDtoList(query);
}
@Override
public List<QcAbnormalReportDto> selectQcAbnormalReportJoinTaskWorkunitDtoList(QueryWrapper<QcAbnormalReport> query) {
return qcAbnormalReportMapper.selectQcAbnormalReportJoinTaskWorkunitDtoList(query);
}
/**
* 新增车间异常单
*
......
......@@ -21,23 +21,6 @@
<result property="workstationCode" column="workstation_code"/>
<result property="workstationName" column="workstation_name"/>
<result property="solidifyTime" column="solidify_time"/>
<result property="treatingThicknessMin" column="treating_thickness_min"/>
<result property="treatingThicknessMax" column="treating_thickness_max"/>
<result property="treatingWidthMin" column="treating_width_min"/>
<result property="treatingWidthMax" column="treating_width_max"/>
<result property="dieSunkOffsetOilTankNum" column="die_sunk_offset_oil_tank_num"/>
<result property="printingMethod" column="printing_method"/>
<result property="sacmForEdgeOpening" column="sacm_for_edge_opening" />
<result property="sacmForPasteComposite" column="sacm_for_paste_composite" />
<result property="sacmForThermalComposite" column="sacm_for_thermal_composite" />
<result property="sacmForLabeling" column="sacm_for_labeling" />
<result property="sacmForBuckleUp" column="sacm_for_buckle_up" />
<result property="sacmForCreasing" column="sacm_for_creasing" />
<result property="sacmForOrgan" column="sacm_for_organ" />
<result property="sacmForThermalCutting" column="sacm_for_thermal_cutting" />
<result property="sacmForThermalSelfFusion" column="sacm_for_thermal_self_fusion" />
<result property="sacmForMolarTooth" column="sacm_for_molar_tooth" />
<result property="sacmForSlitting" column="sacm_for_slitting" />
</resultMap>
<resultMap type="com.ximai.mes.md.vo.MdWorkunitVo" id="MdWorkunitVoResult">
<result property="workunitId" column="workunit_id"/>
......@@ -55,23 +38,6 @@
<result property="workstationCode" column="workstation_code"/>
<result property="faultFlag" column="fault_flag"/>
<result property="solidifyTime" column="solidify_time"/>
<result property="treatingThicknessMin" column="treating_thickness_min"/>
<result property="treatingThicknessMax" column="treating_thickness_max"/>
<result property="treatingWidthMin" column="treating_width_min"/>
<result property="treatingWidthMax" column="treating_width_max"/>
<result property="dieSunkOffsetOilTankNum" column="die_sunk_offset_oil_tank_num"/>
<result property="printingMethod" column="printing_method"/>
<result property="sacmForEdgeOpening" column="sacm_for_edge_opening" />
<result property="sacmForPasteComposite" column="sacm_for_paste_composite" />
<result property="sacmForThermalComposite" column="sacm_for_thermal_composite" />
<result property="sacmForLabeling" column="sacm_for_labeling" />
<result property="sacmForBuckleUp" column="sacm_for_buckle_up" />
<result property="sacmForCreasing" column="sacm_for_creasing" />
<result property="sacmForOrgan" column="sacm_for_organ" />
<result property="sacmForThermalCutting" column="sacm_for_thermal_cutting" />
<result property="sacmForThermalSelfFusion" column="sacm_for_thermal_self_fusion" />
<result property="sacmForMolarTooth" column="sacm_for_molar_tooth" />
<result property="sacmForSlitting" column="sacm_for_slitting" />
</resultMap>
<resultMap type="com.ximai.mes.md.vo.MdItemVo" id="MdItemVoResult">
......@@ -97,24 +63,7 @@
create_time,
update_by,
update_time,
solidify_time,
treating_thickness_min,
treating_thickness_max,
treating_width_min,
treating_width_max,
die_sunk_offset_oil_tank_num,
printing_method,
sacm_for_edge_opening,
sacm_for_paste_composite,
sacm_for_thermal_composite,
sacm_for_labeling,
sacm_for_buckle_up,
sacm_for_creasing,
sacm_for_organ,
sacm_for_thermal_cutting,
sacm_for_thermal_self_fusion,
sacm_for_molar_tooth,
sacm_for_slitting
solidify_time
from md_workunit
</sql>
......@@ -172,12 +121,6 @@
w.serial,
w.enable_flag,
w.solidify_time,
w.treating_thickness_min,
w.treating_thickness_max,
w.treating_width_min,
w.treating_width_max,
w.die_sunk_offset_oil_tank_num,
w.printing_method,
w.remark,
w.workstation_code,
w.create_by,
......@@ -222,13 +165,7 @@
w.create_time,
w.update_by,
w.update_time,
w.solidify_time,
w.treating_thickness_min,
w.treating_thickness_max,
w.treating_width_min,
w.treating_width_max,
w.die_sunk_offset_oil_tank_num,
w.printing_method
w.solidify_time
from md_workunit w
left join md_workstation ws on w.workstation_id = ws.workstation_id
where w.workunit_id = #{workunitId}
......@@ -252,12 +189,6 @@
<if test="updateTime != null">update_time,</if>
<if test="createTime != null">create_time,</if>
<if test="solidifyTime != null">solidify_time,</if>
<if test="treatingThicknessMin != null">treating_thickness_min,</if>
<if test="treatingThicknessMax != null">treating_thickness_max,</if>
<if test="treatingWidthMin != null">treating_width_min,</if>
<if test="treatingWidthMax != null">treating_width_max,</if>
<if test="dieSunkOffsetOilTankNum != null">die_sunk_offset_oil_tank_num,</if>
<if test="printingMethod != null">printing_method,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="workunitCode != null">#{workunitCode},</if>
......@@ -274,12 +205,6 @@
<if test="updateTime != null">#{updateTime},</if>
<if test="createTime != null">#{createTime},</if>
<if test="solidifyTime != null">#{solidifyTime},</if>
<if test="treatingThicknessMin != null">#{treatingThicknessMin},</if>
<if test="treatingThicknessMax != null">#{treatingThicknessMax},</if>
<if test="treatingWidthMin != null">#{treatingWidthMin},</if>
<if test="treatingWidthMax != null">#{treatingWidthMax},</if>
<if test="dieSunkOffsetOilTankNum != null">#{dieSunkOffsetOilTankNum},</if>
<if test="printingMethod != null">#{printingMethod},</if>
</trim>
</insert>
......@@ -298,12 +223,6 @@
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="solidifyTime != null">solidify_time = #{solidifyTime},</if>
<if test="treatingThicknessMin != null">treating_thickness_min = #{treatingThicknessMin},</if>
<if test="treatingThicknessMax != null">treating_thickness_max = #{treatingThicknessMax},</if>
<if test="treatingWidthMin != null">treating_width_min = #{treatingWidthMin},</if>
<if test="treatingWidthMax != null">treating_width_max = #{treatingWidthMax},</if>
<if test="dieSunkOffsetOilTankNum != null">die_sunk_offset_oil_tank_num = #{dieSunkOffsetOilTankNum},</if>
<if test="printingMethod != null">printing_method = #{printingMethod},</if>
</trim>
where workunit_id = #{workunitId}
</update>
......@@ -321,5 +240,4 @@
</foreach>
</delete>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment