ProductService.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. import json
  2. from django.core.paginator import Paginator
  3. from DCbackend.utils.common import success, fail, pageData
  4. from backend.Form.BrandForm import BrandForm
  5. from backend.Form.ProductForm import ProductForm
  6. from backend.Service.BrandService import BrandService
  7. from backend.Service.ProductCategoryService import ProductCategoryService
  8. from backend.Service.SupplierService import SupplierService
  9. from backend.models import ProjectCategory, Brand, Product, ProductCategory, Supplier, ProductDocument
  10. class ProductService:
  11. @staticmethod
  12. def Create(request):
  13. form = ProductForm(request.POST)
  14. if form.is_valid():
  15. form.save()
  16. links = json.loads(request.POST.get("links"))
  17. for link in links:
  18. pd = ProductDocument()
  19. pd.document_id = link
  20. pd.product_id = form.instance.id
  21. pd.status = 5
  22. pd.save()
  23. return success("成功")
  24. else:
  25. return fail(form.errors)
  26. @staticmethod
  27. def Update(request):
  28. data = Product.objects.filter(id=request.POST.get("id")).first()
  29. if data is not None:
  30. data.category_id = request.POST.get("category_id")
  31. data.brand_id = request.POST.get("brand_id")
  32. data.supplier_id = request.POST.get("supplier_id")
  33. data.name = request.POST.get("name")
  34. data.intro = request.POST.get("intro")
  35. data.price = request.POST.get("price")
  36. data.product_area = request.POST.get("product_area")
  37. data.is_safe = request.POST.get("is_safe")
  38. data.safe_time = request.POST.get("safe_time")
  39. data.is_package = request.POST.get("is_package")
  40. data.package_intro = request.POST.get("package_intro")
  41. data.qualifications = request.POST.get("qualifications")
  42. data.status = request.POST.get("status")
  43. data.attrs = request.POST.get("attrs")
  44. data.save()
  45. links = json.loads(request.POST.get("links"))
  46. ProductDocument.objects.filter(product_id=data.id).update(status=4)
  47. for link in links:
  48. pd = ProductDocument()
  49. pd.document_id = link
  50. pd.product_id = data.id
  51. pd.status = 5
  52. pd.save()
  53. return success("成功")
  54. else:
  55. return fail("更新产品信息")
  56. @staticmethod
  57. def Info(request):
  58. info = Product.objects.filter(id=request.POST.get("id")).first()
  59. return success(ProductService.getDetail(info))
  60. @staticmethod
  61. def Delete(request):
  62. Product.objects.filter(id=request.POST.get("id")).update(status=4)
  63. return success("成功")
  64. @staticmethod
  65. def getDetail(item: Product):
  66. category = ProductCategory.objects.filter(id=item.category_id).first()
  67. categoryData = ProductCategoryService.getDetail(category)
  68. brand = Brand.objects.filter(id=item.brand_id).first()
  69. brandData = BrandService.getDetail(brand)
  70. supplier = Supplier.objects.filter(id=item.supplier_id).first()
  71. supplierData = SupplierService.getDetail(supplier)
  72. where = {}
  73. where["product_id"] = item.id
  74. dpList = ProductDocument.objects.filter(**where).exclude(status=4).all()
  75. linkProduct = []
  76. for it in dpList:
  77. # temp = {
  78. # 'id': it.id,
  79. # 'product_id': it.product_id,
  80. # 'document_id': it.document_id,
  81. # }
  82. linkProduct.append( it.document_id)
  83. return {
  84. "id": item.id,
  85. 'category_id': item.category_id,
  86. 'brand_id': item.brand_id,
  87. 'supplier_id': item.supplier_id,
  88. 'linkDocument': linkProduct,
  89. 'category': categoryData,
  90. 'supplier': supplierData,
  91. 'brand': brandData,
  92. 'name': item.name,
  93. 'intro': item.intro,
  94. 'price': item.price,
  95. 'product_area': item.product_area,
  96. 'is_safe': item.is_safe,
  97. 'safe_time': item.safe_time,
  98. 'is_package': item.is_package,
  99. 'package_intro': item.package_intro,
  100. 'qualifications': item.qualifications,
  101. 'createTime': item.create_time,
  102. 'attrs': item.attrs,
  103. 'status': item.status
  104. }
  105. @staticmethod
  106. def Search(request):
  107. page = request.POST.get("page")
  108. pageSize = request.POST.get("pageSize")
  109. if page is None:
  110. page = 1
  111. if pageSize is None:
  112. pageSize = 1
  113. where = {}
  114. category_id = request.POST.get("category_id")
  115. if category_id:
  116. where["category_id"] = category_id
  117. brand_id = request.POST.get("brand_id")
  118. if brand_id:
  119. where["brand_id"] = brand_id
  120. ids = request.POST.get("ids")
  121. if ids:
  122. idRange = json.loads(ids)
  123. where['id__in'] = idRange
  124. supplier_id = request.POST.get("supplier_id")
  125. if supplier_id:
  126. where["supplier_id"] = supplier_id
  127. name = request.POST.get("name")
  128. if name:
  129. where["name__icontains"] = name
  130. status = request.POST.get("status")
  131. if status:
  132. where['status'] = status
  133. paginator = Paginator(Product.objects.filter(**where).exclude(status=4).order_by("-id"), pageSize) # 每页显示10条数据
  134. page_obj = paginator.get_page(page)
  135. dataList = []
  136. for item in page_obj:
  137. info = ProductService.getDetail(item)
  138. dataList.append(info)
  139. return success(pageData(page, pageSize, paginator.num_pages, paginator.count, dataList))