|
@@ -183,6 +183,9 @@ public class MesProductRecordController extends BaseController {
|
|
|
private MesRepairService mesRepairService;
|
|
private MesRepairService mesRepairService;
|
|
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
|
|
|
+ private MesInboundService mesInboundService;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
private MesProductModifyRecordService mesProductModifyRecordService;
|
|
private MesProductModifyRecordService mesProductModifyRecordService;
|
|
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
@@ -402,6 +405,184 @@ public class MesProductRecordController extends BaseController {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
|
|
+ * 实际产能(当天产能):统计今天 00:00 至次日 00:00 指定产线、各工位的产能
|
|
|
|
|
+ */
|
|
|
|
|
+ @RequestMapping(value = "dayCapacityData")
|
|
|
|
|
+ @ResponseBody
|
|
|
|
|
+ public CommonResp<Map<String, Integer>> dayCapacityData(HttpServletRequest request) {
|
|
|
|
|
+ CommonResp<Map<String, Integer>> resp = new CommonResp<>();
|
|
|
|
|
+ String lineSn = StringUtils.trimToEmpty(request.getParameter("lineSn"));
|
|
|
|
|
+ String oprnos = StringUtils.trimToEmpty(request.getParameter("oprnos"));
|
|
|
|
|
+ if (StringUtils.isBlank(lineSn) || StringUtils.isBlank(oprnos)) {
|
|
|
|
|
+ resp.setResult("false");
|
|
|
|
|
+ resp.setMessage("lineSn、oprnos 不能为空");
|
|
|
|
|
+ return resp;
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ List<String> oprnoList = new ArrayList<>();
|
|
|
|
|
+ String[] arr = oprnos.split(",");
|
|
|
|
|
+ for (String item : arr) {
|
|
|
|
|
+ String oprno = StringUtils.trimToEmpty(item);
|
|
|
|
|
+ if (StringUtils.isNotBlank(oprno)) {
|
|
|
|
|
+ oprnoList.add(oprno);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ resp.setData(mesProductRecordService.getCurrentDayCapacityStats(lineSn, oprnoList));
|
|
|
|
|
+ resp.setResult("true");
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ logger.error(e.getMessage(), e);
|
|
|
|
|
+ resp.setResult("false");
|
|
|
|
|
+ resp.setMessage("查询失败:" + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ return resp;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 当班产能:根据班次生产计划管理的当前班次时间段统计指定产线、各工位的产能
|
|
|
|
|
+ */
|
|
|
|
|
+ @RequestMapping(value = "shiftCapacityData")
|
|
|
|
|
+ @ResponseBody
|
|
|
|
|
+ public CommonResp<Map<String, Integer>> shiftCapacityData(HttpServletRequest request) {
|
|
|
|
|
+ CommonResp<Map<String, Integer>> resp = new CommonResp<>();
|
|
|
|
|
+ String lineSn = StringUtils.trimToEmpty(request.getParameter("lineSn"));
|
|
|
|
|
+ String oprnos = StringUtils.trimToEmpty(request.getParameter("oprnos"));
|
|
|
|
|
+ if (StringUtils.isBlank(lineSn) || StringUtils.isBlank(oprnos)) {
|
|
|
|
|
+ resp.setResult("false");
|
|
|
|
|
+ resp.setMessage("lineSn、oprnos 不能为空");
|
|
|
|
|
+ return resp;
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ List<String> oprnoList = new ArrayList<>();
|
|
|
|
|
+ String[] arr = oprnos.split(",");
|
|
|
|
|
+ for (String item : arr) {
|
|
|
|
|
+ String oprno = StringUtils.trimToEmpty(item);
|
|
|
|
|
+ if (StringUtils.isNotBlank(oprno)) {
|
|
|
|
|
+ oprnoList.add(oprno);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ resp.setData(mesProductRecordService.getCurrentShiftCapacityStats(lineSn, oprnoList));
|
|
|
|
|
+ resp.setResult("true");
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ logger.error(e.getMessage(), e);
|
|
|
|
|
+ resp.setResult("false");
|
|
|
|
|
+ resp.setMessage("查询失败:" + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ return resp;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 近七日产品质检数据分析(按产线)
|
|
|
|
|
+ * 产出:半成品入库管理(mes_inbound) 按产线、按天统计的入库数量
|
|
|
|
|
+ * 不良:返工记录表(mes_repair) 按产线、按天统计的返工数量
|
|
|
|
|
+ * 返回最近 7 天(含今天)的数据,labels/produced/defect 三个数组一一对应
|
|
|
|
|
+ */
|
|
|
|
|
+ @RequestMapping(value = "weekQualityData")
|
|
|
|
|
+ @ResponseBody
|
|
|
|
|
+ public CommonResp<Map<String, Object>> weekQualityData(HttpServletRequest request) {
|
|
|
|
|
+ CommonResp<Map<String, Object>> resp = new CommonResp<>();
|
|
|
|
|
+ String lineSn = StringUtils.trimToEmpty(request.getParameter("lineSn"));
|
|
|
|
|
+ if (StringUtils.isBlank(lineSn)) {
|
|
|
|
|
+ resp.setResult("false");
|
|
|
|
|
+ resp.setMessage("lineSn 不能为空");
|
|
|
|
|
+ return resp;
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ List<String> labels = new ArrayList<>();
|
|
|
|
|
+ List<Integer> produced = new ArrayList<>();
|
|
|
|
|
+ List<Integer> defect = new ArrayList<>();
|
|
|
|
|
+ SimpleDateFormat dayFmt = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
+ Calendar cal = Calendar.getInstance();
|
|
|
|
|
+ cal.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
|
|
+ cal.set(Calendar.MINUTE, 0);
|
|
|
|
|
+ cal.set(Calendar.SECOND, 0);
|
|
|
|
|
+ cal.set(Calendar.MILLISECOND, 0);
|
|
|
|
|
+ cal.add(Calendar.DAY_OF_MONTH, -6);
|
|
|
|
|
+ for (int i = 0; i < 7; i++) {
|
|
|
|
|
+ Calendar dayStartCal = (Calendar) cal.clone();
|
|
|
|
|
+ Calendar dayEndCal = (Calendar) cal.clone();
|
|
|
|
|
+ dayEndCal.add(Calendar.DAY_OF_MONTH, 1);
|
|
|
|
|
+ String dayStartStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(dayStartCal.getTime());
|
|
|
|
|
+ String dayEndStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(dayEndCal.getTime());
|
|
|
|
|
+
|
|
|
|
|
+ int m = dayStartCal.get(Calendar.MONTH) + 1;
|
|
|
|
|
+ int d = dayStartCal.get(Calendar.DAY_OF_MONTH);
|
|
|
|
|
+ labels.add(m + "月" + d + "日");
|
|
|
|
|
+
|
|
|
|
|
+ Long outNum = mesInboundService.countByLineAndDate(lineSn, dayStartStr, dayEndStr);
|
|
|
|
|
+ Long ngNum = mesRepairService.countByLineAndDate(lineSn, dayStartStr, dayEndStr);
|
|
|
|
|
+ produced.add(outNum == null ? 0 : outNum.intValue());
|
|
|
|
|
+ defect.add(ngNum == null ? 0 : ngNum.intValue());
|
|
|
|
|
+
|
|
|
|
|
+ cal.add(Calendar.DAY_OF_MONTH, 1);
|
|
|
|
|
+ }
|
|
|
|
|
+ Map<String, Object> data = MapUtils.newHashMap();
|
|
|
|
|
+ data.put("labels", labels);
|
|
|
|
|
+ data.put("produced", produced);
|
|
|
|
|
+ data.put("defect", defect);
|
|
|
|
|
+ resp.setData(data);
|
|
|
|
|
+ resp.setResult("true");
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ logger.error(e.getMessage(), e);
|
|
|
|
|
+ resp.setResult("false");
|
|
|
|
|
+ resp.setMessage("查询失败:" + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ return resp;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 各月产量统计图(按产线)
|
|
|
|
|
+ * 按月统计半成品入库管理(mes_inbound) 的入库数量,返回当年 1~12 月数据
|
|
|
|
|
+ */
|
|
|
|
|
+ @RequestMapping(value = "monthlyProductData")
|
|
|
|
|
+ @ResponseBody
|
|
|
|
|
+ public CommonResp<Map<String, Object>> monthlyProductData(HttpServletRequest request) {
|
|
|
|
|
+ CommonResp<Map<String, Object>> resp = new CommonResp<>();
|
|
|
|
|
+ String lineSn = StringUtils.trimToEmpty(request.getParameter("lineSn"));
|
|
|
|
|
+ if (StringUtils.isBlank(lineSn)) {
|
|
|
|
|
+ resp.setResult("false");
|
|
|
|
|
+ resp.setMessage("lineSn 不能为空");
|
|
|
|
|
+ return resp;
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 年份:默认当前年,支持传入 year 参数
|
|
|
|
|
+ String yearParam = StringUtils.trimToEmpty(request.getParameter("year"));
|
|
|
|
|
+ int year;
|
|
|
|
|
+ if (StringUtils.isNotBlank(yearParam)) {
|
|
|
|
|
+ year = Integer.parseInt(yearParam);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ year = Calendar.getInstance().get(Calendar.YEAR);
|
|
|
|
|
+ }
|
|
|
|
|
+ List<String> labels = new ArrayList<>();
|
|
|
|
|
+ List<Integer> data = new ArrayList<>();
|
|
|
|
|
+ SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
+ for (int month = 0; month < 12; month++) {
|
|
|
|
|
+ Calendar startCal = Calendar.getInstance();
|
|
|
|
|
+ startCal.clear();
|
|
|
|
|
+ startCal.set(year, month, 1, 0, 0, 0);
|
|
|
|
|
+ Calendar endCal = (Calendar) startCal.clone();
|
|
|
|
|
+ endCal.add(Calendar.MONTH, 1); // 下个月 1 号 00:00:00
|
|
|
|
|
+ String startStr = fmt.format(startCal.getTime());
|
|
|
|
|
+ String endStr = fmt.format(endCal.getTime());
|
|
|
|
|
+
|
|
|
|
|
+ labels.add((month + 1) + "月");
|
|
|
|
|
+ Long num = mesInboundService.countByLineAndDate(lineSn, startStr, endStr);
|
|
|
|
|
+ data.add(num == null ? 0 : num.intValue());
|
|
|
|
|
+ }
|
|
|
|
|
+ Map<String, Object> result = MapUtils.newHashMap();
|
|
|
|
|
+ result.put("labels", labels);
|
|
|
|
|
+ result.put("data", data);
|
|
|
|
|
+ result.put("year", year);
|
|
|
|
|
+ resp.setData(result);
|
|
|
|
|
+ resp.setResult("true");
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ logger.error(e.getMessage(), e);
|
|
|
|
|
+ resp.setResult("false");
|
|
|
|
|
+ resp.setMessage("查询失败:" + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ return resp;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
* 查看编辑表单
|
|
* 查看编辑表单
|
|
|
*/
|
|
*/
|
|
|
@RequiresPermissions("mes:mesProductRecord:view")
|
|
@RequiresPermissions("mes:mesProductRecord:view")
|