package com.ffii.fpsms.m18.web import com.ffii.core.utils.JwtTokenUtil import com.ffii.fpsms.m18.M18Config import com.ffii.fpsms.m18.model.SyncResult import com.ffii.fpsms.m18.service.* import com.ffii.fpsms.m18.model.M18BomShopSyncTriggerResult import com.ffii.fpsms.m18.web.models.M18CommonRequest import com.ffii.fpsms.modules.master.service.BomService import com.ffii.fpsms.modules.common.scheduler.service.SchedulerService import com.ffii.fpsms.modules.master.entity.ItemUom import com.ffii.fpsms.modules.master.entity.Items import com.ffii.fpsms.modules.master.entity.ShopRepository import com.ffii.fpsms.modules.master.enums.ShopType import com.ffii.fpsms.modules.master.service.ItemUomService import com.ffii.fpsms.modules.master.service.ItemsService import com.ffii.fpsms.modules.master.service.ShopService import com.ffii.fpsms.modules.settings.service.SettingsService import jakarta.validation.Valid import org.slf4j.Logger import org.slf4j.LoggerFactory import org.springframework.web.bind.annotation.* @RestController @RequestMapping("/m18") class M18TestController ( private val shopRepository: ShopRepository, private val shopService: ShopService, private val itemsService: ItemsService, private val m18MasterDataService: M18MasterDataService, private val m18PurchaseOrderService: M18PurchaseOrderService, private val m18Config: M18Config, private val itemUomService: ItemUomService, private val m18PurchaseQuotationService: M18PurchaseQuotationService, private val m18DeliveryOrderService: M18DeliveryOrderService, val schedulerService: SchedulerService, private val settingsService: SettingsService, private val bomService: BomService, ) { var logger: Logger = LoggerFactory.getLogger(JwtTokenUtil::class.java) @GetMapping("/test1") fun test1(@RequestParam name: String, @RequestParam m18UomId: Long): Items? { val temp = itemsService.findByNameAndM18UomId(name, m18UomId) println(name) println(m18UomId) println(temp?.id) return temp } @GetMapping("/test2") fun test2(): List? { return shopRepository.findM18IdsByCodeRegexpAndTypeAndDeletedIsFalse("P06|P07", ShopType.SUPPLIER.value) } @GetMapping("/test3") fun test3(@RequestParam m18ItemId: Long): ItemUom? { val response = itemUomService.findPurchaseUnitByM18ItemId(m18ItemId) println(response?.item?.id) println(response?.uom?.id) return response } @GetMapping("/test4") fun test4(): Any { return schedulerService.getM18Pos(); } @PostMapping("/test/bom-shop-sync/{bomId}") fun testBomShopSync( @PathVariable bomId: Long, @RequestParam(required = false) m18HeaderId: Long?, ): M18BomShopSyncTriggerResult { return bomService.pushBomToM18ShopIfAllowed(bomId, m18HeaderId) } @GetMapping("/test/po-by-code") fun testSyncPoByCode(@RequestParam code: String): SyncResult { return m18PurchaseOrderService.savePurchaseOrderByCode(code) } @GetMapping("/test/do-by-code") fun testSyncDoByCode(@RequestParam code: String): SyncResult { return m18DeliveryOrderService.saveDeliveryOrderByCode(code, isExtraSync = false) } /** DO(加單):手動按 code 同步,並寫入本地 [DeliveryOrder.isExtra]=true(不做 M18 端加單條件過濾) */ @GetMapping("/test/do-by-code-extra") fun testSyncDoByCodeExtra(@RequestParam code: String): SyncResult { // 加單 tab: only sync when it's a NEW order (not existing in local system) return m18DeliveryOrderService.saveDeliveryOrderByCode(code, isExtraSync = true, newOnly = true) } @GetMapping("/test/product-by-code") fun testSyncProductByCode(@RequestParam code: String): SyncResult { return m18MasterDataService.saveProductByCode(code) } // --------------------------------------------- Scheduler --------------------------------------------- /// // @GetMapping("/schedule/po") // fun schedulePo(@RequestParam @Valid newCron: String) { // settingsService.update(SettingNames.SCHEDULE_M18_PO, newCron); // schedulerService.scheduleM18PoTask() // } // --------------------------------------------- Master Data --------------------------------------------- /// @GetMapping("/all") fun m18All() { val mdRequest = M18CommonRequest() // Master Data m18MasterDataService.saveUnits(mdRequest) m18MasterDataService.saveProducts(mdRequest) m18MasterDataService.resyncProblemItemUomsFromM18() m18MasterDataService.saveVendors(mdRequest) m18MasterDataService.saveBusinessUnits(mdRequest) m18MasterDataService.saveCurrencies(mdRequest) m18MasterDataService.saveBoms(mdRequest) val pqRequest = M18CommonRequest() m18PurchaseQuotationService.savePurchaseQuotations(pqRequest) } // --------------------------------------------- Master Data --------------------------------------------- /// @PostMapping("/master-data") fun m18MasterData(@Valid @RequestBody request: M18CommonRequest) { // Master Data m18MasterDataService.ensureCunitSeededForAllIfEmpty() m18MasterDataService.saveUnits(request) m18MasterDataService.saveProducts(request) m18MasterDataService.resyncProblemItemUomsFromM18() m18MasterDataService.saveVendors(request) m18MasterDataService.saveBusinessUnits(request) m18MasterDataService.saveCurrencies(request) // m18MasterDataService.saveBoms(request) } @PostMapping("/product") fun m18Products(@Valid @RequestBody request: M18CommonRequest) { logger.info("Access token: ${m18Config.ACCESS_TOKEN}") m18MasterDataService.saveProducts(request) } @GetMapping("/product/{id}") fun m18Product(@PathVariable id: Long) { //logger.info("Access token: ${m18Config.ACCESS_TOKEN}") m18MasterDataService.saveProduct(id) } @PostMapping("/vendor") fun m18Vendor(@Valid @RequestBody request: M18CommonRequest) { //logger.info("Access token: ${m18Config.ACCESS_TOKEN}") m18MasterDataService.saveVendors(request) } @PostMapping("/unit") fun m18Unit(@Valid @RequestBody request: M18CommonRequest) { //logger.info("Access token: ${m18Config.ACCESS_TOKEN}") m18MasterDataService.saveUnits(request) } @PostMapping("/currency") fun m18Currency(@Valid @RequestBody request: M18CommonRequest) { //logger.info("Access token: ${m18Config.ACCESS_TOKEN}") m18MasterDataService.saveCurrencies(request) } @PostMapping("/bom") fun m18Bom(@Valid @RequestBody request: M18CommonRequest) { //logger.info("Access token: ${m18Config.ACCESS_TOKEN}") m18MasterDataService.saveBoms(request) } @PostMapping("/businessUnit") fun m18BusinessUnit(@Valid @RequestBody request: M18CommonRequest) { //logger.info("Access token: ${m18Config.ACCESS_TOKEN}") m18MasterDataService.saveBusinessUnits(request) } // --------------------------------------------- Purchase Order --------------------------------------------- /// @PostMapping("/po") fun m18PO(@Valid @RequestBody request: M18CommonRequest) { //logger.info("Access token: ${m18Config.ACCESS_TOKEN}") m18PurchaseOrderService.savePurchaseOrders(request) } // --------------------------------------------- Delivery Order --------------------------------------------- /// @PostMapping("/do") fun m18DO(@Valid @RequestBody request: M18CommonRequest) { //logger.info("Access token: ${m18Config.ACCESS_TOKEN}") m18DeliveryOrderService.saveDeliveryOrders(request) } // --------------------------------------------- Purchase Quotation --------------------------------------------- /// @PostMapping("/pq") fun m18PQ(@Valid @RequestBody request: M18CommonRequest) { logger.info("Access token: ${m18Config.ACCESS_TOKEN}") m18PurchaseQuotationService.savePurchaseQuotations(request) } }