Browse Source

update

master
kelvin.yau 2 months ago
parent
commit
2353209bca
6 changed files with 124 additions and 3 deletions
  1. +2
    -1
      src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrderRepository.kt
  2. +14
    -0
      src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt
  3. +76
    -1
      src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt
  4. +23
    -1
      src/main/java/com/ffii/fpsms/modules/jobOrder/web/JobOrderController.kt
  5. +5
    -0
      src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/ExportPickRecordRequest.kt
  6. +4
    -0
      src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/PrintPickRecordRequest.kt

+ 2
- 1
src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrderRepository.kt View File

@@ -44,7 +44,7 @@ interface JobOrderRepository : AbstractRepository<JobOrder, Long> {
bi.code as itemCode,
b.name,
jo.reqQty,
-- b.outputQtyUom,
b.outputQtyUom as unit,
uc2.udfudesc as uom,
COALESCE(uc2.udfShortDesc, uc2.udfudesc) as shortUom,
json_arrayagg(
@@ -84,6 +84,7 @@ interface JobOrderRepository : AbstractRepository<JobOrder, Long> {
jo.code,
b.name,
jo.reqQty,
b.outputQtyUom as unit,
uc2.udfudesc as uom,
json_arrayagg(
json_object(


+ 14
- 0
src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt View File

@@ -1123,6 +1123,16 @@ open fun getCompletedJobOrderPickOrderLotDetails(pickOrderId: Long): List<Map<St
-- Job Order Information
jo.id as jobOrderId,
jo.code as jobOrderCode,
DATE_FORMAT(jo.planStart, '%Y/%m/%d') as jobOrderPlanStart,
jo.reqQty as jobOrderReqQty,
-- Finished Goods Information
fg.code as fgCode,
fg.name as fgName,
b.outputQtyUom as unit,
uc_fg.udfudesc as uomConversionDesc,
-- Pick Order Line Information
pol.id as pickOrderLineId,
@@ -1212,6 +1222,8 @@ open fun getCompletedJobOrderPickOrderLotDetails(pickOrderId: Long): List<Map<St
FROM fpsmsdb.pick_order po
JOIN fpsmsdb.job_order jo ON jo.id = po.joId
LEFT JOIN fpsmsdb.bom b ON b.id = jo.bomId
LEFT JOIN fpsmsdb.items fg ON fg.id = b.itemId
JOIN fpsmsdb.pick_order_line pol ON pol.poId = po.id
JOIN fpsmsdb.items i ON i.id = pol.itemId
LEFT JOIN fpsmsdb.uom_conversion uc ON uc.id = pol.uomId
@@ -1222,6 +1234,8 @@ open fun getCompletedJobOrderPickOrderLotDetails(pickOrderId: Long): List<Map<St
LEFT JOIN fpsmsdb.warehouse w ON w.id = ill.warehouseId
LEFT JOIN fpsmsdb.stock_out_line sol ON sol.pickOrderLineId = pol.id AND sol.inventoryLotLineId = ill.id AND sol.deleted = false
LEFT JOIN fpsmsdb.jo_pick_order jpo ON jpo.pick_order_id = po.id AND jpo.item_id = pol.itemId
LEFT JOIN fpsmsdb.item_uom iu ON iu.itemId = b.itemId
LEFT JOIN fpsmsdb.uom_conversion uc_fg ON uc_fg.id = iu.uomId AND iu.stockunit = 1
WHERE po.deleted = false
AND po.id = :pickOrderId
AND pol.deleted = false


+ 76
- 1
src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt View File

@@ -2,6 +2,7 @@ package com.ffii.fpsms.modules.jobOrder.service

import com.ffii.core.response.RecordsRes
import com.ffii.core.utils.GsonUtils
import com.ffii.core.utils.PdfUtils
import com.ffii.fpsms.modules.common.SecurityUtils
import com.ffii.fpsms.modules.jobOrder.entity.JobOrder
import com.ffii.fpsms.modules.jobOrder.entity.JobOrderRepository
@@ -31,6 +32,8 @@ import java.time.format.DateTimeFormatter
import kotlin.jvm.optionals.getOrNull

import com.ffii.fpsms.modules.jobOrder.service.JoPickOrderService
import com.ffii.fpsms.modules.jobOrder.web.model.ExportPickRecordRequest
import com.ffii.fpsms.modules.jobOrder.web.model.PrintPickRecordRequest
import com.ffii.fpsms.modules.pickOrder.entity.PickOrderRepository
import com.ffii.fpsms.modules.pickOrder.entity.PickOrderLineRepository
import com.ffii.fpsms.modules.stock.service.SuggestedPickLotService
@@ -42,6 +45,12 @@ import com.ffii.fpsms.modules.stock.entity.StockOutLine
import com.ffii.fpsms.modules.stock.web.model.StockOutStatus
import com.ffii.fpsms.modules.stock.web.model.StockOutLineStatus
import com.ffii.fpsms.modules.stock.web.model.SuggestedPickLotForPolRequest
import net.sf.jasperreports.engine.JasperCompileManager
import org.springframework.core.io.ClassPathResource
import java.io.FileNotFoundException
import java.io.IOException


@Service
open class JobOrderService(
val jobOrderRepository: JobOrderRepository,
@@ -55,8 +64,10 @@ open class JobOrderService(
val suggestedPickLotService: SuggestedPickLotService,
val inventoryLotLineRepository: InventoryLotLineRepository,
val stockOutRepository: StockOutRepository,
val stockOutLineRepository: StockOutLIneRepository
val stockOutLineRepository: StockOutLIneRepository,

) {

open fun allJobOrdersByPage(request: SearchJobOrderInfoRequest): RecordsRes<JobOrderInfo> {
val pageable = PageRequest.of(request.pageNum ?: 0, request.pageSize ?: 10);

@@ -289,4 +300,68 @@ open class JobOrderService(
entity = mapOf("status" to jo.status?.value)
)
}

//Pick Record
@Throws(IOException::class)
@Transactional
open fun exportPickRecord(request: ExportPickRecordRequest): Map<String, Any> {
val PICKRECORD_PDF = "PickRecord/PickRecordPDF.jrxml"
val resource = ClassPathResource(PICKRECORD_PDF)
if(!resource.exists()){
throw FileNotFoundException("Report file not found: $PICKRECORD_PDF")
}
val inputStream = resource.inputStream
val pickRecord = JasperCompileManager.compileReport(inputStream)
val pickRecordInfo = joPickOrderService.getCompletedJobOrderPickOrderLotDetails(request.jobOrderIds).toMutableList()


val fields = mutableListOf<MutableMap<String, Any>>()
val params = mutableMapOf<String, Any>()

val sortedPickRecordInfo = pickRecordInfo.sortedBy { info ->
(info["routerIndex"] as? Int) ?: Int.MAX_VALUE
}

sortedPickRecordInfo.forEachIndexed { index, info ->
val field = mutableMapOf<String, Any>()

val itemName = info["itemName"] as? String?: "N/A"
val itemCode = info["itemCode"] as? String?: "N/A"
val lotNo = info["lotNo"] as? String?: "N/A"
val uomShortDesc = info["uomShortDesc"] as? String?: "N/A"
val uomDesc = info["uomDesc"] as? String?: "N/A"
val route = info["routerRoute"] as? String?: "N/A"
val actualPickQty = info["actualPickQty"] as? BigDecimal?: "N/A"

field["sequenceNumber"] = (index + 1).toString()
field["itemName"] = itemName
field["itemNo"] = itemCode
field["lotNo"] = lotNo
field["shortName"] = uomShortDesc
field["uom"] = uomDesc
field["route"] = route
field["qty"] = actualPickQty.toString()

fields.add(field)
}

params["JobOrderCode"] = pickRecordInfo.firstOrNull()?.get("jobOrderCode") as? String ?: "N/A"
params["ProductionDate"] = pickRecordInfo.firstOrNull()?.get("jobOrderPlanStart") as? String ?: "N/A"
val reqQty = pickRecordInfo.firstOrNull()?.get("jobOrderReqQty") as? BigDecimal
params["RequiredQuantity"] = reqQty?.toString() ?: "N/A"
params["FGCode"] = pickRecordInfo.firstOrNull()?.get("fgCode") as? String ?: "N/A"
params["FGName"] = pickRecordInfo.firstOrNull()?.get("fgName") as? String ?: "N/A"

params["unit"] = pickRecordInfo.firstOrNull()?.get("unit") as? String ?: "N/A"

return mapOf(
"report" to PdfUtils.fillReport(pickRecord, fields, params),
"filename" to "123"
)
}

@Transactional
open fun printPickRecord(request: PrintPickRecordRequest){

}
}

+ 23
- 1
src/main/java/com/ffii/fpsms/modules/jobOrder/web/JobOrderController.kt View File

@@ -19,8 +19,18 @@ import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import com.ffii.fpsms.modules.jobOrder.service.JoPickOrderService
import com.ffii.fpsms.modules.jobOrder.web.model.ExportPickRecordRequest
import com.ffii.fpsms.modules.jobOrder.web.model.SecondScanSubmitRequest
import com.ffii.fpsms.modules.jobOrder.web.model.SecondScanIssueRequest
import jakarta.servlet.http.HttpServletResponse
import net.sf.jasperreports.engine.JasperExportManager
import net.sf.jasperreports.engine.JasperPrint
import org.aspectj.weaver.tools.UnsupportedPointcutPrimitiveException
import org.springframework.context.NoSuchMessageException
import java.io.OutputStream
import java.io.UnsupportedEncodingException
import java.text.ParseException

@RestController
@RequestMapping("/jo")
class JobOrderController(
@@ -148,6 +158,18 @@ class JobOrderController(
fun getCompletedJobOrderPickOrderLotDetails(@PathVariable pickOrderId: Long): List<Map<String, Any?>> {
return joPickOrderService.getCompletedJobOrderPickOrderLotDetails(pickOrderId)
}

@PostMapping("/PickRecord")
@Throws(UnsupportedEncodingException::class, NoSuchMessageException::class, ParseException::class, Exception::class)
fun printPickRecord(@Valid @RequestBody request: ExportPickRecordRequest, response: HttpServletResponse){
response.characterEncoding = "utf-8"
response.contentType = "application/pdf"
val out: OutputStream = response.outputStream
val pdf = jobOrderService.exportPickRecord(request)
val jasperPrint = pdf["report"] as JasperPrint
response.addHeader("filename", "${pdf["filename"]}.pdf")
out.write(JasperExportManager.exportReportToPdf(jasperPrint))
}
@GetMapping("/completed-job-order-pick-orders-only/{userId}")
fun getCompletedJobOrderPickOrders(@PathVariable userId: Long): List<Map<String, Any?>> {
return joPickOrderService.getCompletedJobOrderPickOrders(userId)
@@ -157,4 +179,4 @@ class JobOrderController(
fun getCompletedJobOrderPickOrderLotDetailsForCompletedPick(@PathVariable pickOrderId: Long): List<Map<String, Any?>> {
return joPickOrderService.getCompletedJobOrderPickOrderLotDetailsForCompletedPick(pickOrderId)
}
}
}

+ 5
- 0
src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/ExportPickRecordRequest.kt View File

@@ -0,0 +1,5 @@
package com.ffii.fpsms.modules.jobOrder.web.model

data class ExportPickRecordRequest (
val jobOrderIds: Long,
)

+ 4
- 0
src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/PrintPickRecordRequest.kt View File

@@ -0,0 +1,4 @@
package com.ffii.fpsms.modules.jobOrder.web.model

class PrintPickRecordRequest {
}

Loading…
Cancel
Save