Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 
 

204 rindas
10 KiB

  1. package com.ffii.fpsms.m18.service
  2. import com.ffii.core.utils.JwtTokenUtil
  3. import com.ffii.fpsms.api.service.ApiCallerService
  4. import com.ffii.fpsms.m18.M18Config
  5. import com.ffii.fpsms.m18.model.M18PurchaseQuotationListRequest
  6. import com.ffii.fpsms.m18.model.M18PurchaseQuotationListResponse
  7. import com.ffii.fpsms.m18.model.M18PurchaseQuotationRequest
  8. import com.ffii.fpsms.m18.model.M18PurchaseQuotationResponse
  9. import com.ffii.fpsms.m18.utils.CommonUtils
  10. import com.ffii.fpsms.m18.web.models.M18CommonRequest
  11. import com.ffii.fpsms.modules.master.service.ItemUomService
  12. import com.ffii.fpsms.modules.master.service.ItemsService
  13. import com.ffii.fpsms.modules.purchaseQuotation.service.PurchaseQuotationLineService
  14. import com.ffii.fpsms.modules.purchaseQuotation.service.PurchaseQuotationService
  15. import com.ffii.fpsms.modules.purchaseQuotation.web.model.SavePurchaseQuotationLineRequest
  16. import com.ffii.fpsms.modules.purchaseQuotation.web.model.SavePurchaseQuotationRequest
  17. import org.slf4j.Logger
  18. import org.slf4j.LoggerFactory
  19. import org.springframework.stereotype.Service
  20. @Service
  21. open class M18PurchaseQuotationService(
  22. val m18Config: M18Config,
  23. val apiCallerService: ApiCallerService,
  24. val itemsService: ItemsService,
  25. val purchaseQuotationService: PurchaseQuotationService,
  26. val purchaseQuotationLineService: PurchaseQuotationLineService,
  27. val itemUomService: ItemUomService,
  28. ) {
  29. val commonUtils = CommonUtils()
  30. val logger: Logger = LoggerFactory.getLogger(JwtTokenUtil::class.java)
  31. // val lastModifyDateStart = "2025-05-14 14:00:00"
  32. // val lastModifyDateEnd = "2025-05-14 14:30:00"
  33. // val lastModifyDateConds =
  34. // "lastModifyDate=largerOrEqual=${lastModifyDateStart}=and=lastModifyDate=lessOrEqual=${lastModifyDateEnd}"
  35. // M18 Conditions
  36. val beIdList = listOf(m18Config.BEID_PF, m18Config.BEID_PP, m18Config.BEID_TOA)
  37. val beIdConds = "(" + commonUtils.listToString(beIdList.filterNotNull(), "beId=equal=", "=or=") + ")"
  38. // M18 API
  39. val M18_LOAD_PURCHASE_QUOTATION_API = "/root/api/read/vqu"
  40. val M18_FETCH_PURCHASE_QUOTATION_LIST_API = "/search/search"
  41. open fun getPurchaseQuotations(request: M18CommonRequest): M18PurchaseQuotationListResponse? {
  42. val lastModifyDateFromConds = request.modifiedDateFrom?.let { "lastModifyDate=largerOrEqual=${it}" }
  43. val lastModifyDateToConds = request.modifiedDateTo?.let{ "lastModifyDate=lessOrEqual=${it}" }
  44. val haveFromAndTo = lastModifyDateFromConds != null && lastModifyDateToConds != null
  45. val finalConds = if (lastModifyDateFromConds == null && lastModifyDateToConds == null) {
  46. beIdConds
  47. } else {
  48. beIdConds + "=and=(${lastModifyDateFromConds ?: ""}${if(haveFromAndTo) "=and=" else ""}${lastModifyDateToConds ?: ""})"
  49. }
  50. val params = M18PurchaseQuotationListRequest(
  51. conds = finalConds
  52. )
  53. var purchaseQuotations: M18PurchaseQuotationListResponse? = null
  54. try {
  55. purchaseQuotations =
  56. apiCallerService.get<M18PurchaseQuotationListResponse, M18PurchaseQuotationListRequest>(
  57. M18_FETCH_PURCHASE_QUOTATION_LIST_API,
  58. params
  59. ).block()
  60. } catch (e: Exception) {
  61. logger.error("(Getting Purchase Quotation list) Error on Function - ${e.stackTrace}")
  62. logger.error(e.message)
  63. }
  64. return purchaseQuotations
  65. }
  66. open fun getPurchaseQuotation(id: Long): M18PurchaseQuotationResponse? {
  67. val params = M18PurchaseQuotationRequest(
  68. id = id
  69. )
  70. var purchaseQuotation: M18PurchaseQuotationResponse? = null
  71. try {
  72. purchaseQuotation = apiCallerService.get<M18PurchaseQuotationResponse, M18PurchaseQuotationRequest>(
  73. M18_LOAD_PURCHASE_QUOTATION_API,
  74. params
  75. ).block()
  76. } catch (e: Exception) {
  77. logger.error("(Getting Purchase Quotation Detail) Error on Function - ${e.stackTrace}")
  78. logger.error(e.message)
  79. }
  80. return purchaseQuotation
  81. }
  82. open fun savePurchaseQuotations(request: M18CommonRequest) {
  83. logger.info("--------------------------------------------Start - Saving M18 Purchase Quotations--------------------------------------------")
  84. val purchaseQuotations = getPurchaseQuotations(request)
  85. val pqRefType = "Purchase Quotation"
  86. val pqLineRefType = "Purchase Quotation Line"
  87. val successList = mutableListOf<Long>()
  88. val successDetailList = mutableListOf<Long>()
  89. val failList = mutableListOf<Long>()
  90. val failDetailList = mutableListOf<Long>()
  91. val values = purchaseQuotations?.values
  92. val pqsMessages = purchaseQuotations?.messages?.get(0)
  93. if (values != null) {
  94. values.forEach { purchaseQuotation ->
  95. try {
  96. val pqDetail = getPurchaseQuotation(purchaseQuotation.id)
  97. val mainvqu = if(pqDetail?.data?.mainvqu?.isNotEmpty() == true) pqDetail.data.mainvqu[0] else null
  98. val remvqu = if(pqDetail?.data?.remvqu?.isNotEmpty() == true) pqDetail.data.remvqu[0] else null
  99. val vqut = if(pqDetail?.data?.vqut?.isNotEmpty() == true) pqDetail.data.vqut else null
  100. val pqMessages = if(pqDetail?.messages?.isNotEmpty() == true) pqDetail.messages[0] else null
  101. var pqId: Long? = null
  102. if (mainvqu != null) {
  103. // Save Purchase Quotation
  104. try {
  105. val savePqRequest = SavePurchaseQuotationRequest(
  106. code = mainvqu.code,
  107. expiryDate = commonUtils.timestampToLocalDateTime(mainvqu.expDate),
  108. effectiveDate = commonUtils.timestampToLocalDateTime(mainvqu.tDate),
  109. m18ShopId = mainvqu.venId,
  110. m18CurrencyId = mainvqu.curId,
  111. remarks = remvqu?.remarks,
  112. m18Id = mainvqu.id,
  113. m18LastModifyDate = commonUtils.timestampToLocalDateTime(mainvqu.lastModifyDate)
  114. )
  115. pqId = purchaseQuotationService.savePurchaseQuotation(savePqRequest).id
  116. successList += mainvqu.id
  117. logger.info("${pqRefType}: Saved purchase quotation. ID: ${pqId} | M18 ID: ${purchaseQuotation.id}")
  118. } catch (e: Exception) {
  119. failList.add(mainvqu.id)
  120. logger.error("${pqRefType}: Saving Failure!")
  121. logger.error("Error on Function - ${e.stackTrace} | Type: ${pqRefType} | M18 ID: ${purchaseQuotation.id}")
  122. logger.error(e.message)
  123. }
  124. // Save Purchase Quotation Line
  125. if (vqut != null) {
  126. vqut.forEach { line ->
  127. try {
  128. val savePqLineRequest = SavePurchaseQuotationLineRequest(
  129. purchaseQuotationId = pqId,
  130. m18ItemId = line.proId,
  131. code = line.refCode,
  132. description = line.bDesc,
  133. price = line.up,
  134. m18Id = line.id,
  135. m18LastModifyDate = commonUtils.timestampToLocalDateTime(mainvqu.lastModifyDate)
  136. )
  137. val pqLineId = purchaseQuotationLineService.savePurchaseQuotationLine(savePqLineRequest).id
  138. successDetailList += line.id
  139. logger.info("${pqRefType}: Saved purchase quotation line. ID: ${pqLineId} | M18 ID: ${purchaseQuotation.id} | M18 Line ID: ${line.id}")
  140. } catch (e: Exception) {
  141. failDetailList.add(line.id)
  142. logger.error("${pqLineRefType}: Saving Failure!")
  143. logger.error("Error on Function - ${e.stackTrace} | Type: ${pqLineRefType} | M18 ID: ${purchaseQuotation.id} | M18 Line ID: ${line.id}")
  144. logger.error(e.message)
  145. }
  146. }
  147. } else {
  148. logger.error("Purchase Quotation Line is null. May occur errors.")
  149. }
  150. } else {
  151. logger.error("Purchase Quotation is null. May occur errors.")
  152. logger.error("Error code: ${pqMessages?.msgDetail}")
  153. logger.error("Error messages: ${pqMessages?.msgDetail}")
  154. }
  155. } catch (e: Exception) {
  156. failList.add(purchaseQuotation.id)
  157. logger.error("${pqRefType} / ${pqLineRefType}: Saving Failure!")
  158. logger.error("Error on Function - ${e.stackTrace} | Type: ${pqRefType} / ${pqLineRefType} | M18 ID: ${purchaseQuotation.id}")
  159. logger.error(e.message)
  160. }
  161. }
  162. } else {
  163. logger.error("Purchase Quotation List is null. May occur errors.")
  164. logger.error("Error code: ${pqsMessages?.msgDetail}")
  165. logger.error("Error messages: ${pqsMessages?.msgDetail}")
  166. }
  167. logger.info("Total Purchase Quotation Save Success (${successList.size})")
  168. logger.info("Total Purchase Quotation Save Detail Success (${successDetailList.size})")
  169. if (failList.size > 0) {
  170. logger.error("Total Purchase Quotation Fail (${failList.size}): $failList")
  171. }
  172. if (failDetailList.size > 0) {
  173. logger.error("Total Purchase Quotation Detail Fail (${failDetailList.size}): $failDetailList")
  174. }
  175. logger.info("--------------------------------------------End - Saving M18 Purchase Quotations--------------------------------------------")
  176. }
  177. }