| 2026-05-23 | yuan | ![]() |
| 2026-05-23 | yuan | ![]() |
| 2026-05-23 | gongchunyi | ![]() |
| 2026-05-23 | gongchunyi | ![]() |
| 2026-05-23 | gongchunyi | ![]() |
| 2026-05-23 | gongchunyi | ![]() |
| 2026-05-23 | gongchunyi | ![]() |
| 2026-05-23 | yuan | ![]() |
| 2026-05-23 | yuan | ![]() |
| 2026-05-23 | yuan | ![]() |
| 2026-05-23 | yuan | ![]() |
| 2026-05-23 | zss | ![]() |
doc/20260523_ ÐͬÉóÅúÐÂÔö³ö²îʱ¼äºÍ½áÊøÊ±¼ä.sql
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,3 @@ ALTER TABLE approve_process ADD COLUMN start_date_time datetime DEFAULT NULL COMMENT 'åºå·®å¼å§æ¶é´', ADD COLUMN end_date_time datetime DEFAULT NULL COMMENT 'åºå·®ç»ææ¶é´'; doc/add_rating_evaluation_fields.sql
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,3 @@ ALTER TABLE after_sales_service ADD COLUMN rating DECIMAL(2, 1) COMMENT 'è¯å(1-5åï¼å¯ä¿ç1ä½å°æ°)' AFTER dis_date, ADD COLUMN evaluation VARCHAR(1000) COMMENT 'è¯ä»·å 容æè¿°' AFTER rating; src/main/java/com/ruoyi/aftersalesservice/dto/AfterSalesServiceExeclDto.java
@@ -62,4 +62,12 @@ @Excel(name = "å ³èé¨é¨") private String deptName; @Schema(description = "è¯å") @Excel(name = "è¯å") private String rating; @Schema(description = "è¯ä»·å 容æè¿°") @Excel(name = "è¯ä»·å 容æè¿°") private String evaluation; } src/main/java/com/ruoyi/aftersalesservice/pojo/AfterSalesService.java
@@ -157,8 +157,13 @@ @Schema(description = "产ååå·IDs") private String productModelIds; @Schema(description = "è¯å(1-5å)") @Excel(name = "è¯å") private BigDecimal rating; @Schema(description = "è¯ä»·å 容æè¿°") @Excel(name = "è¯ä»·å 容æè¿°") private String evaluation; @TableField(fill = FieldFill.INSERT) private Long deptId; src/main/java/com/ruoyi/approve/bean/vo/ApproveGetAndUpdateVo.java
@@ -9,6 +9,7 @@ import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Date; import java.util.List; @@ -45,6 +46,14 @@ @DateTimeFormat(pattern = "yyyy-MM-dd") private Date endDate; @JsonFormat(pattern = "yyyy-MM-dd HH:mm") @Schema(description = "åºå·®å¼å§æ¶é´") private LocalDateTime startDateTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm") @Schema(description = "åºå·®ç»ææ¶é´") private LocalDateTime endDateTime; private BigDecimal price; private String location; src/main/java/com/ruoyi/approve/bean/vo/ApproveProcessVO.java
@@ -8,6 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Date; import java.util.List; @@ -58,6 +59,14 @@ @DateTimeFormat(pattern = "yyyy-MM-dd") private Date endDate; @JsonFormat(pattern = "yyyy-MM-dd HH:mm") @Schema(description = "åºå·®å¼å§æ¶é´") private LocalDateTime startDateTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm") @Schema(description = "åºå·®ç»ææ¶é´") private LocalDateTime endDateTime; private BigDecimal price; private String location; src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
@@ -151,6 +151,16 @@ @DateTimeFormat(pattern = "yyyy-MM-dd") private Date endDate; @Excel(name = "åºå·®å¼å§æ¶é´", dateFormat = "yyyy-MM-dd HH:mm", width = 30) @JsonFormat(pattern = "yyyy-MM-dd HH:mm") @Schema(description = "åºå·®å¼å§æ¶é´") private LocalDateTime startDateTime; @Excel(name = "åºå·®ç»ææ¶é´", dateFormat = "yyyy-MM-dd HH:mm", width = 30) @JsonFormat(pattern = "yyyy-MM-dd HH:mm") @Schema(description = "åºå·®ç»ææ¶é´") private LocalDateTime endDateTime; private BigDecimal price; private String location; src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -113,6 +113,8 @@ approveProcess.setPrice(approveProcessVO.getPrice()); approveProcess.setStartDate(approveProcessVO.getStartDate()); approveProcess.setEndDate(approveProcessVO.getEndDate()); approveProcess.setStartDateTime(approveProcessVO.getStartDateTime()); approveProcess.setEndDateTime(approveProcessVO.getEndDateTime()); approveProcess.setApproveStatus(0); approveProcess.setApproveDelete(0); approveProcess.setApproveType(approveProcessVO.getApproveType()); src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java
@@ -62,8 +62,8 @@ @Schema(description = "æåæ§è¡æ¶é´") private LocalDateTime lastExecutionTime; @Schema(description = "æ¯å¦æ¿æ´»") private boolean isActive; @Schema(description = "æ¯å¦æ¿æ´», 1=å¯ç¨, 0=åç¨") private Integer isActive; @Schema(description = "夿³¨") @Excel(name = "夿³¨") src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java
@@ -25,13 +25,25 @@ private final Scheduler scheduler; /** * æ·»å æ°ä»»å¡å°è°åº¦å¨ * æ·»å ææ´æ°ä»»å¡å°è°åº¦å¨ */ public void scheduleMaintenanceTask(MaintenanceTask task){ try { JobDetail jobDetail = buildJobDetail(task); Trigger trigger = buildJobTrigger(task, jobDetail); scheduler.scheduleJob(jobDetail, trigger); // æ£æ¥è§¦å卿¯å¦å·²åå¨ TriggerKey triggerKey = trigger.getKey(); Trigger existingTrigger = scheduler.getTrigger(triggerKey); if (existingTrigger != null) { // 触åå¨å·²åå¨ï¼æ´æ°å® scheduler.rescheduleJob(triggerKey, trigger); } else { // 触åå¨ä¸åå¨ï¼å ç¡®ä¿ Job åå¨ï¼ç¶åè°åº¦è§¦åå¨ scheduler.addJob(jobDetail, true); scheduler.scheduleJob(trigger); } }catch (SchedulerException e){ log.error("SchedulerException scheduleMaintenanceTask ERROR",e); throw new RuntimeException(e); @@ -45,26 +57,41 @@ try{ TriggerKey triggerKey = new TriggerKey("triggerMaintenanceTask_" + task.getId()); // è·åç°æè§¦åå¨å¹¶è½¬æ¢ä¸º CronTrigger // è·åç°æè§¦åå¨ Trigger oldTrigger = scheduler.getTrigger(triggerKey); // æå»ºæ°ç JobDetail å Trigger JobDetail jobDetail = buildJobDetail(task); Trigger newTrigger = buildJobTrigger(task, jobDetail); if (oldTrigger == null) { // 触åå¨ä¸åå¨ï¼è¯´æä»»å¡ä¹å被å é¤è¿ // å ç¡®ä¿ Job åå¨ï¼ç¶åè°åº¦è§¦åå¨ scheduler.addJob(jobDetail, true); scheduler.scheduleJob(newTrigger); return; } // 触åå¨åå¨ï¼ç´æ¥æ´æ° if (!(oldTrigger instanceof CronTrigger)) { throw new SchedulerException("Existing trigger is not a CronTrigger"); } // 3. æå»ºCronTriggerï¼ç¡®ä¿æä¹ åé ç½® CronTrigger newTrigger = TriggerBuilder.newTrigger() .withIdentity(triggerKey) // å¯ä¸æ è¯ï¼ç¨äºæä¹ ååå¨ .withDescription(task.getTaskName() + "_TRIGGER") // 触åå¨æè¿° .forJob(oldTrigger.getJobKey()) // å ³è对åºçJob // æå»ºæ°ç CronTrigger CronTrigger cronTrigger = TriggerBuilder.newTrigger() .withIdentity(triggerKey) .withDescription(task.getTaskName() + "_TRIGGER") .forJob(oldTrigger.getJobKey()) .withSchedule(CronScheduleBuilder .cronSchedule(convertToCronExpression(task)) // éè¿æ§è¡æ¶ççç¥ï¼æ ¹æ®ä¸å¡è°æ´ï¼ .cronSchedule(convertToCronExpression(task)) .withMisfireHandlingInstructionDoNothing() ) // 4. 设置å¼å§æ¶é´ï¼è¥ä¸ºnullåç«å³çæï¼ .startAt(task.getNextExecutionTime() != null ? Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant()) : new Date()) .build(); scheduler.rescheduleJob(triggerKey, newTrigger); scheduler.rescheduleJob(triggerKey, cronTrigger); }catch (SchedulerException e){ log.error("SchedulerException rescheduleMaintenanceTask ERROR",e); throw new RuntimeException(e); @@ -93,6 +120,7 @@ public void unscheduleMaintenanceTask(Long taskId){ try { JobKey jobKey = new JobKey("MaintenanceTask_" + taskId); // å é¤ Job ä¼èªå¨å é¤å ³èç Trigger scheduler.deleteJob(jobKey); }catch (SchedulerException e){ log.error("SchedulerException unscheduleMaintenanceTask ERROR",e); src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java
@@ -67,7 +67,6 @@ @Override public AjaxResult add(MaintenanceTask maintenanceTask) { maintenanceTask.setActive(true); // 计ç®é¦æ¬¡æ§è¡æ¶é´ TimingTask task = new TimingTask(); task.setFrequencyType(maintenanceTask.getFrequencyType()); @@ -76,7 +75,10 @@ maintenanceTask.setNextExecutionTime(firstExecutionTime); int insert = maintenanceTaskMapper.insert(maintenanceTask); if (insert > 0) { maintenanceTaskScheduler.scheduleMaintenanceTask(maintenanceTask); // åªæå½ isActive 为 1 æ¶ææ·»å å°å®æ¶ä»»å¡è°åº¦å¨ if (maintenanceTask.getIsActive() != null && maintenanceTask.getIsActive() == 1) { maintenanceTaskScheduler.scheduleMaintenanceTask(maintenanceTask); } } return AjaxResult.success("æ·»å æå"); } @@ -87,22 +89,50 @@ if (maintenanceTask1 == null) { return AjaxResult.warn("æ²¡ææ¤æ°æ®"); } // ä¿åæ§ç isActive ç¶æ Integer oldIsActive = maintenanceTask1.getIsActive(); Integer newIsActive = maintenanceTask.getIsActive(); BeanUtils.copyProperties(maintenanceTask, maintenanceTask1); int update = maintenanceTaskMapper.updateById(maintenanceTask1); if (update > 0) { maintenanceTaskScheduler.rescheduleMaintenanceTask(maintenanceTask1); // å¤ç isActive ç¶æåå if (newIsActive != null && newIsActive == 1) { // æ°ç¶æä¸ºå¯ç¨ï¼æ·»å å°å®æ¶ä»»å¡è°åº¦å¨ if (oldIsActive == null || oldIsActive != 1) { // 仿ªå¯ç¨å为å¯ç¨ï¼æ·»å å°è°åº¦å¨ maintenanceTaskScheduler.scheduleMaintenanceTask(maintenanceTask1); } else { // å·²ç»å¯ç¨ï¼æ´æ°è°åº¦å¨ä¸çä»»å¡ maintenanceTaskScheduler.rescheduleMaintenanceTask(maintenanceTask1); } } else { // æ°ç¶æä¸ºåç¨ï¼ä»å®æ¶ä»»å¡è°åº¦å¨ä¸ç§»é¤ if (oldIsActive != null && oldIsActive == 1) { maintenanceTaskScheduler.unscheduleMaintenanceTask(maintenanceTask1.getId()); } } } return AjaxResult.success("æ´æ°æå"); } @Override public AjaxResult delete(List<Long> ids) { // å ä»å®æ¶ä»»å¡è°åº¦å¨ä¸ç§»é¤ææå¾ å é¤çä»»å¡ ids.forEach(id -> { try { maintenanceTaskScheduler.unscheduleMaintenanceTask(id); } catch (Exception e) { log.error("å é¤å®æ¶ä»»å¡è°åº¦å¤±è´¥, id: {}", id, e); } }); // å仿°æ®åºä¸å é¤è®°å½ int delete = maintenanceTaskMapper.deleteBatchIds(ids); if (delete > 0) { ids.forEach(id -> { maintenanceTaskScheduler.unscheduleMaintenanceTask(id); }); return AjaxResult.success("å 餿å"); } return AjaxResult.success("å 餿å"); return AjaxResult.error("å é¤å¤±è´¥"); } } src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
@@ -159,6 +159,13 @@ @Schema(description = "å ³èæ£æµæ å主表id") private Long testStandardId; /** * åæ ¼ç */ @TableField(exist = false) @Excel(name = "åæ ¼ç(%)") private BigDecimal passRate; @TableField(fill = FieldFill.INSERT) private Long deptId; src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -92,11 +92,7 @@ public int submit(QualityInspect inspect) { QualityInspect qualityInspect = qualityInspectMapper.selectById(inspect.getId()); //æäº¤åå¿ é¡»å¤ææ¯å¦åæ ¼ if (ObjectUtils.isNull(qualityInspect.getCheckResult())) { throw new ServiceException("请å 夿æ¯å¦åæ ¼"); } //æäº¤åå¿ é¡»å¤ææ¯å¦åæ ¼ï¼éè¿åæ ¼æ°éåä¸åæ ¼æ°éæ¥å¤æï¼ if (ObjectUtils.isNull(qualityInspect.getQualifiedQuantity())) { throw new ServiceException("åæ ¼æ°éä¸è½ä¸ºç©º"); } src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -459,7 +459,7 @@ } } // è¿æ»¤åªä¿çåè´§è®°å½ products = products.stream().filter(product -> "å·²åè´§".equals(product.getShippingStatus())).collect(Collectors.toList()); products = products.stream().filter(product -> "å®¡æ ¸éè¿".equals(product.getShippingStatus())).collect(Collectors.toList()); if (!products.isEmpty()) { salesLedger.setHasChildren(true); salesLedger.setProductData(products); src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
@@ -26,6 +26,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -89,10 +90,14 @@ } @Override @Transactional(rollbackFor = Exception.class) public boolean delete(List<Long> ids) { List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>() .in(ShippingInfo::getId, ids)); if (CollectionUtils.isEmpty(shippingInfos)) return false; // åªæå¾ å®¡æ ¸ç¶ææè½å é¤ boolean allPending = shippingInfos.stream().allMatch(s -> "å¾ å®¡æ ¸".equals(s.getStatus())); if (!allPending) throw new RuntimeException("åªæå¾ å®¡æ ¸ç¶ææè½å é¤"); // å é¤éä»¶ commonFileService.deleteByBusinessIds(ids, FileNameType.SHIP.getValue()); // å é¤åè´§å®¡æ¹ src/main/java/com/ruoyi/stock/pojo/StockInRecord.java
@@ -43,6 +43,9 @@ @Schema(description = "夿³¨") private String remark; @Schema(description = "é¢è¦æ°é") private BigDecimal warnNum; @Schema(description = "ç±»å 0åæ ¼å ¥åº 1ä¸åæ ¼å ¥åº") private String type; src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -238,10 +238,12 @@ stockInventoryDto.setBatchNo(stockInRecord.getBatchNo()); stockInventoryDto.setQualitity(stockInRecord.getStockInNum()); stockInventoryDto.setRemark(stockInRecord.getRemark()); stockInventoryDto.setWarnNum(stockInRecord.getWarnNum()); if (stockInventory == null) { stockInventoryMapper.insert(new StockInventory() {{ setProductModelId(stockInRecord.getProductModelId()); setQualitity(stockInRecord.getStockInNum()); setWarnNum(stockInRecord.getWarnNum()); setBatchNo(stockInRecord.getBatchNo()); setRemark(stockInRecord.getRemark()); setVersion(1); src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -166,6 +166,7 @@ stockInRecordDto.setStockInNum(stockInventoryDto.getQualitity()); stockInRecordDto.setBatchNo(batchNo); stockInRecordDto.setProductModelId(stockInventoryDto.getProductModelId()); stockInRecordDto.setWarnNum(stockInventoryDto.getWarnNum()); stockInRecordDto.setType("0"); stockInRecordDto.setRemark(stockInventoryDto.getRemark()); stockInRecordService.add(stockInRecordDto); src/main/resources/mapper/approve/ApproveProcessMapper.xml
@@ -20,12 +20,14 @@ <result property="tenantId" column="tenant_id" /> <result property="approveType" column="approve_type" /> <result property="approveRemark" column="approve_remark" /> <result property="startDateTime" column="start_date_time" /> <result property="endDateTime" column="end_date_time" /> </resultMap> <sql id="Base_Column_List"> id,approve_id,approve_user,approve_dept_id,approve_dept_name,approve_user_ids, approve_user_names,approve_reason,approve_time,approve_over_time,approve_status, approve_delete,tenant_id,approve_type,approve_remark approve_delete,tenant_id,approve_type,approve_remark,start_date_time,end_date_time </sql> <select id="listPage" resultType="com.ruoyi.approve.vo.ApproveProcessVo"> select * from approve_process where approve_delete = 0 src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -4,6 +4,10 @@ <select id="qualityInspectListPage" resultType="com.ruoyi.quality.dto.QualityInspectDto"> SELECT qi.*, CASE WHEN (IFNULL(qi.qualified_quantity, 0) + IFNULL(qi.unqualified_quantity, 0)) = 0 THEN 0 ELSE ROUND(IFNULL(qi.qualified_quantity, 0) / (IFNULL(qi.qualified_quantity, 0) + IFNULL(qi.unqualified_quantity, 0)) * 100, 2) END AS passRate, <choose> <when test="qualityInspect.inspectType == 0"> pl.purchase_contract_number as purchase_contract_no @@ -59,7 +63,11 @@ <select id="qualityInspectExport" resultType="com.ruoyi.quality.pojo.QualityInspect"> SELECT * qi.*, CASE WHEN (IFNULL(qi.qualified_quantity, 0) + IFNULL(qi.unqualified_quantity, 0)) = 0 THEN 0 ELSE ROUND(IFNULL(qi.qualified_quantity, 0) / (IFNULL(qi.qualified_quantity, 0) + IFNULL(qi.unqualified_quantity, 0)) * 100, 2) END AS passRate FROM quality_inspect where inspect_type=#{qualityInspect.inspectType} @@ -86,11 +94,7 @@ </delete> <select id="getInspectStatistics" resultType="com.ruoyi.quality.dto.QualityInspectStatDto"> SELECT CASE pp.product_name WHEN 'åææ' THEN 0 WHEN 'åæå' THEN 1 WHEN 'æå' THEN 2 END AS modelType, SELECT qi.inspect_type AS modelType, IFNULL(SUM(qi.quantity), 0) AS totalCount, @@ -99,22 +103,14 @@ ELSE 0 END), 0) AS completedCount FROM product p INNER JOIN product pp ON p.parent_id = pp.id LEFT JOIN product_model pm ON pm.product_id = p.id LEFT JOIN quality_inspect qi ON qi.product_model_id = pm.id FROM quality_inspect qi WHERE pp.product_name IN ('åææ', 'åæå', 'æå') GROUP BY pp.product_name GROUP BY qi.inspect_type </select> <select id="getPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto"> SELECT t.modelType, SELECT qi.inspect_type AS modelType, COALESCE(SUM(qi.quantity), 0) AS totalCount, @@ -177,27 +173,10 @@ ), 0) * 100, 2) ) AS passRate FROM (SELECT 0 AS modelType UNION ALL SELECT 1 UNION ALL SELECT 2) t LEFT JOIN product p ON 1 = 1 LEFT JOIN product pp ON p.parent_id = pp.id LEFT JOIN product_model pm ON pm.product_id = p.id LEFT JOIN quality_inspect qi ON qi.product_model_id = pm.id AND ( (pp.product_name = 'åææ' AND t.modelType = 0) OR (pp.product_name = 'åæå' AND t.modelType = 1) OR (pp.product_name = 'æå' AND t.modelType = 2) ) FROM quality_inspect qi GROUP BY t.modelType ORDER BY t.modelType; GROUP BY qi.inspect_type ORDER BY qi.inspect_type; </select> @@ -289,18 +268,10 @@ ) AS passRate FROM base b LEFT JOIN product p ON 1 = 1 LEFT JOIN product pp ON p.parent_id = pp.id LEFT JOIN product_model pm ON pm.product_id = p.id LEFT JOIN quality_inspect qi ON qi.product_model_id = pm.id ON qi.inspect_type = b.modelType AND YEAR(qi.check_time) = #{year} AND MONTH(qi.check_time) = b.month_num AND ( (pp.product_name = 'åææ' AND b.modelType = 0) OR (pp.product_name = 'åæå' AND b.modelType = 1) OR (pp.product_name = 'æå' AND b.modelType = 2) ) GROUP BY b.month_num, b.modelType ORDER BY b.month_num, b.modelType; @@ -308,45 +279,58 @@ </select> <select id="getYearlyPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto"> SELECT t.modelType, SELECT qi.inspect_type AS modelType, COALESCE(SUM(qi.quantity), 0) AS totalCount, COALESCE(SUM( CASE WHEN pp.product_name = 'åææ' AND t.modelType = 0 THEN qi.quantity WHEN pp.product_name = 'åæå' AND t.modelType = 1 THEN qi.quantity WHEN pp.product_name = 'æå' AND t.modelType = 2 THEN qi.quantity WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END ), 0) AS totalCount, ), 0) AS completedCount, COALESCE(SUM( CASE WHEN pp.product_name = 'åææ' AND t.modelType = 0 THEN qi.qualified_quantity WHEN pp.product_name = 'åæå' AND t.modelType = 1 THEN qi.qualified_quantity WHEN pp.product_name = 'æå' AND t.modelType = 2 THEN qi.qualified_quantity WHEN qi.inspect_state = 1 THEN qi.qualified_quantity ELSE 0 END ), 0) AS qualifiedCount, ), 0) AS qualifiedCount, COALESCE(SUM( CASE WHEN pp.product_name = 'åææ' AND t.modelType = 0 THEN qi.unqualified_quantity WHEN pp.product_name = 'åæå' AND t.modelType = 1 THEN qi.unqualified_quantity WHEN pp.product_name = 'æå' AND t.modelType = 2 THEN qi.unqualified_quantity WHEN qi.inspect_state = 1 THEN qi.unqualified_quantity ELSE 0 END ), 0) AS unqualifiedCount FROM (SELECT 0 AS modelType UNION ALL SELECT 1 UNION ALL SELECT 2) t LEFT JOIN product p ON 1 = 1 LEFT JOIN product pp ON p.parent_id = pp.id LEFT JOIN product_model pm ON pm.product_id = p.id LEFT JOIN quality_inspect qi ON qi.product_model_id = pm.id AND YEAR(qi.check_time) = #{year} AND qi.inspect_state = 1 GROUP BY t.modelType ORDER BY t.modelType; ), 0) AS unqualifiedCount, /* 宿ç */ IF(COALESCE(SUM(qi.quantity), 0) = 0, 0, ROUND( COALESCE(SUM( CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END ), 0) / SUM(qi.quantity) * 100, 2) ) AS completionRate, /* åæ ¼ç */ IF(COALESCE(SUM( CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END ), 0) = 0, 0, ROUND( COALESCE(SUM( CASE WHEN qi.inspect_state = 1 THEN qi.qualified_quantity ELSE 0 END ), 0) / COALESCE(SUM( CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END ), 0) * 100, 2) ) AS passRate FROM quality_inspect qi WHERE YEAR(qi.check_time) = #{year} GROUP BY qi.inspect_type ORDER BY qi.inspect_type; </select> @@ -375,7 +359,7 @@ /* åææ */ COALESCE(SUM( CASE WHEN pp.product_name = 'åææ' WHEN qi.inspect_type = 0 THEN qi.quantity ELSE 0 END @@ -384,7 +368,7 @@ /* åæå */ COALESCE(SUM( CASE WHEN pp.product_name = 'åæå' WHEN qi.inspect_type = 1 THEN qi.quantity ELSE 0 END @@ -393,19 +377,15 @@ /* æå */ COALESCE(SUM( CASE WHEN pp.product_name = 'æå' WHEN qi.inspect_type = 2 THEN qi.quantity ELSE 0 END ), 0) AS outgoingCount FROM months m LEFT JOIN product p ON 1 = 1 LEFT JOIN product pp ON p.parent_id = pp.id LEFT JOIN product_model pm ON pm.product_id = p.id LEFT JOIN quality_inspect qi ON qi.product_model_id = pm.id AND qi.inspect_state = 1 ON qi.inspect_state = 1 AND YEAR(qi.check_time) = #{year} AND MONTH(qi.check_time) = m.month_num @@ -420,16 +400,8 @@ FROM quality_inspect_param qip JOIN quality_inspect qi ON qip.inspect_id = qi.id JOIN product p ON qi.product_id = p.id JOIN product pp ON p.parent_id = pp.id WHERE qi.inspect_state = 1 AND ( (#{modelType} = 1 AND pp.product_name = 'åææ') OR (#{modelType} = 2 AND pp.product_name = 'åæå') OR (#{modelType} = 3 AND pp.product_name = 'æå') ) AND qi.inspect_type = #{modelType} - 1 GROUP BY qip.parameter_item), ranked AS (SELECT name, count, src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -110,17 +110,19 @@ FROM sales_ledger GROUP BY customer_name </select> <select id="listSalesLedgerAndShipped" resultType="com.ruoyi.sales.dto.SalesLedgerDto"> select distinct sl.id as 'disId', sl.* from sales_ledger sl left join sales_ledger_product slp on sl.id = slp.sales_ledger_id left join shipping_info si on slp.id = si.sales_ledger_product_id where si.status = 'å·²åè´§' <if test="ew.customerName != null and ew.customerName != '' "> and sl.customer_name like concat('%',#{ew.customerName},'%') where si.status = 'å®¡æ ¸éè¿' <if test="ew.customerId != null and ew.customerId != '' "> and sl.customer_id = #{ew.customerId} </if> order by sl.execution_date desc </select> <select id="selectPurchaseReportVoPage" resultType="com.ruoyi.purchase.vo.PurchaseReportVo"> select sl.sales_contract_no customerContractNo, c.customer_name, src/main/resources/mapper/sales/SalesQuotationMapper.xml
@@ -9,7 +9,7 @@ FROM sales_quotation t1 LEFT JOIN approve_process t2 ON t1.quotation_no = t2.approve_reason and t2.approve_type = 6 WHERE 1=1 and t2.approve_deleted = 0 and t2.approve_delete = 0 <if test="salesQuotationDto.quotationNo != null and salesQuotationDto.quotationNo != '' "> AND t1.quotation_no LIKE CONCAT('%',#{salesQuotationDto.quotationNo},'%') </if> src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -113,7 +113,7 @@ product_model_id, MAX(create_time) as create_time, MAX(update_time) as update_time, MAX(warn_num) as warn_num, SUM(warn_num) as warn_num, MAX(version) as version, model, MAX(remark) as remark,