diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java index b374e04..bcf0461 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java @@ -1,9 +1,13 @@ package cn.estsh.i3plus.ext.mes.api.base; +import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkOrderBoardReqModel; +import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkOrderBoardResModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountResModel; import cn.estsh.i3plus.pojo.model.wms.WmsProductModel; import io.swagger.annotations.ApiOperation; @@ -67,4 +71,7 @@ public interface IMesWorkOrderService extends IBaseMesService { @ApiOperation("MES工单推送给WMS") void doSendMesWorkOrderToWms(String organizeCode,Integer pageSize,String userName); + @ApiOperation(value = "BTO工单看板") + List orderBoard(MesWorkOrderBoardReqModel workOrderBoardReqModel); + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java index a4def21..646349e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java @@ -2,9 +2,12 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.report; import cn.estsh.i3plus.ext.mes.api.base.IMesDowntimeRecordService; import cn.estsh.i3plus.ext.mes.api.base.IMesProductionRecordService; +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService; import cn.estsh.i3plus.ext.mes.api.busi.report.IMesYfReportService; import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkOrderBoardReqModel; +import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkOrderBoardResModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesCokpitKanbanData; @@ -51,6 +54,9 @@ public class MesBusiReportController extends MesBaseController { @Autowired private IMesDowntimeRecordService mesDowntimeRecordService; + @Autowired + private IMesWorkOrderService mesWorkOrderService; + @ApiOperation(value = "查询追溯报表", notes = "查询追溯报表") @GetMapping("/traceability/find") public ResultBean findTraceabilityReport(MesProduceSn mesProduceSn) { @@ -133,6 +139,22 @@ public class MesBusiReportController extends MesBaseController { } } + @ApiOperation(value = "BTO工单看板", notes = "BTO工单看板") + @GetMapping("/order/board/query") + public ResultBean queryProductAccount(MesWorkOrderBoardReqModel workOrderBoardReqModel) { + try { + List workOrderBoardResModels = mesWorkOrderService.orderBoard(workOrderBoardReqModel); + + + return ResultBean.success("查询成功").setResultList(workOrderBoardResModels); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + e.printStackTrace(); + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + @ApiOperation(value = "设备停机记录报表", notes = "设备停机记录报表") @GetMapping("/equipment/downtime/record") public ResultBean downtimeRecord(MesDowntimeRecord mesDowntimeRecord, Pager pager) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/TestJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/TestJob.java index 80c2484..367aef7 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/TestJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/TestJob.java @@ -1,4 +1,23 @@ package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; public class TestJob { + private String startHour; + private String endHour; + private static int d = 3; + + public TestJob(int segment) { + this.startHour = segment * d + ":00:00"; + this.endHour = (segment * d + d)+":00:00" ; + } + + public String toString() { + return "从 " + startHour + " 到 " + endHour; + } + + public static void main(String[] args) { + for (int i = 0; i < 24/d; i++) { + TestJob segment = new TestJob(i); + System.out.println(segment); + } + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesDowntimeRecordServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesDowntimeRecordServiceImpl.java index 29704d4..26b8313 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesDowntimeRecordServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesDowntimeRecordServiceImpl.java @@ -205,7 +205,7 @@ public class MesDowntimeRecordServiceImpl extends BaseMesService list = new ArrayList<>(); - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(downtimeRecord.getOrganizeCode()); if (!StringUtils.isEmpty(downtimeRecord.getEquipmentCode())) { DdlPreparedPack.getStringEqualPack(downtimeRecord.getEquipmentCode(), "equipmentCode", ddlPackBean); } @@ -222,7 +222,7 @@ public class MesDowntimeRecordServiceImpl extends BaseMesService recordList = mesDowntimeRecordRDao.findByHqlWherePage(ddlPackBean, pager); @@ -261,6 +261,9 @@ public class MesDowntimeRecordServiceImpl extends BaseMesService implements @Autowired private IMesProductVersionService mesProductVersionService; + @Autowired + private EntityManager entityManager; + @Override public MesWorkOrder insert(MesWorkOrder bean) { // 数据校验 @@ -2027,6 +2039,86 @@ public class MesWorkOrderService extends BaseMesService implements updateMesWorkOrder(organizeCode, userName, workOrderNoList); } + @Override + public List orderBoard(MesWorkOrderBoardReqModel workOrderBoardReqModel) { + List resList = new ArrayList<>(); + + String sqlStr = "select mwo.part_no,mp.part_name, mwo.produce_time,mwo.qty,mwo.complete_qty,mwo.work_center_code,mwo.work_order_no,mwo.create_date_time from mes_work_order mwo\n" + + "left join mes_part mp\n" + + "on mwo.part_no = mp.part_no and mwo.organize_code = mp.organize_code" + + " where mwo.organize_code = 'CK01' and mwo.is_deleted = 2 and mwo.is_valid = 1 and work_order_status in(20, 30) and work_order_type = 30" + + " and mwo.qty > mwo.complete_qty and mwo.create_date_time > :dateTime "; + + if (!StringUtils.isEmpty(workOrderBoardReqModel.getWorkCenterCode())) { + sqlStr += " and mwo.work_center_code = :workCenterCode "; + } + + sqlStr += "and produce_time is not null and produce_time != ''\n" + + "order by mwo.produce_time limit 16"; + + String dateTime = new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(), 5)) + " 00:00:00"; + Query query = entityManager.createNativeQuery(sqlStr); + if (!StringUtils.isEmpty(workOrderBoardReqModel.getWorkCenterCode())) { + query.setParameter("workCenterCode", workOrderBoardReqModel.getWorkCenterCode()); + } + query.setParameter("dateTime", dateTime); + + + List results = query.getResultList(); + for (Object result : results) { + Object[] cells = (Object[]) result; + MesWorkOrderBoardResModel model = new MesWorkOrderBoardResModel(); + model.setPartNo(StringUtils.isEmpty(cells[0]) ? "" : String.valueOf(cells[0])); + model.setPartName(StringUtils.isEmpty(cells[1]) ? "" : String.valueOf(cells[1])); + model.setProductDate(StringUtils.isEmpty(cells[2]) ? "" : String.valueOf(cells[2])); + model.setQty(StringUtils.isEmpty(cells[3]) ? 0d : Double.valueOf(String.valueOf(cells[3]))); + model.setCompleteQty(StringUtils.isEmpty(cells[4]) ? 0d : Double.valueOf(String.valueOf(cells[4]))); + model.setWorkCenterCode(StringUtils.isEmpty(cells[5]) ? "" : String.valueOf(cells[5])); + model.setCreateDatetime(StringUtils.isEmpty(cells[7]) ? "" : String.valueOf(cells[7])); + resList.add(model); + } + Map map = new HashedMap(); + int param = 2; + for (int i = 0; i < 24/param; i++) { + int startHour = i * param; + int endHour = i * param + param; + String startTime = ""; + String endTime = ""; + if (startHour < 10) { + startTime = "0" + startHour + ":00:00"; + } else { + startTime = startHour + ":00:00"; + } + if (endHour < 10) { + endTime = "0" + endHour + ":00:00"; + } else { + endTime = endHour + ":00:00"; + } + if (endHour == 24) { + endTime = "23:59:59"; + } + + map.put(startTime, endTime); + } + for (MesWorkOrderBoardResModel mesWorkOrderBoardResModel : resList) { + String timeStr = mesWorkOrderBoardResModel.getCreateDatetime().substring(11); + LocalTime time = LocalTime.parse(timeStr); + + map.forEach((k,v) ->{ + LocalTime startTime = LocalTime.parse(k); + LocalTime endTime = LocalTime.parse(v); + + if (time.compareTo(startTime) > 0 && time.compareTo(endTime) <=0) { + mesWorkOrderBoardResModel.setOrderTime(k + "-" + v); + return; + } + }); + } + + return resList; + } + + private void updateMesWorkOrder(String organizeCode, String userName, List workOrderNoList) { if (StringUtil.isEmpty(organizeCode) || CollectionUtils.isEmpty(workOrderNoList)) return; DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesWorkOrderBoardReqModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesWorkOrderBoardReqModel.java new file mode 100644 index 0000000..6694752 --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesWorkOrderBoardReqModel.java @@ -0,0 +1,30 @@ +package cn.estsh.i3plus.ext.mes.pojo.model.board; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiParam; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @Description : 工单看板封装 + * @Reference : + * @Author : zxw + * @CreateDate : 2024/6/19 15:26 + * @Modify: + **/ +@Data +@ApiModel("产线看板-查询结果封装") +public class MesWorkOrderBoardReqModel { + + /** + * 查询产线状态 + */ + @ApiParam(value = "产线代码") + private String workCenterCode; + /** + * 工厂编码 + */ + @ApiParam(value = "工厂编码") + private String organizeCode; +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesWorkOrderBoardResModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesWorkOrderBoardResModel.java new file mode 100644 index 0000000..9b56afa --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesWorkOrderBoardResModel.java @@ -0,0 +1,68 @@ +package cn.estsh.i3plus.ext.mes.pojo.model.board; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiParam; +import lombok.Data; + +/** + * @Description : 工单看板封装 + * @Reference : + * @Author : zxw + * @CreateDate : 2024/6/19 15:26 + * @Modify: + **/ +@Data +@ApiModel("BTO工单看板-查询结果封装") +public class MesWorkOrderBoardResModel { + + /** + * 查询产线状态 + */ + @ApiParam(value = "产线代码") + private String workCenterCode; + + /** + * 查询产线状态 + */ + @ApiParam(value = "物料编码") + private String partNo; + + + /** + * 物料名称 + */ + @ApiParam(value = "物料名称") + private String partName; + + + /** + * 汇总日期 + */ + @ApiParam(value = "汇总日期") + private String productDate; + + + /** + * 工单时间 + */ + @ApiParam(value = "工单时间") + private String orderTime; + + /** + * 计划数量 + */ + @ApiParam(value = "计划数量") + private Double qty; + + /** + * 完成数量 + */ + @ApiParam(value = "完成数量") + private Double completeQty; + + /** + * 创建时间 + */ + @ApiParam(value = "创建时间") + private String createDatetime; +}