| @@ -1,14 +1,12 @@ | |||||
| package com.ffii.fpsms.modules.master.entity | package com.ffii.fpsms.modules.master.entity | ||||
| import com.ffii.core.support.AbstractRepository | import com.ffii.core.support.AbstractRepository | ||||
| import com.ffii.fpsms.modules.master.entity.projections.DetailedProdScheduleWithLine | |||||
| import com.ffii.fpsms.modules.master.entity.projections.ProdScheduleInfo | import com.ffii.fpsms.modules.master.entity.projections.ProdScheduleInfo | ||||
| import com.ffii.fpsms.modules.master.entity.projections.ProdScheduleWithLine | |||||
| import org.springframework.data.domain.Page | import org.springframework.data.domain.Page | ||||
| import org.springframework.data.domain.Pageable | import org.springframework.data.domain.Pageable | ||||
| import org.springframework.data.jpa.repository.Query | import org.springframework.data.jpa.repository.Query | ||||
| import org.springframework.stereotype.Repository | import org.springframework.stereotype.Repository | ||||
| import java.io.Serializable | |||||
| import java.time.LocalDate | |||||
| import java.time.LocalDateTime | import java.time.LocalDateTime | ||||
| @Repository | @Repository | ||||
| @@ -44,7 +42,7 @@ interface ProductionScheduleRepository : AbstractRepository<ProductionSchedule, | |||||
| and (:schedulePeriod = '' or datediff(schedulePeriod, coalesce(:schedulePeriod, schedulePeriod)) = 0) | and (:schedulePeriod = '' or datediff(schedulePeriod, coalesce(:schedulePeriod, schedulePeriod)) = 0) | ||||
| and (:schedulePeriodTo = '' or datediff(schedulePeriodTo, coalesce(:schedulePeriodTo, schedulePeriodTo)) = 0) | and (:schedulePeriodTo = '' or datediff(schedulePeriodTo, coalesce(:schedulePeriodTo, schedulePeriodTo)) = 0) | ||||
| and (:totalEstProdCount is null or :totalEstProdCount = '' or totalEstProdCount = :totalEstProdCount) | and (:totalEstProdCount is null or :totalEstProdCount = '' or totalEstProdCount = :totalEstProdCount) | ||||
| and (:type is null or type = :type) | |||||
| and (coalesce(:types) is null or type in :types) | |||||
| order by id desc; | order by id desc; | ||||
| """, | """, | ||||
| countQuery = | countQuery = | ||||
| @@ -67,7 +65,7 @@ interface ProductionScheduleRepository : AbstractRepository<ProductionSchedule, | |||||
| and (:schedulePeriod = '' or datediff(schedulePeriod, coalesce(:schedulePeriod, schedulePeriod)) = 0) | and (:schedulePeriod = '' or datediff(schedulePeriod, coalesce(:schedulePeriod, schedulePeriod)) = 0) | ||||
| and (:schedulePeriodTo = '' or datediff(schedulePeriodTo, coalesce(:schedulePeriodTo, schedulePeriodTo)) = 0) | and (:schedulePeriodTo = '' or datediff(schedulePeriodTo, coalesce(:schedulePeriodTo, schedulePeriodTo)) = 0) | ||||
| and (:totalEstProdCount is null or :totalEstProdCount = '' or totalEstProdCount = :totalEstProdCount) | and (:totalEstProdCount is null or :totalEstProdCount = '' or totalEstProdCount = :totalEstProdCount) | ||||
| and (:type is null or type = :type) | |||||
| and (coalesce(:types) is null or type in :types) | |||||
| order by id desc; | order by id desc; | ||||
| """, | """, | ||||
| ) | ) | ||||
| @@ -76,7 +74,90 @@ interface ProductionScheduleRepository : AbstractRepository<ProductionSchedule, | |||||
| schedulePeriod: String?, | schedulePeriod: String?, | ||||
| schedulePeriodTo: String?, | schedulePeriodTo: String?, | ||||
| totalEstProdCount: Double?, | totalEstProdCount: Double?, | ||||
| type: String?, | |||||
| types: List<String>?, | |||||
| pageable: Pageable | pageable: Pageable | ||||
| ): Page<ProdScheduleInfo> | ): Page<ProdScheduleInfo> | ||||
| @Query(nativeQuery = true, | |||||
| value = | |||||
| """ | |||||
| with prod_equip as ( | |||||
| select | |||||
| r1.pslId, | |||||
| json_array(group_concat(json_object(r1.equipName, r1.totalMinute))) as prodTimeInMinute | |||||
| from ( | |||||
| select | |||||
| psl.id as pslId, | |||||
| coalesce(e.name, 'N/A') as equipName, | |||||
| sum(coalesce(bp.prepTimeInMinute, 0) + coalesce(bp.durationInMinute, 0) + coalesce(bp.postProdTimeInMinute, 0)) as totalMinute | |||||
| from production_schedule ps | |||||
| left join production_schedule_line psl on psl.prodScheduleId = ps.id | |||||
| left join bom b on b.itemId = psl.itemId | |||||
| left join bom_process bp on bp.bomId = b.id | |||||
| left join equipment e on bp.equipmentId = e.id | |||||
| where ps.id = :id and b.id is not null | |||||
| group by psl.id, e.id | |||||
| ) r1 | |||||
| group by r1.pslId | |||||
| ), | |||||
| prod_material as ( | |||||
| select | |||||
| r2.pslId, | |||||
| json_array(group_concat(json_object('id', r2.id, 'code', r2.code, 'name', r2.name, 'type', r2.`type`, 'availableQty', r2.availableQty, 'demandQty', r2.demandQty))) as bomMaterials | |||||
| from ( | |||||
| select | |||||
| psl.id as pslId, | |||||
| bm.id, | |||||
| bmi.code, | |||||
| bmi.name, | |||||
| bmi.`type`, | |||||
| coalesce(i.onHandQty, 0) - coalesce(i.onHoldQty, 0) - coalesce(i.unavailableQty, 0) as availableQty, | |||||
| coalesce(psl.prodQty, 0) as demandQty | |||||
| from production_schedule ps | |||||
| left join production_schedule_line psl on psl.prodScheduleId = ps.id | |||||
| left join bom b on b.itemId = psl.itemId | |||||
| left join bom_material bm on bm.bomId = b.id | |||||
| left join items bmi on bmi.id = bm.itemId | |||||
| left join inventory i on i.itemId = bmi.id | |||||
| where ps.id = :id and bmi.id is not null | |||||
| group by ps.id, psl.id, bm.id, i.id | |||||
| ) r2 | |||||
| group by r2.pslId | |||||
| ) | |||||
| select | |||||
| prod.id, | |||||
| prod.scheduleAt, | |||||
| prod.totalFGType, | |||||
| prod.totalEstProdCount, | |||||
| json_array(group_concat( | |||||
| json_object('id', prod.pslId, 'bomMaterials', prod.bomMaterials, 'jobNo', prod.jobNo, 'code', prod.code, 'name', prod.name, 'type', prod.type, 'demandQty', prod.demandQty, 'prodTimeInMinute', prod.prodTimeInMinute, 'priority', prod.priority) | |||||
| )) | |||||
| from ( | |||||
| select | |||||
| ps.id, | |||||
| ps.scheduleAt, | |||||
| ps.totalFGType, | |||||
| ps.totalEstProdCount, | |||||
| psl.id as pslId, | |||||
| pm.bomMaterials, | |||||
| jo.code as jobNo, | |||||
| psli.code, | |||||
| psli.name, | |||||
| psli.`type`, | |||||
| psl.prodQty as demandQty, | |||||
| pe.prodTimeInMinute, | |||||
| psl.itemPriority as priority | |||||
| from production_schedule ps | |||||
| left join production_schedule_line psl on psl.prodScheduleId = ps.id | |||||
| left join items psli on psli.id = psl.itemId | |||||
| left join job_order jo on jo.prodScheduleLineId = psl.id | |||||
| left join prod_equip pe on pe.pslId = psl.id | |||||
| left join prod_material pm on pm.pslId = psl.id | |||||
| where psl.deleted is false and pe.prodTimeInMinute is not null and pm.bomMaterials is not null | |||||
| and ps.id = :id | |||||
| group by psl.id, jo.id | |||||
| ) prod group by prod.id limit 1 | |||||
| """ | |||||
| ) | |||||
| fun findDetailedProdScheduleWithLine(id: Long): List<DetailedProdScheduleWithLine> | |||||
| } | } | ||||
| @@ -1,6 +1,5 @@ | |||||
| package com.ffii.fpsms.modules.master.entity.projections | package com.ffii.fpsms.modules.master.entity.projections | ||||
| import org.springframework.beans.factory.annotation.Value | |||||
| import java.math.BigDecimal | import java.math.BigDecimal | ||||
| import java.time.LocalDate | import java.time.LocalDate | ||||
| import java.time.LocalDateTime | import java.time.LocalDateTime | ||||
| @@ -15,9 +14,43 @@ interface ProdScheduleInfo { | |||||
| val totalFGType: Long? | val totalFGType: Long? | ||||
| val type: String? | val type: String? | ||||
| } | } | ||||
| // Detailed Production Schedule With Line | |||||
| data class DetailedProdScheduleWithLine( | |||||
| val id: Long?, | |||||
| val scheduleAt: LocalDateTime?, | |||||
| val totalEstProdCount: BigDecimal?, | |||||
| val totalFGType: Long?, | |||||
| val prodScheduleLines: List<DetailedProdScheduleLineInfo>? | |||||
| ) | |||||
| data class DetailedProdScheduleLineInfo( | |||||
| val id: Long?, | |||||
| val bomMaterials: List<DetailedProdScheduleLineBomMaterial>?, | |||||
| val jobNo: String?, | |||||
| val code: String?, | |||||
| val name: String?, | |||||
| val type: String?, | |||||
| val demandQty: BigDecimal?, | |||||
| val prodTimeInMinute: List<DetailedProdScheduleLineProdTime>?, | |||||
| val priority: BigDecimal?, | |||||
| ) | |||||
| data class DetailedProdScheduleLineBomMaterial ( | |||||
| val id: Long?, | |||||
| val code: String?, | |||||
| val name: String?, | |||||
| val type: String?, | |||||
| val availableQty: BigDecimal?, | |||||
| val demandQty: BigDecimal? | |||||
| ) | |||||
| data class DetailedProdScheduleLineProdTime ( | |||||
| val equipName: String?, | |||||
| val minutes: BigDecimal?, | |||||
| ) | |||||
| // Production Schedule With Line | |||||
| data class ProdScheduleWithLine( | |||||
| // Rough Production Schedule With Line | |||||
| data class RoughProdScheduleWithLine( | |||||
| val id: Long?, | val id: Long?, | ||||
| val scheduleAt: LocalDateTime?, | val scheduleAt: LocalDateTime?, | ||||
| val schedulePeriod: LocalDateTime?, | val schedulePeriod: LocalDateTime?, | ||||
| @@ -25,13 +58,13 @@ data class ProdScheduleWithLine( | |||||
| val totalEstProdCount: BigDecimal?, | val totalEstProdCount: BigDecimal?, | ||||
| val totalFGType: Long?, | val totalFGType: Long?, | ||||
| val type: String?, | val type: String?, | ||||
| val prodScheduleLinesByFg: List<ProdScheduleLineInfoByFg>, | |||||
| val prodScheduleLinesByFgByDate: Map<Long?, List<ProdScheduleLineInfoByFg>>, | |||||
| val prodScheduleLinesByBom: List<ProdScheduleLineInfoByBom>, | |||||
| val prodScheduleLinesByBomByDate: Map<Long?, List<ProdScheduleLineInfoByBomByDate>> | |||||
| val prodScheduleLinesByFg: List<RoughProdScheduleLineInfoByFg>, | |||||
| val prodScheduleLinesByFgByDate: Map<Long?, List<RoughProdScheduleLineInfoByFg>>, | |||||
| val prodScheduleLinesByBom: List<RoughProdScheduleLineInfoByBom>, | |||||
| val prodScheduleLinesByBomByDate: Map<Long?, List<RoughProdScheduleLineInfoByBomByDate>> | |||||
| ) | ) | ||||
| data class ProdScheduleLineInfoByFg( | |||||
| data class RoughProdScheduleLineInfoByFg( | |||||
| val id: Long?, | val id: Long?, | ||||
| val code: String?, | val code: String?, | ||||
| val name: String?, | val name: String?, | ||||
| @@ -41,11 +74,11 @@ data class ProdScheduleLineInfoByFg( | |||||
| val lastMonthAvgSales: BigDecimal?, | val lastMonthAvgSales: BigDecimal?, | ||||
| val estCloseBal: BigDecimal?, | val estCloseBal: BigDecimal?, | ||||
| val priority: Long?, | val priority: Long?, | ||||
| val bomMaterials: List<ProdScheduleLineBomMaterialInfoByFg>?, | |||||
| val bomMaterials: List<RoughProdScheduleLineBomMaterialInfoByFg>?, | |||||
| val assignDate: Long?, | val assignDate: Long?, | ||||
| ) | ) | ||||
| data class ProdScheduleLineBomMaterialInfoByFg( | |||||
| data class RoughProdScheduleLineBomMaterialInfoByFg( | |||||
| val id: Long?, | val id: Long?, | ||||
| val code: String?, | val code: String?, | ||||
| val name: String?, | val name: String?, | ||||
| @@ -55,7 +88,7 @@ data class ProdScheduleLineBomMaterialInfoByFg( | |||||
| val uomName: String? | val uomName: String? | ||||
| ) | ) | ||||
| data class ProdScheduleLineInfoByBom( | |||||
| data class RoughProdScheduleLineInfoByBom( | |||||
| val id: Long?, | val id: Long?, | ||||
| val code: String?, | val code: String?, | ||||
| val name: String?, | val name: String?, | ||||
| @@ -72,7 +105,7 @@ data class ProdScheduleLineInfoByBom( | |||||
| val uomName: String?, | val uomName: String?, | ||||
| ) | ) | ||||
| data class ProdScheduleLineInfoByBomByDate( | |||||
| data class RoughProdScheduleLineInfoByBomByDate( | |||||
| val id: Long?, | val id: Long?, | ||||
| val code: String?, | val code: String?, | ||||
| val name: String?, | val name: String?, | ||||
| @@ -45,7 +45,7 @@ open class ProductionScheduleService( | |||||
| schedulePeriod = request.schedulePeriod, | schedulePeriod = request.schedulePeriod, | ||||
| schedulePeriodTo = request.schedulePeriodTo, | schedulePeriodTo = request.schedulePeriodTo, | ||||
| totalEstProdCount = request.totalEstProdCount, | totalEstProdCount = request.totalEstProdCount, | ||||
| type = request.type, | |||||
| types = request.types, | |||||
| pageable = pageable | pageable = pageable | ||||
| ) | ) | ||||
| @@ -54,7 +54,7 @@ open class ProductionScheduleService( | |||||
| return RecordsRes<ProdScheduleInfo>(records, total.toInt()); | return RecordsRes<ProdScheduleInfo>(records, total.toInt()); | ||||
| } | } | ||||
| open fun prodScheduleDetail(id: Long): ProdScheduleWithLine { | |||||
| open fun roughProdScheduleDetail(id: Long): RoughProdScheduleWithLine { | |||||
| val zero = BigDecimal.ZERO | val zero = BigDecimal.ZERO | ||||
| val prodSchedule = productionScheduleRepository.findById(id).getOrNull() ?: throw NoSuchElementException() | val prodSchedule = productionScheduleRepository.findById(id).getOrNull() ?: throw NoSuchElementException() | ||||
| val dayOfWeekValue = | val dayOfWeekValue = | ||||
| @@ -77,7 +77,7 @@ open class ProductionScheduleService( | |||||
| val demandQty = bm.qty?.times(proportion) ?: zero | val demandQty = bm.qty?.times(proportion) ?: zero | ||||
| ProdScheduleLineBomMaterialInfoByFg( | |||||
| RoughProdScheduleLineBomMaterialInfoByFg( | |||||
| id = bm.id, | id = bm.id, | ||||
| code = bm.item?.code, | code = bm.item?.code, | ||||
| name = bm.item?.name, | name = bm.item?.name, | ||||
| @@ -90,7 +90,7 @@ open class ProductionScheduleService( | |||||
| ) | ) | ||||
| } | } | ||||
| ProdScheduleLineInfoByFg( | |||||
| RoughProdScheduleLineInfoByFg( | |||||
| id = line.id, | id = line.id, | ||||
| code = line.item.code, | code = line.item.code, | ||||
| name = line.item.name, | name = line.item.name, | ||||
| @@ -115,7 +115,7 @@ open class ProductionScheduleService( | |||||
| .flatMap { it.bomMaterials ?: mutableListOf() } | .flatMap { it.bomMaterials ?: mutableListOf() } | ||||
| .groupBy { it.code } | .groupBy { it.code } | ||||
| .map { (code, bm) -> | .map { (code, bm) -> | ||||
| ProdScheduleLineBomMaterialInfoByFg( | |||||
| RoughProdScheduleLineBomMaterialInfoByFg( | |||||
| id = if (bm.isNotEmpty()) bm[0].id else null, | id = if (bm.isNotEmpty()) bm[0].id else null, | ||||
| code = if (bm.isNotEmpty()) bm[0].code else null, | code = if (bm.isNotEmpty()) bm[0].code else null, | ||||
| name = if (bm.isNotEmpty()) bm[0].name else null, | name = if (bm.isNotEmpty()) bm[0].name else null, | ||||
| @@ -126,7 +126,7 @@ open class ProductionScheduleService( | |||||
| ) | ) | ||||
| } | } | ||||
| ProdScheduleLineInfoByFg( | |||||
| RoughProdScheduleLineInfoByFg( | |||||
| id = if (infos.isNotEmpty()) infos[0].assignDate else null, | id = if (infos.isNotEmpty()) infos[0].assignDate else null, | ||||
| code = if (infos.isNotEmpty()) infos[0].code else null, | code = if (infos.isNotEmpty()) infos[0].code else null, | ||||
| name = if (infos.isNotEmpty()) infos[0].name else null, | name = if (infos.isNotEmpty()) infos[0].name else null, | ||||
| @@ -159,7 +159,7 @@ open class ProductionScheduleService( | |||||
| val demandQty = bm.qty?.times(proportion) ?: zero | val demandQty = bm.qty?.times(proportion) ?: zero | ||||
| ProdScheduleLineInfoByBomByDate( | |||||
| RoughProdScheduleLineInfoByBomByDate( | |||||
| id = bm.item?.id, | id = bm.item?.id, | ||||
| code = bm.item?.code, | code = bm.item?.code, | ||||
| name = bm.item?.name, | name = bm.item?.name, | ||||
| @@ -181,7 +181,7 @@ open class ProductionScheduleService( | |||||
| val prodScheduleLinesInfoByBom = prodScheduleLinesInfoByBom7Days | val prodScheduleLinesInfoByBom = prodScheduleLinesInfoByBom7Days | ||||
| .groupBy { Pair(it.assignDate, it.code) } | .groupBy { Pair(it.assignDate, it.code) } | ||||
| .map { (key, line) -> | .map { (key, line) -> | ||||
| ProdScheduleLineInfoByBomByDate( | |||||
| RoughProdScheduleLineInfoByBomByDate( | |||||
| id = if (line.isNotEmpty()) line[0].id else null, | id = if (line.isNotEmpty()) line[0].id else null, | ||||
| code = if (line.isNotEmpty()) line[0].code else null, | code = if (line.isNotEmpty()) line[0].code else null, | ||||
| name = if (line.isNotEmpty()) line[0].name else null, | name = if (line.isNotEmpty()) line[0].name else null, | ||||
| @@ -199,7 +199,7 @@ open class ProductionScheduleService( | |||||
| val sumProdScheduleLinesInfoByBom = prodScheduleLinesInfoByBom7Days | val sumProdScheduleLinesInfoByBom = prodScheduleLinesInfoByBom7Days | ||||
| .groupBy { it.code } | .groupBy { it.code } | ||||
| .map { (_, line) -> | .map { (_, line) -> | ||||
| ProdScheduleLineInfoByBom( | |||||
| RoughProdScheduleLineInfoByBom( | |||||
| id = if (line.isNotEmpty()) line[0].id else null, | id = if (line.isNotEmpty()) line[0].id else null, | ||||
| code = if (line.isNotEmpty()) line[0].code else null, | code = if (line.isNotEmpty()) line[0].code else null, | ||||
| name = if (line.isNotEmpty()) line[0].name else null, | name = if (line.isNotEmpty()) line[0].name else null, | ||||
| @@ -217,8 +217,10 @@ open class ProductionScheduleService( | |||||
| ) | ) | ||||
| } | } | ||||
| // ---------------------------------- Response ----------------------------------// | // ---------------------------------- Response ----------------------------------// | ||||
| return ProdScheduleWithLine( | |||||
| return RoughProdScheduleWithLine( | |||||
| id = prodSchedule.id, | id = prodSchedule.id, | ||||
| scheduleAt = prodSchedule.scheduleAt, | scheduleAt = prodSchedule.scheduleAt, | ||||
| schedulePeriod = schedulePeriod, | schedulePeriod = schedulePeriod, | ||||
| @@ -233,6 +235,10 @@ open class ProductionScheduleService( | |||||
| ) | ) | ||||
| } | } | ||||
| open fun detailedProdScheduleDetail(id: Long): RoughProdScheduleWithLine? { | |||||
| return null | |||||
| } | |||||
| //====================細排相關 START====================// | //====================細排相關 START====================// | ||||
| open fun getDailyProductionCount(assignDate: Int, selectedDate: LocalDateTime): Int { | open fun getDailyProductionCount(assignDate: Int, selectedDate: LocalDateTime): Int { | ||||
| @@ -4,7 +4,7 @@ import com.ffii.core.response.RecordsRes | |||||
| import com.ffii.core.utils.CriteriaArgsBuilder | import com.ffii.core.utils.CriteriaArgsBuilder | ||||
| import com.ffii.fpsms.modules.master.entity.ProductionScheduleRepository | import com.ffii.fpsms.modules.master.entity.ProductionScheduleRepository | ||||
| import com.ffii.fpsms.modules.master.entity.projections.ProdScheduleInfo | import com.ffii.fpsms.modules.master.entity.projections.ProdScheduleInfo | ||||
| import com.ffii.fpsms.modules.master.entity.projections.ProdScheduleWithLine | |||||
| import com.ffii.fpsms.modules.master.entity.projections.RoughProdScheduleWithLine | |||||
| import com.ffii.fpsms.modules.master.service.ProductionScheduleService | import com.ffii.fpsms.modules.master.service.ProductionScheduleService | ||||
| import com.ffii.fpsms.modules.master.service.ProductionScheduleService.FinishedGood | import com.ffii.fpsms.modules.master.service.ProductionScheduleService.FinishedGood | ||||
| import com.ffii.fpsms.modules.master.service.ProductionScheduleService.RoughScheduleObj | import com.ffii.fpsms.modules.master.service.ProductionScheduleService.RoughScheduleObj | ||||
| @@ -42,8 +42,8 @@ class ProductionScheduleController( | |||||
| } | } | ||||
| @GetMapping("/detail/{id}") | @GetMapping("/detail/{id}") | ||||
| fun getScheduleDetail(@PathVariable id: Long): ProdScheduleWithLine { | |||||
| return productionScheduleService.prodScheduleDetail(id) | |||||
| fun getScheduleDetail(@PathVariable id: Long): RoughProdScheduleWithLine { | |||||
| return productionScheduleService.roughProdScheduleDetail(id) | |||||
| } | } | ||||
| @GetMapping("/getRecordByPage") | @GetMapping("/getRecordByPage") | ||||
| @@ -54,16 +54,19 @@ class ProductionScheduleController( | |||||
| @RequestMapping(value = ["/testDetailSchedule"], method = [RequestMethod.GET]) | @RequestMapping(value = ["/testDetailSchedule"], method = [RequestMethod.GET]) | ||||
| fun generateDetailSchedule(request: HttpServletRequest?): Int { | fun generateDetailSchedule(request: HttpServletRequest?): Int { | ||||
| try { | try { | ||||
| // For test | |||||
| val genDate = request?.getParameter("genDate").let { LocalDateTime.parse(it) } | |||||
| val today = LocalDateTime.now() | val today = LocalDateTime.now() | ||||
| val latestRoughScheduleAt = productionScheduleService.getLatestScheduleAt("rough") | val latestRoughScheduleAt = productionScheduleService.getLatestScheduleAt("rough") | ||||
| val assignDate = abs(Duration.between(latestRoughScheduleAt, today).toDays() % 7) | |||||
| val finalAssignDate = if (assignDate.toInt() == 0) { | |||||
| 1 | |||||
| } else assignDate.toInt() | |||||
| val assignDate = abs(Duration.between(latestRoughScheduleAt, today).toDays() % 7) + 1 | |||||
| // val finalAssignDate = if (assignDate.toInt() == 0) { | |||||
| // 1 | |||||
| // } else assignDate.toInt() | |||||
| //TODO: update this to receive selectedDate and assignDate from schedule | //TODO: update this to receive selectedDate and assignDate from schedule | ||||
| // productionScheduleService.generateDetailedScheduleByDay(1, LocalDateTime.of(2025,6,25,0,0,0)) | // productionScheduleService.generateDetailedScheduleByDay(1, LocalDateTime.of(2025,6,25,0,0,0)) | ||||
| println("today: $today | latestRoughScheduleAty: $latestRoughScheduleAt | assignDate: $assignDate ") | println("today: $today | latestRoughScheduleAty: $latestRoughScheduleAt | assignDate: $assignDate ") | ||||
| productionScheduleService.generateDetailedScheduleByDay(finalAssignDate, LocalDateTime.now()) | |||||
| productionScheduleService.generateDetailedScheduleByDay(assignDate.toInt(), genDate ?: LocalDateTime.now()) | |||||
| return 200 | return 200 | ||||
| } catch (e: Exception) { | } catch (e: Exception) { | ||||
| throw RuntimeException("Error generate schedule: ${e.message}", e) | throw RuntimeException("Error generate schedule: ${e.message}", e) | ||||
| @@ -8,7 +8,7 @@ data class SearchProdScheduleRequest ( | |||||
| val schedulePeriod: String?, | val schedulePeriod: String?, | ||||
| val schedulePeriodTo: String?, | val schedulePeriodTo: String?, | ||||
| val totalEstProdCount: Double?, | val totalEstProdCount: Double?, | ||||
| val type: String?, | |||||
| val types: List<String>?, | |||||
| val pageSize: Int?, | val pageSize: Int?, | ||||
| val pageNum: Int?, | val pageNum: Int?, | ||||
| ) | ) | ||||