| | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | /** |
| | | * Created by vincent on 2022/4/8 |
| | |
| | | private WaitPakinService waitPakinService; |
| | | @Autowired |
| | | private WrkDetlService wrkDetlService; |
| | | @Autowired |
| | | private WrkDetlLogService wrkDetlLogService; |
| | | @Autowired |
| | | private WrkMastService wrkMastService; |
| | | @Autowired |
| | |
| | | @PostMapping("/arm/task/v1") |
| | | @AppAuth(memo = "分拣线上报接收") |
| | | public synchronized R TaskArmReport(@RequestHeader(required = false) String appkey, |
| | | @RequestBody TaskArmReportParam param, |
| | | HttpServletRequest request) { |
| | | @RequestBody TaskArmReportParam param, |
| | | HttpServletRequest request) { |
| | | auth(appkey, param, request); |
| | | if (Cools.isEmpty(param)) { |
| | | return R.parse(BaseRes.PARAM); |
| | |
| | | @PostMapping("/arm/task/cycle_result") |
| | | @AppAuth(memo = "单码完成") |
| | | public synchronized R TaskArmCycleResult(@RequestHeader(required = false) String appkey, |
| | | @RequestBody TaskArmCycleResultParam param, |
| | | HttpServletRequest request) { |
| | | @RequestBody TaskArmCycleResultParam param, |
| | | HttpServletRequest request) { |
| | | auth(appkey, param, request); |
| | | if (Cools.isEmpty(param)) { |
| | | return R.parse(BaseRes.PARAM); |
| | |
| | | @PostMapping("/arm/task/workspace_status") |
| | | @AppAuth(memo = "托盘完成") |
| | | public synchronized R TaskArmWorkspaceStatus(@RequestHeader(required = false) String appkey, |
| | | @RequestBody TaskArmWorkspaceStatusParam param, |
| | | HttpServletRequest request) { |
| | | @RequestBody TaskArmWorkspaceStatusParam param, |
| | | HttpServletRequest request) { |
| | | auth(appkey, param, request); |
| | | if (Cools.isEmpty(param)) { |
| | | return R.parse(BaseRes.PARAM); |
| | |
| | | @PostMapping("/arm/task/loc_status") |
| | | // @AppAuth(memo = "托盘就绪状态查询") |
| | | public synchronized R TaskArmLocStatus(@RequestHeader(required = false) String appkey, |
| | | @RequestBody ArmOKParam param, |
| | | HttpServletRequest request) { |
| | | @RequestBody ArmOKParam param, |
| | | HttpServletRequest request) { |
| | | auth(appkey, param, request); |
| | | if (Cools.isEmpty(param)) { |
| | | return R.parse(BaseRes.PARAM); |
| | |
| | | @PostMapping("/armAbnormalOperation") |
| | | // @AppAuth(memo = "异常上报") |
| | | public synchronized R ArmAbnormalOperation(@RequestHeader(required = false) String appkey, |
| | | @RequestBody TaskArmErrorParam param, |
| | | HttpServletRequest request) { |
| | | @RequestBody TaskArmErrorParam param, |
| | | HttpServletRequest request) { |
| | | auth(appkey, param, request); |
| | | if (Cools.isEmpty(param.getArm_no())) { |
| | | return R.error("机械臂编号[Arm_no]不能为空"); |
| | |
| | | int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet", mesToCombParam.getPalletId())); |
| | | int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",mesToCombParam.getPalletId()).eq("io_status", "Y")); |
| | | if (countLoc > 0 || countWrk > 0 || countwait > 0) { |
| | | return R.error(mesToCombParam.getPalletId()+"-工作档/库存条码数据已存在,无法删除"); |
| | | return R.error(mesToCombParam.getPalletId()+"-工作档/库存条码数据已存在,无法删除"); |
| | | } |
| | | waitPakinService.delete(new EntityWrapper<WaitPakin>().eq("zpallet",mesToCombParam.getPalletId())); |
| | | boo = true; |
| | |
| | | |
| | | AxisBean cube5 = new AxisBean(); |
| | | cube5.setName("入库体积"); |
| | | AxisBean cube15 = new AxisBean(); |
| | | cube15.setName("出库体积"); |
| | | List<WorkCubeTotalAxis> workCubeTotalAxes = reportQueryMapper.getCubeTotal(); |
| | | List<WorkCubeTotalAxis> workCubeTotalAxes = reportQueryMapper.getInboundCubeTotal(); |
| | | Map<String, WorkCubeTotalAxis> cubeMap = new HashMap<String, WorkCubeTotalAxis>(); |
| | | if (workCubeTotalAxes != null) { |
| | | for (WorkCubeTotalAxis w : workCubeTotalAxes) { |
| | |
| | | } |
| | | } |
| | | ArrayList<Number> data4 = new ArrayList<Number>(); |
| | | ArrayList<Number> data5 = new ArrayList<Number>(); |
| | | SimpleDateFormat sfCube = new SimpleDateFormat("yyyy-MM-dd"); |
| | | Calendar calendarCube = Calendar.getInstance(); |
| | | calendarCube.add(Calendar.DATE, -12); |
| | |
| | | String str = sfCube.format(calendarCube.getTime()); |
| | | WorkCubeTotalAxis cubeAxis = cubeMap.get(str); |
| | | data4.add(cubeAxis == null || cubeAxis.getCube5Total() == null ? 0 : cubeAxis.getCube5Total()); |
| | | data5.add(cubeAxis == null || cubeAxis.getCube15Total() == null ? 0 : cubeAxis.getCube15Total()); |
| | | } |
| | | Number[] array4 = new Number[data4.size()]; |
| | | cube5.setData(data4.toArray(array4)); |
| | | list.add(cube5); |
| | | Number[] array5 = new Number[data5.size()]; |
| | | cube15.setData(data5.toArray(array5)); |
| | | list.add(cube15); |
| | | |
| | | } |
| | | map.put("rows",list); |
| | | return R.ok(map); |
| | |
| | | * 入出库按小时折线:横轴为「当前整点起向前共 12 小时」滚动窗口,与库表 ymd(yyyy-MM-dd HH)对齐 |
| | | */ |
| | | @GetMapping("/line/charts/hourly") |
| | | public synchronized R locIoLineChartsHourly() { |
| | | public synchronized R locIoLineChartsHourly() { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | List<AxisBean> list = new ArrayList<>(); |
| | | |
| | |
| | | ArrayList<Integer> data2 = new ArrayList<>(); |
| | | ArrayList<Double> data3 = new ArrayList<>(); |
| | | ArrayList<Double> data4 = new ArrayList<>(); |
| | | ArrayList<Double> data5 = new ArrayList<>(); |
| | | List<String> categories = new ArrayList<>(); |
| | | |
| | | final int n = 12; |
| | |
| | | int outV = 0; |
| | | double inC = 0; |
| | | double outC = 0; |
| | | double outD = 0; |
| | | for (WorkChartAxis w : listChart) { |
| | | if (w.getYmd() != null && key.equals(w.getYmd().trim())) { |
| | | inV = w.getInqty(); |
| | | outV = w.getOutqty(); |
| | | inC = w.getCubeInqty(); |
| | | outC = w.getCubeOutqty(); |
| | | outD = w.getOutTeu(); |
| | | break; |
| | | } |
| | | } |
| | |
| | | data2.add(outV); |
| | | data3.add(inC); |
| | | data4.add(outC); |
| | | data5.add(outD); |
| | | calendar.add(Calendar.HOUR_OF_DAY, 1); |
| | | } |
| | | |
| | |
| | | if (data3.size() >0) { |
| | | AxisBean cubeInqty = new AxisBean(); |
| | | cubeInqty.setName("入库体积"); |
| | | Integer[] array3 = new Integer[data3.size()]; |
| | | Double [] array3 = new Double[data3.size()]; |
| | | cubeInqty.setData(data3.toArray(array3)); |
| | | list.add(cubeInqty); |
| | | } |
| | | |
| | | if (data3.size() >0) { |
| | | if (data4.size() >0) { |
| | | AxisBean cubeOutqty = new AxisBean(); |
| | | cubeOutqty.setName("出库体积"); |
| | | Integer[] array4 = new Integer[data4.size()]; |
| | | Double[] array4 = new Double[data4.size()]; |
| | | cubeOutqty.setData(data4.toArray(array4)); |
| | | list.add(cubeOutqty); |
| | | } |
| | | |
| | | if (data5.size() >0) { |
| | | AxisBean cubeOutqty = new AxisBean(); |
| | | cubeOutqty.setName("出库TEU"); |
| | | Double[] array5 = new Double[data4.size()]; |
| | | cubeOutqty.setData(data5.toArray(array5)); |
| | | list.add(cubeOutqty); |
| | | } |
| | | |
| | | |
| | | map.put("categories", categories); |
| | | map.put("rows", list); |
| | | return R.ok(map); |
| | |
| | | |
| | | // 总库位数 |
| | | Integer total1 = (int) Arith.add(0, locUseRate.getFqty(), locUseRate.getOqty(), locUseRate.getUqty(), locUseRate.getXqty()); |
| | | Integer total = total1>40000?40000:total1; |
| | | Integer total = total1>40000?6528:total1; |
| | | // 使用中 |
| | | Integer used = locUseRate.getFqty() + locUseRate.getUqty(); |
| | | // 库位使用率 |
| | |
| | | Integer count = 0; |
| | | String supp = ""; |
| | | //该订单累计入出库件数 |
| | | List<WrkMast> orderNo = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("user_no", wrkMast.getUserNo())); |
| | | List<WrkMastLog> userNo = wrkMastLogService.selectList(new EntityWrapper<WrkMastLog>().eq("user_no", wrkMast.getUserNo()).eq("wrk_sts",15L)); |
| | | Integer ioType = wrkMast.getIoType(); |
| | | if (ioType != null && ioType < 100) { |
| | | if (orderNo != null && orderNo.size() > 0) { |
| | | count = orderNo.size(); |
| | | } |
| | | if (userNo != null && userNo.size() > 0) { |
| | | count = userNo.size()+count+1; |
| | | } |
| | | supp = count + ""; |
| | | Date endTime = new Date(); |
| | | Date startTime = resolveBusinessDayStart(endTime); |
| | | Long inboundCount = wrkMastLogService.countInboundHistoryBySourceStaNo(startTime, endTime, resolveInboundStationNo(wrkMast)); |
| | | supp = String.valueOf(inboundCount); |
| | | }else { |
| | | List<WrkMast> orderNo = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("user_no", wrkMast.getUserNo())); |
| | | List<WrkMastLog> userNo = wrkMastLogService.selectList(new EntityWrapper<WrkMastLog>().eq("user_no", wrkMast.getUserNo()).eq("wrk_sts",15L)); |
| | | if (userNo != null && userNo.size() > 0) { |
| | | count = userNo.size()+1; |
| | | } |
| | | if (orderNo != null && orderNo.size() > 0) { |
| | | count=orderNo.size()+count; |
| | | } |
| | | supp = count + ""; |
| | | } |
| | | map.put("supp", supp); |
| | | |
| | | //耗时 |
| | | String costTime = resolveCostTime(wrkMast, wrkDetls); |
| | | map.put("costTime", costTime); |
| | | Long costTime = resolveCostTime(wrkMast); |
| | | map.put("costTime", String.valueOf(costTime)); |
| | | |
| | | return R.ok().add(map); |
| | | } |
| | | |
| | | private String resolveCostTime(WrkMast wrkMast, List<WrkDetl> wrkDetls) { |
| | | private Long resolveCostTime(WrkMast wrkMast) { |
| | | if (wrkMast == null || wrkMast.getIoType() == null) { |
| | | return "0"; |
| | | return 0L; |
| | | } |
| | | |
| | | Date createTime; |
| | | if (wrkMast.getIoType() < 100) { |
| | | createTime = resolveInboundTaskCreateTime(wrkMast, wrkDetls); |
| | | } else { |
| | | createTime = resolveTaskCreateTime(wrkMast); |
| | | } |
| | | |
| | | if (createTime == null) { |
| | | return "0"; |
| | | } |
| | | |
| | | long minutes = TimeUnit.MILLISECONDS.toMinutes(System.currentTimeMillis() - createTime.getTime()); |
| | | if (minutes < 0L) { |
| | | minutes = 0L; |
| | | } |
| | | return String.valueOf(minutes); |
| | | Date endTime = new Date(); |
| | | Date startTime = resolveBusinessDayStart(endTime); |
| | | Integer wrkSts = wrkMast.getIoType() < 100 ? 5 : 15; |
| | | return wrkMastLogService.sumCostTimeByWrkSts(startTime, endTime, wrkSts); |
| | | } |
| | | |
| | | private Date resolveInboundTaskCreateTime(WrkMast wrkMast, List<WrkDetl> wrkDetls) { |
| | | private Integer resolveInboundStationNo(WrkMast wrkMast) { |
| | | if (wrkMast == null) { |
| | | return null; |
| | | } |
| | | |
| | | if (!Cools.isEmpty(wrkMast.getUserNo())) { |
| | | Date userNoCreateTime = resolveUserNoCreateTime(wrkMast.getUserNo()); |
| | | if (userNoCreateTime != null) { |
| | | return userNoCreateTime; |
| | | } |
| | | } |
| | | |
| | | String orderNo = resolveOrderNo(wrkMast, wrkDetls); |
| | | if (Cools.isEmpty(orderNo)) { |
| | | return null; |
| | | } |
| | | return resolveOrderCreateTime(orderNo); |
| | | return wrkMast.getSourceStaNo() == null ? wrkMast.getStaNo() : wrkMast.getSourceStaNo(); |
| | | } |
| | | |
| | | private Date resolveUserNoCreateTime(String userNo) { |
| | | if (Cools.isEmpty(userNo)) { |
| | | return null; |
| | | private Date resolveBusinessDayStart(Date now) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(now); |
| | | calendar.set(Calendar.HOUR_OF_DAY, 8); |
| | | calendar.set(Calendar.MINUTE, 0); |
| | | calendar.set(Calendar.SECOND, 0); |
| | | calendar.set(Calendar.MILLISECOND, 0); |
| | | if (now.before(calendar.getTime())) { |
| | | calendar.add(Calendar.DATE, -1); |
| | | } |
| | | return minDate( |
| | | minCreateTime(wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("user_no", userNo))), |
| | | minCreateTime(wrkMastLogService.selectList(new EntityWrapper<WrkMastLog>().eq("user_no", userNo))) |
| | | ); |
| | | } |
| | | |
| | | private String resolveOrderNo(WrkMast wrkMast, List<WrkDetl> wrkDetls) { |
| | | if (wrkMast != null && !Cools.isEmpty(wrkMast.getUserNo())) { |
| | | return wrkMast.getUserNo(); |
| | | } |
| | | if (Cools.isEmpty(wrkDetls)) { |
| | | return null; |
| | | } |
| | | for (WrkDetl wrkDetl : wrkDetls) { |
| | | if (wrkDetl != null && !Cools.isEmpty(wrkDetl.getOrderNo())) { |
| | | return wrkDetl.getOrderNo(); |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private Date resolveOrderCreateTime(String orderNo) { |
| | | if (Cools.isEmpty(orderNo)) { |
| | | return null; |
| | | } |
| | | |
| | | Date historyCreateTime = minDate( |
| | | minCreateTime(wrkMastLogService.selectList(new EntityWrapper<WrkMastLog>().eq("user_no", orderNo))), |
| | | minCreateTime(wrkDetlLogService.selectList(new EntityWrapper<WrkDetlLog>().eq("order_no", orderNo))) |
| | | ); |
| | | Date currentCreateTime = minDate( |
| | | minCreateTime(wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("user_no", orderNo))), |
| | | minCreateTime(wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("order_no", orderNo))) |
| | | ); |
| | | return minDate(historyCreateTime, currentCreateTime); |
| | | } |
| | | |
| | | private Date minDate(Date first, Date second) { |
| | | if (first == null) { |
| | | return second; |
| | | } |
| | | if (second == null) { |
| | | return first; |
| | | } |
| | | return first.before(second) ? first : second; |
| | | } |
| | | |
| | | private Date resolveTaskCreateTime(WrkMast wrkMast) { |
| | | if (wrkMast == null) { |
| | | return null; |
| | | } |
| | | return minDate(minDate(wrkMast.getAppeTime(), wrkMast.getIoTime()), wrkMast.getModiTime()); |
| | | } |
| | | |
| | | private Date minCreateTime(List<?> list) { |
| | | if (Cools.isEmpty(list)) { |
| | | return null; |
| | | } |
| | | Date min = null; |
| | | for (Object item : list) { |
| | | Date createTime = resolveCreateTime(item); |
| | | if (createTime == null) { |
| | | continue; |
| | | } |
| | | if (min == null || createTime.before(min)) { |
| | | min = createTime; |
| | | } |
| | | } |
| | | return min; |
| | | } |
| | | |
| | | private Date resolveCreateTime(Object item) { |
| | | if (item instanceof WrkMast) { |
| | | WrkMast wrkMast = (WrkMast) item; |
| | | return minDate(minDate(wrkMast.getAppeTime(), wrkMast.getIoTime()), wrkMast.getModiTime()); |
| | | } |
| | | if (item instanceof WrkMastLog) { |
| | | WrkMastLog wrkMastLog = (WrkMastLog) item; |
| | | return minDate(minDate(wrkMastLog.getAppeTime(), wrkMastLog.getIoTime()), wrkMastLog.getModiTime()); |
| | | } |
| | | if (item instanceof WrkDetl) { |
| | | WrkDetl wrkDetl = (WrkDetl) item; |
| | | return minDate(minDate(wrkDetl.getAppeTime(), wrkDetl.getIoTime()), wrkDetl.getModiTime()); |
| | | } |
| | | if (item instanceof WrkDetlLog) { |
| | | WrkDetlLog wrkDetlLog = (WrkDetlLog) item; |
| | | return minDate(minDate(wrkDetlLog.getAppeTime(), wrkDetlLog.getIoTime()), wrkDetlLog.getModiTime()); |
| | | } |
| | | return null; |
| | | return calendar.getTime(); |
| | | } |
| | | } |
| | | |