Init_17_ProductInfo.groovy 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import Ignore_ExecPageFlipper as ExecPageFlipper
  2. import com.dderp.business.dao.ProductDao
  3. import com.dderp.common.api.NoSqlKeysService
  4. import com.dderp.common.datas.RedisKeys
  5. import com.dderp.common.entity.product.*
  6. import com.dySweetFishPlugin.redis.RedisService
  7. import com.dySweetFishPlugin.sql.TableCodeNode
  8. import com.dySweetFishPlugin.sql.TableIdService
  9. import com.sweetfish.convert.json.JsonConvert
  10. import com.sweetfish.source.PageFlipper
  11. import org.apache.commons.lang3.StringUtils
  12. import org.rex.RMap
  13. import java.util.concurrent.CopyOnWriteArrayList
  14. static ProductInfo getProductLocalInfo(long idProduct, ProductDao productDao, String dataSourceId, long supplierCode) {
  15. //获取主表信息
  16. RMap paramMap = new RMap()
  17. paramMap.put("id", idProduct)
  18. ProductInfo productMaster = productDao.selectProductInfo(paramMap, dataSourceId, supplierCode)
  19. //获取部件表信息
  20. RMap paramProductMap = new RMap()
  21. paramProductMap.put("idproduct", idProduct)
  22. List<PartInfo> partSlave = productDao.selectPartInfo(paramProductMap, dataSourceId, supplierCode)
  23. partSlave.each { part ->
  24. //获取部件一级参数信息
  25. RMap paramPartMap = new RMap()
  26. paramPartMap.put("idpartinfo", part.id)
  27. List<PartParameter> partParameterList = productDao.selectPartParameter(paramPartMap, dataSourceId, supplierCode)
  28. partParameterList.each { partParameter ->
  29. //获取部件二级参数
  30. RMap paramItemMap = new RMap()
  31. paramItemMap.put("idPartInfo", part.id)
  32. paramItemMap.put("idParameter", partParameter.idParameter)
  33. List<PartParameterItem> partParameterItemList = productDao.selectPartParameterItem(paramItemMap, dataSourceId, supplierCode)
  34. partParameter.itemList = partParameterItemList
  35. }
  36. part.parameterList = partParameterList
  37. //获取部件工艺信息
  38. List<PartWorkProcess> partWorkProcessList = productDao.selectPartWorkProcess(paramPartMap, dataSourceId, supplierCode)
  39. part.workProcessList = partWorkProcessList
  40. }
  41. productMaster.partInfoList = partSlave
  42. return productMaster
  43. }
  44. static def createRunnable(RedisService redisService, NoSqlKeysService keysService, TableIdService tableIdService, ProductDao productDao, JsonConvert jsonConvert, String dataSourceId, long supplierCode) {
  45. return {
  46. redisService.del(keysService.getRedisKey(RedisKeys.KEY_PRODUCT_INFO, supplierCode))
  47. redisService.del(keysService.getRedisKey(RedisKeys.KEY_PRODUCT_DETAIL, supplierCode))
  48. RMap params = new RMap()
  49. ExecPageFlipper.execute(300, { PageFlipper p ->
  50. params.put("voidFlag", -1)
  51. List<ProductInfo> productInfoList = productDao.selectProductInfoList(params, dataSourceId, supplierCode, p)
  52. if (!productInfoList.isEmpty()) {
  53. Map<String, String> productInfoHashMap = productInfoList.collectEntries { [String.valueOf(it.id), jsonConvert.convertTo(it)] }
  54. redisService.hmset(keysService.getRedisKey(RedisKeys.KEY_PRODUCT_INFO, supplierCode), productInfoHashMap)
  55. }
  56. //产品详情 下面为了速度,使用并行流,所以这里使用同步的list
  57. List<ProductInfo> productDetailList = new CopyOnWriteArrayList<>()
  58. productInfoList.each { x ->
  59. ProductInfo productDetail = getProductLocalInfo(x.id, productDao, dataSourceId, supplierCode)
  60. productDetailList.add(productDetail)
  61. if (StringUtils.isNotBlank(x.getBillPrefix())) {
  62. if (!x.getBillPrefix().trim().equalsIgnoreCase("PB"))
  63. tableIdService.addTableCodeNode(TableCodeNode.newBuilder()
  64. .codeName("epPrintBill.BillCode." + x.billPrefix.trim())
  65. .tableName("v_epprintbillcode")
  66. .codeFieldName("billCode")
  67. .codePrefix(x.billPrefix)
  68. .codeYear(true)
  69. .yearLength(2)
  70. .codeMonth(true)
  71. .codeDay(x.billCodeTimeKind == 1)
  72. .codeLength((x.billCodeTimeKind == 1) ? 4 : 5)
  73. .build(),
  74. true,
  75. dataSourceId,
  76. String.valueOf(supplierCode))
  77. }
  78. if (StringUtils.isNotBlank(x.getOrderPrefix())) {
  79. if (!x.getOrderPrefix().trim().equalsIgnoreCase("OB"))
  80. tableIdService.addTableCodeNode(TableCodeNode.newBuilder()
  81. .codeName("eoPrintOrder.OrderCode." + x.orderPrefix.trim())
  82. .tableName("v_eoPrintOrderCode")
  83. .codeFieldName("orderCode")
  84. .codePrefix(x.orderPrefix)
  85. .codeYear(true)
  86. .yearLength(2)
  87. .codeMonth(true)
  88. .codeDay(true)
  89. .codeLength(4)
  90. .build(),
  91. true,
  92. dataSourceId,
  93. String.valueOf(supplierCode))
  94. }
  95. }
  96. if (!productDetailList.isEmpty()) {
  97. Map<String, String> productHashMap = productDetailList.collectEntries { [String.valueOf(it.id), jsonConvert.convertTo(it)] }
  98. redisService.hmset(keysService.getRedisKey(RedisKeys.KEY_PRODUCT_DETAIL, supplierCode), productHashMap)
  99. }
  100. })
  101. } as Runnable
  102. }
  103. //groovy最后一个表达式的值为返回
  104. createRunnable(redisService, keysService, tableIdService, productDao, jsonConvert, dataSourceId, supplierCode)