| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # å¾
æ¥å·¥å°è´¦ æ¥å£æ¹æ¡ |
| | | |
| | | ## éæ± |
| | | |
| | | æäº§åéè¦ä¸ä¸ª"å¾
æ¥å·¥å°è´¦"ï¼å±ç¤ºå·²æäº§ä½å°æªæ¥å·¥å®çä»»å¡ï¼æ ¸å¿æ¯ **å¾
æ¥å·¥æ°é = æäº§æ°é â å·²æ¥å·¥æ°é**ã |
| | | |
| | | æ°æ®æºç¨ `mes_pro_task`ï¼ä»»å¡çº§æ±æ»ï¼æ£ç¡®--å¾
æ¥å·¥å¤©ç¶æ¯ä»»å¡çº§æ¦å¿µï¼å·²ç产æ°é producedQuantity ç±æ¥å·¥å®¡æ¹ç´¯å ååï¼æ éç°ç® feedbackï¼ã |
| | | |
| | | ## æ ¸å¿è¿æ»¤ä¸å段 |
| | | |
| | | - **è¿æ»¤**ï¼`status = PREPARE(0)`ï¼è¿è¡ä¸ï¼æé¤å·²å®æ/已忶ï¼AND `(quantity - IFNULL(produced_quantity,0)) > 0`ï¼ä»æå¾
æ¥å·¥éï¼ |
| | | - **æ°å¢å±ç¤ºå段**ï¼ |
| | | - `pendingQuantity` å¾
æ¥å·¥æ°é = `quantity - producedQuantity` |
| | | - `feedbackRate` æ¥å·¥å®æç = `producedQuantity / quantity à 100`ï¼æäº§æ°é为 0 æ¶ç» 0ï¼ |
| | | - å
¶ä½å±ç¤ºå段å¤ç¨ç°æ `MesProTaskRespVO`ï¼å·¥åå·ã产åãå·¥åºãå·¥ä½ã客æ·ãæäº§/å·²ç产/åæ ¼/ä¸è¯æ°éãéæ±æ¥æçï¼å·²ç± `buildTaskRespVOList` æ¹éå
³èæ¼å¥½ï¼ |
| | | |
| | | ## æ¹å¨æ¸
å |
| | | |
| | | ### 1. `MesProTaskRespVO` å ä¸¤ä¸ªåæ®µ |
| | | |
| | | `controller/admin/pro/task/vo/MesProTaskRespVO.java`ï¼å¨ `unqualifyQuantity` ä¹åï¼ |
| | | |
| | | ```java |
| | | @Schema(description = "å¾
æ¥å·¥æ°é", example = "50.00") |
| | | private BigDecimal pendingQuantity; |
| | | |
| | | @Schema(description = "æ¥å·¥å®æç(%)", example = "50.00") |
| | | private BigDecimal feedbackRate; |
| | | ``` |
| | | |
| | | ### 2. `MesProTaskController.buildTaskRespVOList` 计ç®è¿ä¸¤ä¸ªå段 |
| | | |
| | | å¨ `convertList` ç lambda éï¼`BeanUtils.toBean` ä¹å追å ï¼ |
| | | |
| | | ```java |
| | | BigDecimal quantity = task.getQuantity() == null ? BigDecimal.ZERO : task.getQuantity(); |
| | | BigDecimal produced = task.getProducedQuantity() == null ? BigDecimal.ZERO : task.getProducedQuantity(); |
| | | vo.setPendingQuantity(quantity.subtract(produced)); |
| | | vo.setFeedbackRate(quantity.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO |
| | | : produced.multiply(new BigDecimal("100")).divide(quantity, 2, RoundingMode.HALF_UP)); |
| | | ``` |
| | | |
| | | > ç°æ page / get / gantt é½èµ° `buildTaskRespVOList`ï¼å è¿ä¸¤ååå®ä»¬ä¹ä¼å¸¦åºï¼æ 害䏿´å®æ´ã |
| | | |
| | | ### 3. `MesProTaskMapper` å `selectPendingFeedbackPage` |
| | | |
| | | `dal/mysql/pro/task/MesProTaskMapper.java`ï¼ä»¿ `selectPage`ï¼å¼ºå¶ `status=PREPARE` + å¾
æ¥å·¥é>0ï¼å¤ç¨å
¶ä½è¿æ»¤æ¡ä»¶ï¼ä¸éè¦ checkFlag joinï¼ |
| | | |
| | | ```java |
| | | default PageResult<MesProTaskDO> selectPendingFeedbackPage(MesProTaskPageReqVO reqVO) { |
| | | MPJLambdaWrapperX<MesProTaskDO> query = new MPJLambdaWrapperX<>(); |
| | | query.selectAll(MesProTaskDO.class); |
| | | query.eq(MesProTaskDO::getStatus, MesProTaskStatusEnum.PREPARE.getStatus()); // å¾
æ¥å·¥=è¿è¡ä¸ |
| | | query.apply("(quantity - IFNULL(produced_quantity, 0)) > 0"); // 仿å¾
æ¥å·¥é |
| | | query.likeIfPresent(MesProTaskDO::getCode, reqVO.getCode()) |
| | | .likeIfPresent(MesProTaskDO::getName, reqVO.getName()) |
| | | .eqIfPresent(MesProTaskDO::getWorkOrderId, reqVO.getWorkOrderId()) |
| | | .eqIfPresent(MesProTaskDO::getRouteId, reqVO.getRouteId()) |
| | | .eqIfPresent(MesProTaskDO::getProcessId, reqVO.getProcessId()) |
| | | .eqIfPresent(MesProTaskDO::getWorkstationId, reqVO.getWorkstationId()) |
| | | .betweenIfPresent(MesProTaskDO::getCreateTime, reqVO.getCreateTime()) |
| | | .orderByDesc(MesProTaskDO::getId); |
| | | return selectPage(reqVO, query); |
| | | } |
| | | ``` |
| | | |
| | | > `apply` ç¨è£¸ååï¼æ¬æ¥è¯¢æ joinï¼`quantity`/`produced_quantity` æ æ§ä¹ã`reqVO.getStatus()`/`getStatuses()` 卿¤æ¥å£è¢«å¿½ç¥ï¼å¼ºå¶ PREPAREï¼ï¼ç¬¦å"å¾
æ¥å·¥"è¯ä¹ã |
| | | |
| | | ### 4. `MesProTaskService` + Impl å æ¹æ³ |
| | | |
| | | æ¥å£å ï¼ |
| | | |
| | | ```java |
| | | PageResult<MesProTaskDO> getPendingFeedbackPage(MesProTaskPageReqVO pageReqVO); |
| | | ``` |
| | | |
| | | Implï¼ |
| | | |
| | | ```java |
| | | @Override |
| | | public PageResult<MesProTaskDO> getPendingFeedbackPage(MesProTaskPageReqVO pageReqVO) { |
| | | return taskMapper.selectPendingFeedbackPage(pageReqVO); |
| | | } |
| | | ``` |
| | | |
| | | ### 5. `MesProTaskController` å æ¥å£ |
| | | |
| | | å¤ç¨ `buildTaskRespVOList` æ¼å±ç¤ºå段ï¼å¤ç¨ `MesProTaskPageReqVO` åè¿æ»¤ï¼ |
| | | |
| | | ```java |
| | | @GetMapping("/pending-feedback-page") |
| | | @Operation(summary = "è·å¾å¾
æ¥å·¥å°è´¦å页", description = "å·²æäº§ä¸ä»æå¾
æ¥å·¥æ°éçä»»å¡ï¼ç¶æ=è¿è¡ä¸ï¼") |
| | | @PreAuthorize("@ss.hasPermission('mes:pro-task:query')") |
| | | public CommonResult<PageResult<MesProTaskRespVO>> getPendingFeedbackPage(@Valid MesProTaskPageReqVO pageReqVO) { |
| | | PageResult<MesProTaskDO> pageResult = taskService.getPendingFeedbackPage(pageReqVO); |
| | | return success(new PageResult<>(buildTaskRespVOList(pageResult.getList()), pageResult.getTotal())); |
| | | } |
| | | ``` |
| | | |
| | | ### 6. åç«¯ææ¡£ |
| | | |
| | | æ frontend-docs è§åè¾åº `docs/task_pending_feedback_ledger.md`ï¼æ¥å£è·¯å¾ãè¿æ»¤åæ°ãååºå段ï¼å« pendingQuantity/feedbackRateï¼ãåç«¯è¡¨æ ¼å建议ã |
| | | |
| | | ### 7. ç¼è¯æ ¡éª |
| | | |
| | | `mvn compile -pl yudao-module-mes -am -Dmaven.compiler.source=25 -Dmaven.compiler.target=25 -q`ï¼æ compile-check è§åï¼ |
| | | |
| | | ## è¡ä¸ºè¯´æ |
| | | |
| | | | 任塿
åµ | æ¯å¦åºç°å¨å¾
æ¥å·¥å°è´¦ | |
| | | |---------|--------------------| |
| | | | ç¶æ=è¿è¡ä¸ï¼å·²æ¥å·¥ < æäº§ | â
åºç°ï¼pendingQuantity>0 | |
| | | | ç¶æ=è¿è¡ä¸ï¼å·²æ¥å·¥ = æäº§ï¼æ¥æ»¡äºä½å·¥å没å®å·¥ï¼| â ä¸åºç°ï¼pendingQuantity=0ï¼| |
| | | | ç¶æ=已宿/已忶 | â ä¸åºç° | |
| | | | ç¶æ=è¿è¡ä¸ï¼ä»æªæ¥å·¥ | â
åºç°ï¼pendingQuantity=æäº§æ°é | |
| | | |
| | | > å·²æ¥å·¥=æäº§ä½ä»»å¡ä» PREPARE çä»»å¡ä¸å¨å°è´¦éï¼æ²¡å¾
æ¥å·¥éäºï¼ãè¥æ³ç"ææè¿è¡ä¸ä»»å¡"ï¼ç¨ç°æ `/mes/pro/task/page?status=0`ã |
| | | |
| | | ## 䏿¹å¨é¡¹ |
| | | |
| | | - æ¥å·¥ç¸å
³é»è¾ä¸å¨ |
| | | - `MesProTaskPageReqVO` ä¸å¨ï¼å¤ç¨ï¼ |
| | | - `selectPage` åé»è¾ä¸å¨ |
| | | - 䏿°å»ºç¬ç« ReqVO/RespVOï¼å¤ç¨ç°æï¼æå°æ¹å¨ï¼ |
| | | |
| | | ## å¾
确认 |
| | | |
| | | - `feedbackRate`ï¼å®æçï¼è¦ä¸è¦ï¼é»è®¤å ä¸ï¼å±ç¤ºæ´ç´è§ï¼ä¸è¦å¯å»æã |
| | | - æ¯å¦éè¦"æå¾
æ¥å·¥æ°éååº"æåï¼å½åæ id ååºã坿¹ `orderByDesc(pendingQuantity)`ï¼ä½ MPJ 对计ç®åæåºé raw SQLï¼ç¥ç¹ãé»è®¤ id ååºï¼éè¦å说ã |