天桥数报表开发

tags/yfai-mes-ext-v2.3
jun 7 months ago
parent 1998911748
commit bc6b3dc5ad

@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportResultM
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesProdRuleReportConditionModel;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesCokpitKanbanData;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
import cn.estsh.i3plus.pojo.mes.model.report.MesTraceabilityReportModel;
@ -48,4 +49,7 @@ public interface IMesYfReportService {
@ApiOperation("产品加工记录")
ListPager<MesProductionRecord> queryMesProductionRecord(MesProductionRecord mesProductionRecord, Pager pager);
@ApiOperation("看板数据")
ListPager<MesCokpitKanbanData> queryMesCokpitKanbanData(MesCokpitKanbanData kanbanData, Pager pager);
}

@ -7,6 +7,7 @@ import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesCokpitKanbanData;
import cn.estsh.i3plus.pojo.mes.bean.MesDowntimeRecord;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
@ -25,6 +26,7 @@ import org.apache.commons.collections.CollectionUtils;
import org.drools.core.rule.Collect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -148,4 +150,19 @@ public class MesBusiReportController extends MesBaseController {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@ApiOperation(value = "看板数据", notes = "看板数据")
@PostMapping("/mesCokpitKanbanData/query")
public ResultBean queryMesCokpitKanbanData(MesCokpitKanbanData kanbanData, Pager pager) {
try {
ValidatorBean.beginValid(kanbanData)
.notNull("organizeCode", kanbanData.getOrganizeCode());
return ResultBean.success("查询成功").setListPager(mesYfReportService.queryMesCokpitKanbanData(kanbanData,pager));
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -16,6 +16,7 @@ import cn.estsh.i3plus.platform.common.tool.MathOperation;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
@ -145,6 +146,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
@Autowired
private IMesPrintedSnLogRepository printedSnLogRepository;
@Autowired
private SnowflakeIdMaker snowflakeIdMaker;
@Override
public MesWorkOrder insert(MesWorkOrder bean) {
//校验产线与工位的关系
@ -912,7 +916,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
//查询产线信息
MesWorkCenter mesWorkCenter = getMesWorkCenter(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getWorkCenterCode());
//获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb);
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getProductVersion());
//物料+生产版本获取bom信息
List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
//报工类型
@ -1012,7 +1016,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
}
//获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder);
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder.getPartNo(),mesWorkOrder.getOrganizeCode(),mesWorkOrder.getProductVersion());
//物料+生产版本获取bom信息
List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
//生成条码
@ -1022,6 +1026,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
List<MesMove> mesMoveList = new ArrayList<>();
boolean isReport = false;
boolean isMove = false;
String nowTime = TimeTool.getNowTime(true);
//排序工单
if (MesExtEnumUtil.ORDER_TYPE.SORT.getValue() == mesWorkOrder.getWorkOrderType()) {
//报工类型
@ -1038,7 +1043,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
isReport = true;
isMove = true;
} else if (MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == mesProdRuleSortCfg.getReportType()) {
customerSupplyMove(mesWorkOrderNew, mesProductVersion, mesBoms, sn, mesProductOffLineList, mesMoveList);
customerSupplyMove(mesWorkOrderNew, mesProductVersion, mesBoms, sn, mesProductOffLineList, mesMoveList,nowTime,true);
} else {
log.info("工单{}排序加工规则报工类型未维护", mesWorkOrder.getWorkOrderNo());
return;
@ -1049,7 +1054,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode());
//成品汇报
if (isReport) {
String nowTime = TimeTool.getNowTime(true);
for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false,nowTime,mesBoms.size()));
}
@ -1064,11 +1068,11 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} else if (MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue() == mesWorkOrder.getWorkOrderType()) {
MesProdRuleNosortCfg mesProdRuleNoSortCfg = mesProdRuleNosortCfgService.findMesProdRuleNosortCfgByWorkCenterCode(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode());
if (MesExtEnumUtil.NOSORT_REPORT_TYPE.REPORT.getValue() == mesProdRuleNoSortCfg.getReportType()) {
String nowTime = TimeTool.getNowTime(true);
for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false,nowTime,mesBoms.size()));
}
}else if(MesExtEnumUtil.NOSORT_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == mesProdRuleNoSortCfg.getReportType()) {
customerSupplyMove(mesWorkOrderNew, mesProductVersion, mesBoms, sn, mesProductOffLineList, mesMoveList,nowTime,false);
}
} else {
log.info("工单{}排序规则不属于排序工单和非排序工单", mesWorkOrder.getWorkOrderNo());
@ -1346,7 +1350,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
if (CollectionUtils.isEmpty(oldProductOffLineList)) {
MesException.throwMesBusiException("条码【%s】未查询到报工数据", model.getSn());
}
oldProductOffLineList = mesProductOffLineService.findMesProductOffLineByRecordId(oldProductOffLineList.iterator().next().getProductionRecordId(), model.getOrganizeCode());
//oldProductOffLineList = mesProductOffLineService.findMesProductOffLineByRecordId(oldProductOffLineList.iterator().next().getProductionRecordId(), model.getOrganizeCode());
oldProductOffLineList.forEach(item -> {
item.setReportType(MesExtEnumUtil.REPORT_TYPE.CBR.getValue());
item.setOrderNo(model.getShipOrderNo());
@ -1430,10 +1434,11 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
return mesProductVersion;
}
private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List<MesBom> mesBoms, String sn, List<MesProductOffLine> mesProductOffLineList, List<MesMove> mesMoveList) {
private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List<MesBom> mesBoms, String sn, List<MesProductOffLine> mesProductOffLineList, List<MesMove> mesMoveList,String nowTime,boolean isSort) {
boolean isItemMove;
boolean isItemReport;
MesMoveRule moveRule;
MesPart itemPart;
//查询零件生产组的移库规则
List<MesMoveRule> moveRules = mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(mesWorkOrder.getPartProdGroupCode(), mesWorkOrder.getOrganizeCode());
Map<String, List<MesMoveRule>> mesMoveRuleMap = moveRules.stream().filter(t -> Objects.nonNull(t.getSrcType())).collect(Collectors.groupingBy(MesMoveRule::getSrcType));
@ -1446,8 +1451,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
isItemReport = false;
isItemMove = false;
moveRule = null;
itemPart = null;
if (itemPartMap.containsKey(mesBom.getItemPartNo())) {
MesPart itemPart = itemPartMap.get(mesBom.getItemPartNo()).iterator().next();
itemPart = itemPartMap.get(mesBom.getItemPartNo()).iterator().next();
if (!StringUtil.isEmpty(itemPart.getEsd()) && mesMoveRuleMap.containsKey(itemPart.getEsd())) {
moveRule = mesMoveRuleMap.get(itemPart.getEsd()).iterator().next();
if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT_MOVE.getValue() == moveRule.getReportType()) {
@ -1461,9 +1467,20 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
}
//汇报
if (isItemReport) {
String nowTime = TimeTool.getNowTime(true);
if (isItemReport && isSort) {
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true, nowTime, mesBoms.size()));
} else if (isItemReport) {
String reportSn = String.valueOf(snowflakeIdMaker.nextId());
MesProductVersion itemVersion = getMesProductVersion(mesBom.getItemPartNo(), mesWorkOrder.getOrganizeCode(), mesProductVersion.getProductVersion());
List<MesBom> bomList = mesBomService.findBomList(mesWorkOrder.getOrganizeCode(), itemPart, itemVersion.getAlternativePartList());
//bom下的子节汇报
if (!CollectionUtils.isEmpty(bomList)) {
for (MesBom bom : bomList) {
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, bom, mesBom.getItemQty(), true, nowTime));
}
} else {
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, mesBom, mesBom.getQty(), true, nowTime));
}
}
//移库
if (isItemMove) {
@ -1476,6 +1493,13 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
mesMoveList.add(move);
}
}
//bom下的子节汇报总成也需要汇报
if (!isSort && !CollectionUtils.isEmpty(mesProductOffLineList)) {
for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, mesBom.getQty(), false, nowTime));
}
}
}
private Map<String, List<MesPartSap>> getPartSapMap(MesWorkOrder mesWorkOrder, List<String> itemPartNoList) {
@ -1507,18 +1531,53 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
private MesProductVersion getMesProductVersion(MesWorkOrder mesWorkOrder) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "partNo", ddlPackBean);
//DdlPreparedPack.getStringEqualPack(mesWorkOrder.getErpWorkCenter(), "workCenterCode", ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getProductVersion(), "productVersion", ddlPackBean);
private MesProductVersion getMesProductVersion(String partNo,String organizeCode,String productVersion) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(productVersion, "productVersion", ddlPackBean);
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
if (null == mesProductVersion) {
MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", mesWorkOrder.getPartNo(),mesWorkOrder.getProductVersion());
MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo,productVersion);
}
return mesProductVersion;
}
private MesProductOffLine getMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,
String sn, MesBom mesBom,Double itemQty, boolean isItemReport,String nowTime) {
MesProductOffLine newMesProductOffLine = new MesProductOffLine();
BeanUtils.copyProperties(mesBom, newMesProductOffLine, "id");
newMesProductOffLine.setReportPartNo(mesBom.getPartNo());
newMesProductOffLine.setReportPartNameRdd(mesBom.getPartName());
newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint());
newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint());
newMesProductOffLine.setQty(MathOperation.mul(mesWorkOrder.getNum(),itemQty));
newMesProductOffLine.setItemQty(MathOperation.mul(newMesProductOffLine.getQty(), mesBom.getItemQty()));
if (isItemReport && mesBom.getPartNo().equals(mesWorkOrder.getPartNo())) {
newMesProductOffLine.setReportPartNo(mesBom.getItemPartNo());
newMesProductOffLine.setReportPartNameRdd(mesBom.getItemPartName());
newMesProductOffLine.setItemPartNo("");
newMesProductOffLine.setItemPartName("");
newMesProductOffLine.setItemUnit("");
newMesProductOffLine.setItemQty(0d);
}
newMesProductOffLine.setReportSn(sn);
newMesProductOffLine.setSerialNumber(sn);
newMesProductOffLine.setBomVersion(mesWorkOrder.getProductVersion());
newMesProductOffLine.setUnit(mesBom.getUnit());
newMesProductOffLine.setBomCode(mesBom.getBomCode());
newMesProductOffLine.setWorkOrderNo(mesWorkOrder.getWorkOrderNo());
newMesProductOffLine.setWorkOrderType(mesWorkOrder.getWorkOrderType());
newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getWorkCenterCode());
newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode());
newMesProductOffLine.setReportType(mesWorkOrder.getReportType());
newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode());
newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode());
newMesProductOffLine.setDescription(nowTime);
newMesProductOffLine.setProductionRecordId(mesWorkOrder.getId().toString());
ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getModifyUser());
return newMesProductOffLine;
}
private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,
String sn, MesBom mesBom, boolean isItemReport,String nowTime,Integer bomTotalSize) {
@ -1747,7 +1806,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
MesException.throwMesBusiException("产线【%s】不存在", mesWorkOrderDb.getWorkCenterCode());
}
//获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb);
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getProductVersion());
//物料+生产版本获取bom信息
List<MesBom> mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());

@ -97,6 +97,10 @@ public class MesYfReportServiceImpl implements IMesYfReportService {
@Autowired
private MesProductionRecordRepository mesProductionRecordRepository;
@Autowired
private MesCokpitKanbanDataRepository mesCokpitKanbanDataRepository;
@Override
public ListPager<MesDeviceDataQueryReportResultModel> queryMesDeviceDataByPager(MesDeviceDataQueryReportConditionModel queryReportModel, Pager pager) {
ListPager<MesDeviceDataQueryReportResultModel> mesDeviceDataQueryReportResultModelListPager =
@ -251,6 +255,19 @@ public class MesYfReportServiceImpl implements IMesYfReportService {
return new ListPager<>(mesProductionRecordRepository.findByHqlWherePage(packBean, pager), pager);
}
@Override
public ListPager<MesCokpitKanbanData> queryMesCokpitKanbanData(MesCokpitKanbanData kanbanData, Pager pager) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(kanbanData.getOrganizeCode());
DdlPreparedPack.getStringLikerPack(kanbanData.getWorkCenterCode(),"workCenterCode",packBean);
DdlPreparedPack.getStringEqualPack("GHHCS","dataLocation",packBean);
DdlPreparedPack.getStringBiggerPack(kanbanData.getDataTimeStart(), "dataTime", packBean);
DdlPreparedPack.getStringSmallerPack(kanbanData.getDataTimeEnd(), "dataTime", packBean);
pager = PagerHelper.getPager(pager, mesCokpitKanbanDataRepository.findByHqlWhereCount(packBean));
DdlPreparedPack.getOrderBy(kanbanData.getOrderByParam(),kanbanData.getAscOrDesc(),packBean);
List<MesCokpitKanbanData> mesCokpitKanbanDataList = mesCokpitKanbanDataRepository.findByHqlWherePage(packBean, pager);
return new ListPager<>(mesCokpitKanbanDataList,pager);
}
private DdlPackBean getDdlPackBeanMesProductionRecord(MesProductionRecord mesProductionRecord) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProductionRecord.getOrganizeCode());
DdlPreparedPack.getStringLikerPack(mesProductionRecord.getProductSn(), "productSn", packBean);

Loading…
Cancel
Save