diff --git a/web/collectors/__init__.py b/web/collectors/__init__.py index 9ae3afb..88bbbf2 100644 --- a/web/collectors/__init__.py +++ b/web/collectors/__init__.py @@ -25,6 +25,7 @@ class Collector: self.unit_map = {m.code: m.unit for m in self.materials if m.code} self.name_map = {m.code: m.name for m in self.materials if m.code} self.spec_map = {m.code: m.spec for m in self.materials if m.code} + self.round_bit_map = {m.code: m.round_bit for m in self.materials if m.code} def get_avg(self): query = PricePublish.get_query(material_id_in=self.material_codes) @@ -32,8 +33,6 @@ class Collector: query = query.filter(PricePublish.type == '1') query = query.with_entities( PricePublish.material_id, - # PricePublish.name, - # PricePublish.spec, func.avg(PricePublish.price), func.avg(PricePublish.price_fuzhou), func.avg(PricePublish.price_xiamen), @@ -46,41 +45,36 @@ class Collector: func.avg(PricePublish.price_ningde), func.avg(PricePublish.price_pintan), func.avg(PricePublish.price_zhangzhoukfq), - # PricePublish.tax, - # PricePublish.unit, ) query = query.filter(PricePublish.price != 0) query = query.group_by( PricePublish.material_id, - # PricePublish.name, - # PricePublish.spec, - # PricePublish.tax, - # PricePublish.unit, ) data = query.all() for item in data: material_id, price, price_fuzhou, price_xiamen, price_putian, price_sanming, price_quanzhou, \ price_zhangzhou, price_nanpin, price_longyan, price_ningde, price_pintan, price_zhangzhoukfq = item display_digit = self.digit_map.get(material_id, 1) - + round_bit = self.round_bit_map.get(material_id, 2) + q_ext = Decimal('0.' + '0' * round_bit) PricePublish( year=self.year, month=self.month, material_id=material_id, name=self.name_map.get(material_id, ''), spec=self.spec_map.get(material_id, ''), - price=price.quantize(Decimal('0.00'), decimal.ROUND_HALF_UP) if price else 0, - price_fuzhou=price_fuzhou.quantize(Decimal('0.00'), decimal.ROUND_HALF_UP) if price_fuzhou else 0, - price_xiamen=price_xiamen.quantize(Decimal('0.00'), decimal.ROUND_HALF_UP) if price_xiamen else 0, - price_putian=price_putian.quantize(Decimal('0.00'), decimal.ROUND_HALF_UP) if price_putian else 0, - price_sanming=price_sanming.quantize(Decimal('0.00'), decimal.ROUND_HALF_UP) if price_sanming else 0, - price_quanzhou=price_quanzhou.quantize(Decimal('0.00'), decimal.ROUND_HALF_UP) if price_quanzhou else 0, - price_zhangzhou=price_zhangzhou.quantize(Decimal('0.00'), decimal.ROUND_HALF_UP) if price_zhangzhou else 0, - price_nanpin=price_nanpin.quantize(Decimal('0.00'), decimal.ROUND_HALF_UP) if price_nanpin else 0, - price_longyan=price_longyan.quantize(Decimal('0.00'), decimal.ROUND_HALF_UP) if price_longyan else 0, - price_ningde=price_ningde.quantize(Decimal('0.00'), decimal.ROUND_HALF_UP) if price_ningde else 0, - price_pintan=price_pintan.quantize(Decimal('0.00'), decimal.ROUND_HALF_UP) if price_pintan else 0, - price_zhangzhoukfq=price_zhangzhoukfq.quantize(Decimal('0.00'), decimal.ROUND_HALF_UP) if price_zhangzhoukfq else 0, + price=price.quantize(q_ext, decimal.ROUND_HALF_UP) if price else 0, + price_fuzhou=price_fuzhou.quantize(q_ext, decimal.ROUND_HALF_UP) if price_fuzhou else 0, + price_xiamen=price_xiamen.quantize(q_ext, decimal.ROUND_HALF_UP) if price_xiamen else 0, + price_putian=price_putian.quantize(q_ext, decimal.ROUND_HALF_UP) if price_putian else 0, + price_sanming=price_sanming.quantize(q_ext, decimal.ROUND_HALF_UP) if price_sanming else 0, + price_quanzhou=price_quanzhou.quantize(q_ext, decimal.ROUND_HALF_UP) if price_quanzhou else 0, + price_zhangzhou=price_zhangzhou.quantize(q_ext, decimal.ROUND_HALF_UP) if price_zhangzhou else 0, + price_nanpin=price_nanpin.quantize(q_ext, decimal.ROUND_HALF_UP) if price_nanpin else 0, + price_longyan=price_longyan.quantize(q_ext, decimal.ROUND_HALF_UP) if price_longyan else 0, + price_ningde=price_ningde.quantize(q_ext, decimal.ROUND_HALF_UP) if price_ningde else 0, + price_pintan=price_pintan.quantize(q_ext, decimal.ROUND_HALF_UP) if price_pintan else 0, + price_zhangzhoukfq=price_zhangzhoukfq.quantize(q_ext, decimal.ROUND_HALF_UP) if price_zhangzhoukfq else 0, tax=self.tax_map.get(material_id, 0), # 从材料表获取税率 type=2, unit=self.unit_map.get(material_id, ''),