Explorar el Código

權限 + 未按規劃完成 tab + lookback 對齊 + 報表檔名

production
CANCERYS\kw093 hace 16 horas
padre
commit
2df1b5c3e8
Se han modificado 5 ficheros con 27 adiciones y 7 borrados
  1. +7
    -0
      src/main/java/com/ffii/fpsms/config/security/SecurityConfig.java
  2. +2
    -2
      src/main/java/com/ffii/fpsms/modules/report/service/DoUserPickAuditReportService.kt
  3. +4
    -4
      src/main/java/com/ffii/fpsms/modules/report/web/DoUserPickAuditReportController.kt
  4. +6
    -1
      src/main/java/com/ffii/fpsms/modules/user/service/GroupService.java
  5. +8
    -0
      src/main/resources/db/changelog/changes/20260805_product_process_complete/01_product_process_complete_authority.sql

+ 7
- 0
src/main/java/com/ffii/fpsms/config/security/SecurityConfig.java Ver fichero

@@ -74,6 +74,7 @@ public class SecurityConfig {
return new BCryptPasswordEncoder();
}

/** FP-MTMS Version Checklist | Functions Ref. No. 51 | v1.0.0 | 2026-08-05 */
@Bean
@Order(1)
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
@@ -117,6 +118,12 @@ public class SecurityConfig {
.hasAuthority("ITEM_TRACING")
.requestMatchers(HttpMethod.GET, "/inventoryLotLine/trace/location/**")
.hasAuthority("ITEM_TRACING")
/* 工單 生產流程 完成工單 */
.requestMatchers(HttpMethod.POST, "/product-process/Demo/ProcessLine/complete/**")
.hasAuthority("PRODUCT_PROCESS")
/* 工序「已完成」(Just Pass):僅 ADMIN */
.requestMatchers(HttpMethod.POST, "/product-process/Demo/ProcessLine/pass/**")
.hasAuthority("ADMIN")
.anyRequest().authenticated())
.httpBasic(httpBasic -> httpBasic.authenticationEntryPoint(
(request, response, authException) -> sendUnauthorizedJson(response, "Unauthorized", "UNAUTHORIZED")))


+ 2
- 2
src/main/java/com/ffii/fpsms/modules/report/service/DoUserPickAuditReportService.kt Ver fichero

@@ -8,7 +8,7 @@ class DoUserPickAuditReportService(
private val jdbcDao: JdbcDao,
) {
/**
* FP-MTMS Version Checklist | Functions Ref. No. 39 | v1.0.1 | 2026-08-05
* FP-MTMS Version Checklist | Functions Ref. No. 39 | v1.0.2 | 2026-08-05
* DO workbench user-audit rows (Just issue only).
* issueTypes may combine: 跳過提料(使用「已完成」)+多提+少提+擅自換批/揀錯批.
* 少提/多提 use POL-level SUM(stock_out_line.qty) vs pol.qty (multi-lot split OK if total matches).
@@ -183,7 +183,7 @@ class DoUserPickAuditReportService(
return jdbcDao.queryForList(sql, args) as List<Map<String, Any?>>
}

/** FP-MTMS Version Checklist | Functions Ref. No. 39 | v1.0.1 | 2026-08-05 */
/** FP-MTMS Version Checklist | Functions Ref. No. 39 | v1.0.2 | 2026-08-05 */
fun getDistinctHandlers(): List<String> {
val sql = """
SELECT DISTINCT TRIM(COALESCE(u.name, dop.handlerName, '')) AS handler


+ 4
- 4
src/main/java/com/ffii/fpsms/modules/report/web/DoUserPickAuditReportController.kt Ver fichero

@@ -23,11 +23,11 @@ import java.io.ByteArrayOutputStream
class DoUserPickAuditReportController(
private val doUserPickAuditReportService: DoUserPickAuditReportService,
) {
/** FP-MTMS Version Checklist | Functions Ref. No. 39 | v1.0.1 | 2026-08-05 */
/** FP-MTMS Version Checklist | Functions Ref. No. 39 | v1.0.2 | 2026-08-05 */
@GetMapping("/do-user-pick-audit-handlers")
fun handlers(): List<String> = doUserPickAuditReportService.getDistinctHandlers()

/** FP-MTMS Version Checklist | Functions Ref. No. 39 | v1.0.1 | 2026-08-05 */
/** FP-MTMS Version Checklist | Functions Ref. No. 39 | v1.0.2 | 2026-08-05 */
@GetMapping("/print-do-user-pick-audit-excel")
fun exportExcel(
@RequestParam(required = false) dateStart: String?,
@@ -52,8 +52,8 @@ class DoUserPickAuditReportController(
contentType = MediaType.parseMediaType(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
)
setContentDispositionFormData("attachment", "DoUserPickAudit.xlsx")
set("filename", "DoUserPickAudit.xlsx")
setContentDispositionFormData("attachment", "成品出倉揀貨合規報告.xlsx")
set("filename", "成品出倉揀貨合規報告.xlsx")
}
return ResponseEntity(bytes, headers, HttpStatus.OK)
}


+ 6
- 1
src/main/java/com/ffii/fpsms/modules/user/service/GroupService.java Ver fichero

@@ -187,6 +187,7 @@ public class GroupService extends AbstractBaseEntityService<Group, Long, GroupRe
}


/** FP-MTMS Version Checklist | Functions Ref. No. 51 | v1.0.0 | 2026-08-05 */
@Transactional(rollbackFor = Exception.class)
public List<Map<String, Object>> listAuth(Map<String, Object> args) {

@@ -200,7 +201,11 @@ public class GroupService extends AbstractBaseEntityService<Group, Long, GroupRe
sql.append(" EXISTS(SELECT 1 FROM group_authority ga WHERE a.id = ga.authId AND groupId = :groupId) AS v");
}
else if (args.containsKey("userId")) {
sql.append(" EXISTS(SELECT 1 FROM user_authority ua WHERE a.id = ua.authId AND userId = :userId) AS v");
sql.append(" (EXISTS(SELECT 1 FROM user_authority ua WHERE a.id = ua.authId AND ua.userId = :userId)"
+ " OR EXISTS(SELECT 1 FROM user_group ug"
+ " JOIN `group` g ON g.deleted = 0 AND g.id = ug.groupId"
+ " JOIN group_authority ga ON ga.groupId = ug.groupId"
+ " WHERE ug.userId = :userId AND ga.authId = a.id)) AS v");
}
else
sql.append(" 0 AS v");


+ 8
- 0
src/main/resources/db/changelog/changes/20260805_product_process_complete/01_product_process_complete_authority.sql Ver fichero

@@ -0,0 +1,8 @@
--liquibase formatted sql

--changeset fpsms:product_process_complete_authority
--preconditions onFail:MARK_RAN
--precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM authority WHERE authority = 'PRODUCT_PROCESS'
--comment: FP-MTMS Version Checklist | Functions Ref. No. 51 | v1.0.0 | 2026-08-05 — Allow completing job order product process lines (工單 生產流程 完成工單)
INSERT IGNORE INTO `authority` (`authority`, `name`, `module`, `description`)
VALUES ('PRODUCT_PROCESS', '工單 生產流程 完成工單', 'JOB_ORDER', 'Allow completing job order product process lines');

Cargando…
Cancelar
Guardar