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

tags/yfai-mes-ext-v1.0
jun 11 months ago
commit d84a7a61e5

@ -43,6 +43,9 @@ public interface IBaseMesService<T extends BaseBean> {
@ApiOperation(value = "校验导入数据", notes = "校验导入数据")
void validateImport(List<T> bean);
@ApiOperation(value = "校验并返回导入数据", notes = "校验并返回导入数据")
List<T> validateReturnImport(List<T> bean);
@ApiOperation(value = "修改信息", notes = "修改信息")
T update(T bean);

@ -459,6 +459,33 @@ public abstract class BaseMesController<T extends BaseBean> extends BaseControll
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@PostMapping(value = "/import-ext")
@ApiOperation(value = "导入数据校验返回")
public ResultBean importExtExcel(@RequestParam("file") MultipartFile file) {
try {
MesExcelTool excelTool = new MesExcelTool(entityManager, RedisCacheTool.getImppRedis());
List<T> beanList = excelTool.importData(file.getOriginalFilename(), file.getInputStream(), mesClass);
// 校验导入数据
List<T> returnImport = baseService.validateReturnImport(beanList);
String userName = AuthUtil.getSessionUser().getUserName();
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
// 导入数据初始化
for (T bean : returnImport) {
ConvertBean.serviceModelInitialize(bean, userName);
bean.setOrganizeCode(organizeCode);
}
baseService.insertBatch(returnImport);
// 导入后
afterImport(returnImport);
return ResultBean.success("导入成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@GetMapping(value = "/down-template")
@ApiOperation(value = "下载导入模板")

@ -13,6 +13,7 @@ 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;
@ -33,7 +34,7 @@ public class MesWorkCenterBoardController {
@ApiOperation(value = "查询产线状态", notes = "查询产线状态")
@PostMapping("/query-work-center-status")
public ResultBean queryWorkCenterStatus(MesWorkCenterBoardConditionModel conditionModel){
public ResultBean queryWorkCenterStatus(@RequestBody MesWorkCenterBoardConditionModel conditionModel){
try {
ValidatorBean.beginValid(conditionModel)
.notNull("workCenterCodeList", conditionModel.getWorkCenterCodeList())
@ -51,7 +52,7 @@ public class MesWorkCenterBoardController {
@ApiOperation(value = "查询产线生产完成率", notes = "查询产线生产完成率")
@PostMapping("/query-work-center-production-completion-rate")
public ResultBean queryWorkCenterProductionCompletionRate(MesWorkCenterBoardConditionModel conditionModel){
public ResultBean queryWorkCenterProductionCompletionRate(@RequestBody MesWorkCenterBoardConditionModel conditionModel){
try {
ValidatorBean.beginValid(conditionModel)
.notNull("workCenterCodeList", conditionModel.getWorkCenterCodeList())
@ -69,7 +70,7 @@ public class MesWorkCenterBoardController {
@ApiOperation(value = "查询产线工单完成情况", notes = "查询产线工单完成情况")
@PostMapping("/query-work-center-work-order-completion-status")
public ResultBean queryWorkCenterWorkOrderCompletionStatus(MesWorkCenterBoardConditionModel conditionModel){
public ResultBean queryWorkCenterWorkOrderCompletionStatus(@RequestBody MesWorkCenterBoardConditionModel conditionModel){
try {
ValidatorBean.beginValid(conditionModel)
.notNull("workCenterCodeList", conditionModel.getWorkCenterCodeList())
@ -87,7 +88,7 @@ public class MesWorkCenterBoardController {
@ApiOperation(value = "查询单位小时完工数", notes = "查询单位小时完工数")
@PostMapping("/query-unit-hour-completion-rate")
public ResultBean queryUnitHourCompletionRate(MesWorkCenterBoardConditionModel conditionModel){
public ResultBean queryUnitHourCompletionRate(@RequestBody MesWorkCenterBoardConditionModel conditionModel){
try {
ValidatorBean.beginValid(conditionModel)
.notNull("workCenterCodeList", conditionModel.getWorkCenterCodeList())
@ -105,7 +106,7 @@ public class MesWorkCenterBoardController {
@ApiOperation(value = "查询产线一次下线合格率", notes = "查询产线一次下线合格率")
@PostMapping("/query-work-center-first-time-offline-qualification-rate")
public ResultBean queryWorkCenterFirstTimeOfflineQualificationRate(MesWorkCenterBoardConditionModel conditionModel){
public ResultBean queryWorkCenterFirstTimeOfflineQualificationRate(@RequestBody MesWorkCenterBoardConditionModel conditionModel){
try {
ValidatorBean.beginValid(conditionModel)
.notNull("workCenterCodeList", conditionModel.getWorkCenterCodeList())
@ -123,7 +124,7 @@ public class MesWorkCenterBoardController {
@ApiOperation(value = "查询点检结果", notes = "查询点检结果")
@PostMapping("/query-inspection-results")
public ResultBean queryInspectionResults(MesWorkCenterBoardConditionModel conditionModel){
public ResultBean queryInspectionResults(@RequestBody MesWorkCenterBoardConditionModel conditionModel){
try {
ValidatorBean.beginValid(conditionModel)
.notNull("workCenterCodeList", conditionModel.getWorkCenterCodeList())
@ -141,7 +142,7 @@ public class MesWorkCenterBoardController {
@ApiOperation(value = "查询异常停线时间", notes = "查询异常停线时间")
@PostMapping("/query-abnormal-downtime")
public ResultBean queryAbnormalDowntime(MesWorkCenterBoardConditionModel conditionModel){
public ResultBean queryAbnormalDowntime(@RequestBody MesWorkCenterBoardConditionModel conditionModel){
try {
ValidatorBean.beginValid(conditionModel)
.notNull("workCenterCodeList", conditionModel.getWorkCenterCodeList())

@ -0,0 +1,46 @@
package cn.estsh.i3plus.ext.mes.apiservice.dao.board;
import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkCenterBoardResultModel;
import cn.estsh.i3plus.pojo.mes.bean.MesShift;
import java.util.List;
/**
* @Description : -
* @Reference :
* @Author : logic
* @CreateDate : 2024/6/24 18:22
* @Modify:
**/
public interface IMesYfBoardDao {
/**
* 线
* @param workCenterCodeList 线
* @param organizeCode
* @param nowDateTime
* @return 线
*/
List<MesShift> queryMesShift(List<String> workCenterCodeList, String organizeCode, String nowDateTime);
/**
* 线
* @param workCenterCode 线
* @param organizeCode
* @param startTime
* @param endTime
* @return
*/
List<MesWorkCenterBoardResultModel> queryMesProductOffLineModel(String workCenterCode, String organizeCode, String startTime, String endTime);
/**
* 线
* @param workCenterCode 线
* @param organizeCode
* @param startTime
* @param endTime
* @return
*/
List<MesWorkCenterBoardResultModel> queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime);
}

@ -0,0 +1,127 @@
package cn.estsh.i3plus.ext.mes.apiservice.daoimpl.board;
import cn.estsh.i3plus.ext.mes.apiservice.dao.board.IMesYfBoardDao;
import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkCenterBoardResultModel;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesShift;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description : -
* @Reference :
* @Author : logic
* @CreateDate : 2024/6/24 18:22
* @Modify:
**/
@Service
public class MesYfBoardDaoImpl implements IMesYfBoardDao {
@Autowired
private EntityManager entityManager;
@Override
public List<MesShift> queryMesShift(List<String> workCenterCodeList, String organizeCode, String nowDateTime) {
StringBuffer queryShiftSql = new StringBuffer();
queryShiftSql.append("from MesShift " +
"where isValid = :isValid " +
"and isDeleted = :isDeleted " +
"and organizeCode = :organizeCode " +
"and workCenterCode in (:workCenterCodeList) " +
"and beginDate <= :nowDateTime " +
"and endDate >= :nowDateTime ");
Query shiftQuery = entityManager.createQuery(queryShiftSql.toString(), MesShift.class);
shiftQuery.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
shiftQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
shiftQuery.setParameter("organizeCode", organizeCode);
shiftQuery.setParameter("workCenterCodeList", workCenterCodeList);
shiftQuery.setParameter("nowDateTime", nowDateTime);
return shiftQuery.getResultList();
}
@Override
public List<MesWorkCenterBoardResultModel> queryMesProductOffLineModel(String workCenterCode, String organizeCode,
String startTime, String endTime) {
StringBuffer queryMesProductOffLineSql = new StringBuffer();
queryMesProductOffLineSql.append("select distinct new " + MesWorkCenterBoardResultModel.class.getName() +
"(serialNumber, " +
"createDatetime) " +
"from MesProductOffLine " +
"where isValid = :isValid " +
"and isDeleted = :isDeleted " +
"and organizeCode = :organizeCode " +
"and workCenterCode = :workCenterCode " +
"and createDatetime >= :startTime " +
"and createDatetime <= :endTime ");
Query shiftQuery = entityManager.createQuery(queryMesProductOffLineSql.toString(), MesWorkCenterBoardResultModel.class);
shiftQuery.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
shiftQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
shiftQuery.setParameter("organizeCode", organizeCode);
shiftQuery.setParameter("workCenterCode", workCenterCode);
shiftQuery.setParameter("startTime", startTime);
shiftQuery.setParameter("endTime", endTime);
return shiftQuery.getResultList();
}
@Override
public List<MesWorkCenterBoardResultModel> queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime) {
//先查询生产加工表中指定时间区间、指定产线已加工完成的数据
StringBuffer queryMesProductionRecordSql = new StringBuffer();
queryMesProductionRecordSql.append("select distinct new " + MesWorkCenterBoardResultModel.class.getName() +
"(serialNumber, " +
"createDatetime) " +
"from MesProductionRecord " +
"where isValid = :isValid " +
"and isDeleted = :isDeleted " +
"and organizeCode = :organizeCode " +
"and workCenterCode = :workCenterCode " +
"and isComplete = :isComplete " +
"and createDatetime >= :startTime " +
"and createDatetime <= :endTime ");
Query mesProductionRecordQuery = entityManager.createQuery(queryMesProductionRecordSql.toString(), MesWorkCenterBoardResultModel.class);
mesProductionRecordQuery.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
mesProductionRecordQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
mesProductionRecordQuery.setParameter("organizeCode", organizeCode);
mesProductionRecordQuery.setParameter("workCenterCode", workCenterCode);
mesProductionRecordQuery.setParameter("isComplete", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
mesProductionRecordQuery.setParameter("startTime", startTime);
mesProductionRecordQuery.setParameter("endTime", endTime);
List<MesWorkCenterBoardResultModel> productionRecordQueryResultList = mesProductionRecordQuery.getResultList();
if (!CollectionUtils.isEmpty(productionRecordQueryResultList)) {
//取出所有过程条码
List<String> serialNumberList = productionRecordQueryResultList.
stream().map(MesWorkCenterBoardResultModel::getSerialNumber).collect(Collectors.toList());
StringBuffer queryMesProduceSnSql = new StringBuffer();
queryMesProduceSnSql.append("select distinct serialNumber " +
"from MesProduceSn " +
"where isValid = :isValid " +
"and isDeleted = :isDeleted " +
"and organizeCode = :organizeCode " +
"and qcStatus = :qcStatus " +
"and serialNumber in ( :serialNumberList )");
Query mesProduceSnQuery = entityManager.createQuery(queryMesProduceSnSql.toString());
mesProduceSnQuery.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
mesProduceSnQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
mesProduceSnQuery.setParameter("organizeCode", organizeCode);
mesProduceSnQuery.setParameter("qcStatus", MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
mesProduceSnQuery.setParameter("serialNumberList", serialNumberList);
List<String> resultList = mesProduceSnQuery.getResultList();
for (MesWorkCenterBoardResultModel resultModel : productionRecordQueryResultList) {
if (resultList.contains(resultModel.getSerialNumber())) {
resultModel.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
}else {
resultModel.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue());
}
}
}
return productionRecordQueryResultList;
}
}

@ -163,7 +163,12 @@ public abstract class BaseMesService<T extends BaseBean> implements IBaseMesServ
/* 新增数据校验 */
ValidatorBean.beginValid(beanList);
}
@Override
public List<T> validateReturnImport(List<T> beanList) {
/* 新增数据校验 */
ValidatorBean.beginValid(beanList);
return beanList;
}
protected void onInsertBean(T item) {
}

@ -5,10 +5,15 @@ import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentSpotCheck;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentSpotCheckDetail;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentSpotCheckPart;
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentSpotCheckRepository;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@ -17,6 +22,8 @@ import java.util.List;
@Slf4j
public class MesEquipmentSpotCheckDetailService extends BaseMesService<MesEquipmentSpotCheckDetail> implements IMesEquipmentSpotCheckDetailService {
@Autowired
private MesEquipmentSpotCheckRepository equipmentSpotCheckRepository;
protected void setPackQueryBean(MesEquipmentSpotCheckDetail bean, DdlPackBean packBean) {
DdlPreparedPack.getNumEqualPack(bean.getPid(), "pid", packBean);
DdlPreparedPack.getStringLikerPack(bean.getSpotCheckItemCode(), "spotCheckItemCode", packBean);
@ -82,5 +89,41 @@ public class MesEquipmentSpotCheckDetailService extends BaseMesService<MesEquipm
}
}
}
@Override
public List<MesEquipmentSpotCheckDetail> validateReturnImport(List<MesEquipmentSpotCheckDetail> beanList) {
for (MesEquipmentSpotCheckDetail item : beanList) {
// 数据校验
if(StringUtil.isEmpty(item.getPid())){
ValidatorBean.checkNotNull(item.getSpotCheckCode(), "点检项目代码不能为空");
ValidatorBean.checkNotNull(item.getSpotCheckItemCode(), "点检内容代码不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getSpotCheckCode(), "spotCheckCode", seriesPackBean);
MesEquipmentSpotCheck itemFlg = equipmentSpotCheckRepository.getByProperty(seriesPackBean);
if (StringUtil.isEmpty(itemFlg)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("【%s】点检项目代码不存在请检查数据", item.getSpotCheckCode())
.build();
}
item.setPid(itemFlg.getId());
}else {
ValidatorBean.checkNotNull(item.getId(), "点检项目id不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", seriesPackBean);
if (!baseRDao.isExitByHql(seriesPackBean)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("【%s】点检项目id不存在请检查数据", item.getPid())
.build();
}
}
}
return beanList;
}
}

@ -6,10 +6,13 @@ import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentSpotCheck;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentSpotCheckPart;
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentSpotCheckRepository;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@ -19,6 +22,8 @@ import java.util.List;
public class MesEquipmentSpotCheckPartService extends BaseMesService<MesEquipmentSpotCheckPart> implements IMesEquipmentSpotCheckPartService {
@Autowired
private MesEquipmentSpotCheckRepository equipmentSpotCheckRepository;
protected void setPackQueryBean(MesEquipmentSpotCheckPart bean, DdlPackBean packBean) {
DdlPreparedPack.getNumEqualPack(bean.getPid(), "pid", packBean);
DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean);
@ -58,4 +63,40 @@ public class MesEquipmentSpotCheckPartService extends BaseMesService<MesEquipmen
}
}
}
@Override
public List<MesEquipmentSpotCheckPart> validateReturnImport(List<MesEquipmentSpotCheckPart> beanList) {
for (MesEquipmentSpotCheckPart item : beanList) {
// 数据校验
if(StringUtil.isEmpty(item.getPid())){
ValidatorBean.checkNotNull(item.getSpotCheckCode(), "点检项目代码不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getSpotCheckCode(), "spotCheckCode", seriesPackBean);
MesEquipmentSpotCheck itemFlg = equipmentSpotCheckRepository.getByProperty(seriesPackBean);
if (StringUtil.isEmpty(itemFlg)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("【%s】点检项目代码不存在请检查数据", item.getSpotCheckCode())
.build();
}
item.setPid(itemFlg.getId());
}else {
ValidatorBean.checkNotNull(item.getId(), "点检项目id不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", seriesPackBean);
if (!baseRDao.isExitByHql(seriesPackBean)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("【%s】点检项目id不存在请检查数据", item.getPid())
.build();
}
}
}
return beanList;
}
}

@ -76,4 +76,30 @@ public class MesProdRuleNosortCfgService extends BaseMesService<MesProdRuleNosor
}
return prodRuleNosortCfgList.iterator().next();
}
@Override
public void validateImport(List<MesProdRuleNosortCfg> beanList) {
for (MesProdRuleNosortCfg item : beanList) {
// 数据校验
ValidatorBean.checkNotNull(item.getOutPartNo(), "产成零件号不能为空");
ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
if (StringUtils.isEmpty(item.getInPartNo())) {
DdlPreparedPack.getStringEqualPack(item.getInPartNo(), "inPartNo", seriesPackBean);
}
DdlPreparedPack.getStringEqualPack(item.getOutPartNo(), "outPartNo", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(), "equipmentCode", seriesPackBean);
boolean flg = baseRDao.isExitByHql(seriesPackBean);
if (flg) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("该非排序加工规则已存在,请检查数据")
.build();
}
}
}
}

@ -62,8 +62,8 @@ public class MesWorkCellExtendCfgService extends BaseMesService<MesWorkCellExten
}
//3.子工位 是 30 工位 在 父子里面 都全局唯一
DdlPackBean wcPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getWorkCenterCodeBak(), "workCenterCodeBak", wcPackBean);
DdlPreparedPack.getStringEqualPack(item.getWorkCellCodeBak(), "workCellCodeBak", wcPackBean);
DdlPreparedPack.getStringEqualPack(item.getWorkCenterCodeBak(), "workCenterCode", wcPackBean);
DdlPreparedPack.getStringEqualPack(item.getWorkCellCodeBak(), "workCellCode", wcPackBean);
MesWorkCell mesWorkCell = workCellRepository.getByProperty(wcPackBean);
if(!StringUtil.isEmpty(mesWorkCell)&&mesWorkCell.getGrade()==30){
DdlPackBean cellBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());

@ -1238,6 +1238,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
MesWorkOrder item=new MesWorkOrder();
item.setOrganizeCode(organizeCode);
item.setWorkCenterCode(workCenterCode);
item.setErpWorkCenter(mesWorkCenter.getErpWorkCenter());
item.setPartNo(partNo);
item.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue());
item.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue());

@ -1,11 +1,26 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.board;
import cn.estsh.i3plus.ext.mes.api.busi.board.IMesYfBoardService;
import cn.estsh.i3plus.ext.mes.apiservice.dao.board.IMesYfBoardDao;
import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkCenterBoardConditionModel;
import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkCenterBoardResultModel;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Description : -
@ -17,42 +32,425 @@ import java.util.List;
@Service
public class IMesYfBoardServiceImpl implements IMesYfBoardService {
@Autowired
private IMesYfBoardDao mesYfBoardDao;
@Autowired
private MesDowntimeRecordRepository mesDowntimeRecordRepository;
@Autowired
private MesWorkOrderRepository mesWorkOrderRepository;
@Autowired
private MesWorkCenterRepository mesWorkCenterRepository;
@Autowired
private MesEquipmentSpotCheckRepository mesEquipmentSpotCheckRepository;
@Autowired
private MesSpotCheckOrderRepository mesSpotCheckOrderRepository;
private static final String START_TIME = "START_TIME";
private static final String END_TIME = "END_TIME";
private static final Integer NUM = 12;
/**
* 线
*/
@Override
public List<MesWorkCenterBoardResultModel> queryWorkCenterStatus(MesWorkCenterBoardConditionModel conditionModel) {
return null;
List<MesWorkCenterBoardResultModel> resultModelList = new ArrayList<>();
List<String> workCenterCodeList = conditionModel.getWorkCenterCodeList();
//获取查询时间区间
Map<String, Map<String, String>> timeZoneMap = getTimeZoneMap(workCenterCodeList,
conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode());
//查询当前时间区间内中的选中产线最新的的开停机记录
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(conditionModel.getOrganizeCode());
for (String workCenterCode : timeZoneMap.keySet()) {
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean);
DdlPreparedPack.timeBuilder(timeZoneMap.get(workCenterCode).get(START_TIME),
timeZoneMap.get(workCenterCode).get(END_TIME), "createDatetime", ddlPackBean, true);
DdlPreparedPack.getOrderByPack(
new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, ddlPackBean);
int queryCount = mesDowntimeRecordRepository.findByHqlWhereCount(ddlPackBean);
//封装页面展示数据
MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel();
resultModel.setWorkCenterCode(workCenterCode);
if (queryCount == 0) {
resultModel.setWorkCenterCodeStatus(MesExtEnumUtil.BOARD_WORK_CENTER_STATUS.NORMAL.getValue());
}else {
resultModel.setWorkCenterCodeStatus(MesExtEnumUtil.BOARD_WORK_CENTER_STATUS.ABNORMAL.getValue());
}
resultModelList.add(resultModel);
}
return resultModelList;
}
@Override
public MesWorkCenterBoardResultModel queryWorkCenterProductionCompletionRate(MesWorkCenterBoardConditionModel conditionModel) {
return null;
Double workCenterCompletedQuantity = 0D;
Double workCenterPlannedQuantity = 0D;
//获取查询时间区间
Map<String, Map<String, String>> timeZoneMap = getTimeZoneMap(conditionModel.getWorkCenterCodeList(),
conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode());
//查询工单
List<MesWorkOrder> mesWorkOrderList = queryMesWorkOrder(timeZoneMap, conditionModel);
//封装汇总数据
MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel();
for (MesWorkOrder mesWorkOrder : mesWorkOrderList) {
workCenterCompletedQuantity = workCenterCompletedQuantity + mesWorkOrder.getCompleteQty();
workCenterPlannedQuantity = workCenterPlannedQuantity + mesWorkOrder.getQty();
}
resultModel.setWorkCenterCompletedQuantity(workCenterCompletedQuantity);
resultModel.setWorkCenterPlannedQuantity(workCenterPlannedQuantity);
if (workCenterCompletedQuantity == 0 || workCenterPlannedQuantity == 0) {
resultModel.setWorkCenterCompletionRate(0D);
}else {
resultModel.setWorkCenterCompletionRate(workCenterCompletedQuantity * 100 / workCenterPlannedQuantity);
}
return resultModel;
}
@Override
public List<MesWorkCenterBoardResultModel> queryWorkCenterWorkOrderCompletionStatus(MesWorkCenterBoardConditionModel conditionModel) {
return null;
List<MesWorkCenterBoardResultModel> resultModelList = new ArrayList<>();
//获取查询时间区间
Map<String, Map<String, String>> timeZoneMap = getTimeZoneMap(conditionModel.getWorkCenterCodeList(),
conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode());
//查询工单
List<MesWorkOrder> mesWorkOrderList = queryMesWorkOrder(timeZoneMap, conditionModel);
//封装汇总数据
for (MesWorkOrder mesWorkOrder : mesWorkOrderList) {
MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel();
resultModel.setWorkOrderNo(mesWorkOrder.getWorkOrderNo());
resultModel.setPartNo(mesWorkOrder.getPartNo());
resultModel.setPartDescription(mesWorkOrder.getPartName());
resultModel.setWorkOrderCompletedQuantity(mesWorkOrder.getCompleteQty());
resultModel.setWorkOrderPlannedQuantity(mesWorkOrder.getQty());
if (resultModel.getWorkOrderCompletedQuantity() == 0 || resultModel.getWorkOrderPlannedQuantity() == 0) {
resultModel.setWorkOrderFirstPassRate(0D);
}else {
resultModel.setWorkOrderFirstPassRate(resultModel.getWorkOrderCompletedQuantity() * 100 / resultModel.getWorkOrderPlannedQuantity());
}
resultModelList.add(resultModel);
}
return resultModelList;
}
@Override
public List<MesWorkCenterBoardResultModel> queryUnitHourCompletionRate(MesWorkCenterBoardConditionModel conditionModel) {
return null;
List<MesWorkCenterBoardResultModel> resultModelList = new ArrayList<>();
//查询当前产线设置的目标值
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(conditionModel.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(conditionModel.getWorkCenterCodeList().get(0), "workCenterCode", ddlPackBean);
MesWorkCenter mesWorkCenter = mesWorkCenterRepository.getByProperty(ddlPackBean);
if (Objects.isNull(mesWorkCenter) || StringUtils.isEmpty(mesWorkCenter.getJph())) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail(conditionModel.getWorkCenterCodeList().get(0) + " 产线未维护有效的产线JPH信息")
.build();
}
//获取并汇总当前产线在当前时间前12个小时的每个小时时间段内工单的完成数
Map<String, Map<String, String>> timeZoneMap = getLastHoursTimeZoneMap(NUM);
//查询当前产线12小时内的生产汇报完成的数据
List<MesWorkCenterBoardResultModel> mesProductOffLineQueryResultList = mesYfBoardDao.queryMesProductOffLineModel(
conditionModel.getWorkCenterCodeList().get(0),
conditionModel.getOrganizeCode(),
timeZoneMap.get(START_TIME).get(START_TIME),
timeZoneMap.get(END_TIME).get(END_TIME));
for (String timeZone : timeZoneMap.keySet()) {
MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel();
if (START_TIME.equals(timeZone) || END_TIME.equals(timeZone)) {
continue;
}
//横坐标赋值
resultModel.setUnitHourCompletionRateTimePeriod(timeZone);
//目标值
resultModel.setUnitHourCompletionRateTargetValue(Double.valueOf(mesWorkCenter.getJph()));
if (CollectionUtils.isEmpty(mesProductOffLineQueryResultList)) {
resultModel.setUnitHourCompletionRate(0);
}else {
//筛选生产汇报数据中在当前时间区段中的产品条码数
List<MesWorkCenterBoardResultModel> nowResultList = mesProductOffLineQueryResultList.stream().filter(model -> (
StringUtils.compare(model.getCreateDateTime(), timeZoneMap.get(timeZone).get(START_TIME)) > 0
&& StringUtils.compare(timeZoneMap.get(timeZone).get(END_TIME), model.getCreateDateTime()) > 0
)).collect(Collectors.toList());
resultModel.setUnitHourCompletionRate(nowResultList.size());
}
resultModelList.add(resultModel);
}
return resultModelList;
}
@Override
public List<MesWorkCenterBoardResultModel> queryWorkCenterFirstTimeOfflineQualificationRate(MesWorkCenterBoardConditionModel conditionModel) {
return null;
//获取并汇总当前时间前12个小时的每个小时时间段内数据最高100
//合格数 / 加工完成(包含已汇报,即工单的完成数;以及待汇报的)
List<MesWorkCenterBoardResultModel> resultModelList = new ArrayList<>();
Map<String, Map<String, String>> timeZoneMap = getLastHoursTimeZoneMap(NUM);
//查询当前产线在指定时间段内加工完成的条码数据
List<MesWorkCenterBoardResultModel> mesProductOffLineQueryResultList = mesYfBoardDao.queryCompletedSnInfo(
conditionModel.getWorkCenterCodeList().get(0),
conditionModel.getOrganizeCode(),
timeZoneMap.get(START_TIME).get(START_TIME),
timeZoneMap.get(END_TIME).get(END_TIME));
//依次汇总每个时间段的数据
for (String timeZone : timeZoneMap.keySet()) {
MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel();
if (START_TIME.equals(timeZone) || END_TIME.equals(timeZone)) {
continue;
}
//横坐标赋值
resultModel.setWorkCenterFirstTimeOfflineQualificationRateTimePeriod(timeZone);
//筛选当前时间段的生产加工记录
List<MesWorkCenterBoardResultModel> nowResultList = mesProductOffLineQueryResultList.stream().filter(model -> (
StringUtils.compare(model.getCreateDateTime(), timeZoneMap.get(timeZone).get(START_TIME)) > 0
&& StringUtils.compare(timeZoneMap.get(timeZone).get(END_TIME), model.getCreateDateTime()) > 0
)).collect(Collectors.toList());
Map<Integer, List<MesWorkCenterBoardResultModel>> resultModelByQcStatusMap = nowResultList.stream().
collect(Collectors.groupingBy(MesWorkCenterBoardResultModel::getQcStatus));
if (CollectionUtils.isEmpty(nowResultList)
|| !resultModelByQcStatusMap.containsKey(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue())) {
//当前时间段没有生产加工记录或者没有合格的生产加工条码
resultModel.setWorkCenterFirstTimeOfflineQualificationRate(0D);
}else {
double workCenterFirstTimeOfflineQualificationRate = (
resultModelByQcStatusMap.get(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()).size() * 100
/ nowResultList.size());
//最大值只允许100
if (workCenterFirstTimeOfflineQualificationRate > 100) {
workCenterFirstTimeOfflineQualificationRate = 100;
}
resultModel.setWorkCenterFirstTimeOfflineQualificationRate(workCenterFirstTimeOfflineQualificationRate);
}
resultModelList.add(resultModel);
}
return resultModelList;
}
@Override
public List<MesWorkCenterBoardResultModel> queryInspectionResults(MesWorkCenterBoardConditionModel conditionModel) {
return null;
String workCenterCode = conditionModel.getWorkCenterCodeList().get(0);
List<MesWorkCenterBoardResultModel> resultModelList = new ArrayList<>();
//查询当前产线配置的点检类型
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(conditionModel.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean);
List<MesEquipmentSpotCheck> mesEquipmentSpotCheckList = mesEquipmentSpotCheckRepository.findByHqlWhere(ddlPackBean);
Set<Integer> spotCheckOrderTypeSet = mesEquipmentSpotCheckList.
stream().map(MesEquipmentSpotCheck::getSpotCheckOrderType).collect(Collectors.toSet());
//获取查询时间区间
Map<String, Map<String, String>> timeZoneMap = getTimeZoneMap(conditionModel.getWorkCenterCodeList(),
conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode());
//查询当前产线在指定时间区间内的点检单记录并按照点检类型进行分组
ddlPackBean = DdlPackBean.getDdlPackBean(conditionModel.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean);
DdlPreparedPack.timeBuilder(timeZoneMap.get(workCenterCode).get(START_TIME),
timeZoneMap.get(workCenterCode).get(END_TIME), "createDatetime", ddlPackBean, true);
List<MesSpotCheckOrder> mesSpotCheckOrderList = mesSpotCheckOrderRepository.findByHqlWhere(ddlPackBean);
Map<Integer, List<MesSpotCheckOrder>> mesSpotCheckOrderByTypeMap = mesSpotCheckOrderList.
stream().collect(Collectors.groupingBy(MesSpotCheckOrder::getSpotCheckOrderType));
//遍历“点检类型”枚举
for (MesExtEnumUtil.EQUIPMENT_CHECK_ORDER_TYPE typeEnum : MesExtEnumUtil.EQUIPMENT_CHECK_ORDER_TYPE.values()) {
if (typeEnum.getValue() == 6) {
//不添加工装点检
continue;
}
MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel();
//截取前两位作为标题
resultModel.setInspectionItems(typeEnum.getDescription().substring(0, 2));
//判断点检结果
if (spotCheckOrderTypeSet.contains(typeEnum.getValue())) {
//配置该种点检类型
if (mesSpotCheckOrderByTypeMap.containsKey(typeEnum.getValue())) {
//存在该种点检类型的点检单数据
List<MesSpotCheckOrder> mesSpotCheckOrders = mesSpotCheckOrderByTypeMap.get(typeEnum.getValue());
//按修改时间降序
mesSpotCheckOrders.sort(Comparator.comparing(MesSpotCheckOrder::getModifyDatetime).reversed());
if (MesExtEnumUtil.SPOT_CHECK_ORDER_RESULT_TYPE.OK.getValue() == mesSpotCheckOrders.get(0).getSpotCheckOrderResult()) {
//最新的点检单结果为 OK
//结果设置为“正常”
resultModel.setInspectionResults(MesExtEnumUtil.INSPECTION_RESULTS.NORMAL.getValue());
}else if (MesExtEnumUtil.SPOT_CHECK_ORDER_RESULT_TYPE.NOK.getValue() == mesSpotCheckOrders.get(0).getSpotCheckOrderResult()) {
//最新的点检单结果为 NOK
//结果设置为“异常”
resultModel.setInspectionResults(MesExtEnumUtil.INSPECTION_RESULTS.ABNORMAL.getValue());
}
}else {
//不存在该种点检类型的点检单数据
//结果设置为“未做”
resultModel.setInspectionResults(MesExtEnumUtil.INSPECTION_RESULTS.NOT_DONE.getValue());
}
}else {
//未配置该种点检类型
//结果设置为“不涉及”
resultModel.setInspectionResults(MesExtEnumUtil.INSPECTION_RESULTS.NOT_INVOLVED.getValue());
}
resultModelList.add(resultModel);
}
return resultModelList;
}
@Override
public MesWorkCenterBoardResultModel queryAbnormalDowntime(MesWorkCenterBoardConditionModel conditionModel) {
return null;
MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel();
//获取查询时间区间
Map<String, Map<String, String>> timeZoneMap = getTimeZoneMap(conditionModel.getWorkCenterCodeList(),
conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode());
resultModel.setAbnormalDowntime("00:45");
return resultModel;
}
/**
*
* @param timeRangeIdentification
* @return
*/
private Map<String, Map<String, String>> getTimeZoneMap(List<String> workCenterCodeList, Integer timeRangeIdentification, String organizeCode) {
Map<String, Map<String, String>> timeZoneMap = new HashMap<>();
String startTime;
String endTime;
DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd ");
DateTimeFormatter dayTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//当前时间
LocalDateTime nowTime = LocalDateTime.now();
//当前年月日
String nowDay = dayFormatter.format(nowTime);
//当前年月日 时分秒
String nowDayTime = dayTimeFormatter.format(nowTime);
//判断当前查询的时间段(当班或者当日)
if (MesExtEnumUtil.TIME_RANGE_IDENTIFICATION.ON_DUTY.getValue() == timeRangeIdentification) {
//当班
//先查询用户指定的产线在当前时间节点有效的班次信息
List<MesShift> mesShiftList = mesYfBoardDao.queryMesShift(workCenterCodeList, organizeCode, nowDayTime);
if (CollectionUtils.isEmpty(mesShiftList)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail(workCenterCodeList.toString() + " 产线未维护有效的班次信息!")
.build();
}
Map<String, List<MesShift>> shiftByWorkCenterCodeMap = mesShiftList.stream().collect(Collectors.groupingBy(MesShift::getWorkCenterCode));
//依次处理每个产线对应的班次数据,获取与当前时间相符的班次
Map<String, MesShift> passShiftByWorkCenterCodeMap = new HashMap<>();
for (String workCenterCode : workCenterCodeList) {
if (shiftByWorkCenterCodeMap.containsKey(workCenterCode)) {
List<MesShift> mesShifts = shiftByWorkCenterCodeMap.get(workCenterCode);
for (MesShift mesShift : mesShifts) {
//上班时间
String workTime = nowDay + mesShift.getStartTime();
//下班时间
String closingTime;
if (StringUtils.compare(mesShift.getStartTime(), mesShift.getEndTime()) > 0) {
//跨天班次,下班时间的日期需要加一
closingTime = dayFormatter.format(nowTime.plusDays(1)) + mesShift.getEndTime();
}else {
//当天班次
closingTime = nowDay + mesShift.getEndTime();
}
if (StringUtils.compare(nowDayTime, workTime) > 0 && StringUtils.compare(closingTime, nowDayTime) > 0) {
//当前时间点在当前班次的上下班区间内
mesShift.setStartTime(workTime);
mesShift.setEndTime(closingTime);
passShiftByWorkCenterCodeMap.put(workCenterCode, mesShift);
}
}
}else {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail(workCenterCode + " 产线未维护有效的班次信息!")
.build();
}
}
//获取最终的班次时间区间
for (String workCenterCode : passShiftByWorkCenterCodeMap.keySet()) {
MesShift mesShift = passShiftByWorkCenterCodeMap.get(workCenterCode);
Map<String, String> map = new HashMap<>();
map.put(START_TIME, mesShift.getStartTime());
map.put(END_TIME, mesShift.getEndTime());
timeZoneMap.put(workCenterCode, map);
}
}else if (MesExtEnumUtil.TIME_RANGE_IDENTIFICATION.ON_THE_SAME_DAY.getValue() == timeRangeIdentification) {
Map<String, String> timeMap = new HashMap<>();
//当日
startTime = nowDay + "00:00:00";
endTime = nowDay + "23:59:59";
timeMap.put(START_TIME, startTime);
timeMap.put(END_TIME, endTime);
for (String workCenterCode : workCenterCodeList) {
timeZoneMap.put(workCenterCode, timeMap);
}
}else {
//显示维度格式有误,直接报错
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.PARAMETER_EXCEPTION.getCode())
.setErrorDetail("显示维护传参有误!")
.build();
}
return timeZoneMap;
}
/**
*
* @param timeZoneMap
* @param conditionModel
* @return
*/
private List<MesWorkOrder> queryMesWorkOrder(Map<String, Map<String, String>> timeZoneMap, MesWorkCenterBoardConditionModel conditionModel) {
String workCenterCode = conditionModel.getWorkCenterCodeList().get(0);
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(conditionModel.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean);
//计划开始时间
DdlPreparedPack.timeBuilder(timeZoneMap.get(workCenterCode).get(START_TIME),
timeZoneMap.get(workCenterCode).get(END_TIME), "planStartTime", ddlPackBean, true);
return mesWorkOrderRepository.findByHqlWhere(ddlPackBean);
}
/**
*
* @param designatedQuantity
* @return
*/
private Map<String, Map<String, String>> getLastHoursTimeZoneMap(Integer designatedQuantity) {
Map<String, Map<String, String>> timeZoneMap = new TreeMap<>();
DateTimeFormatter hourFormatter = DateTimeFormatter.ofPattern("HH");
DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd ");
LocalDateTime nowTime = LocalDateTime.now();
String nowDay = dayFormatter.format(nowTime);
String startTime;
String endTime;
String key;
for (int i = 0; i < designatedQuantity; i++) {
Map<String, String> zoneMap = new HashMap<>();
if (i == 0) {
//第一个区段获取当前时间所在的小时区间
startTime = hourFormatter.format(nowTime.minusHours(i)) + ":00";
endTime = hourFormatter.format(nowTime.plusHours(1)) + ":00";
}else {
startTime = hourFormatter.format(nowTime.minusHours(i)) + ":00";
endTime = hourFormatter.format(nowTime.minusHours(i - 1)) + ":00";
}
key = startTime + "-" + endTime;
zoneMap.put(START_TIME, nowDay + startTime + ":00");
zoneMap.put(END_TIME, nowDay + endTime + ":00");
timeZoneMap.put(key, zoneMap);
Map<String, String> map = new HashMap<>();
if (i == 0) {
//将第一个时间段作为本段查询时间区间的结束(因为是递减)
map.put(END_TIME, nowDay + startTime + ":00");
timeZoneMap.put(END_TIME, map);
}
if (i == designatedQuantity - 1) {
//将最后一个时间段作为本段查询时间区间的开始(因为是递减)
map.put(START_TIME, nowDay + endTime + ":00");
timeZoneMap.put(START_TIME, map);
}
}
return timeZoneMap;
}
}

@ -28,10 +28,10 @@ public class MesWorkCenterBoardResultModel {
* 线
*/
@ApiParam(value = "产线完成数")
private Integer workCenterCompletedQuantity;
private Double workCenterCompletedQuantity;
@ApiParam(value = "产线计划数")
private Integer workCenterPlannedQuantity;
private Double workCenterPlannedQuantity;
@ApiParam(value = "产线完成率")
private Double workCenterCompletionRate;
@ -49,10 +49,10 @@ public class MesWorkCenterBoardResultModel {
private String partDescription;
@ApiParam(value = "工单完成数")
private Integer workOrderCompletedQuantity;
private Double workOrderCompletedQuantity;
@ApiParam(value = "工单计划数")
private Integer workOrderPlannedQuantity;
private Double workOrderPlannedQuantity;
@ApiParam(value = "工单一次合格率")
private Double workOrderFirstPassRate;
@ -91,6 +91,26 @@ public class MesWorkCenterBoardResultModel {
* 线
*/
@ApiParam(value = "异常停机时间")
private Double abnormalDowntime;
private String abnormalDowntime;
/**
* sql
*/
@ApiParam(value = "过程条码")
private String serialNumber;
@ApiParam(value = "创建时间")
private String createDateTime;
@ApiParam(value = "质量状态")
private Integer qcStatus;
public MesWorkCenterBoardResultModel() {
}
public MesWorkCenterBoardResultModel(String serialNumber, String createDateTime) {
this.serialNumber = serialNumber;
this.createDateTime = createDateTime;
}
}

Loading…
Cancel
Save