commit 54ac29d27b69973aef68a36e682d4a261bffc25e Author: han0 Date: Wed May 29 10:21:31 2024 +0800 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6b164f1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +venv/ +__pycache__/ +*.ini +.eggs/ +*.egg-info +dist/ +build/ +.DS_Store +*.log +*.pyc +.idea +.sass-cache +*.iml +.ipr +.iws +*~ +~* +*.diff +*.patch +*.bak +Thumbs.db +.project +.*proj +.svn +*.swp +*.swo +*.class +*.tmp_* +.build +.logs +node_modules +config.rb +.pytest_cache +.idea + +local_config.py +.local_config.py +./local_config.py \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..f137905 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,54 @@ +stages: +- build +- deploy + +variables: + DEPLOY_PATH: '/opt/app/material_api' + DEPLOY_DEV_HOST_IP: '192.168.137.123' + PIP_CACHE_DIR: "/cache/pip" + SSH_OPTS: "-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" + FF_NETWORK_PER_BUILD: "true" + +.import_ssh_key: &import_ssh_key + before_script: + - mkdir -p ~/.ssh + - chmod 700 ~/.ssh + - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config + - echo "${DEPLOY_SSH_KEY}" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + +.cache: &cache + key: "${CI_PROJECT_PATH}-${CI_COMMIT_REF_SLUG}" + paths: + - home/ + +build: + stage: build + image: python:3.7.16-material-api + cache: + <<: *cache + script: + - mkdir dist + - PYTHONUSERBASE=$CI_PROJECT_DIR/home pip install --upgrade pip -i http://192.168.137.1:8082/repository/pypi-group/simple --trusted-host 192.168.137.1 --user + - PYTHONUSERBASE=$CI_PROJECT_DIR/home pip install -r ./requirements.txt -i http://192.168.137.1:8082/repository/pypi-group/simple --trusted-host 192.168.137.1 --user + - rsync -ha ./ ./dist --exclude=dist --exclude=.git --delete + artifacts: + paths: + - ./dist + expire_in: 7 days + only: + - master +# - test +# - production + +deploy:master: + <<: *import_ssh_key + image: instrumentisto/rsync-ssh + stage: deploy + variables: + GIT_STRATEGY: none + script: + - rsync -r ./dist/ ${DEPLOY_DEV_HOST_IP}:${DEPLOY_PATH} --delete + - ssh ${SSH_OPTS} ${DEPLOY_DEV_HOST_IP} "cd ${DEPLOY_PATH} && source /etc/profile && docker-compose up -d --force-recreate" + only: + - master \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..61d02f4 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +挂载SMB文件路径 +mount -o username=administrator,password=Xxs123456Xxs //192.168.137.1/data/fjmap /home/fjmap \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..46d84bf --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,22 @@ +version: '2.1' +services: + www: + image: python:3.7.16-material-api + build: ./docker + restart: always + environment: + - SERVICE_NAME=material-api + - HOST_IP=${HOST_IP:-127.0.0.1} + - TZ="Asia/Shanghai" + command: + "/root/.local/bin/supervisord -c /usr/src/app/${SUPERVISOR_CONFIG:-supervisor.conf}" + extra_hosts: + - "test.225.server:${_IP-168.168.7.225}" + volumes: + - ./web:/usr/src/app + - ./home:/root/.local + - ./logs:/logs + - /opt/files/material_api:/usr/src/app/files + working_dir: /usr/src/app/ + ports: + - 7072:7072 diff --git a/init_docker_env.bat b/init_docker_env.bat new file mode 100644 index 0000000..61ba94f --- /dev/null +++ b/init_docker_env.bat @@ -0,0 +1,4 @@ +docker-compose build +docker run -it -v "E:\Project\transport_api:/app" python:3.7.16-transport-api bash +PYTHONUSERBASE=/app/home pip install -r /app/requirements.txt -i http://192.168.1.3:8082/repository/pypi-group/simple --trusted-host 192.168.1.3 --user +PYTHONUSERBASE=/app/home pip install nc_http --upgrade -i http://192.168.1.3:8082/repository/pypi-group/simple --trusted-host 192.168.1.3 --user \ No newline at end of file diff --git a/init_env.bat b/init_env.bat new file mode 100644 index 0000000..8672a25 --- /dev/null +++ b/init_env.bat @@ -0,0 +1,3 @@ +python -m pip install pip --upgrade -i https://pypi.douban.com/simple +python -m pip install -r requirements.txt -i https://pypi.douban.com/simple +python -m pip install nc_http --upgrade -i http://192.168.1.3:8082/repository/pypi-group/simple --trusted-host 192.168.1.3 \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..316d6d9 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,27 @@ +#git+http://oauth2:4VGjs7rFL9fz8EwR1x6g@192.168.1.3:8929/jgy_xxs/nc_http.git +#git+http://oauth2:4VGjs7rFL9fz8EwR1x6g@192.168.137.123:8929/jgy_xxs/nc_http.git +#git+http://oauth2:4VGjs7rFL9fz8EwR1x6g@192.168.1.3:8929/jgy_xxs/nc_http.git +#git+http://oauth2:4VGjs7rFL9fz8EwR1x6g@gitlab:8929/jgy_xxs/nc_http.git +#nc_http>=0.0.1.dev54 + +Flask>=2.0.3 +Flask-SQLAlchemy>=2.4.4 +Flask-APScheduler>=1.11.0 +flask-siwadoc>=0.2.1 +SQLAlchemy>=1.3.23 +requests>=2.25.1 +python-dateutil>=2.8.1 +retrying + +psycopg2 +MySQL-connector-python + +# deploy +waitress>=1.4.4 +gevent>=21.1.2 +supervisor>=4.2.1 +gunicorn + +scrapy +Twisted==22.10.0 +selenium \ No newline at end of file diff --git a/update_home.bat b/update_home.bat new file mode 100644 index 0000000..68b4320 --- /dev/null +++ b/update_home.bat @@ -0,0 +1,3 @@ +docker run -it -v "E:\Project\geological-map-api:/app" python:3.6.8-geological-map-api bash + +PYTHONUSERBASE=/app/home pip install -r /app/requirements.txt -i http://192.168.1.3:8082/repository/pypi-group/simple --trusted-host 192.168.1.3 --user \ No newline at end of file diff --git a/update_nc.bat b/update_nc.bat new file mode 100644 index 0000000..b85b102 --- /dev/null +++ b/update_nc.bat @@ -0,0 +1 @@ +python37 -m pip install nc_http --upgrade -i http://192.168.1.3:8082/repository/pypi-group/simple --trusted-host 192.168.1.3 \ No newline at end of file diff --git a/web/api/__init__.py b/web/api/__init__.py new file mode 100644 index 0000000..476bac1 --- /dev/null +++ b/web/api/__init__.py @@ -0,0 +1,99 @@ + +""" 接口加载器 +""" +from flask import g, Blueprint +from nc_http.core import ResponseMeta +from werkzeug.http import HTTP_STATUS_CODES + +import os +import logging +from logging.handlers import TimedRotatingFileHandler +from importlib import import_module +import glob + +from config import APP_MODE, API_ROOT + +LOGGER = logging.getLogger() + + +def http_error_handler(err): + # 忽略404日志记录 + if err.code not in [400, 403, 404]: + LOGGER.error(err) + return ResponseMeta(code=err.code, http_code=err.code, description=err.name) + + +def response_meta_handler(response_meta): + return response_meta.get_response() + + +def generic_error_handler(err): + LOGGER.exception(err) + + if APP_MODE == 'Production': + return ResponseMeta(http_code=500, description='出错了,请及时联系我们,我们的工程师将全力为您解决。') + else: + return ResponseMeta(http_code=500, description=str(err)) + + +def before_request(): + """ + g.auth 授权之后 + g.pagination 返回分页 + """ + # 自定义的请求头部 + g.headers = {} + + +def app_teardown(exc): + pass + + +def init_logger(app): + log_dir = app.config.get('LOG_DIR') + + if log_dir: + file_handler = TimedRotatingFileHandler(os.path.join(log_dir, 'app.log'), 'midnight', 1, 15) + file_handler.suffix = '%Y%m%d' + file_handler.setFormatter(logging.Formatter(app.config.get('LOG_FORMAT'))) + file_handler.setLevel(logging.DEBUG) + logger = logging.getLogger() + logger.addHandler(file_handler) + logger.setLevel(logging.DEBUG) + + +# 初始化接口 +def init_app(app): + app.teardown_appcontext(app_teardown) + app.before_request(before_request) + + for code in HTTP_STATUS_CODES: + if code in [400, 401, 403, 404, 405, 406, 409, 500, 502, 503, 504]: + app.register_error_handler(code, http_error_handler) + + app.register_error_handler(ResponseMeta, response_meta_handler) + app.register_error_handler(Exception, generic_error_handler) + + # from api.helpers.db import main + # main() + + # 注册接口 + path = os.path.dirname(__file__) + + file_names = glob.glob(os.path.join(path, 'components', '*.py')) + file_names = file_names + glob.glob(os.path.join(path, 'components', '**', '*.py')) + for filename in file_names: + filename = filename.replace(os.path.join(path, "components"), '').replace(os.sep, '.') + module_name = os.path.basename(filename)[:-3] + import_module('.components' + module_name, os.path.basename(path)) + + from . import blueprint + + for blueprint_name in dir(blueprint): + if not blueprint_name.startswith('__'): + bp = getattr(blueprint, blueprint_name) + if isinstance(bp, Blueprint): + app.register_blueprint( + bp, + url_prefix='{}{}'.format(API_ROOT, bp.url_prefix) if blueprint_name != 'root' else bp.url_prefix + ) diff --git a/web/api/blueprint.py b/web/api/blueprint.py new file mode 100644 index 0000000..0a21838 --- /dev/null +++ b/web/api/blueprint.py @@ -0,0 +1,5 @@ +from flask import Blueprint + +root = Blueprint('root', __name__, url_prefix='/') +# +data = Blueprint('data', __name__, url_prefix='/data') \ No newline at end of file diff --git a/web/api/components/__init__.py b/web/api/components/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/web/api/components/data.py b/web/api/components/data.py new file mode 100644 index 0000000..7d1d1a1 --- /dev/null +++ b/web/api/components/data.py @@ -0,0 +1,32 @@ +import json +import traceback + +from nc_http.core import Response + +from api.blueprint import data +from commons.constants.material_task import MaterialTaskStatus +from commons.models.material_task import MaterialTask +from commons.services.data import DataService +from core.extensions import siwa + + +@data.route('/task//refresh', methods=['GET']) +@siwa.doc(tags=[""], summary='') +def refresh_task(task_id): + with MaterialTask.atomic() as session: + data = MaterialTask.get_by_id(task_id, session) + if not data: + pass + data.status = MaterialTaskStatus.DOING + session.flush() + try: + content = DataService.get_content(type=data.type) + data.content = json.dumps(content, ensure_ascii=False) + data.status = MaterialTaskStatus.DONE + session.flush() + except Exception as e: + traceback.print_exc() + data.status = MaterialTaskStatus.FAILED + session.flush() + + return Response() diff --git a/web/api/components/root.py b/web/api/components/root.py new file mode 100644 index 0000000..86ae391 --- /dev/null +++ b/web/api/components/root.py @@ -0,0 +1,53 @@ +import json +import os +from logging import getLogger + +import requests +from flask import request, send_file +from nc_http.core import Response +from nc_http.core.request.func import get_client_ip, get_request_json + +import config +from api.blueprint import root +from commons import meta +from tasks import once + +LOGGER = getLogger('root') + + +@root.route('') +def root_check(): + # 测试服务是否启动 + return 'ok' + + +@root.route('/ip') +def get_ip(): + # 获取客户端 ip + ip = get_client_ip(request) + return Response(ip) + + +@root.route('/debug/c', methods=['POST']) +def test_es(): + data = get_request_json() + url = "{}/one-map-data/_search".format(config.ES_HOSTS) + headers = {'Content-Type': 'application/json'} + result = requests.post(url, json.dumps(data), headers=headers) + return Response(json.loads(result.content)) + + +@root.route('/debug/run_once/', methods=['GET']) +def run_once_task(task_name): + if not config.DEBUG: + raise meta.NO_CONTENT + + task = getattr(once, task_name) + + return Response(task()) + + +@root.route('/logs', methods=['GET']) +def download_log_file(): + log_file = os.path.join(config.LOG_DIR, 'app.log') + return send_file(log_file, as_attachment=True, download_name='geological-map-api.log', mimetype='text/plain') diff --git a/web/calculators/__init__.py b/web/calculators/__init__.py new file mode 100644 index 0000000..8bf82fb --- /dev/null +++ b/web/calculators/__init__.py @@ -0,0 +1,183 @@ +from commons.models.price_result import PriceResult + + +class Helper: + + @staticmethod + def get_last_month(year, month): + if month == 1: + last_month_year = year - 1 + last_month = 12 + else: + last_month_year = year + last_month = month - 1 + + return last_month_year, last_month + + @staticmethod + def get_next_month(year, month): + if month == 12: + last_month_year = year + 1 + last_month = 1 + else: + last_month_year = year + last_month = month + 1 + + return last_month_year, last_month + + +class Calculator: + material_id = "" + name = "" + year = 0 + month = 0 + price_ftb = 0 + fluctuating_ftb = 0 + price_ss = 0 + fluctuating_ss = 0 + price_fhb = 0 + fluctuating_fhb = 0 + price_network = 0 + fluctuating_network = 0 + price_survey = 0 + fluctuating_survey = 0 + price_last_month = 0 + price_calculate = 0 + price_recommend = 0 + fluctuating_recommend = 0 + unit = "" + spec = '' + + _previous_prices = None + _fluctuatings = [] + + @property + def previous_prices(self): + if not self._previous_prices: + previous_price = PriceResult.get_by_key(self.name, *Helper.get_last_month(self.year, self.month)) + self._previous_prices = previous_price + return self._previous_prices + + def result(self): + return { + 'material_id': self.material_id, + 'name': self.name, + 'year': self.year, + 'month': self.month, + 'price_ftb': self.price_ftb, + 'fluctuating_ftb': self.fluctuating_ftb, + 'price_ss': self.price_ss, + 'fluctuating_ss': self.fluctuating_ss, + 'price_fhb': self.price_fhb, + 'fluctuating_fhb': self.fluctuating_fhb, + 'price_network': self.price_network, + 'fluctuating_network': self.fluctuating_network, + 'price_survey': self.price_survey, + 'fluctuating_survey': self.fluctuating_survey, + 'price_last_month': self.price_last_month, + 'price_calculate': self.price_calculate, + 'price_recommend': self.price_recommend, + 'fluctuating_recommend': self.fluctuating_recommend, + 'unit': self.unit, + 'spec': self.spec, + } + + def run(self): + self.price_ftb, self.fluctuating_ftb = self._get_ftb_price() + self.price_ss, self.fluctuating_ss = self._get_ss_price() + self.price_fhb, self.fluctuating_fhb = self._get_fhb_price() + self.price_network, self.fluctuating_network = self._get_network_price() + self.price_survey, self.fluctuating_survey = self._get_survey_price() + self.price_last_month = self._get_last_month_price() + self.price_calculate = self._get_calculate_price() + self.price_recommend, self.fluctuating_recommend = self._get_recommend_price() + return self + + def _get_ftb_price(self): + return 0, 0 + + def _get_ss_price(self): + return 0, 0 + + def _get_fhb_price(self): + return 0, 0 + + def _get_network_price(self): + return 0, 0 + + def _get_survey_price(self): + return 0, 0 + + def _get_last_month_price(self): + return getattr(self.previous_prices, 'price_recommend', 0) + + def _get_calculate_price(self, round_dit=0): + prices = ( + self.price_ftb, self.price_ss, self.price_fhb, self.price_network, self.price_survey, self.price_last_month) + total = sum(float(i) for i in prices) + if total == 0: + return 0 + result = total / len([i for i in prices if i != 0]) + result = round(result, round_dit) + return result + + def _get_recommend_price(self, round_by=10): + if not self.previous_prices: + return 0, 0 + + previous_price = int(getattr(self.previous_prices, 'price_recommend', 0)) + if not previous_price: + return 0, 0 + + fluctuating = sum(self._fluctuatings) / len(self._fluctuatings) + fluctuating = round(fluctuating / round_by) * round_by + + price = fluctuating + previous_price + price = round(price / round_by) * round_by + + return price, fluctuating + + def save(self): + result = self.result() + PriceResult(**result).upsert() + + +if __name__ == '__main__': + from calculators.asphalt_domestic import AsphaltDomesticCalculator + from calculators.asphalt_imported import AsphaltImportedCalculator + from calculators.cement_325 import Cement325Calculator + from calculators.cement_425 import Cement425Calculator + from calculators.oil_0 import Oil0Calculator + from calculators.oil_89 import Oil89Calculator + from calculators.oil_92 import Oil92Calculator + from calculators.steel_plate import SteelPlateCalculator + from calculators.steel_rebar_300 import Reber300Calculator + from calculators.steel_rebar_400 import Reber400Calculator + from calculators.steel_section import SteelSectionCalculator + from calculators.steel_strand import SteelStrandCalculator + from calculators.asphalt_domestic_modifier import AsphaltDomesticModifierCalculator + from calculators.asphalt_imported_modifier import AsphaltImportedModifierCalculator + from core.factory import ClientApp + + for Calculator in [ + AsphaltDomesticCalculator, + AsphaltImportedCalculator, + Cement325Calculator, + Cement425Calculator, + Oil0Calculator, + Oil89Calculator, + Oil92Calculator, + SteelPlateCalculator, + Reber300Calculator, + Reber400Calculator, + SteelSectionCalculator, + SteelStrandCalculator, + AsphaltDomesticModifierCalculator, + AsphaltImportedModifierCalculator, + ]: + with ClientApp().app_context(): + for month in range(8, 13): + calculator = Calculator(year=2023, month=month) + _result = calculator.run() + calculator.save() + print(_result) diff --git a/web/calculators/asphalt_domestic.py b/web/calculators/asphalt_domestic.py new file mode 100644 index 0000000..3a67d52 --- /dev/null +++ b/web/calculators/asphalt_domestic.py @@ -0,0 +1,73 @@ +import datetime + +from sqlalchemy import func + +from calculators import Calculator, Helper +from commons.models.fujian_survey import FujianSurvey + +from commons.models.asphalt_domestic import AsphaltDomestic + + +class AsphaltDomesticCalculator(Calculator): + name = "国产沥青" + material_id = "06.60.61.00" + unit = "t" + spec = "" + + def __init__(self, year, month): + self.year = year + self.month = month + + def _get_network_price(self): + name_in = ( + '浙江省—镇海炼化(70#,90#,A级)', + '福建省—联合石化(70#,A级)', + '广东省—茂名石化(70#,90#,A级)', + '广东省—中油高富(70#,90#,A级)华南公司', + ) + last_month_year, last_month = Helper.get_last_month(self.year, self.month) + + end_date = AsphaltDomestic.get_last_date_from(date=datetime.date(last_month_year, last_month, 26)) + start_date = AsphaltDomestic.get_last_date_from(date=datetime.date(self.year, self.month, 25)) + + previous_items = AsphaltDomestic.get_items(date=end_date, name_in=name_in) + previous_prices = {material: float(price or 0) for material, price in previous_items} + + current_items = AsphaltDomestic.get_items(date=start_date, name_in=name_in) + current_prices = {material: float(price or 0) for material, price in current_items} + + fluctuating_a = current_prices.get(name_in[0], 0) - previous_prices.get(name_in[0], 0) + fluctuating_b = current_prices.get(name_in[1], 0) - previous_prices.get(name_in[1], 0) + fluctuating_c = current_prices.get(name_in[2], 0) - previous_prices.get(name_in[2], 0) + fluctuating_d = current_prices.get(name_in[3], 0) - previous_prices.get(name_in[3], 0) + + previous_price = int(getattr(self.previous_prices, 'price_network', 0)) + + price = previous_price + 0.4 * fluctuating_a + 0.2 * (fluctuating_b + fluctuating_c + fluctuating_d) + fluctuating = price - previous_price + + return price, fluctuating + + def _get_survey_price(self): + query = FujianSurvey.get_query(self.year, self.month, name='石油沥青', spec='国产 (路面用)') + query = query.with_entities(func.avg(FujianSurvey.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - int(getattr(self.previous_prices, 'price_survey', price)) + return price, fluctuating + + def _get_recommend_price(self): + self._fluctuatings = [self.fluctuating_network, self.fluctuating_survey] + return super()._get_recommend_price() + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context(): + calculator = AsphaltDomesticCalculator(year=2023, month=12) + _result = calculator.run() + calculator.save() + print(_result) diff --git a/web/calculators/asphalt_domestic_modifier.py b/web/calculators/asphalt_domestic_modifier.py new file mode 100644 index 0000000..0de47a2 --- /dev/null +++ b/web/calculators/asphalt_domestic_modifier.py @@ -0,0 +1,64 @@ +from sqlalchemy import func + +from calculators import Calculator, Helper +from commons.models.asphalt_modifier import AsphaltModifier + +from commons.models.price_result import PriceResult + + +class AsphaltDomesticModifierCalculator(Calculator): + name = "国产改性沥青" + material_id = "06.12.61.00" + unit = "t" + spec = "" + + def __init__(self, year, month): + self.year = year + self.month = month + + def _get_recommend_price(self): + previous_price = int(getattr(self.previous_prices, 'price_recommend', 0)) + if not previous_price: + return 0, 0 + + query = PriceResult.get_query(self.year, self.month, name='国产沥青') + result = query.all() + if not result: + return 0, 0 + + raw_data = result[0] + + fluctuating_1 = int(raw_data.fluctuating_recommend) + + query = AsphaltModifier.get_query(self.year, self.month) + query = query.with_entities(func.avg(AsphaltModifier.price)) + result_current = query.one_or_none() + if not result_current or not result_current[0]: + return 0, 0 + + query = AsphaltModifier.get_query(*Helper.get_last_month(self.year, self.month)) + query = query.with_entities(func.avg(AsphaltModifier.price)) + result_previous = query.one_or_none() + if not result_previous or not result_previous[0]: + return 0, 0 + + fluctuating_2 = int((result_current[0] - result_previous[0]) * 5 / 100) + + price = previous_price + fluctuating_1 + fluctuating_2 + price = round(price / 10) * 10 + + return price, fluctuating_1 + fluctuating_2 + + def save(self): + result = self.result() + PriceResult(**result).upsert() + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context(): + calculator = AsphaltDomesticModifierCalculator(year=2023, month=9) + _result = calculator.run() + calculator.save() + print(_result) diff --git a/web/calculators/asphalt_imported.py b/web/calculators/asphalt_imported.py new file mode 100644 index 0000000..eab24bc --- /dev/null +++ b/web/calculators/asphalt_imported.py @@ -0,0 +1,55 @@ +from sqlalchemy import func + +from calculators import Calculator +from commons.models.asphalt_imported import AsphaltImported +from commons.models.fujian_survey import FujianSurvey +from commons.models.price_result import PriceResult + + +class AsphaltImportedCalculator(Calculator): + name = "进口沥青" + material_id = "06.60.60.00" + unit = "t" + spec = "" + + def __init__(self, year, month): + self.year = year + self.month = month + + def _get_network_price(self): + items = AsphaltImported.get_items(year=self.year, month=self.month, name_in=('新加坡—华东',)) + prices = {name: float(price or 0) for name, price in items} + + price = prices.get('新加坡—华东', 0) + previous_price = int(getattr(self.previous_prices, 'price_network', 0)) + fluctuating = price - previous_price + + return price, fluctuating + + def _get_survey_price(self): + query = FujianSurvey.get_query(self.year, self.month, name='石油沥青', spec='进口 (路面用)') + query = query.with_entities(func.avg(FujianSurvey.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - int(getattr(self.previous_prices, 'price_survey', price)) + return price, fluctuating + + def _get_recommend_price(self): + self._fluctuatings = [self.fluctuating_network, self.fluctuating_survey] + return super()._get_recommend_price() + + def save(self): + result = self.result() + PriceResult(**result).upsert() + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context(): + calculator = AsphaltImportedCalculator(year=2023, month=10) + result = calculator.run() + calculator.save() + print(result) diff --git a/web/calculators/asphalt_imported_modifier.py b/web/calculators/asphalt_imported_modifier.py new file mode 100644 index 0000000..c758d09 --- /dev/null +++ b/web/calculators/asphalt_imported_modifier.py @@ -0,0 +1,64 @@ +from sqlalchemy import func + +from calculators import Calculator, Helper +from commons.models.asphalt_modifier import AsphaltModifier + +from commons.models.price_result import PriceResult + + +class AsphaltImportedModifierCalculator(Calculator): + name = "进口改性沥青" + material_id = "06.12.60.00" + unit = "t" + spec = "" + + def __init__(self, year, month): + self.year = year + self.month = month + + def _get_recommend_price(self): + previous_price = int(getattr(self.previous_prices, 'price_recommend', 0)) + if not previous_price: + return 0, 0 + + query = PriceResult.get_query(self.year, self.month, name='进口沥青') + result = query.all() + if not result: + return 0, 0 + + raw_data = result[0] + + fluctuating_1 = int(raw_data.fluctuating_recommend) + + query = AsphaltModifier.get_query(self.year, self.month) + query = query.with_entities(func.avg(AsphaltModifier.price)) + result_current = query.one_or_none() + if not result_current or not result_current[0]: + return 0, 0 + + query = AsphaltModifier.get_query(*Helper.get_last_month(self.year, self.month)) + query = query.with_entities(func.avg(AsphaltModifier.price)) + result_previous = query.one_or_none() + if not result_previous or not result_previous[0]: + return 0, 0 + + fluctuating_2 = int((result_current[0] - result_previous[0]) * 5 / 100) + + price = previous_price + fluctuating_1 + fluctuating_2 + price = round(price / 10) * 10 + + return price, fluctuating_1 + fluctuating_2 + + def save(self): + result = self.result() + PriceResult(**result).upsert() + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context(): + calculator = AsphaltImportedModifierCalculator(year=2023, month=9) + _result = calculator.run() + calculator.save() + print(_result) diff --git a/web/calculators/cement_325.py b/web/calculators/cement_325.py new file mode 100644 index 0000000..edb3e7d --- /dev/null +++ b/web/calculators/cement_325.py @@ -0,0 +1,77 @@ +from sqlalchemy import func + +from calculators import Calculator +from commons.models.cement import Cement +from commons.models.fujian_survey import FujianSurvey +from commons.models.fuzhou_highway_bureau import FuzhouHighwayBureau +from commons.models.fuzhou_transportation_bureau import FuzhouTransportationBureau + +from commons.models.price_result import PriceResult + + +class Cement325Calculator(Calculator): + name = "32.5 水泥" + material_id = "09.60.60.00" + unit = "t" + spec = "" + + def __init__(self, year, month): + self.year = year + self.month = month + + def _get_ftb_price(self): + query = FuzhouTransportationBureau.get_query(self.year, self.month, name='32.5级水泥') + query = query.with_entities(func.avg(FuzhouTransportationBureau.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - int(getattr(self.previous_prices, 'ftb_price', price)) + return price, fluctuating + + def _get_fhb_price(self): + query = FuzhouHighwayBureau.get_query(self.year, self.month, name='32.5级水泥', spec='旋窑(散装)') + query = query.with_entities(func.avg(FuzhouHighwayBureau.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - int(getattr(self.previous_prices, 'ftb_price', price)) + return price, fluctuating + + def _get_network_price(self): + result = Cement.get_items(self.year, self.month, spec_in=('台泥', '金牛', '炼石牌'), name_in=('P.S.A32.5', 'M32.5', 'P.P 32.5R'), pack='散装') + prices = result[0][0] + if not result[0][0]: + return 0, 0 + price = round(prices / 5) * 5 + fluctuating = price - int(getattr(self.previous_prices, 'price_network', price)) + return price, fluctuating + + def _get_survey_price(self): + query = FujianSurvey.get_query(self.year, self.month, name='32.5级水泥', spec='旋窑') + query = query.with_entities(func.avg(FujianSurvey.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - int(getattr(self.previous_prices, 'price_survey', price)) + return price, fluctuating + + def _get_recommend_price(self, round_by=5): + self._fluctuatings = [self.fluctuating_network, self.fluctuating_survey, self.fluctuating_fhb, self.fluctuating_ftb] + return super()._get_recommend_price(round_by) + + def save(self): + result = self.result() + PriceResult(**result).upsert() + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context(): + calculator = Cement325Calculator(year=2023, month=12) + result = calculator.run() + calculator.save() + print(result) diff --git a/web/calculators/cement_425.py b/web/calculators/cement_425.py new file mode 100644 index 0000000..1f79091 --- /dev/null +++ b/web/calculators/cement_425.py @@ -0,0 +1,81 @@ +from sqlalchemy import func + +from calculators import Calculator +from commons.models.cement import Cement +from commons.models.fujian_survey import FujianSurvey +from commons.models.fuzhou_highway_bureau import FuzhouHighwayBureau +from commons.models.fuzhou_transportation_bureau import FuzhouTransportationBureau + +from commons.models.price_result import PriceResult + + +class Cement425Calculator(Calculator): + name = "42.5 水泥" + material_id = "09.61.60.00" + unit = "t" + spec = "" + + def __init__(self, year, month): + self.year = year + self.month = month + + def _get_ftb_price(self): + query = FuzhouTransportationBureau.get_query(self.year, self.month, name='42.5级水泥') + query = query.with_entities(func.avg(FuzhouTransportationBureau.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + + price = int(result[0][0]) + fluctuating = price - int(getattr(self.previous_prices, 'ftb_price', price)) + return price, fluctuating + + # def _get_ss_price(self): + # return 4000, -10 + + def _get_fhb_price(self): + query = FuzhouHighwayBureau.get_query(self.year, self.month, name='42.5级水泥', spec='旋窑(散装)') + query = query.with_entities(func.avg(FuzhouHighwayBureau.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - int(getattr(self.previous_prices, 'ftb_price', price)) + return price, fluctuating + + def _get_network_price(self): + result = Cement.get_items(self.year, self.month, spec_in=('台泥', '金牛', '炼石牌'), name_in=('P.O 42.5',), pack='散装') + if not result[0][0]: + return 0, 0 + prices = result[0][0] + price = round(prices / 5) * 5 + fluctuating = price - int(getattr(self.previous_prices, 'price_network', price)) + return price, fluctuating + + def _get_survey_price(self): + query = FujianSurvey.get_query(self.year, self.month, name='42.5级水泥', spec='旋窑') + query = query.with_entities(func.avg(FujianSurvey.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - int(getattr(self.previous_prices, 'price_survey', price)) + return price, fluctuating + + def _get_recommend_price(self, round_by=5): + self._fluctuatings = [self.fluctuating_network, self.fluctuating_survey, self.fluctuating_fhb, self.fluctuating_ftb] + return super()._get_recommend_price(round_by) + + def save(self): + result = self.result() + PriceResult(**result).upsert() + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context(): + calculator = Cement425Calculator(year=2023, month=11) + result = calculator.run() + calculator.save() + print(result) diff --git a/web/calculators/oil_0.py b/web/calculators/oil_0.py new file mode 100644 index 0000000..9b929ea --- /dev/null +++ b/web/calculators/oil_0.py @@ -0,0 +1,63 @@ +import datetime + +from calculators import Calculator, Helper +from commons.models.oil import Oil + +from commons.models.price_result import PriceResult + + +class Oil0Calculator(Calculator): + name = "柴油(0)" + material_id = "69.61.60.00" + unit = "kg" + spec = "0#" + + def __init__(self, year, month): + self.year = year + self.month = month + + def _get_network_price(self): + name_in = ('车用0号柴油(Ⅵ)',) + # 获取上月末价格 + previous_items = Oil.get_items(*Helper.get_last_month(self.year, self.month), name_in=name_in) + previous_item = previous_items[-1] + previous_price = previous_item.price + + current_items = Oil.get_items(self.year, self.month, name_in=name_in) + # 从本月1号开始计算加权总数 + start_date = datetime.date(self.year, self.month, 1) + previous_date = start_date + total_with_weight = 0 + for item in current_items: + total_with_weight += previous_price * (item.date - previous_date).days + previous_price = item.price + previous_date = item.date + # 直到月末 + end_date = datetime.date(*Helper.get_next_month(self.year, self.month), 1) - datetime.timedelta(days=1) + if end_date > previous_date: + total_with_weight += previous_price * (end_date - previous_date).days + # 计算 + price = round(total_with_weight / (end_date - start_date).days) / 1000 + fluctuating = price - int(getattr(self.previous_prices, 'price_network', price)) + + return round(price, 2), round(fluctuating, 2) + + def _get_calculate_price(self, round_dit=2): + return super()._get_calculate_price(round_dit) + + def _get_recommend_price(self): + return self.price_network, self.fluctuating_network + + def save(self): + result = self.result() + PriceResult(**result).upsert() + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context(): + calculator = Oil0Calculator(year=2023, month=11) + result = calculator.run() + calculator.save() + print(result) diff --git a/web/calculators/oil_89.py b/web/calculators/oil_89.py new file mode 100644 index 0000000..b47b546 --- /dev/null +++ b/web/calculators/oil_89.py @@ -0,0 +1,63 @@ +import datetime + +from calculators import Calculator, Helper +from commons.models.oil import Oil + +from commons.models.price_result import PriceResult + + +class Oil89Calculator(Calculator): + name = "汽油(89)" + material_id = "69.60.60.00" + unit = "kg" + spec = "89#" + + def __init__(self, year, month): + self.year = year + self.month = month + + def _get_network_price(self): + name_in = ('车用89号汽油(ⅥB)',) + # 获取上月末价格 + previous_items = Oil.get_items(*Helper.get_last_month(self.year, self.month), name_in=name_in) + previous_item = previous_items[-1] + previous_price = previous_item.price + + current_items = Oil.get_items(self.year, self.month, name_in=name_in) + # 从本月1号开始计算加权总数 + start_date = datetime.date(self.year, self.month, 1) + previous_date = start_date + total_with_weight = 0 + for item in current_items: + total_with_weight += previous_price * (item.date - previous_date).days + previous_price = item.price + previous_date = item.date + # 直到月末 + end_date = datetime.date(*Helper.get_next_month(self.year, self.month), 1) - datetime.timedelta(days=1) + if end_date > previous_date: + total_with_weight += previous_price * (end_date - previous_date).days + # 计算 + price = round(total_with_weight / (end_date - start_date).days) / 1000 + fluctuating = price - int(getattr(self.previous_prices, 'price_network', price)) + + return round(price, 2), round(fluctuating, 2) + + def _get_calculate_price(self, round_dit=2): + return super()._get_calculate_price(round_dit) + + def _get_recommend_price(self): + return self.price_network, self.fluctuating_network + + def save(self): + result = self.result() + PriceResult(**result).upsert() + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context(): + calculator = Oil89Calculator(year=2023, month=11) + result = calculator.run() + calculator.save() + print(result) diff --git a/web/calculators/oil_92.py b/web/calculators/oil_92.py new file mode 100644 index 0000000..7e57cc0 --- /dev/null +++ b/web/calculators/oil_92.py @@ -0,0 +1,63 @@ +import datetime + +from calculators import Calculator, Helper +from commons.models.oil import Oil + +from commons.models.price_result import PriceResult + + +class Oil92Calculator(Calculator): + name = "汽油(92)" + material_id = "69.60.61.00" + unit = "kg" + spec = "92#" + + def __init__(self, year, month): + self.year = year + self.month = month + + def _get_network_price(self): + name_in = ('车用92号汽油(ⅥB)',) + # 获取上月末价格 + previous_items = Oil.get_items(*Helper.get_last_month(self.year, self.month), name_in=name_in) + previous_item = previous_items[-1] + previous_price = previous_item.price + + current_items = Oil.get_items(self.year, self.month, name_in=name_in) + # 从本月1号开始计算加权总数 + start_date = datetime.date(self.year, self.month, 1) + previous_date = start_date + total_with_weight = 0 + for item in current_items: + total_with_weight += previous_price * (item.date - previous_date).days + previous_price = item.price + previous_date = item.date + # 直到月末 + end_date = datetime.date(*Helper.get_next_month(self.year, self.month), 1) - datetime.timedelta(days=1) + if end_date > previous_date: + total_with_weight += previous_price * (end_date - previous_date).days + # 计算 + price = round(total_with_weight / (end_date - start_date).days) / 1000 + fluctuating = price - int(getattr(self.previous_prices, 'price_network', price)) + + return round(price, 2), round(fluctuating, 2) + + def _get_calculate_price(self, round_dit=2): + return super()._get_calculate_price(round_dit) + + def _get_recommend_price(self): + return self.price_network, self.fluctuating_network + + def save(self): + result = self.result() + PriceResult(**result).upsert() + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context(): + calculator = Oil92Calculator(year=2023, month=11) + result = calculator.run() + calculator.save() + print(result) diff --git a/web/calculators/steel_plate.py b/web/calculators/steel_plate.py new file mode 100644 index 0000000..e482125 --- /dev/null +++ b/web/calculators/steel_plate.py @@ -0,0 +1,79 @@ +from sqlalchemy import func + +from calculators import Calculator +from commons.models.fujian_survey import FujianSurvey +from commons.models.fuzhou_highway_bureau import FuzhouHighwayBureau +from commons.models.fuzhou_transportation_bureau import FuzhouTransportationBureau +from commons.models.price_result import PriceResult +from commons.models.steel_plate import SteelPlate + + +class SteelPlateCalculator(Calculator): + name = "中厚板" + material_id = "17.01.61.00" + unit = "t" + spec = "" + + def __init__(self, year, month): + self.year = year + self.month = month + + def _get_ftb_price(self): + query = FuzhouTransportationBureau.get_query(self.year, self.month, name='钢板') + query = query.with_entities(func.avg(FuzhouTransportationBureau.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - int(getattr(self.previous_prices, 'ftb_price', price)) + return price, fluctuating + + # def _get_ss_price(self): + # return 4000, -10 + + def _get_fhb_price(self): + query = FuzhouHighwayBureau.get_query(self.year, self.month, name='钢板') + query = query.with_entities(func.avg(FuzhouHighwayBureau.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - int(getattr(self.previous_prices, 'ftb_price', price)) + return price, fluctuating + + def _get_network_price(self): + result = SteelPlate.get_items(self.year, self.month) + prices = {spec: float(price) for spec, price in result} + price = 0.2 * prices.get('12', 0) + 0.6 * prices.get('16-20', 0) + 0.2 * prices.get('22-28', 0) + price = round(price) + + fluctuating = price - getattr(self.previous_prices, 'price_network', price) + return price, fluctuating + + def _get_survey_price(self): + query = FujianSurvey.get_query(self.year, self.month, name='钢板') + query = query.with_entities(func.avg(FujianSurvey.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - getattr(self.previous_prices, 'price_survey', price) + return price, fluctuating + + def _get_recommend_price(self): + self._fluctuatings = [self.fluctuating_network, self.fluctuating_survey, self.fluctuating_fhb, self.fluctuating_ftb] + return super()._get_recommend_price() + + def save(self): + result = self.result() + PriceResult(**result).upsert() + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context(): + calculator = SteelPlateCalculator(year=2023, month=11) + result = calculator.run() + calculator.save() + print(result) diff --git a/web/calculators/steel_rebar_300.py b/web/calculators/steel_rebar_300.py new file mode 100644 index 0000000..e2341f5 --- /dev/null +++ b/web/calculators/steel_rebar_300.py @@ -0,0 +1,88 @@ +from sqlalchemy import func + +from calculators import Calculator +from commons.models.fujian_survey import FujianSurvey +from commons.models.fuzhou_highway_bureau import FuzhouHighwayBureau +from commons.models.fuzhou_transportation_bureau import FuzhouTransportationBureau +from commons.models.price_result import PriceResult +from commons.models.sanming_steel import SanmingSteel +from commons.models.steel_rebar import SteelRebar + + +class Reber300Calculator(Calculator): + name = "光圆钢筋" + material_id = "15.05.60.00" + unit = "t" + spec = "" + + def __init__(self, year, month): + self.year = year + self.month = month + + def _get_ftb_price(self): + query = FuzhouTransportationBureau.get_query(self.year, self.month, name='光圆钢筋') + query = query.with_entities(func.avg(FuzhouTransportationBureau.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - getattr(self.previous_prices, 'ftb_price', price) + return price, fluctuating + + def _get_ss_price(self): + query = SanmingSteel.get_query(self.year, self.month, name='高线', spec='φ10mm') + query = query.with_entities(func.avg(SanmingSteel.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - getattr(self.previous_prices, 'ss_price', price) + return price, fluctuating + + def _get_fhb_price(self): + query = FuzhouHighwayBureau.get_query(self.year, self.month, name='光圆钢筋') + query = query.with_entities(func.avg(FuzhouHighwayBureau.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - getattr(self.previous_prices, 'ftb_price', price) + return price, fluctuating + + def _get_network_price(self): + result = SteelRebar.get_items(self.year, self.month, 'HPB300') + price_dict = {spec: price for spec, material, price in result} + price = 0.3 * float(price_dict.get('Φ6', 0)) + 0.7 * float(price_dict.get('Φ8-10', 0)) + price = round(price) + + fluctuating = price - getattr(self.previous_prices, 'price_network', price) + return price, fluctuating + + def _get_survey_price(self): + query = FujianSurvey.get_query(self.year, self.month, name='光圆钢筋') + query = query.with_entities(func.avg(FujianSurvey.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - getattr(self.previous_prices, 'price_survey', price) + return price, fluctuating + + def _get_recommend_price(self): + self._fluctuatings = [self.fluctuating_network, self.fluctuating_survey, self.fluctuating_fhb, self.fluctuating_ftb, self.fluctuating_ss] + return super()._get_recommend_price() + + def save(self): + result = self.result() + PriceResult(**result).upsert() + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context(): + calculator = Reber300Calculator(year=2023, month=10) + result = calculator.run() + calculator.save() + print(result) + diff --git a/web/calculators/steel_rebar_400.py b/web/calculators/steel_rebar_400.py new file mode 100644 index 0000000..6bdf721 --- /dev/null +++ b/web/calculators/steel_rebar_400.py @@ -0,0 +1,90 @@ +from sqlalchemy import func + +from calculators import Calculator +from commons.models.fujian_survey import FujianSurvey +from commons.models.fuzhou_highway_bureau import FuzhouHighwayBureau +from commons.models.fuzhou_transportation_bureau import FuzhouTransportationBureau +from commons.models.price_result import PriceResult +from commons.models.sanming_steel import SanmingSteel +from commons.models.steel_rebar import SteelRebar + + +class Reber400Calculator(Calculator): + name = "带肋钢筋" + material_id = "15.03.60.00" + unit = "t" + spec = "" + + # todo price result 加 year 字段 + + def __init__(self, year, month): + self.year = year + self.month = month + + def _get_ftb_price(self): + query = FuzhouTransportationBureau.get_query(self.year, self.month, name='带肋钢筋') + query = query.with_entities(func.avg(FuzhouTransportationBureau.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - getattr(self.previous_prices, 'ftb_price', price) + return price, fluctuating + + def _get_ss_price(self): + query = SanmingSteel.get_query(self.year, self.month, name='Ⅲ级螺纹钢筋', spec='HRB400Ф16-25') + query = query.with_entities(func.avg(SanmingSteel.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - getattr(self.previous_prices, 'ss_price', price) + return price, fluctuating + + def _get_fhb_price(self): + query = FuzhouHighwayBureau.get_query(self.year, self.month, name='带肋钢筋') + query = query.with_entities(func.avg(FuzhouHighwayBureau.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - getattr(self.previous_prices, 'ftb_price', price) + return price, fluctuating + + def _get_network_price(self): + result = SteelRebar.get_items(self.year, self.month, 'HRB400E') + price_dict = {spec: price for spec, material, price in result} + price = 0.2 * float(price_dict.get('Φ12', 0)) + 0.2 * float(price_dict.get('Φ14', 0)) + \ + 0.4 * float(price_dict.get('Φ18-22', 0)) + 0.2 * float(price_dict.get('Φ28-32', 0)) + price = round(price) + + fluctuating = price - getattr(self.previous_prices, 'price_network', price) + return price, fluctuating + + def _get_survey_price(self): + query = FujianSurvey.get_query(self.year, self.month, name='带肋钢筋') + query = query.with_entities(func.avg(FujianSurvey.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - getattr(self.previous_prices, 'price_survey', price) + return price, fluctuating + + def _get_recommend_price(self): + self._fluctuatings = [self.fluctuating_network, self.fluctuating_survey, self.fluctuating_fhb, self.fluctuating_ftb, self.fluctuating_ss] + return super()._get_recommend_price() + + def save(self): + result = self.result() + PriceResult(**result).upsert() + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context(): + calculator = Reber400Calculator(year=2023, month=10) + result = calculator.run() + calculator.save() + print(result) diff --git a/web/calculators/steel_section.py b/web/calculators/steel_section.py new file mode 100644 index 0000000..2a90bdd --- /dev/null +++ b/web/calculators/steel_section.py @@ -0,0 +1,79 @@ +from sqlalchemy import func + +from calculators import Calculator +from commons.models.fujian_survey import FujianSurvey +from commons.models.fuzhou_highway_bureau import FuzhouHighwayBureau +from commons.models.fuzhou_transportation_bureau import FuzhouTransportationBureau +from commons.models.price_result import PriceResult +from commons.models.steel_section import SteelSection + + +class SteelSectionCalculator(Calculator): + name = "型钢" + material_id = "16.05.60.00" + unit = "t" + spec = "" + + def __init__(self, year, month): + self.year = year + self.month = month + + def _get_ftb_price(self): + query = FuzhouTransportationBureau.get_query(self.year, self.month, name='型钢') + query = query.with_entities(func.avg(FuzhouTransportationBureau.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - getattr(self.previous_prices, 'ftb_price', price) + return price, fluctuating + + # def _get_ss_price(self): + # return 4000, -10 + + def _get_fhb_price(self): + query = FuzhouHighwayBureau.get_query(self.year, self.month, name='型钢') + query = query.with_entities(func.avg(FuzhouHighwayBureau.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - getattr(self.previous_prices, 'ftb_price', price) + return price, fluctuating + + def _get_network_price(self): + result = SteelSection.get_items(self.year, self.month) + if not result[0][0]: + return 0, 0 + price = round(result[0][0]) + + fluctuating = price - getattr(self.previous_prices, 'price_network', price) + return price, fluctuating + + def _get_survey_price(self): + query = FujianSurvey.get_query(self.year, self.month, name='型钢') + query = query.with_entities(func.avg(FujianSurvey.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - getattr(self.previous_prices, 'price_survey', price) + return price, fluctuating + + def _get_recommend_price(self): + self._fluctuatings = [self.fluctuating_network, self.fluctuating_survey, self.fluctuating_fhb, self.fluctuating_ftb] + return super()._get_recommend_price() + + def save(self): + result = self.result() + PriceResult(**result).upsert() + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context(): + calculator = SteelSectionCalculator(year=2023, month=11) + result = calculator.run() + calculator.save() + print(result) diff --git a/web/calculators/steel_strand.py b/web/calculators/steel_strand.py new file mode 100644 index 0000000..b1b8d72 --- /dev/null +++ b/web/calculators/steel_strand.py @@ -0,0 +1,78 @@ +from sqlalchemy import func + +from calculators import Calculator +from commons.models.fujian_survey import FujianSurvey +from commons.models.fuzhou_highway_bureau import FuzhouHighwayBureau +from commons.models.fuzhou_transportation_bureau import FuzhouTransportationBureau +from commons.models.price_result import PriceResult +from commons.models.steel_strand import SteelStrand + + +class SteelStrandCalculator(Calculator): + name = "钢绞线" + material_id = "19.04.60.00" + unit = "t" + spec = "" + + def __init__(self, year, month): + self.year = year + self.month = month + + def _get_ftb_price(self): + query = FuzhouTransportationBureau.get_query(self.year, self.month, name='钢绞线') + query = query.with_entities(func.avg(FuzhouTransportationBureau.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - getattr(self.previous_prices, 'ftb_price', price) + return price, fluctuating + + # def _get_ss_price(self): + # return 4000, -10 + + def _get_fhb_price(self): + query = FuzhouHighwayBureau.get_query(self.year, self.month, name='钢绞线') + query = query.with_entities(func.avg(FuzhouHighwayBureau.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - getattr(self.previous_prices, 'ftb_price', price) + return price, fluctuating + + def _get_network_price(self): + result = SteelStrand.get_items(self.year, self.month) + prices = {material: float(price) for material, price in result} + price = round(prices.get('SWRH82B', 0)) + + fluctuating = price - getattr(self.previous_prices, 'price_network', price) + return price, fluctuating + + def _get_survey_price(self): + query = FujianSurvey.get_query(self.year, self.month, name='钢绞线') + query = query.with_entities(func.avg(FujianSurvey.price)) + result = query.all() + if not result[0][0]: + return 0, 0 + price = int(result[0][0]) + fluctuating = price - getattr(self.previous_prices, 'price_survey', price) + return price, fluctuating + + def _get_recommend_price(self): + self._fluctuatings = [self.fluctuating_network, self.fluctuating_survey, self.fluctuating_fhb, self.fluctuating_ftb] + return super()._get_recommend_price() + + def save(self): + result = self.result() + PriceResult(**result).upsert() + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context(): + calculator = SteelStrandCalculator(year=2023, month=11) + result = calculator.run() + calculator.save() + print(result) diff --git a/web/collectors/__init__.py b/web/collectors/__init__.py new file mode 100644 index 0000000..dfd55e1 --- /dev/null +++ b/web/collectors/__init__.py @@ -0,0 +1,277 @@ +import datetime + +from sqlalchemy import func + +from commons.models.fujian_survey import FujianSurvey +from commons.models.price_publish import PricePublish +from commons.models.price_result import PriceResult + + +class Collector: + + def __init__(self, year, month): + self.year = year + self.month = month + + def get_avg(self): + query = PricePublish.get_query(name_in=( + '杉原木', + '松原木', + '锯材', + '锯材', + '毛竹', + '冷轧带肋钢筋网', + '预应力粗钢筋', + '高强钢丝', + '钢板', + '钢板', + '圆钢', + '钢轨', + '钢管', + '镀锌钢管', + '镀锌无缝钢管', + '镀锌钢板', + '钢丝绳', + '波形钢板(双波)', + '波形钢板(三波)', + '四氟板式橡胶组合支座', + '板式橡胶支座', + '盆式橡胶支座', + '盆式橡胶支座', + '盆式橡胶支座', + '盆式橡胶支座', + '盆式橡胶支座', + '盆式橡胶支座', + '模数式伸缩装置', + '模数式伸缩装置', + '钢绞线群锚(3孔)', + '钢绞线群锚(7孔)', + '钢绞线群锚(15孔)', + '不锈钢板', + '铁件', + '铝合金标志', + '铸铁管', + '钢板网', + '铁丝编织网', + '橡胶护舷', + '橡胶护舷', + '橡胶护舷', + '鼓型橡胶护舷', + '鼓型橡胶护舷', + '鼓型橡胶护舷', + '油漆', + '塑料排水板', + '路缘石', + '乳化炸药', + '硝铵炸药', + '导火线', + '普通雷管', + '电雷管', + '工业数码电子雷管', + '导爆索', + '引爆母线', + '重油', + + '光圆钢筋', + '带肋钢筋', + '型钢', + '钢绞线', + '32.5级水泥', + '42.5级水泥', + '进口沥青', + '国产沥青', + '进口改性沥青', + '国产改性沥青', + '汽油(89)', + '汽油(92)', + '柴油(0)', + )) + query = PricePublish.query_previous_month(query, start_date=datetime.date(self.year, self.month, 1), count=6) + 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), + func.avg(PricePublish.price_putian), + func.avg(PricePublish.price_sanming), + func.avg(PricePublish.price_quanzhou), + func.avg(PricePublish.price_zhangzhou), + func.avg(PricePublish.price_nanpin), + func.avg(PricePublish.price_longyan), + func.avg(PricePublish.price_ningde), + func.avg(PricePublish.price_pintan), + PricePublish.tax, + PricePublish.unit, + ) + query = query.group_by( + PricePublish.material_id, + PricePublish.name, + PricePublish.spec, + PricePublish.tax, + PricePublish.unit, + ) + data = query.all() + for item in data: + material_id, name, spec, price, price_fuzhou, price_xiamen, price_putian, price_sanming, price_quanzhou, \ + price_zhangzhou, price_nanpin, price_longyan, price_ningde, price_pintan, tax, unit = item + PricePublish( + year=self.year, + month=self.month, + material_id=material_id, + name=name, + spec=spec, + price=price, + price_fuzhou=price_fuzhou, + price_xiamen=price_xiamen, + price_putian=price_putian, + price_sanming=price_sanming, + price_quanzhou=price_quanzhou, + price_zhangzhou=price_zhangzhou, + price_nanpin=price_nanpin, + price_longyan=price_longyan, + price_ningde=price_ningde, + price_pintan=price_pintan, + tax=tax, + type=2, + unit=unit, + ).upsert() + + def get_from_survey(self): + query = FujianSurvey.get_query(self.year, self.month, name_in=( + '杉原木', + '松原木', + '锯材', + '锯材', + '毛竹', + '冷轧带肋钢筋网', + '预应力粗钢筋', + '高强钢丝', + '钢板', + '钢板', + '圆钢', + '钢轨', + '钢管', + '镀锌钢管', + '镀锌无缝钢管', + '镀锌钢板', + '钢丝绳', + '波形钢板(双波)', + '波形钢板(三波)', + '四氟板式橡胶组合支座', + '板式橡胶支座', + '盆式橡胶支座', + '盆式橡胶支座', + '盆式橡胶支座', + '盆式橡胶支座', + '盆式橡胶支座', + '盆式橡胶支座', + '模数式伸缩装置', + '模数式伸缩装置', + '钢绞线群锚(3孔)', + '钢绞线群锚(7孔)', + '钢绞线群锚(15孔)', + '不锈钢板', + '铁件', + '铝合金标志', + '铸铁管', + '钢板网', + '铁丝编织网', + '橡胶护舷', + '橡胶护舷', + '橡胶护舷', + '鼓型橡胶护舷', + '鼓型橡胶护舷', + '鼓型橡胶护舷', + '油漆', + '塑料排水板', + '路缘石', + '乳化炸药', + '硝铵炸药', + '导火线', + '普通雷管', + '电雷管', + '工业数码电子雷管', + '导爆索', + '引爆母线', + '重油', + )) + data = query.all() + for item in data: + PricePublish( + year=self.year, + month=self.month, + material_id=item.material_id, + name=item.name, + spec=item.spec, + price=item.price, + price_fuzhou=item.price, + price_xiamen=item.price, + price_putian=item.price, + price_sanming=item.price, + price_quanzhou=item.price, + price_zhangzhou=item.price, + price_nanpin=item.price, + price_longyan=item.price, + price_ningde=item.price, + price_pintan=item.price, + tax=item.tax, + type=1, + unit=item.unit + ).upsert() + + def get_from_result(self): + query = PriceResult.get_query(self.year, self.month, name_in=( + '光圆钢筋', + '带肋钢筋', + '型钢', + '钢绞线', + '32.5级水泥', + '42.5级水泥', + '进口沥青', + '国产沥青', + '进口改性沥青', + '国产改性沥青', + '汽油(89)', + '汽油(92)', + '柴油(0)', + )) + data = query.all() + for item in data: + PricePublish( + year=self.year, + month=self.month, + material_id=item.material_id, + name=item.name, + spec='', + price=item.price_recommend, + price_fuzhou=item.price_recommend, + price_xiamen=item.price_recommend, + price_putian=item.price_recommend, + price_sanming=item.price_recommend, + price_quanzhou=item.price_recommend, + price_zhangzhou=item.price_recommend, + price_nanpin=item.price_recommend, + price_longyan=item.price_recommend, + price_ningde=item.price_recommend, + price_pintan=item.price_recommend, + tax=9.00, + type=1, + ).upsert() + + def run(self): + self.get_from_survey() + self.get_from_result() + self.get_avg() + + +# todo 调查表入库时名称去除空格 + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context(): + collector = Collector(2023, 11) + collector.run() diff --git a/web/commons/__init__.py b/web/commons/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/web/commons/constants/__init__.py b/web/commons/constants/__init__.py new file mode 100644 index 0000000..b6e690f --- /dev/null +++ b/web/commons/constants/__init__.py @@ -0,0 +1 @@ +from . import * diff --git a/web/commons/constants/material_task.py b/web/commons/constants/material_task.py new file mode 100644 index 0000000..b10dc01 --- /dev/null +++ b/web/commons/constants/material_task.py @@ -0,0 +1,21 @@ +class MaterialTaskType: + OTHER_ZHEJIANG = 601 # 浙江 + OTHER_GUANGZHOU = 602 # 广州 + OTHER_YUNNAN = 603 # 云南 + FUJIAN_DEPARTMENT = 701 # 住建厅 + OIL = 801 # 汽柴油 + + values = { + OTHER_ZHEJIANG: '浙江', + OTHER_GUANGZHOU: '广州', + OTHER_YUNNAN: '云南', + FUJIAN_DEPARTMENT: '住建厅', + OIL: '汽柴油', + } + + +class MaterialTaskStatus: + WAITING = 0 + DOING = 1 + DONE = 2 + FAILED = -1 diff --git a/web/commons/constants/mysteel.py b/web/commons/constants/mysteel.py new file mode 100644 index 0000000..d875c45 --- /dev/null +++ b/web/commons/constants/mysteel.py @@ -0,0 +1,16 @@ + +class PageType: + REBAR_LIST = '福州建筑钢材价格行情' + REBAR_DETAIL = '福州建筑钢材价格行情详情' + PLATE_LIST = '福州中板价格行情' + PLATE_DETAIL = '福州中板价格行情详情' + SECTION_LIST = '福州型钢价格行情' + SECTION_DETAIL = '福州型钢价格行情详情' + SHAGANG_LIST = '沙钢调价信息' + SHAGANG_DETAIL = '沙钢调价信息详情' + SANGANG_LIST = '三钢调价信息' + SANGANG_DETAIL = '三钢调价信息详情' + + + + diff --git a/web/commons/helpers/__init__.py b/web/commons/helpers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/web/commons/helpers/auth.py b/web/commons/helpers/auth.py new file mode 100644 index 0000000..d6ac51f --- /dev/null +++ b/web/commons/helpers/auth.py @@ -0,0 +1,9 @@ +from functools import wraps + + +def basic_auth_required(f): + @wraps(f) + def decorated_function(*args, **kwargs): + return f(*args, **kwargs) + + return decorated_function diff --git a/web/commons/helpers/func.py b/web/commons/helpers/func.py new file mode 100644 index 0000000..ad3136c --- /dev/null +++ b/web/commons/helpers/func.py @@ -0,0 +1,158 @@ +# import json +# import time +# import zlib +# from datetime import datetime +# from time import mktime +# +# from flask import request, g +# from nc_http.tools.helpers import strip_value +# +# +# def filter_fields(data, valid_fields): +# """ +# 过滤字段 +# :param data: +# :param valid_fields: 格式['field1', 'field2', 'field3', {'field4': ['sub_field1', 'sub_field2']}] +# :return: +# """ +# if isinstance(data, list): +# tmp = [] +# for item in data: +# tmp.append(filter_fields(item, valid_fields)) +# format_data = tmp +# else: +# format_data = {} +# for field in valid_fields: +# if isinstance(field, dict): +# for key, sub_valid_fields in field.items(): +# if isinstance(sub_valid_fields, list) and key in data: +# format_data[key] = filter_fields(data[key], sub_valid_fields) +# else: +# if field in data: +# format_data[field] = data[field] +# return format_data +# +# +# def get_client_ip(request): +# """ +# 获取客户端 ip +# :param request: +# :return: +# """ +# x_forwarded_for = request.headers.get('X-Forwarded-For') +# if x_forwarded_for: +# ips = x_forwarded_for.split(',') +# return ips[0].strip() +# return request.headers.get('X-Real-Ip', request.remote_addr) +# +# +# def get_time(data, is_datetime=False): +# if data: +# if isinstance(data, int): +# return data +# +# if isinstance(data, datetime): +# return int(time.mktime(data.timetuple())) +# +# _data = None +# if data.isdigit(): +# _data = int(data) +# if is_datetime: +# _data = datetime.fromtimestamp(_data) +# else: +# if data.count('-') == 2: +# date_format = '%Y-%m-%d' +# elif data.count('-') == 1: +# date_format = '%Y-%m' +# elif data.count('/') == 2: +# date_format = '%Y/%m/%d' +# +# else: +# date_format = '' +# +# if data.count(':') == 2: +# time_format = '%H:%M:%S' +# elif data.count(':') == 1: +# time_format = '%H:%M' +# else: +# time_format = '' +# +# if date_format or time_format: +# if ' ' in data: +# datetime_format = '{} {}'.format(date_format, time_format) +# else: +# datetime_format = '{}{}'.format(date_format, time_format) +# +# _data = datetime.strptime(data, datetime_format) +# if is_datetime is False: +# _data = int(mktime(_data.timetuple())) +# else: +# if is_datetime: +# return None +# return 0 +# else: +# if is_datetime: +# return None +# return 0 +# +# return _data +# +# +# def camelize(uncamelized_str): +# if not uncamelized_str: +# return uncamelized_str +# result = ''.join(i.capitalize() for i in uncamelized_str.split('_')) +# result = ''.join((result[0].lower(), result[1:])) +# return result +# +# +# def uncamelize(camelized_str): +# if not camelized_str: +# return camelized_str +# lst = [] +# for index, char in enumerate(camelized_str): +# if char.isupper() and index != 0: +# lst.append("_") +# lst.append(char) +# +# return ''.join(lst).lower() +# +# +# def uncamelize_dict(d): +# return {uncamelize(k): v for k, v in d.items()} +# +# +# def camelize_dict(d): +# return {camelize(k): v for k, v in d.items()} +# +# +# def get_request_json(is_uncamelize=True): +# """ +# 获取 json 传递参数 +# :return: +# """ +# if request.method.lower() == 'get': +# data = request.args.to_dict() +# else: +# if request.content_encoding and 'gzip' in request.content_encoding: +# json_data = zlib.decompress(request.get_data()) +# data = json.loads(json_data) +# else: +# data = request.get_json(force=True, silent=True) or {} +# if is_uncamelize: +# data = {uncamelize(k): v for k, v in data.items()} +# +# g.request_data = strip_value(data) +# +# return g.request_data +# +# +# def get_params(): +# data = request.args.to_dict() +# if request.method.lower() != 'get': +# if request.content_encoding and 'gzip' in request.content_encoding: +# json_data = zlib.decompress(request.get_data()) +# data.update(json.loads(json_data)) +# else: +# data.update(request.get_json(force=True, silent=True) or {}) +# return data diff --git a/web/commons/meta.py b/web/commons/meta.py new file mode 100644 index 0000000..13aa283 --- /dev/null +++ b/web/commons/meta.py @@ -0,0 +1,42 @@ +import functools + +from nc_http.core import ResponseMeta + + +# 请求已成功,请求所希望的响应头或数据体将随此响应返回。 +OK = ResponseMeta(code=200, http_code=200, description='') +# 请求已经被实现,而且有一个新的资源已经依据请求的需要而创建。 +CREATED = ResponseMeta(code=201, http_code=201, description='') +# 资源已经删除。 +NO_CONTENT = ResponseMeta(code=204, http_code=204, description='') +# 由于包含语法错误,当前请求无法被服务器理解。 +BAD_REQUEST = ResponseMeta(code=400, http_code=400, description='请求数据错误!') +# 当前请求需要用户验证。 +UNAUTHORIZED = ResponseMeta(code=401, http_code=401, description='授权无效!') +# 服务器已经理解请求,但是拒绝执行它。 +FORBIDDEN = ResponseMeta(code=403, http_code=403, description='没权限访问,请退出重新登录!') +# 无权限操作 +OPERATE_FORBIDDEN = ResponseMeta(code=407, http_code=403, description='无操作权限') +# 请求失败,请求所希望得到的资源未被在服务器上发现。 +NOT_FOUND = ResponseMeta(code=404, http_code=404, description='资源不存在!') +# 请求行中指定的请求方法不能被用于请求相应的资源。 +METHOD_NOT_ALLOWED = ResponseMeta(code=405, http_code=405, description='方法不存在!') +# 请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体。 +NOT_ACCEPTABLE = ResponseMeta(code=406, http_code=406, description='客户端无效!') +# 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。 +INTERNAL_SERVER_ERROR = ResponseMeta(code=500, http_code=500, description='服务器内部错误!') +# 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。 +BAD_GATEWAY = ResponseMeta(code=502, http_code=502, description='接口错误!') +# 由于临时的服务器维护或者过载,服务器当前无法处理请求。 +SERVICE_UNAVAILABLE = ResponseMeta(code=503, http_code=503, description='服务暂时不可用!') +# 未能及时从上游服务器收到响应。 +GATEWAY_TIMEOUT = ResponseMeta(code=504, http_code=504, description='接口超时!') + +INVALID_PARAMS = functools.partial(lambda **kwargs: ResponseMeta( + code=11001, http_code=400, + description='非法请求参数{}'.format(': {}'.format(kwargs['hint_message']) if kwargs.get('hint_message') else ''), + **kwargs +)) + +FILE_NOT_FOUND = ResponseMeta(code=403, http_code=403, description='未获取到文件') + diff --git a/web/commons/models/__init__.py b/web/commons/models/__init__.py new file mode 100644 index 0000000..41c7de0 --- /dev/null +++ b/web/commons/models/__init__.py @@ -0,0 +1,176 @@ +from datetime import datetime + +import time + +from nc_http.tools.helpers import camelize +from sqlalchemy.orm.exc import NoResultFound + +from commons.models.atomic import Atomic + + +class BaseModel: + query = None + + _unique_fields = [] + _db = None + + __table__ = None + + @classmethod + def atomic(cls): + return Atomic(db=cls._db) + + @classmethod + def get_by_id(cls, id_, session=None): + if session: + query = session.query(cls) + else: + query = cls.query + result = query.filter((getattr(cls, 'id', None) or cls.__table__.primary_key) == id_).one_or_none() + return result + + @classmethod + def insert_many(cls, dicts, commit=True, session=None): + session = session or cls._db.session() + session.bulk_insert_mappings(cls, dicts) + if commit: + session.commit() + + @classmethod + def insert_one(cls, values, commit=True, session=None, return_obj=False): + session = session or cls._db.session() + if not return_obj: + session.bulk_insert_mappings(cls, [values]) + else: + obj = cls() + for key, value in values.items(): + setattr(obj, key, value) + + session.add(obj) + + if commit: + session.commit() + + if return_obj: + return obj + + return + + @classmethod + def update_one(cls, values, commit=True, session=None): + session = session or cls._db.session() + session.bulk_update_mappings(cls, [values]) + if commit: + session.commit() + + @classmethod + def update_many(cls, dicts, commit=True, session=None): + session = session or cls._db.session() + session.bulk_update_mappings(cls, dicts) + if commit: + session.commit() + + def to_dict(self, is_camelized=True): + _ = {} + for column in self.__table__.columns: + key = getattr(column, 'quote', None) or column.name + if is_camelized: + _[camelize(key)] = getattr(self, key, None) + else: + _[key] = getattr(self, key, None) + return _ + + @classmethod + def select_one(cls, query, fields=None): + try: + result = query.one() + except NoResultFound: + return {} + + if not result: + return {} + + return dict(zip([i.key for i in fields], result)) + + @classmethod + def test_one(cls): + result = cls.query.first() + return result.to_dict() + + @classmethod + def now(cls): + return int(time.time()) + + @classmethod + def now_datetime(cls): + return datetime.fromtimestamp(int(time.time())) + + @classmethod + def get_all(cls): + objects = cls.query.all() + for obj in objects: + yield obj.to_dict() + + def update(self, commit=True, session=None, **kwargs): + for key, value in kwargs.items(): + if hasattr(self, key): + setattr(self, key, value) + if commit: + session = session or self._db.session() + session.commit() + + return + + def delete(self, session=None): + session = session or self._db.session() + session.delete(self) + + @classmethod + def get_list(cls, query, paging=None, fields=None): + if fields: + query = query.with_entities(*fields.values()) + + if paging: + page = query.paginate(paging['page'], paging['limit']) + paging['total'] = page.total + result = page.items + else: + result = query.all() + + if fields: + columns = fields.keys() + result = [dict(zip(columns, _)) for _ in result] + else: + result = [_.to_dict() for _ in result] + + if paging: + return result, paging + + return result + + @classmethod + def set_order_by(cls, query, sorting=None): + """ + 配置查询结果排序 + :param query: + :param sorting: + :return: + """ + if not sorting or not isinstance(sorting, dict): + return query + + order_field = sorting.get('order_field') + if not order_field: + return query + + order = sorting.get('order') + if order == 'desc': + query = query.order_by(getattr(cls, order_field).desc()) + else: + query = query.order_by(getattr(cls, order_field)) + + return query + + + + diff --git a/web/commons/models/asphalt_domestic.py b/web/commons/models/asphalt_domestic.py new file mode 100644 index 0000000..7451082 --- /dev/null +++ b/web/commons/models/asphalt_domestic.py @@ -0,0 +1,50 @@ +from sqlalchemy import Column, Integer, String, Numeric, Date, UniqueConstraint, func + +from commons.models.mixin.calculator import CalculatorMixin +from core.extensions import db + + +class AsphaltDomestic(db.Model, CalculatorMixin): + __tablename__ = 'ASPHALT_DOMESTIC' + id = Column('ID', Integer, primary_key=True) + name = Column('NAME', String(128), default='', comment='名称') + price = Column('PRICE', Numeric(16, 4), default=0, comment='价格') + date = Column('DATE', Date, comment='日期') + from_ = Column('FROM', Date, comment='数据来源') + + __table_args__ = ( + UniqueConstraint(name, date, from_, name='Idx_key'), + {'comment': '国产沥青'}, + ) + + @classmethod + def get_by_key(cls, name, date, from_): + query = cls.query + query = query.filter( + cls.name == name, + cls.date == date, + cls.from_ == from_, + ) + return query.one_or_none() + + @classmethod + def get_items(cls, date, name_in): + query = cls.query + query = query.filter(cls.date == date) + query = query.filter(cls.name.in_(name_in)) + query = query.with_entities(cls.name, func.avg(cls.price)) + query = query.group_by(cls.name) + result = query.all() + return result + + def upsert(self): + result = self.get_by_key(self.name, self.date, self.from_) + if not result: + session = db.session + session.add(self) + session.commit() + else: + session = db.session + self.id = result.id + session.add(result) + session.commit() diff --git a/web/commons/models/asphalt_imported.py b/web/commons/models/asphalt_imported.py new file mode 100644 index 0000000..fb486ad --- /dev/null +++ b/web/commons/models/asphalt_imported.py @@ -0,0 +1,48 @@ +from sqlalchemy import Column, Integer, String, Numeric, Date, UniqueConstraint, func + +from commons.models.mixin.calculator import CalculatorMixin +from core.extensions import db + + +class AsphaltImported(db.Model, CalculatorMixin): + __tablename__ = 'ASPHALT_IMPORTED' + id = Column('ID', Integer, primary_key=True) + name = Column('NAME', String(128), default='', comment='名称') + price = Column('PRICE', Numeric(16, 4), default=0, comment='价格') + date = Column('DATE', Date, comment='日期') + + __table_args__ = ( + UniqueConstraint(name, date, name='Idx_key'), + {'comment': '进口沥青'}, + ) + + @classmethod + def get_items(cls, year, month, name_in): + query = cls.query + query = cls.query_by_month(query, year, month) + query = query.filter(cls.name.in_(name_in)) + query = query.with_entities(cls.name, func.avg(cls.price)) + query = query.group_by(cls.name) + result = query.all() + return result + + @classmethod + def get_by_key(cls, name, date): + query = cls.query + query = query.filter( + cls.name == name, + cls.date == date, + ) + return query.one_or_none() + + def upsert(self): + result = self.get_by_key(self.name, self.date) + if not result: + session = db.session + session.add(self) + session.commit() + else: + session = db.session + self.id = result.id + session.add(result) + session.commit() diff --git a/web/commons/models/asphalt_modifier.py b/web/commons/models/asphalt_modifier.py new file mode 100644 index 0000000..6561037 --- /dev/null +++ b/web/commons/models/asphalt_modifier.py @@ -0,0 +1,36 @@ +import datetime + +from dateutil.relativedelta import relativedelta +from sqlalchemy import Column, Integer, String, Numeric, Date, UniqueConstraint + +from core.extensions import db + + +class AsphaltModifier(db.Model): + __tablename__ = 'ASPHALT_MODIFIER' + id = Column('ID', Integer, primary_key=True) + name = Column('NAME', String(128), default='', comment='名称') + spec = Column('SPEC', String(128), default='', comment='规格') + price = Column('PRICE', Numeric(16, 4), default=0, comment='价格') + date = Column('DATE', Date, comment='日期') + + __table_args__ = ( + UniqueConstraint(name, spec, date, name='Idx_key'), + {'comment': '沥青改性剂'}, + ) + + @classmethod + def get_query(cls, year=None, month=None, name=None, spec=None, name_in=None): + query = cls.query + if year and month: + start_date = datetime.date(year, month, 1) + end_date = start_date + relativedelta(months=1) + query = query.filter(cls.date >= start_date) + query = query.filter(cls.date < end_date) + if name: + query = query.filter(cls.name == name) + if name_in: + query = query.filter(cls.name.in_(name_in)) + if spec: + query = query.filter(cls.spec == spec) + return query diff --git a/web/commons/models/atomic/__init__.py b/web/commons/models/atomic/__init__.py new file mode 100644 index 0000000..9598c27 --- /dev/null +++ b/web/commons/models/atomic/__init__.py @@ -0,0 +1,23 @@ +from sqlalchemy.orm import sessionmaker + + +class Atomic: + def __init__(self, db, session=None): + self.session = session or sessionmaker(bind=db.engine)() # 此处 session 复用会导致事务异常 应创建 session + + def __enter__(self): + return self.session + + def __exit__(self, exc_type, exc_value, exc_tb): + if exc_tb is None: + try: + self.session.commit() + except Exception as e: + self.session.rollback() + raise e + finally: + self.session.close() + else: + return False + + return True diff --git a/web/commons/models/budget.py b/web/commons/models/budget.py new file mode 100644 index 0000000..b10caef --- /dev/null +++ b/web/commons/models/budget.py @@ -0,0 +1,20 @@ +from sqlalchemy import Column, Integer, String, Date, Text + +from core.extensions import db + + +class Budget(db.Model): + __tablename__ = 'BUDGET' + id = Column('ID', Integer, primary_key=True) + name = Column('NAME', String(128), default='', comment='名称') + amount = Column('AMOUNT', Integer, default='', comment='总数') + min_amount = Column('MIN_AMOUNT', Integer, default='', comment='最小值') + max_amount = Column('MAX_AMOUNT', Integer, default='', comment='最大值') + year = Column('YEAR', Integer, default=0, comment='年份') + months = Column('MONTHS', Text, default='', comment='月份') + date = Column('DATE', Date, comment='日期') + + # __table_args__ = ( + # UniqueConstraint(name, date, name='Idx_key'), + # {'comment': '预算'}, + # ) diff --git a/web/commons/models/budget_item.py b/web/commons/models/budget_item.py new file mode 100644 index 0000000..3afaba6 --- /dev/null +++ b/web/commons/models/budget_item.py @@ -0,0 +1,20 @@ +from sqlalchemy import Column, Integer, String, Text + +from core.extensions import db + + +class BudgetItem(db.Model): + __tablename__ = 'BUDGET_ITEM' + id = Column('ID', Integer, primary_key=True) + budget_id = Column('BUDGET_ID', Integer, default='', comment='预算id') + name = Column('NAME', String(128), default='', comment='名称') + meta = Column('META', Text, default='', comment='数据') + quantity = Column('QUANTITY', Integer, default='', comment='数量') + unit = Column('UNIT', Text, default='', comment='单位') + unit_Price = Column('UNIT_PRICE', Integer, default='', comment='单价') + total_Price = Column('TOTAL_PRICE', Integer, default='', comment='总价') + + # __table_args__ = ( + # UniqueConstraint(name, date, name='Idx_key'), + # {'comment': '预算细项'}, + # ) diff --git a/web/commons/models/cement.py b/web/commons/models/cement.py new file mode 100644 index 0000000..004a5c1 --- /dev/null +++ b/web/commons/models/cement.py @@ -0,0 +1,59 @@ +from sqlalchemy import Column, Integer, String, Numeric, Date, UniqueConstraint, func + +from commons.models.mixin.calculator import CalculatorMixin +from core.extensions import db + + +class Cement(db.Model, CalculatorMixin): + __tablename__ = 'CEMENT' + id = Column('ID', Integer, primary_key=True) + name = Column('NAME', String(128), default='', comment='名称') + spec = Column('SPEC', String(128), default='', comment='规格') + pack = Column('PACK', String(64), default='', comment='包装') + source = Column('SOURCE', String(64), default='', comment='产地') + price = Column('PRICE', Numeric(16, 4), default=0, comment='价格') + fluctuating = Column('FLUCTUATING', Numeric(16, 4), default=0, comment='浮动') + date = Column('DATE', Date, comment='日期') + + __table_args__ = ( + UniqueConstraint(name, spec, pack, source, date, name='Idx_key'), + {'comment': '水泥'}, + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + @classmethod + def get_items(cls, year, month, spec_in, name_in, pack): + query = cls.query + query = cls.query_by_month(query, year, month) + query = query.filter(cls.pack == pack) + query = query.filter(cls.spec.in_(spec_in)) + query = query.filter(cls.name.in_(name_in)) + query = query.with_entities(func.avg(cls.price)) + result = query.all() + return result + + @classmethod + def get_by_key(cls, name, spec, pack, source, date): + query = cls.query + query = query.filter( + cls.name == name, + cls.spec == spec, + cls.pack == pack, + cls.source == source, + cls.date == date, + ) + return query.one_or_none() + + def upsert(self): + result = self.get_by_key(self.name, self.spec, self.pack, self.source, self.date) + if not result: + session = db.session + session.add(self) + session.commit() + else: + session = db.session + self.id = result.id + session.add(result) + session.commit() diff --git a/web/commons/models/data_fujian.py b/web/commons/models/data_fujian.py new file mode 100644 index 0000000..21e7484 --- /dev/null +++ b/web/commons/models/data_fujian.py @@ -0,0 +1,40 @@ +from sqlalchemy import Column, Integer, String, Numeric, Date, UniqueConstraint + +from commons.models.mixin.base import BaseModelMixin +from commons.models.model import Model +from core.extensions import db + + +class DataFujian(db.Model, Model, BaseModelMixin): + __tablename__ = 'DATA_FUJIAN' + + id = Column('ID', Integer, primary_key=True) + number = Column('NUMBER', String(128), default='', comment='编码') + name = Column('NAME', String(128), default='', comment='名称') + spec = Column('SPEC', String(128), default='', comment='规格') + unit = Column('UNIT', String(128), default='', comment='单位') + price_without_tax = Column('PRICE_WITHOUT_TAX', Numeric(16, 4), default=0, comment='除价格') + price = Column('PRICE', Numeric(16, 4), default=0, comment='含税价') + category = Column('CATEGORY', String(128), default='', comment='分类') + year = Column('YEAR', Integer, default=0, comment='年份') + month = Column('MONTH', Integer, default=0, comment='月份') + city = Column('CITY', String(128), default='', comment='地市') + date = Column('DATE', Date, comment='日期') + + __table_args__ = ( + UniqueConstraint(year, month, city, name, spec, name='Idx_key'), + {'comment': '福建数据'}, + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def find_by_key(self): + query = DataFujian.query + query = query.filter(DataFujian.year == self.year) + query = query.filter(DataFujian.month == self.month) + query = query.filter(DataFujian.city == self.city) + query = query.filter(DataFujian.name == self.name) + query = query.filter(DataFujian.spec == self.spec) + result = query.one_or_none() + return result diff --git a/web/commons/models/data_guangdong.py b/web/commons/models/data_guangdong.py new file mode 100644 index 0000000..6951e51 --- /dev/null +++ b/web/commons/models/data_guangdong.py @@ -0,0 +1,30 @@ +from sqlalchemy import Column, Integer, String, Date, UniqueConstraint + +from commons.models.mixin.base import BaseModelMixin +from commons.models.model import Model +from core.extensions import db + + +class DataGuangdong(db.Model, Model, BaseModelMixin): + __tablename__ = 'DATA_GUANGDONG' + + id = Column('ID', Integer, primary_key=True) + url = Column('URL', String(512), default='', comment='下载地址') + name = Column('NAME', String(128), default='', comment='名称') + source = Column('SOURCE', String(128), default='', comment='来源') + date = Column('DATE', Date, comment='日期') + + __table_args__ = ( + UniqueConstraint(name, date, name='Idx_key'), + {'comment': '广东数据'}, + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def find_by_key(self): + query = DataGuangdong.query + query = query.filter(DataGuangdong.name == self.name) + query = query.filter(DataGuangdong.date == self.date) + result = query.one_or_none() + return result diff --git a/web/commons/models/data_zhejiang.py b/web/commons/models/data_zhejiang.py new file mode 100644 index 0000000..1e4c635 --- /dev/null +++ b/web/commons/models/data_zhejiang.py @@ -0,0 +1,30 @@ +from sqlalchemy import Column, Integer, String, Date, UniqueConstraint + +from commons.models.mixin.base import BaseModelMixin +from commons.models.model import Model +from core.extensions import db + + +class DataZhejiang(db.Model, Model, BaseModelMixin): + __tablename__ = 'DATA_ZHEJIANG' + + id = Column('ID', Integer, primary_key=True) + url = Column('URL', String(512), default='', comment='下载地址') + name = Column('NAME', String(128), default='', comment='名称') + source = Column('SOURCE', String(128), default='', comment='来源') + date = Column('DATE', Date, comment='日期') + + __table_args__ = ( + UniqueConstraint(name, date, name='Idx_key'), + {'comment': '浙江数据'}, + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def find_by_key(self): + query = DataZhejiang.query + query = query.filter(DataZhejiang.name == self.name) + query = query.filter(DataZhejiang.date == self.date) + result = query.one_or_none() + return result diff --git a/web/commons/models/fujian_survey.py b/web/commons/models/fujian_survey.py new file mode 100644 index 0000000..98f44db --- /dev/null +++ b/web/commons/models/fujian_survey.py @@ -0,0 +1,40 @@ +import datetime + +from dateutil.relativedelta import relativedelta +from sqlalchemy import Column, Integer, String, Date, UniqueConstraint, Numeric + +from core.extensions import db + + +class FujianSurvey(db.Model): + __tablename__ = 'FUJIAN_SURVEY' + id = Column('ID', Integer, primary_key=True) + name = Column('NAME', String(128), default='', comment='名称') + spec = Column('SPEC', String(128), default='', comment='规格') + price = Column('PRICE', Numeric(16, 4), default=0, comment='价格') + date = Column('DATE', Date, comment='日期') + material_id = Column('MATERIAL_ID', String(128), comment='材料id') + unit = Column('UNIT', String(128), comment='单位') + brand = Column('BRAND', String(128), comment='品牌') + tax = Column('TAX', Integer, comment='税率') + + __table_args__ = ( + UniqueConstraint(name, spec, date, name='Idx_key'), + {'comment': '福建省交通工程材料调查表'}, + ) + + @classmethod + def get_query(cls, year=None, month=None, name=None, spec=None, name_in=None): + query = cls.query + if year and month: + start_date = datetime.date(year, month, 1) + end_date = start_date + relativedelta(months=1) + query = query.filter(cls.date >= start_date) + query = query.filter(cls.date < end_date) + if name: + query = query.filter(cls.name == name) + if name_in: + query = query.filter(cls.name.in_(name_in)) + if spec: + query = query.filter(cls.spec == spec) + return query diff --git a/web/commons/models/fuzhou_highway_bureau.py b/web/commons/models/fuzhou_highway_bureau.py new file mode 100644 index 0000000..fa68fbd --- /dev/null +++ b/web/commons/models/fuzhou_highway_bureau.py @@ -0,0 +1,36 @@ +import datetime + +from dateutil.relativedelta import relativedelta +from sqlalchemy import Column, Integer, String, Date, UniqueConstraint, Numeric + +from core.extensions import db + + +class FuzhouHighwayBureau(db.Model): + __tablename__ = 'FUZHOU_HIGHWAY_BUREAU' + id = Column('ID', Integer, primary_key=True) + name = Column('NAME', String(128), default='', comment='名称') + spec = Column('SPEC', String(128), default='', comment='规格') + price = Column('PRICE', Numeric(16, 4), default=0, comment='价格') + date = Column('DATE', Date, comment='日期') + material_id = Column('MATERIAL_ID', String(128), comment='材料id') + unit = Column('UNIT', String(128), comment='单位') + brand = Column('BRAND', String(128), comment='品牌') + + __table_args__ = ( + UniqueConstraint(name, spec, date, name='Idx_key'), + {'comment': '福州公路局'}, + ) + + @classmethod + def get_query(cls, year, month, name, spec=None): + start_date = datetime.date(year, month, 1) + end_date = start_date + relativedelta(months=1) + query = cls.query + query = query.filter(cls.date >= start_date) + query = query.filter(cls.date < end_date) + if name: + query = query.filter(cls.name == name) + if spec: + query = query.filter(cls.spec == spec) + return query diff --git a/web/commons/models/fuzhou_transportation_bureau.py b/web/commons/models/fuzhou_transportation_bureau.py new file mode 100644 index 0000000..f033592 --- /dev/null +++ b/web/commons/models/fuzhou_transportation_bureau.py @@ -0,0 +1,34 @@ +import datetime + +from dateutil.relativedelta import relativedelta +from sqlalchemy import Column, Integer, String, Date, UniqueConstraint, Numeric + +from core.extensions import db + + +class FuzhouTransportationBureau(db.Model): + __tablename__ = 'FUZHOU_TRANSPORTATION_BUREAU' + id = Column('ID', Integer, primary_key=True) + name = Column('NAME', String(128), default='', comment='名称') + spec = Column('SPEC', String(128), default='', comment='规格') + price = Column('PRICE', Numeric(16, 4), default=0, comment='价格') + date = Column('DATE', Date, comment='日期') + material_id = Column('MATERIAL_ID', String(128), comment='材料id') + unit = Column('UNIT', String(128), comment='单位') + brand = Column('BRAND', String(128), comment='品牌') + + __table_args__ = ( + UniqueConstraint(name, spec, date, name='Idx_key'), + {'comment': '福州交通局'}, + ) + + @classmethod + def get_query(cls, year, month, name): + start_date = datetime.date(year, month, 1) + end_date = start_date + relativedelta(months=1) + query = cls.query + query = query.filter(cls.date >= start_date) + query = query.filter(cls.date < end_date) + if name: + query = query.filter(cls.name == name) + return query diff --git a/web/commons/models/local_material.py b/web/commons/models/local_material.py new file mode 100644 index 0000000..4f3f7e6 --- /dev/null +++ b/web/commons/models/local_material.py @@ -0,0 +1,24 @@ +from sqlalchemy import Column, Integer, String, Date, UniqueConstraint, Numeric, Text + +from core.extensions import db + + +class LocalMaterial(db.Model): + __tablename__ = 'LOCAL_MATERIAL' + id = Column('ID', Integer, primary_key=True) + name = Column('NAME', String(128), default='', comment='名称') + city = Column('CITY', String(128), default='', comment='地市') + county = Column('COUNTY', String(128), default='', comment='区县') + material_id = Column('MATERIAL_ID', String(128), comment='材料id') + spec = Column('SPEC', String(128), default='', comment='规格') + unit = Column('UNIT', String(128), default='', comment='单位') + price = Column('PRICE', Numeric(16, 4), default=0, comment='价格') + price_without_tax = Column('PRICE_WITHOUT_TAX', Numeric(16, 4), default=0, comment='除税价') + date = Column('DATE', Date, comment='日期') + position = Column('POSITION', String(256), comment='位置') + remark = Column('REMARK', Text, comment='备注') + + __table_args__ = ( + UniqueConstraint(name, spec, city, county, date, name='Idx_key'), + {'comment': '地材'}, + ) diff --git a/web/commons/models/material.py b/web/commons/models/material.py new file mode 100644 index 0000000..09581e0 --- /dev/null +++ b/web/commons/models/material.py @@ -0,0 +1,44 @@ +from sqlalchemy import Column, Integer, String + +from commons.models.mixin.operation_track import OperationTrackMixin +from core.extensions import db + + +class Material(db.Model, OperationTrackMixin): + id = Column('ID', String(128), primary_key=True) + parent_id = Column('PARENT_ID', String(128)) + category_1 = Column('CATEGORY1', String(128), default='', comment='分类1') + category_2 = Column('CATEGORY2', String(128), default='', comment='分类2') + category_3 = Column('CATEGORY3', String(128), default='', comment='分类3') + category_4 = Column('CATEGORY4', String(128), default='', comment='分类4') + name = Column('NAME', String(128), default='', comment='名称') + unit = Column('UNIT', String(128), default='', comment='单位') + spec = Column('SPEC', String(128), default='', comment='规格') + tax = Column('TAX', Integer, default=0, comment='税率(%)') + is_builtin = Column('IS_BUILTIN', Integer, default=0, comment='是否初始内建类型(不允许删除)') + type = Column('TYPE', Integer, default=0, comment='材料类别(主材、地材)') + is_tree = Column('IS_TREE', Integer, default=0, comment='是否树') + + __tablename__ = 'MATERIAL' + __table_args__ = ( + {'comment': '材料'}, + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + @classmethod + def get_by_key(cls, id): + return cls.query.filter(cls.id == id).one_or_none() + + def upsert(self): + result = self.get_by_key(self.id) + if not result: + session = db.session + session.add(self) + session.commit() + else: + session = db.session + self.id = result.id + session.add(result) + session.commit() diff --git a/web/commons/models/material_task.py b/web/commons/models/material_task.py new file mode 100644 index 0000000..3d21572 --- /dev/null +++ b/web/commons/models/material_task.py @@ -0,0 +1,22 @@ +from sqlalchemy import Column, Integer, String +from sqlalchemy.dialects.mysql import MEDIUMTEXT + +from commons.models.mixin.operation_track import OperationTrackMixin +from commons.models.model import Model +from core.extensions import db + + +class MaterialTask(db.Model, OperationTrackMixin, Model): + id = Column('ID', Integer, primary_key=True) + name = Column('NAME', String(128), default='', comment='任务名称') + status = Column('STATUS', Integer, default=0, comment='状态(待采集、已采集、采集中)') + file = Column('FILE', String(256), default='', comment='文件路径') + type = Column('TYPE', Integer, default=0, comment='类型(网络爬取、文件上传)') + year = Column('YEAR', Integer, default=0, comment='采集年份') + month = Column('MONTH', Integer, default=0, comment='采集月份') + content = Column('CONTENT', MEDIUMTEXT, comment='数据内容') + + __tablename__ = 'MATERIAL_TASK' + __table_args__ = ( + {'comment': '采集任务'}, + ) diff --git a/web/commons/models/mixin/__init__.py b/web/commons/models/mixin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/web/commons/models/mixin/base.py b/web/commons/models/mixin/base.py new file mode 100644 index 0000000..f29e554 --- /dev/null +++ b/web/commons/models/mixin/base.py @@ -0,0 +1,13 @@ +class BaseModelMixin: + + def find_by_key(self): + ... + + def upsert(self): + result = self.find_by_key() + session = self._db.session + if result: + session.delete(result) + session.flush() + session.add(self) + session.commit() diff --git a/web/commons/models/mixin/calculator.py b/web/commons/models/mixin/calculator.py new file mode 100644 index 0000000..b9143cc --- /dev/null +++ b/web/commons/models/mixin/calculator.py @@ -0,0 +1,28 @@ +class CalculatorMixin: + date = None + + @classmethod + def query_by_month(cls, query, year, month): + last_month_year, last_month = Helper.get_last_month(year, month) + query = query.filter(cls.date >= datetime.date(last_month_year, last_month, 26)) + query = query.filter(cls.date <= datetime.date(year, month, 25)) + return query + + def upsert(self, *args, **kwargs): + result = self.get_by_key(*args, **kwargs) + if not result: + session = db.session + session.add(self) + session.commit() + else: + session = db.session + self.id = result.id + session.add(result) + session.commit() + + @classmethod + def get_last_date_from(cls, date): + query = cls.query.filter(cls.date <= date) + query = query.with_entities(func.max(cls.date)) + result = query.one_or_none() + return result[0] diff --git a/web/commons/models/mixin/es_source.py b/web/commons/models/mixin/es_source.py new file mode 100644 index 0000000..d467b7c --- /dev/null +++ b/web/commons/models/mixin/es_source.py @@ -0,0 +1,23 @@ +class EsSourceMixin: + __table__ = None + __tablename__ = '' + + def to_es(self): + primary_key_name = [str(i.name) for i in self.__table__.columns if i.primary_key][0] + es_data = { + 'meta': { + 'id': '{}/{}'.format(self.__tablename__, getattr(self, primary_key_name)), + }, + 'table': self.__tablename__, + 'create_time': self.now() * 1000, + } + return es_data + + @classmethod + def get_es_data(cls): + for item in cls.query.yield_per(500): + yield item.to_es() + + @classmethod + def es_join_str(cls, str_list): + return ' '.join(str(i or '') for i in str_list if i) diff --git a/web/commons/models/mixin/insensitive.py b/web/commons/models/mixin/insensitive.py new file mode 100644 index 0000000..e4c409a --- /dev/null +++ b/web/commons/models/mixin/insensitive.py @@ -0,0 +1,51 @@ +from nc_http.tools.helpers import camelize + + +class InsensitiveMixin: + __table__ = None + _sensitive_columns = [] + + def to_insensitive_dict(self, is_camelized=True): + """ + 对象转字典且不带敏感数据 <例:密码、密钥、手机号...> + :return: + """ + if self._sensitive_columns: + _ = {} + for column in self.__table__.columns: + if column in self._sensitive_columns: + continue + key = getattr(column, 'quote', None) or column.name + if is_camelized: + _[camelize(key)] = getattr(self, key, None) + else: + _[key] = getattr(self, key, None) + else: + _ = self.to_dict() + return _ + + @classmethod + def get_list(cls, query, paging=None, fields=None): + if fields: + query = query.with_entities(*fields.values()) + + if paging: + page = query.paginate(paging['page'], paging['limit']) + paging['total'] = page.total + result = page.items + else: + result = query.all() + + if fields: + columns = fields.keys() + result = [dict(zip(columns, _)) for _ in result] + else: + if cls._sensitive_columns: # 数据脱敏 + result = [_.to_insensitive_dict() for _ in result] + else: + result = [_.to_dict() for _ in result] + + if paging: + return result, paging + + return result diff --git a/web/commons/models/mixin/operation_track.py b/web/commons/models/mixin/operation_track.py new file mode 100644 index 0000000..6687248 --- /dev/null +++ b/web/commons/models/mixin/operation_track.py @@ -0,0 +1,30 @@ +from datetime import datetime + +from sqlalchemy import Column, String, DateTime + + +class OperationTrackMixin: + update_user_id = Column('update_user_id', String(64), comment='最后更新人id') + update_user_name = Column('update_user_name', String(64), comment='最后更新人名称') + update_time = Column('update_time', DateTime, default=datetime.now, comment='最后更新时间') + create_user_id = Column('create_user_id', String(64), comment='创建人id') + create_user_name = Column('create_user_name', String(64), comment='创建人名称') + create_time = Column('create_time', DateTime, default=datetime.now, comment='创建时间') + delete_user_id = Column('delete_user_id', String(64), comment='删除人id') + delete_user_name = Column('delete_user_name', String(64), comment='删除人名称') + delete_time = Column('delete_time', DateTime, comment='删除时间') + + def track_delete(self, user_id, user_name=None): + self.delete_user_id = user_id + self.delete_user_name = user_name + self.delete_time = datetime.now() + + def track_create(self, user_id, user_name=None): + self.create_user_id = user_id + self.create_user_name = user_name + self.create_time = datetime.now() + + def track_update(self, user_id, user_name=None): + self.update_user_id = user_id + self.update_user_name = user_name + self.update_time = datetime.now() diff --git a/web/commons/models/mixin/steel.py b/web/commons/models/mixin/steel.py new file mode 100644 index 0000000..d3f8226 --- /dev/null +++ b/web/commons/models/mixin/steel.py @@ -0,0 +1,25 @@ +class SteelMixin(CalculatorMixin): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + @classmethod + def get_by_key(cls, name, spec, material, source, date): + spec = spec or '' + material = material or '' + source = source or '' + query = cls.query + query = query.filter(cls.name == name).filter(cls.spec == spec).filter(cls.material == material) + query = query.filter(cls.source == source).filter(cls.date == date) + return query.one_or_none() + + def upsert(self): + result = self.get_by_key(self.name, self.spec, self.material, self.source, self.date) + if not result: + session = db.session + session.add(self) + session.commit() + else: + session = db.session + self.id = result.id + session.add(result) + session.commit() diff --git a/web/commons/models/model.py b/web/commons/models/model.py new file mode 100644 index 0000000..a1e88d7 --- /dev/null +++ b/web/commons/models/model.py @@ -0,0 +1,6 @@ +from commons.models import BaseModel +from core.extensions import db + + +class Model(BaseModel): + _db = db diff --git a/web/commons/models/oil.py b/web/commons/models/oil.py new file mode 100644 index 0000000..94a3dff --- /dev/null +++ b/web/commons/models/oil.py @@ -0,0 +1,48 @@ +from sqlalchemy import Column, Integer, String, Numeric, Date, UniqueConstraint + +from commons.models.mixin.calculator import CalculatorMixin +from commons.models.model import Model +from core.extensions import db + + +class Oil(db.Model, Model, CalculatorMixin): + __tablename__ = 'OIL' + id = Column('ID', Integer, primary_key=True) + name = Column('NAME', String(128), default='', comment='名称') + price = Column('PRICE', Numeric(16, 4), default=0, comment='价格') + date = Column('DATE', Date, comment='日期') + + __table_args__ = ( + UniqueConstraint(name, date, name='Idx_key'), + {'comment': '成品油'}, + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + @classmethod + def get_items(cls, year, month, name_in): + query = cls.query + query = cls.query_by_month(query, year, month) + query = query.filter(cls.name.in_(name_in)) + query = query.order_by(cls.date) + result = query.all() + return result + + @classmethod + def get_by_key(cls, name, date): + query = cls.query + query = query.filter(cls.name == name).filter(cls.date == date) + return query.one_or_none() + + def upsert(self): + result = self.get_by_key(self.name, self.date) + if not result: + session = db.session + session.add(self) + session.commit() + else: + session = db.session + self.id = result.id + session.add(result) + session.commit() diff --git a/web/commons/models/price_publish.py b/web/commons/models/price_publish.py new file mode 100644 index 0000000..bc08f97 --- /dev/null +++ b/web/commons/models/price_publish.py @@ -0,0 +1,81 @@ +import datetime + +from dateutil.relativedelta import relativedelta +from sqlalchemy import Column, Integer, String, Numeric + +from commons.models.mixin.base import BaseModelMixin +from commons.models.mixin.operation_track import OperationTrackMixin +from core.extensions import db + + +class PricePublish(db.Model, OperationTrackMixin, BaseModelMixin): + id = Column('ID', Integer, primary_key=True) + year = Column('YEAR', Integer, default='', comment='统计年份') + month = Column('MONTH', Integer, default='', comment='统计月份') + material_id = Column('MATERIAL_ID', String(128), default='', comment='编号') + name = Column('NAME', String(128), default='', comment='材料名称') + spec = Column('SPEC', String(128), default='', comment='规格') + price = Column('PRICE', Numeric(16, 4), default=0, comment='价格') + price_fuzhou = Column('PRICE_FUZHOU', Numeric(16, 4), default=0, comment='福州价格') + price_xiamen = Column('PRICE_XIAMEN', Numeric(16, 4), default=0, comment='厦门价格') + price_putian = Column('PRICE_PUTIAN', Numeric(16, 4), default=0, comment='莆田价格') + price_sanming = Column('PRICE_SANMING', Numeric(16, 4), default=0, comment='三明价格') + price_quanzhou = Column('PRICE_QUANZHOU', Numeric(16, 4), default=0, comment='泉州价格') + price_zhangzhou = Column('PRICE_ZHANGZHOU', Numeric(16, 4), default=0, comment='漳州价格') + price_nanpin = Column('PRICE_NANPIN', Numeric(16, 4), default=0, comment='南平价格') + price_longyan = Column('PRICE_LONGYAN', Numeric(16, 4), default=0, comment='龙岩价格') + price_ningde = Column('PRICE_NINGDE', Numeric(16, 4), default=0, comment='宁德价格') + price_pintan = Column('PRICE_PINTAN', Numeric(16, 4), default=0, comment='平潭价格') + tax = Column('TAX', Numeric(4, 2), default=0, comment='税率') + status = Column('STATUS', Integer, default=0, comment='状态') + type = Column('TYPE', Integer, default=0, comment='类型') + unit = Column('UNIT', String(128), default='', comment='单位') + + __tablename__ = 'PRICE_PUBLISH' + __table_args__ = ( + {'comment': '发布价格'}, + ) + + @classmethod + def get_by_key(cls, name, year, month, type): + query = cls.query + query = query.filter(cls.name == name).filter(cls.year == year).filter(cls.month == month).filter( + cls.type == type) + return query.one_or_none() + + def find_by_key(self): + cls = self.__class__ + query = cls.query + query = query.filter(cls.year == self.year) + query = query.filter(cls.month == self.month) + query = query.filter(cls.name == self.name) + query = query.filter(cls.type == self.type) + result = query.one_or_none() + return result + + # @classmethod + # def query_previous_month(cls, query, start_date: datetime.date, count=6): + # end_date = start_date + relativedelta(months=1) + # query = query.filter(cls.date >= end_date - relativedelta(months=count)) + # query = query.filter(cls.date < end_date) + # return query + + @classmethod + def query_previous_month(cls, query, start_date: datetime.date, count=6): + condition = False + for i in range(count): + date = start_date - relativedelta(months=i) + condition = condition or (cls.year == date.year and cls.month == date.month) + query.filter(condition) + return query + + @classmethod + def get_query(cls, year=None, month=None, name_in=None): + query = cls.query + if year: + query = query.filter(cls.year == year) + if month: + query = query.filter(cls.month == month) + if name_in: + query = query.filter(cls.name.in_(name_in)) + return query diff --git a/web/commons/models/price_result.py b/web/commons/models/price_result.py new file mode 100644 index 0000000..5ed0995 --- /dev/null +++ b/web/commons/models/price_result.py @@ -0,0 +1,60 @@ +from sqlalchemy import Column, Integer, String, Numeric + +from commons.models.mixin.base import BaseModelMixin +from commons.models.mixin.operation_track import OperationTrackMixin +from core.extensions import db + + +class PriceResult(db.Model, OperationTrackMixin, BaseModelMixin): + id = Column('ID', Integer, primary_key=True) + material_id = Column('MATERIAL_ID', String(128), default='', comment='编号') + name = Column('NAME', String(128), default='', comment='材料名称') + year = Column('YEAR', Integer, default='', comment='统计年份') + month = Column('MONTH', Integer, default='', comment='统计月份') + price_ftb = Column('PRICE_FTB', Numeric(16, 4), default=0, comment='福州交通局价格') + fluctuating_ftb = Column('FLUCTUATING_FTB', Numeric(16, 4), default=0, comment='福州交通局浮动') + price_ss = Column('PRICE_SS', Numeric(16, 4), default=0, comment='三明钢铁价格') + fluctuating_ss = Column('FLUCTUATING_SS', Numeric(16, 4), default=0, comment='三明钢铁浮动') + price_fhb = Column('PRICE_FHB', Numeric(16, 4), default=0, comment='福州公路局价格') + fluctuating_fhb = Column('FLUCTUATING_FHB', Numeric(16, 4), default=0, comment='福州公路局浮动') + price_network = Column('PRICE_NETWORK', Numeric(16, 4), default=0, comment='网络价格') + fluctuating_network = Column('FLUCTUATING_NETWORK', Numeric(16, 4), default=0, comment='网络浮动') + price_survey = Column('PRICE_SURVEY', Numeric(16, 4), default=0, comment='调查价格') + fluctuating_survey = Column('FLUCTUATING_SURVEY', Numeric(16, 4), default=0, comment='调查浮动') + price_last_month = Column('PRICE_LAST_MONTH', Numeric(16, 4), default=0, comment='上月发布价格') + price_calculate = Column('PRICE_CALCULATE', Numeric(16, 4), default=0, comment='计算价格') + price_recommend = Column('PRICE_RECOMMEND', Numeric(16, 4), default=0, comment='推荐价格') + fluctuating_recommend = Column('FLUCTUATING_RECOMMEND', Numeric(16, 4), default=0, comment='推荐浮动') + spec = Column('SPEC', String(128), default='', comment='规格') + unit = Column('UNIT', String(128), default='', comment='单位') + + __tablename__ = 'PRICE_RESULT' + __table_args__ = ( + {'comment': '计算结果'}, + ) + + @classmethod + def get_by_key(cls, name, year, month): + query = cls.query + query = query.filter(cls.name == name).filter(cls.year == year).filter(cls.month == month) + return query.one_or_none() + + def find_by_key(self): + cls = self.__class__ + query = cls.query + query = query.filter(cls.year == self.year) + query = query.filter(cls.month == self.month) + query = query.filter(cls.name == self.name) + result = query.one_or_none() + return result + + @classmethod + def get_query(cls, year, month, name_in=None, name=None): + query = cls.query + query = query.filter(cls.year == year) + query = query.filter(cls.month == month) + if name_in: + query = query.filter(cls.name.in_(name_in)) + if name: + query = query.filter(cls.name == name) + return query diff --git a/web/commons/models/sanming_steel.py b/web/commons/models/sanming_steel.py new file mode 100644 index 0000000..69e95fb --- /dev/null +++ b/web/commons/models/sanming_steel.py @@ -0,0 +1,35 @@ +import datetime + +from dateutil.relativedelta import relativedelta +from sqlalchemy import Column, Integer, String, Numeric, Date, UniqueConstraint + +from core.extensions import db + + +class SanmingSteel(db.Model): + __tablename__ = 'SANMING_STEEL' + id = Column('ID', Integer, primary_key=True) + name = Column('NAME', String(128), default='', comment='名称') + spec = Column('SPEC', String(128), default='', comment='规格') + material = Column('MATERIAL', String(64), default='', comment='材质') + price = Column('PRICE', Numeric(16, 4), default=0, comment='价格') + fluctuating = Column('FLUCTUATING', Numeric(16, 4), default=0, comment='浮动') + date = Column('DATE', Date, comment='日期') + + __table_args__ = ( + UniqueConstraint(name, spec, material, date, name='Idx_key'), + {'comment': '三明钢铁'}, + ) + + @classmethod + def get_query(cls, year, month, name, spec): + start_date = datetime.date(year, month, 1) + end_date = start_date + relativedelta(months=1) + query = cls.query + query = query.filter(cls.date >= start_date) + query = query.filter(cls.date < end_date) + if name: + query = query.filter(cls.name == name) + if spec: + query = query.filter(cls.spec == spec) + return query diff --git a/web/commons/models/steel_plate.py b/web/commons/models/steel_plate.py new file mode 100644 index 0000000..0767e33 --- /dev/null +++ b/web/commons/models/steel_plate.py @@ -0,0 +1,33 @@ +from sqlalchemy import Column, Integer, String, Numeric, Date, UniqueConstraint, func + +from commons.models.mixin.steel import SteelMixin +from core.extensions import db + + +class SteelPlate(db.Model, SteelMixin): + __tablename__ = 'STEEL_PLATE' + id = Column('ID', Integer, primary_key=True) + name = Column('NAME', String(128), default='', comment='名称') + spec = Column('SPEC', String(128), default='', comment='规格') + material = Column('MATERIAL', String(64), default='', comment='材质') + source = Column('SOURCE', String(64), default='', comment='产地') + price = Column('PRICE', Numeric(16, 4), default=0, comment='价格') + fluctuating = Column('FLUCTUATING', Numeric(16, 4), default=0, comment='浮动') + date = Column('DATE', Date, comment='日期') + + __table_args__ = ( + UniqueConstraint(name, spec, material, source, date, name='Idx_key'), + {'comment': '中厚板'}, + ) + + @classmethod + def get_items(cls, year, month, spec_in=('12', '16-20', '22-28'), source_in=('三钢闽光',), name_in=('普中板', '工字钢')): + query = cls.query + query = cls.query_by_month(query, year, month) + query = query.filter(cls.spec.in_(spec_in)) + query = query.filter(cls.source.in_(source_in)) + query = query.filter(cls.name.in_(name_in)) + query = query.with_entities(cls.spec, func.avg(cls.price)) + query = query.group_by(cls.spec) + result = query.all() + return result diff --git a/web/commons/models/steel_rebar.py b/web/commons/models/steel_rebar.py new file mode 100644 index 0000000..9153450 --- /dev/null +++ b/web/commons/models/steel_rebar.py @@ -0,0 +1,44 @@ +import datetime + +from sqlalchemy import Column, Integer, String, Numeric, Date, UniqueConstraint, func + +from calculators import Helper +from commons.models.mixin.steel import SteelMixin +from core.extensions import db + + +class SteelRebar(db.Model, SteelMixin): + __tablename__ = 'STEEL_REBAR' + id = Column('ID', Integer, primary_key=True) + name = Column('NAME', String(128), default='', comment='名称') + spec = Column('SPEC', String(128), default='', comment='规格') + material = Column('MATERIAL', String(64), default='', comment='材质') + source = Column('SOURCE', String(64), default='', comment='产地') + price = Column('PRICE', Numeric(16, 4), default=0, comment='价格') + fluctuating = Column('FLUCTUATING', Numeric(16, 4), default=0, comment='浮动') + date = Column('DATE', Date, comment='日期') + + __table_args__ = ( + UniqueConstraint(name, spec, material, source, date, name='Idx_key'), + {'comment': '钢筋'}, + ) + + @classmethod + def query_by_month(cls, query, year, month): + last_month_year, last_month = Helper.get_last_month(year, month) + query = query.filter(cls.date >= datetime.date(last_month_year, last_month, 26)) + query = query.filter(cls.date <= datetime.date(year, month, 25)) + return query + + @classmethod + def get_items(cls, year, month, material, source='三钢闽光', name_in=('高线', '螺纹钢')): + query = cls.query + query = cls.query_by_month(query, year, month) + query = query.filter(cls.material == material) + query = query.filter(cls.source == source) + query = query.filter(cls.name.in_(name_in)) + query = query.with_entities(cls.spec, cls.material, func.avg(cls.price)) + query = query.group_by(cls.spec, cls.material) + result = query.all() + + return result diff --git a/web/commons/models/steel_section.py b/web/commons/models/steel_section.py new file mode 100644 index 0000000..72e05f8 --- /dev/null +++ b/web/commons/models/steel_section.py @@ -0,0 +1,32 @@ +from sqlalchemy import Column, Integer, String, Numeric, Date, UniqueConstraint, func + +from commons.models.mixin.steel import SteelMixin +from core.extensions import db + + +class SteelSection(db.Model, SteelMixin): + __tablename__ = 'STEEL_SECTION' + id = Column('ID', Integer, primary_key=True) + name = Column('NAME', String(128), default='', comment='名称') + spec = Column('SPEC', String(128), default='', comment='规格') + material = Column('MATERIAL', String(64), default='', comment='材质') + source = Column('SOURCE', String(64), default='', comment='产地') + price = Column('PRICE', Numeric(16, 4), default=0, comment='价格') + fluctuating = Column('FLUCTUATING', Numeric(16, 4), default=0, comment='浮动') + date = Column('DATE', Date, comment='日期') + + __table_args__ = ( + UniqueConstraint(name, spec, material, source, date, name='Idx_key'), + {'comment': '型钢'}, + ) + + @classmethod + def get_items(cls, year, month, spec_in=('140*140*12', '25#'), source_in=('唐山弘泰', '唐山正丰'), name_in=('角钢', '工字钢')): + query = cls.query + query = cls.query_by_month(query, year, month) + query = query.filter(cls.spec.in_(spec_in)) + query = query.filter(cls.source.in_(source_in)) + query = query.filter(cls.name.in_(name_in)) + query = query.with_entities(func.avg(cls.price)) + result = query.all() + return result diff --git a/web/commons/models/steel_strand.py b/web/commons/models/steel_strand.py new file mode 100644 index 0000000..fcd8bac --- /dev/null +++ b/web/commons/models/steel_strand.py @@ -0,0 +1,32 @@ +from sqlalchemy import Column, Integer, String, Numeric, Date, UniqueConstraint, func + +from commons.models.mixin.steel import SteelMixin +from core.extensions import db + + +class SteelStrand(db.Model, SteelMixin): + __tablename__ = 'STEEL_STRAND' + id = Column('ID', Integer, primary_key=True) + name = Column('NAME', String(128), default='', comment='名称') + spec = Column('SPEC', String(128), default='', comment='规格') + material = Column('MATERIAL', String(64), default='', comment='材质') + source = Column('SOURCE', String(64), default='', comment='产地') + price = Column('PRICE', Numeric(16, 4), default=0, comment='价格') + fluctuating = Column('FLUCTUATING', Numeric(16, 4), default=0, comment='浮动') + date = Column('DATE', Date, comment='日期') + + __table_args__ = ( + UniqueConstraint(name, spec, material, source, date, name='Idx_key'), + {'comment': '钢绞线'}, + ) + + @classmethod + def get_items(cls, year, month, material_in=('SWRH82B',), name_in=('弹簧钢',)): + query = cls.query + query = cls.query_by_month(query, year, month) + query = query.filter(cls.material.in_(material_in)) + query = query.filter(cls.name.in_(name_in)) + query = query.with_entities(cls.material, func.avg(cls.price)) + query = query.group_by(cls.material) + result = query.all() + return result diff --git a/web/commons/services/__init__.py b/web/commons/services/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/web/commons/services/data.py b/web/commons/services/data.py new file mode 100644 index 0000000..3630bf8 --- /dev/null +++ b/web/commons/services/data.py @@ -0,0 +1,50 @@ +import json +from multiprocessing.pool import Pool + +from commons.constants.material_task import MaterialTaskType +from commons.models.data_fujian import DataFujian +from commons.models.data_guangdong import DataGuangdong +from commons.models.data_zhejiang import DataZhejiang +from commons.models.oil import Oil +from spiders import run_spider +from spiders.data_fujian import DataFujianSpider +from spiders.data_guangdong import DataGuangdongSpider +from spiders.date_zhejiang import DataZhejiangSpider +from spiders.oil import OilSpider + + +class DataService: + spiders = { + MaterialTaskType.OTHER_ZHEJIANG: DataZhejiangSpider, + MaterialTaskType.OTHER_GUANGZHOU: DataGuangdongSpider, + MaterialTaskType.OTHER_YUNNAN: None, + MaterialTaskType.FUJIAN_DEPARTMENT: DataFujianSpider, + MaterialTaskType.OIL: OilSpider, + } + models = { + MaterialTaskType.OTHER_ZHEJIANG: DataZhejiang, + MaterialTaskType.OTHER_GUANGZHOU: DataGuangdong, + MaterialTaskType.OTHER_YUNNAN: None, + MaterialTaskType.FUJIAN_DEPARTMENT: DataFujian, + MaterialTaskType.OIL: Oil, + } + + @classmethod + def get_content(cls, type): + spider_class = cls.spiders.get(type) + if not spider_class: + return [] + + pool = Pool(processes=1) + result = pool.apply_async(run_spider, (spider_class,)) + pool.close() + pool.join() + file_path = result.get() + + # file_path = run_spider(spider_class) + content = json.loads(open(file_path, 'r', encoding='utf-8').read()) + model_class = cls.models.get(type) + for item in content: + model_class(**item).upsert() + return content + diff --git a/web/commons/vendors/__init__.py b/web/commons/vendors/__init__.py new file mode 100644 index 0000000..8dd1456 --- /dev/null +++ b/web/commons/vendors/__init__.py @@ -0,0 +1,66 @@ +from urllib.parse import urlencode + +import requests + + +class ApiException(Exception): + def __init__(self, code, message): + self.code = code + self.message = message + super().__init__() + + def __str__(self): + return self.message + + +class BaseClient: + gateway = None + timeout = 10 + max_retries = 3 + + def _build_url(self, interface, params, query=None, files=None): + method, uri = interface + + query_params = query or {} + if params and (method == 'get' or files): + query_params.update(params) + + api_url = '{}/{}?{}'.format(self.gateway, uri, urlencode(query_params)) + return api_url + + def _get_headers(self): + return None + + def call(self, interface, params=None, query=None, files=None, max_retries=max_retries, without_unpack=False): + method, *_ = interface + api_url = self._build_url(interface, params, query, files) + headers = self._get_headers() + try: + if method == 'get': + response = requests.request(method, api_url, headers=headers, timeout=self.timeout) + else: + response = requests.request( + method, api_url, headers=headers, timeout=self.timeout, json=params, files=files + ) + except Exception as e: + if max_retries > 0: + return self.call(interface, params, files=files, max_retries=max_retries - 1) + raise ApiException(504, "GATEWAY TIMEOUT") from e + + if without_unpack: + return response + + try: + data = self.unpack(response) + except ApiException as e: + raise e + except Exception as e: + print('BaseClient.call | interface | {}'.format(interface)) + print('BaseClient.call | api_url | {}'.format(api_url)) + raise ApiException(502, "BAD GATEWAY") from e + + return data + + @staticmethod + def unpack(response): + pass diff --git a/web/config.py b/web/config.py new file mode 100644 index 0000000..6f949f0 --- /dev/null +++ b/web/config.py @@ -0,0 +1,79 @@ +import logging +import os + +PORT = 7778 + +# 文件路径 +APP_ROOT = os.path.abspath(os.path.dirname(__file__)) +CACHE_DIR = os.path.join(APP_ROOT, 'cache') +FILE_DIR = os.path.join(APP_ROOT, 'files') +TEMP_DIR = os.getenv('TEMP', '/tmp') +API_ROOT = '' + +# 调试模式 +APP_MODE = os.getenv('APP_MODE', 'Development') # Development +DEBUG = bool(APP_MODE in ['Development', 'Testing']) + +# 密码安全 +SECRET_KEY = 'nN<]9Ss32b%GCc,T8q*.^+65A47@=)' +TOKEN_SALT = '20140606' + +# 日志 +LOG_DIR = '/tmp' +LOG_FORMAT = '%(thread)d %(asctime)s %(filename)s:%(lineno)d %(levelname)s: %(message)s' +stream_handler = logging.StreamHandler() +stream_handler.setFormatter(logging.Formatter(LOG_FORMAT)) +logging.getLogger().addHandler(stream_handler) +logging.getLogger().setLevel(logging.DEBUG) # 默认错误日志级别 + +# 当前服务URL地址 +HTTP_BASE_URL = os.getenv('HTTP_BASE_URL', 'http://192.168.1.3:7072') +HTTPS_BASE_URL = os.getenv('HTTPS_BASE_URL', '') + +# 数据库 +os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' # oracle client 编码 +SQLALCHEMY_DATABASE_URI = 'mysql+mysqlconnector://root:Xxs123456@192.168.1.3:4306/material_manage?charset=utf8mb4&auth_plugin=mysql_native_password' +SQLALCHEMY_TRACK_MODIFICATIONS = False # 设置是否跟踪数据库的修改情况,一般不跟踪 +SQLALCHEMY_ECHO = True # 数据库操作时是否显示原始SQL语句,一般打开,后台要日志 +SQLALCHEMY_BINDS = { + # 'arcgis': 'postgres://postgres:lyh123456!@192.168.137.1:7432/dzonemap', +} +SQLALCHEMY_POOL_RECYCLE = 10 * 60 # 空闲该时间后回收数据库连接 + +# ElasticSearch +ES_HOSTS = os.getenv('ES_HOSTS', 'http://192.168.137.1:9200') + +# Redis +REDIS_HOST = os.getenv('REDIS_HOST', '192.168.137.1') +REDIS_PORT = int(os.getenv('REDIS_PORT', '6379')) +REDIS_PASSWORD = os.getenv('REDIS_PASSWORD', '') +REDIS_DB = int(os.getenv('REDIS_DATABASE', '1')) + +# Celery +CELERY_BROKER_URL = 'redis://{}{}:{}/{}'.format( + ':{}@'.format(REDIS_PASSWORD) if REDIS_PASSWORD else '', + REDIS_HOST, + REDIS_PORT, + REDIS_DB +) +BROKER_URL = CELERY_BROKER_URL +CELERY_RESULT_BACKEND = CELERY_BROKER_URL + +# 服务 +SERVER_HOST = { + 'arcpy': 'http://192.168.137.1:8777', + 'wmts': 'http://192.168.137.1:7072', + 'geoserver': 'https://xxslyh.cn', + 'tianditu': 'https://t{no}.tianditu.gov.cn', + 'tianditu_fj': 'http://192.168.137.1:7072', + 'tianditu_fj_s0': 'http://s0.fjmap.net', + 'file': 'http://192.168.1.3:7072', + 'geological_map_service': 'http://192.168.137.1:7026', + 'arcgis_server': 'http://192.168.137.247:6080', + 'map_service': 'http://192.168.137.1:7028', +} + +try: + from local_config import * +except ImportError: + pass diff --git a/web/core/__init__.py b/web/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/web/core/app.py b/web/core/app.py new file mode 100644 index 0000000..bb08ff5 --- /dev/null +++ b/web/core/app.py @@ -0,0 +1,12 @@ +""" 程序入口""" +from nc_http.tools.reverse_proxied import ReverseProxied + +from core import conf +from core.factory import ApiApp + +app = ApiApp() + +app.wsgi_app = ReverseProxied(app.wsgi_app) + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=conf.PORT, debug=conf.DEBUG) diff --git a/web/core/conf.py b/web/core/conf.py new file mode 100644 index 0000000..979c0f9 --- /dev/null +++ b/web/core/conf.py @@ -0,0 +1,13 @@ +# try: +# from web.config import * +# except ModuleNotFoundError as e: +# pass +# +# APP_PATH = os.path.abspath(os.path.dirname(__file__)) +# +# SECRET_KEY = "tE7?aS.1-7sP4dfvlE" +# TOKEN_SALT = "hi,_tool" +# QR_CODE_SALT = "code_qr" +# +# # 监听端口 +# PORT = 7778 diff --git a/web/core/data_zhejiang.json b/web/core/data_zhejiang.json new file mode 100644 index 0000000..7fb1473 --- /dev/null +++ b/web/core/data_zhejiang.json @@ -0,0 +1,34 @@ +[ +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=f9850959bc874109bbf969d4f1407765.pdf", "name": "《质监与造价》价格信息专辑2022年第二期(总第217期).pdf", "source": "省交通工程管理中心", "date": "2022-03-10"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=a5588454a5d2493e84b1da41e355d8c4.pdf", "name": "《质监与造价》价格信息专辑2022年第六期(总第221期).pdf", "source": "省交通工程管理中心", "date": "2022-07-11"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=89f18f9f1a104e86b1ebece9d4f54e9a.pdf", "name": "《质监与造价》价格信息专辑2022年第四期(总第219期).pdf", "source": "省交通工程管理中心", "date": "2022-05-12"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=fb4970a1c47843acaeedcdc28d234542.pdf", "name": "《质监与造价》价格信息专辑2022年第三期(总第218期).pdf", "source": "省交通工程管理中心", "date": "2022-04-11"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=6813301dc7664bce89531ec9e3b11f26.pdf", "name": "《质监与造价》价格信息专辑2022年第九期(总第224期).pdf", "source": "省交通工程管理中心", "date": "2022-10-10"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=115577c096fc4b9dbd5226d9c631ea0c.pdf", "name": "《质监与造价》价格信息专辑2022年第五期(总第220期).pdf", "source": "省交通工程管理中心", "date": "2022-06-10"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=492109fa11004378b8d8ddd876857a3b.pdf", "name": "《质监与造价》价格信息专辑2022年第十期(总第225期).pdf", "source": "省交通工程管理中心", "date": "2022-11-14"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=7b65f691b00446bea1364fef476a74e1.pdf", "name": "《质监与造价》价格信息专辑2022年第七期(总第222期).pdf", "source": "省交通工程管理中心", "date": "2022-08-12"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=b6819feaa98f4dc48890b6f50bf5edb8.pdf", "name": "《质监与造价》价格信息专辑2022年第八期(总第223期).pdf", "source": "省交通工程管理中心", "date": "2022-09-14"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=3de209f960fd4115b5b27666dfd8a076.pdf", "name": "《质监与造价》价格信息专辑2022年第十一期(总第226期).pdf", "source": "省交通工程管理中心", "date": "2022-12-19"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=04591e88c9894076a5afe096fa6bb8aa.pdf", "name": "《质监与造价》价格信息专辑2022年第十二期(总第227期).pdf", "source": "省交通工程管理中心", "date": "2023-01-19"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=61f09bc9376946bba47824301d082a0f.pdf", "name": "《质监与造价》价格信息专辑2023年第三期(总第230期).pdf", "source": "省交通工程管理中心", "date": "2023-04-18"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=93ac1fa626f04a53990ab5fd5cf12435.pdf", "name": "《质监与造价》价格信息专辑2021年第三期(总第206期).pdf", "source": "省交通工程管理中心", "date": "2021-04-15"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=ea07c46c718041af8a6138e15dec98e5.pdf", "name": "《质监与造价》价格信息专辑2023年第一期(总第228期).pdf", "source": "省交通工程管理中心", "date": "2023-02-17"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=37ebc26c180c4fa3a4d3d29b24d3600f.pdf", "name": "《质监与造价》价格信息专辑2023年第五期(总第232期).pdf", "source": "省交通工程管理中心", "date": "2023-06-16"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=f95443c3fbf44148963e719b2767c2d7.pdf", "name": "《质监与造价》价格信息专辑2023年第四期(总第231期).pdf", "source": "省交通工程管理中心", "date": "2023-05-18"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=9e02544c7a444ba6bc0da5d285b560ed.pdf", "name": "《质监与造价》价格信息专辑2023年第二期(总第229期).pdf", "source": "省交通工程管理中心", "date": "2023-03-20"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=1d40420b6f9c468d94cb3f1d0eb577af.pdf", "name": "《质监与造价》价格信息专辑2021年第七期(总第210期).pdf", "source": "省交通工程管理中心", "date": "2021-08-13"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=1fe1d4dca46941bf8c9da241e5269861.pdf", "name": "《质监与造价》价格信息专辑2021年第六期(总第209期).pdf", "source": "省交通工程管理中心", "date": "2021-07-14"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=7c592f33ed434085b60f68b67dd599f0.pdf", "name": "《质监与造价》价格信息专辑2021年第十一期(总第214期).pdf", "source": "省交通工程管理中心", "date": "2021-12-14"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=30d17daef28547a69bafd96270639e50.pdf", "name": "《质监与造价》价格信息专辑2021年第十二期(总第215期).pdf", "source": "省交通工程管理中心", "date": "2022-01-11"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=52b5a0bdea234bbba1c0499ef2a454f5.pdf", "name": "《质监与造价》价格信息专辑2021年第八期(总第211期).pdf", "source": "省交通工程管理中心", "date": "2021-09-15"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=3bf36f92107a4deb8bbae0ff26acf9d9.pdf", "name": "《质监与造价》价格信息专辑2021年第五期(总第208期).pdf", "source": "省交通工程管理中心", "date": "2021-06-17"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=b1674e6ad80d4e62b7cf3db3a250e30f.pdf", "name": "《质监与造价》价格信息专辑2021年第九期(总第212期).pdf", "source": "省交通工程管理中心", "date": "2021-10-14"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=f5305a086b1b448383225db31b6ae0a6.pdf", "name": "《质监与造价》价格信息专辑2021年第十期(总第213期).pdf", "source": "省交通工程管理中心", "date": "2021-11-12"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=63171cac60d446888953f44f24aa201e.pdf", "name": "《质监与造价》价格信息专辑2023年第八期(总第235期).pdf", "source": "省交通工程管理中心", "date": "2023-09-14"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=e8a1565edb4e4fe4823c23db415e3996.pdf", "name": "《质监与造价》价格信息专辑2023年第九期(总第236期).pdf", "source": "省交通工程管理中心", "date": "2023-10-18"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=2c98c3aa8c57479c8c8f3e53ed0fd2c3.pdf", "name": "《质监与造价》价格信息专辑2022年第一期(总第216期).pdf", "source": "省交通工程管理中心", "date": "2022-02-15"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=b05c996abbec421aa0c48c4fe7d52d94.pdf", "name": "《质监与造价》价格信息专辑2023年第六期(总第233期).pdf", "source": "省交通工程管理中心", "date": "2023-07-14"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=94a4858eed7b49abb0ba714268683a03.pdf", "name": "《质监与造价》价格信息专辑2023年第十一期(总第238期).pdf", "source": "省交通工程管理中心", "date": "2023-12-15"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=61e5ac8a0d5c431a90667114b6b59323.pdf", "name": "《质监与造价》价格信息专辑2023年第十期(总第237期).pdf", "source": "省交通工程管理中心", "date": "2023-11-20"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=1767e7d015db40c1863ddccef0aa868e.pdf", "name": "《质监与造价》价格信息专辑2023年第七期(总第234期).pdf", "source": "省交通工程管理中心", "date": "2023-08-17"} +] \ No newline at end of file diff --git a/web/core/extensions.py b/web/core/extensions.py new file mode 100644 index 0000000..dd0de60 --- /dev/null +++ b/web/core/extensions.py @@ -0,0 +1,32 @@ +from concurrent.futures import ThreadPoolExecutor + +# from elasticsearch import Elasticsearch +# from flasgger import Swagger +# from flask_celery import Celery +# from flask_cors import CORS +from flask_sqlalchemy import SQLAlchemy +from flask_siwadoc import SiwaDoc + +import config + +db = SQLAlchemy() + +# swagger = Swagger(template={ +# "securityDefinitions": { +# "Bearer": { +# "type": "apiKey", +# "name": "Authorization", +# "in": "header", +# } +# }, +# }) + +# executor = ThreadPoolExecutor(4) + +# es = Elasticsearch(config.ES_HOSTS.split(';'), retry_on_timeout=True) + +# celery = Celery() + +# cors = CORS() + +siwa = SiwaDoc(title="evidence_api", description="evidence_api") diff --git a/web/core/factory.py b/web/core/factory.py new file mode 100644 index 0000000..db2a3c5 --- /dev/null +++ b/web/core/factory.py @@ -0,0 +1,71 @@ +from datetime import datetime, date +from json import JSONEncoder + +from flask import Flask + +""" 程序入口""" + + +class Singleton(type): + _instances = {} + + def __call__(cls, *args, **kwargs): + if cls not in cls._instances: + cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs) + return cls._instances[cls] + + +class App(Flask): + __metaclass__ = Singleton + + def __init__(self, import_name=__name__, **kwargs): + super().__init__(import_name, **kwargs) + self.bootstrap() + + def bootstrap(self): + pass + + +class CustomJSONEncoder(JSONEncoder): + def default(self, obj): + if isinstance(obj, datetime): + return obj.strftime('%Y-%m-%d %H:%M:%S') + elif isinstance(obj, date): + return obj.strftime('%Y-%m-%d') + else: + return JSONEncoder.default(self, obj) + + +class ApiApp(App): + def bootstrap(self): + with self.app_context(): + import config + import api + from core.extensions import db, siwa + self.config.from_object(config) + # if config.SENTRY_DSN: + # sentry.init_app(self) + + # if config.CELERY_BROKER_URL: + # celery.init_app(self) + + db.init_app(self) + + siwa.init_app(self) + + api.init_logger(self) + api.init_app(self) + + self.json_encoder = CustomJSONEncoder + + +class ClientApp(App): + def bootstrap(self): + super().bootstrap() + with self.app_context(): + import config + from core.extensions import db + + self.config.from_object(config) + + db.init_app(self) diff --git a/web/core/oil.json b/web/core/oil.json new file mode 100644 index 0000000..6811292 --- /dev/null +++ b/web/core/oil.json @@ -0,0 +1,232 @@ +[ +{"name": "车用89号汽油(ⅥB)", "price": 9435, "date": "2023-12-19"}, +{"name": "车用92号汽油(ⅥB)", "price": 10001, "date": "2023-12-19"}, +{"name": "车用95号汽油(ⅥB)", "price": 10567, "date": "2023-12-19"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8400, "date": "2023-12-19"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 8904, "date": "2023-12-19"}, +{"name": "车用89号汽油(ⅥB)", "price": 9435, "date": "2023-12-19"}, +{"name": "车用92号汽油(ⅥB)", "price": 10001, "date": "2023-12-19"}, +{"name": "车用95号汽油(ⅥB)", "price": 10567, "date": "2023-12-19"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8400, "date": "2023-12-19"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 8904, "date": "2023-12-19"}, +{"name": "车用89号汽油(ⅥB)", "price": "9585", "date": "2023-07-12"}, +{"name": "车用92号汽油(ⅥB)", "price": "10160", "date": "2023-07-12"}, +{"name": "车用95号汽油(ⅥB)", "price": "10735", "date": "2023-07-12"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8550", "date": "2023-07-12"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9063", "date": "2023-07-12"}, +{"name": "车用89号汽油(ⅥB)", "price": "9585", "date": "2023-07-12"}, +{"name": "车用92号汽油(ⅥB)", "price": "10160", "date": "2023-07-12"}, +{"name": "车用89号汽油(ⅥB)", "price": 10245, "date": "2023-11-07"}, +{"name": "车用92号汽油(ⅥB)", "price": 10860, "date": "2023-11-07"}, +{"name": "车用89号汽油(ⅥB)", "price": 9635, "date": "2024-01-03"}, +{"name": "车用92号汽油(ⅥB)", "price": 10213, "date": "2024-01-03"}, +{"name": "车用95号汽油(ⅥB)", "price": 10791, "date": "2024-01-03"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8590, "date": "2024-01-03"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9105, "date": "2024-01-03"}, +{"name": "车用89号汽油(ⅥB)", "price": "9430", "date": "2023-06-28"}, +{"name": "车用92号汽油(ⅥB)", "price": "9996", "date": "2023-06-28"}, +{"name": "车用95号汽油(ⅥB)", "price": "10562", "date": "2023-06-28"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8400", "date": "2023-06-28"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8904", "date": "2023-06-28"}, +{"name": "车用89号汽油(ⅥB)", "price": "9430", "date": "2023-06-28"}, +{"name": "车用89号汽油(ⅥB)", "price": 9850, "date": "2023-12-05"}, +{"name": "车用92号汽油(ⅥB)", "price": 10441, "date": "2023-12-05"}, +{"name": "车用95号汽油(ⅥB)", "price": 11032, "date": "2023-12-05"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8800, "date": "2023-12-05"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9328, "date": "2023-12-05"}, +{"name": "车用89号汽油(ⅥB)", "price": 9850, "date": "2023-12-05"}, +{"name": "车用89号汽油(ⅥB)", "price": 10385, "date": "2023-10-24"}, +{"name": "车用92号汽油(ⅥB)", "price": 11008, "date": "2023-10-24"}, +{"name": "车用95号汽油(ⅥB)", "price": 11631, "date": "2023-10-24"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9315, "date": "2023-10-24"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9874, "date": "2023-10-24"}, +{"name": "车用89号汽油(ⅥB)", "price": 10385, "date": "2023-10-24"}, +{"name": "车用95号汽油(ⅥB)", "price": "10735", "date": "2023-07-12"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8550", "date": "2023-07-12"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9063", "date": "2023-07-12"}, +{"name": "车用89号汽油(ⅥB)", "price": 9905, "date": "2023-11-21"}, +{"name": "车用92号汽油(ⅥB)", "price": 10499, "date": "2023-11-21"}, +{"name": "车用95号汽油(ⅥB)", "price": 11094, "date": "2023-11-21"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8850, "date": "2023-11-21"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9381, "date": "2023-11-21"}, +{"name": "车用89号汽油(ⅥB)", "price": 9905, "date": "2023-11-21"}, +{"name": "车用92号汽油(ⅥB)", "price": 10499, "date": "2023-11-21"}, +{"name": "车用95号汽油(ⅥB)", "price": 11474, "date": "2023-11-07"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9180, "date": "2023-11-07"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9731, "date": "2023-11-07"}, +{"name": "车用89号汽油(ⅥB)", "price": 10245, "date": "2023-11-07"}, +{"name": "车用92号汽油(ⅥB)", "price": 10860, "date": "2023-11-07"}, +{"name": "车用95号汽油(ⅥB)", "price": 11474, "date": "2023-11-07"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9180, "date": "2023-11-07"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9731, "date": "2023-11-07"}, +{"name": "车用89号汽油(ⅥB)", "price": 9635, "date": "2024-01-03"}, +{"name": "车用92号汽油(ⅥB)", "price": 10213, "date": "2024-01-03"}, +{"name": "车用95号汽油(ⅥB)", "price": 10791, "date": "2024-01-03"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8590, "date": "2024-01-03"}, +{"name": "车用89号汽油(ⅥB)", "price": 9860, "date": "2023-07-26"}, +{"name": "车用92号汽油(ⅥB)", "price": 10452, "date": "2023-07-26"}, +{"name": "车用95号汽油(ⅥB)", "price": 11043, "date": "2023-07-26"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8810, "date": "2023-07-26"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9339, "date": "2023-07-26"}, +{"name": "车用89号汽油(ⅥB)", "price": 9860, "date": "2023-07-26"}, +{"name": "车用92号汽油(ⅥB)", "price": "9996", "date": "2023-06-28"}, +{"name": "车用95号汽油(ⅥB)", "price": "10562", "date": "2023-06-28"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8400", "date": "2023-06-28"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8904", "date": "2023-06-28"}, +{"name": "车用92号汽油(ⅥB)", "price": 10441, "date": "2023-12-05"}, +{"name": "车用95号汽油(ⅥB)", "price": 11032, "date": "2023-12-05"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8800, "date": "2023-12-05"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9328, "date": "2023-12-05"}, +{"name": "车用89号汽油(ⅥB)", "price": 10100, "date": "2023-08-09"}, +{"name": "车用92号汽油(ⅥB)", "price": 10706, "date": "2023-08-09"}, +{"name": "车用95号汽油(ⅥB)", "price": 11312, "date": "2023-08-09"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9040, "date": "2023-08-09"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9582, "date": "2023-08-09"}, +{"name": "车用89号汽油(ⅥB)", "price": 10100, "date": "2023-08-09"}, +{"name": "车用92号汽油(ⅥB)", "price": 10706, "date": "2023-08-09"}, +{"name": "车用95号汽油(ⅥB)", "price": 11312, "date": "2023-08-09"}, +{"name": "车用92号汽油(ⅥB)", "price": 11008, "date": "2023-10-24"}, +{"name": "车用95号汽油(ⅥB)", "price": 11631, "date": "2023-10-24"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9315, "date": "2023-10-24"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9874, "date": "2023-10-24"}, +{"name": "车用89号汽油(ⅥB)", "price": 10155, "date": "2023-08-23"}, +{"name": "车用92号汽油(ⅥB)", "price": 10764, "date": "2023-08-23"}, +{"name": "车用95号汽油(ⅥB)", "price": 11374, "date": "2023-08-23"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9095, "date": "2023-08-23"}, +{"name": "车用89号汽油(ⅥB)", "price": 10540, "date": "2023-09-20"}, +{"name": "车用92号汽油(ⅥB)", "price": 11172, "date": "2023-09-20"}, +{"name": "车用95号汽油(ⅥB)", "price": 11805, "date": "2023-09-20"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9465, "date": "2023-09-20"}, +{"name": "车用89号汽油(ⅥB)", "price": "10455", "date": "2023-10-10"}, +{"name": "车用92号汽油(ⅥB)", "price": "11082", "date": "2023-10-10"}, +{"name": "车用95号汽油(ⅥB)", "price": "11710", "date": "2023-10-10"}, +{"name": "车用0号柴油(Ⅵ)", "price": "9385", "date": "2023-10-10"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9948", "date": "2023-10-10"}, +{"name": "车用89号汽油(ⅥB)", "price": "10455", "date": "2023-10-10"}, +{"name": "车用95号汽油(ⅥB)", "price": 11094, "date": "2023-11-21"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8850, "date": "2023-11-21"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9381, "date": "2023-11-21"}, +{"name": "车用89号汽油(ⅥB)", "price": "9855", "date": "2023-04-17"}, +{"name": "车用92号汽油(ⅥB)", "price": "10446", "date": "2023-04-17"}, +{"name": "车用95号汽油(ⅥB)", "price": "11038", "date": "2023-04-17"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8805", "date": "2023-04-17"}, +{"name": "车用89号汽油(ⅥB)", "price": "9305", "date": "2023-03-31"}, +{"name": "车用92号汽油(ⅥB)", "price": "9863", "date": "2023-03-31"}, +{"name": "车用95号汽油(ⅥB)", "price": "10422", "date": "2023-03-31"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8280", "date": "2023-03-31"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8777", "date": "2023-03-31"}, +{"name": "车用89号汽油(ⅥA)", "price": "9735", "date": "2023-01-03"}, +{"name": "车用92号汽油(ⅥA)", "price": "10319", "date": "2023-01-03"}, +{"name": "车用95号汽油(ⅥA)", "price": "10903", "date": "2023-01-03"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8690", "date": "2023-01-03"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9211", "date": "2023-01-03"}, +{"name": "车用89号汽油(ⅥA)", "price": "9735", "date": "2023-01-03"}, +{"name": "车用89号汽油(ⅥA)", "price": "9640", "date": "2023-03-17"}, +{"name": "车用92号汽油(ⅥA)", "price": "10218", "date": "2023-03-17"}, +{"name": "车用95号汽油(ⅥA)", "price": "10797", "date": "2023-03-17"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8600", "date": "2023-03-17"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9116", "date": "2023-03-17"}, +{"name": "车用89号汽油(ⅥA)", "price": "9640", "date": "2023-03-17"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9105, "date": "2024-01-03"}, +{"name": "车用89号汽油(ⅥA)", "price": "9530", "date": "2023-01-17"}, +{"name": "车用92号汽油(ⅥA)", "price": "10102", "date": "2023-01-17"}, +{"name": "车用95号汽油(ⅥA)", "price": "10674", "date": "2023-01-17"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8495", "date": "2023-01-17"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9005", "date": "2023-01-17"}, +{"name": "车用92号汽油(ⅥB)", "price": 10452, "date": "2023-07-26"}, +{"name": "车用95号汽油(ⅥB)", "price": 11043, "date": "2023-07-26"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8810, "date": "2023-07-26"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9339, "date": "2023-07-26"}, +{"name": "车用89号汽油(ⅥB)", "price": "9415", "date": "2023-05-30"}, +{"name": "车用92号汽油(ⅥB)", "price": "9980", "date": "2023-05-30"}, +{"name": "车用95号汽油(ⅥB)", "price": "10545", "date": "2023-05-30"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8380", "date": "2023-05-30"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8883", "date": "2023-05-30"}, +{"name": "车用89号汽油(ⅥA)", "price": "9740", "date": "2023-02-03"}, +{"name": "车用92号汽油(ⅥA)", "price": "10324", "date": "2023-02-03"}, +{"name": "车用95号汽油(ⅥA)", "price": "10909", "date": "2023-02-03"}, +{"name": "车用89号汽油(ⅥB)", "price": "9695", "date": "2023-04-28"}, +{"name": "车用92号汽油(ⅥB)", "price": "10277", "date": "2023-04-28"}, +{"name": "车用95号汽油(ⅥB)", "price": "10858", "date": "2023-04-28"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8650", "date": "2023-04-28"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9169", "date": "2023-04-28"}, +{"name": "车用89号汽油(ⅥB)", "price": "9695", "date": "2023-04-28"}, +{"name": "车用89号汽油(ⅥB)", "price": "9360", "date": "2023-06-13"}, +{"name": "车用92号汽油(ⅥB)", "price": "9922", "date": "2023-06-13"}, +{"name": "车用95号汽油(ⅥB)", "price": "10483", "date": "2023-06-13"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8330", "date": "2023-06-13"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8830", "date": "2023-06-13"}, +{"name": "车用89号汽油(ⅥB)", "price": "9360", "date": "2023-06-13"}, +{"name": "车用89号汽油(ⅥB)", "price": "9315", "date": "2023-05-16"}, +{"name": "车用92号汽油(ⅥB)", "price": "9874", "date": "2023-05-16"}, +{"name": "车用95号汽油(ⅥB)", "price": "10433", "date": "2023-05-16"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8285", "date": "2023-05-16"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8782", "date": "2023-05-16"}, +{"name": "车用89号汽油(ⅥB)", "price": "9315", "date": "2023-05-16"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9040, "date": "2023-08-09"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9582, "date": "2023-08-09"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9641, "date": "2023-08-23"}, +{"name": "车用89号汽油(ⅥB)", "price": 10155, "date": "2023-08-23"}, +{"name": "车用92号汽油(ⅥB)", "price": 10764, "date": "2023-08-23"}, +{"name": "车用95号汽油(ⅥB)", "price": 11374, "date": "2023-08-23"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 10033, "date": "2023-09-20"}, +{"name": "车用89号汽油(ⅥB)", "price": 10540, "date": "2023-09-20"}, +{"name": "车用92号汽油(ⅥB)", "price": 11172, "date": "2023-09-20"}, +{"name": "车用95号汽油(ⅥB)", "price": 11805, "date": "2023-09-20"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9465, "date": "2023-09-20"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 10033, "date": "2023-09-20"}, +{"name": "车用92号汽油(ⅥB)", "price": "11082", "date": "2023-10-10"}, +{"name": "车用95号汽油(ⅥB)", "price": "11710", "date": "2023-10-10"}, +{"name": "车用0号柴油(Ⅵ)", "price": "9385", "date": "2023-10-10"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9948", "date": "2023-10-10"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9333", "date": "2023-04-17"}, +{"name": "车用89号汽油(ⅥB)", "price": "9855", "date": "2023-04-17"}, +{"name": "车用92号汽油(ⅥB)", "price": "10446", "date": "2023-04-17"}, +{"name": "车用95号汽油(ⅥB)", "price": "11038", "date": "2023-04-17"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8805", "date": "2023-04-17"}, +{"name": "车用89号汽油(ⅥB)", "price": "9305", "date": "2023-03-31"}, +{"name": "车用92号汽油(ⅥB)", "price": "9863", "date": "2023-03-31"}, +{"name": "车用95号汽油(ⅥB)", "price": "10422", "date": "2023-03-31"}, +{"name": "车用92号汽油(ⅥA)", "price": "10319", "date": "2023-01-03"}, +{"name": "车用95号汽油(ⅥA)", "price": "10903", "date": "2023-01-03"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8690", "date": "2023-01-03"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9211", "date": "2023-01-03"}, +{"name": "车用92号汽油(ⅥA)", "price": "10218", "date": "2023-03-17"}, +{"name": "车用95号汽油(ⅥA)", "price": "10797", "date": "2023-03-17"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8600", "date": "2023-03-17"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9116", "date": "2023-03-17"}, +{"name": "车用89号汽油(ⅥA)", "price": "9530", "date": "2023-01-17"}, +{"name": "车用92号汽油(ⅥA)", "price": "10102", "date": "2023-01-17"}, +{"name": "车用95号汽油(ⅥA)", "price": "10674", "date": "2023-01-17"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8495", "date": "2023-01-17"}, +{"name": "车用89号汽油(ⅥB)", "price": "9415", "date": "2023-05-30"}, +{"name": "车用92号汽油(ⅥB)", "price": "9980", "date": "2023-05-30"}, +{"name": "车用95号汽油(ⅥB)", "price": "10545", "date": "2023-05-30"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8380", "date": "2023-05-30"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8883", "date": "2023-05-30"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8695", "date": "2023-02-03"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9217", "date": "2023-02-03"}, +{"name": "车用89号汽油(ⅥA)", "price": "9740", "date": "2023-02-03"}, +{"name": "车用92号汽油(ⅥB)", "price": "10277", "date": "2023-04-28"}, +{"name": "车用95号汽油(ⅥB)", "price": "10858", "date": "2023-04-28"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8650", "date": "2023-04-28"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9169", "date": "2023-04-28"}, +{"name": "车用92号汽油(ⅥB)", "price": "9922", "date": "2023-06-13"}, +{"name": "车用95号汽油(ⅥB)", "price": "10483", "date": "2023-06-13"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8330", "date": "2023-06-13"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8830", "date": "2023-06-13"}, +{"name": "车用92号汽油(ⅥB)", "price": "9874", "date": "2023-05-16"}, +{"name": "车用95号汽油(ⅥB)", "price": "10433", "date": "2023-05-16"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8285", "date": "2023-05-16"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8782", "date": "2023-05-16"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9095, "date": "2023-08-23"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9641, "date": "2023-08-23"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9333", "date": "2023-04-17"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8280", "date": "2023-03-31"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8777", "date": "2023-03-31"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9005", "date": "2023-01-17"}, +{"name": "车用92号汽油(ⅥA)", "price": "10324", "date": "2023-02-03"}, +{"name": "车用95号汽油(ⅥA)", "price": "10909", "date": "2023-02-03"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8695", "date": "2023-02-03"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9217", "date": "2023-02-03"} +] \ No newline at end of file diff --git a/web/data_zhejiang.json b/web/data_zhejiang.json new file mode 100644 index 0000000..e69de29 diff --git a/web/gunicorn_conf.py b/web/gunicorn_conf.py new file mode 100644 index 0000000..5c04307 --- /dev/null +++ b/web/gunicorn_conf.py @@ -0,0 +1,39 @@ +import os + +from worker import ASYNC_MODE +from config import DEBUG, PORT + +bind = '0.0.0.0:{}'.format(PORT) +backlog = 2048 + +if ASYNC_MODE == 'gevent': + worker_class = 'gevent' + +workers = os.cpu_count() if os.cpu_count() <= 4 else int(os.cpu_count() / 4) + 1 +preload_app = True + +debug = False +spew = False + +timeout = 600 + +proc_name = 'app' + +limit_request_line = 0 # 4094 + +# debug +if DEBUG: + loglevel = 'debug' + graceful_timeout = 1 + reload = True + # capture_output = True + +else: + loglevel = 'info' + # errorlog = './gunicorn-error.log' + # accesslog = './gunicorn-access.log' + +try: + from local_gunicorn_conf import * # noqa +except ImportError: + pass diff --git a/web/run.bat b/web/run.bat new file mode 100644 index 0000000..bfb2d53 --- /dev/null +++ b/web/run.bat @@ -0,0 +1,2 @@ +title server +python36 server_waitress.py \ No newline at end of file diff --git a/web/run_celery.bat b/web/run_celery.bat new file mode 100644 index 0000000..6be2874 --- /dev/null +++ b/web/run_celery.bat @@ -0,0 +1,2 @@ +title celery +python36 -m celery -A tasks.asynced.celery_worker.celery worker -c 4 --loglevel=INFO --pool=eventlet \ No newline at end of file diff --git a/web/run_cron.bat b/web/run_cron.bat new file mode 100644 index 0000000..28f7215 --- /dev/null +++ b/web/run_cron.bat @@ -0,0 +1,3 @@ +title cron +python36 -m tasks.crond.scheduler + diff --git a/web/scripts/__init__.py b/web/scripts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/web/server_waitress.py b/web/server_waitress.py new file mode 100644 index 0000000..2bf73cd --- /dev/null +++ b/web/server_waitress.py @@ -0,0 +1,14 @@ +from os import cpu_count + +from waitress import serve + +from core.app import app +from core.conf import PORT + +if __name__ == '__main__': + serve( + app, + host='0.0.0.0', + port=PORT, + threads=int(cpu_count()) # int(2 * cpu_count() + 1) + ) diff --git a/web/spiders/__init__.py b/web/spiders/__init__.py new file mode 100644 index 0000000..a04d3eb --- /dev/null +++ b/web/spiders/__init__.py @@ -0,0 +1,157 @@ +import json +import logging +import pathlib +from urllib.parse import unquote + +import requests +from lxml import etree +from scrapy.crawler import CrawlerProcess +from scrapy.utils.project import get_project_settings + +from utils.login import login_mysteel, login_baiinfo + + +def run_spider(spider): + filename = f'{spider.name}.json' + settings = get_project_settings() + settings.set('FEEDS', { + f'{filename}': { + 'format': 'json', + 'encoding': 'utf8', + 'overwrite': True, + }, + }) + process = CrawlerProcess(settings) + process.crawl(spider) + process.start() + return pathlib.Path(filename) # .absolute() + +class CookieTools: + user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36' + + +class MysteelCookieTools(CookieTools): + + @staticmethod + def is_valid(cookies): + result = requests.get('https://e.mysteel.com/account_index.htm', cookies=cookies) + result.encoding = result.apparent_encoding + tree = etree.HTML(result.text) + + flag_tag = tree.xpath('/html/body/div[1]/div[1]/p[2]/text()') + print(flag_tag) + if len(flag_tag) > 0 and flag_tag[0] == '会员登录': + logging.warning('Mysteel.com Cookies 无效或已过期 | 强制跳转至登陆页') + return False + + flag_tag = tree.xpath('//*[@id="top"]/div/span[2]/a/text()') + print(flag_tag) + if len(flag_tag) > 0 and flag_tag[0] == '退出登录': + pass + else: + logging.warning('Mysteel.com Cookies 无效或已过期 | 无法正确进入个人中心') + return False + + logging.warning('Mysteel.com Cookies 验证成功 | 成功进入个人中心') + return True + + @staticmethod + def save_as_json(raw_cookies, file_path): + try: + login_token = [i for i in raw_cookies if i['name'] == '_login_token'][0].get('value') + session = [i for i in raw_cookies if i['name'] == '_MSPASS_SESSION'][0].get('value') + text = json.dumps({ + '_login_token': login_token, + login_token: '1=10', + '_MSPASS_SESSION': session + }) + with open(file_path, 'w') as f: + f.write(text) + return file_path + except IndexError: + logging.warning('保存失败 | 无法正确解析原始 cookies') + + @staticmethod + def read_from_json(file_path): + cookies = json.loads(open(file_path, 'r', encoding='utf-8').read()) + return cookies + + @classmethod + def get_cookies(cls, file_path=r'E:\Project\item_spider\mysteel.cookies.json'): + cookie_json_file_path = file_path + cookie = cls.read_from_json(cookie_json_file_path) + if not cls.is_valid(cookie): + raw_cookies = login_mysteel() + cls.save_as_json(raw_cookies, cookie_json_file_path) + cookie = cls.read_from_json(cookie_json_file_path) + return cookie + + +class BaiinfoCookieTools(CookieTools): + @staticmethod + def is_valid(cookies): + if not cookies: + return False + result = requests.post( + 'http://www.baiinfo.com/api/website/price/priceInfo/getPriceList', + json={"channelId": "18", "pricesGroupId": 526}, + # cookies=cookies, + headers={ + 'Baiinfo-Auth': json.loads(cookies['user'])['token'], + 'User-Agent': CookieTools.user_agent + } + ) + flag = json.loads(result.text) + if flag['code'] != 200: + logging.warning(f'Baiinfo.com Token 无效或已过期 | {flag["msg"]}') + return False + + result = requests.get('http://www.baiinfo.com/news/newscategory/4710/99/3', cookies=cookies, headers={'User-Agent': 'PostmanRuntime/7.26.8'}) + # result.encoding = result.apparent_encoding + tree = etree.HTML(result.text) + + flag_tag = tree.xpath('//head/title/text()') + print(flag_tag) + if len(flag_tag) > 0 and '用户登录' in flag_tag[0]: + logging.warning('Baiinfo.com Cookies 无效或已过期 | 强制跳转至登陆页') + return False + + flag_tag = tree.xpath('//head/title/text()') + print(flag_tag) + if len(flag_tag) > 0 and '水泥价格(华东) - 百川盈孚' in flag_tag[0]: + pass + else: + logging.warning('Baiinfo.com Cookies 无效或已过期 | 无法正确进入鉴权页面') + return False + + logging.warning('Baiinfo.com Cookies 验证成功 | 成功进入个鉴权页面') + return True + + @staticmethod + def read_from_json(file_path): + raw_cookies = json.loads(open(file_path, 'r', encoding='utf-8').read() or '[]') + user_cookie = [i for i in raw_cookies if i['name'] == 'user'] + if not user_cookie: + return None + user = user_cookie[0].get('value') + user = unquote(user) + return {'user': user} + + @staticmethod + def save_as_json(raw_cookies, file_path): + try: + with open(file_path, 'w') as f: + f.write(json.dumps(raw_cookies)) + return file_path + except IndexError: + logging.warning('保存失败 | 无法正确解析原始 cookies') + + @classmethod + def get_cookies(cls, file_path=r'E:\Project\item_spider\baiinfo.cookies.json'): + cookie_json_file_path = file_path + cookie = cls.read_from_json(cookie_json_file_path) + if not cls.is_valid(cookie): + raw_cookies = login_baiinfo() + cls.save_as_json(raw_cookies, cookie_json_file_path) + cookie = cls.read_from_json(cookie_json_file_path) + return cookie diff --git a/web/spiders/asphalt_domestic.py b/web/spiders/asphalt_domestic.py new file mode 100644 index 0000000..9253687 --- /dev/null +++ b/web/spiders/asphalt_domestic.py @@ -0,0 +1,79 @@ +import scrapy +from scrapy import Request + + + +class AsphaltDomesticSpider(scrapy.Spider): + name = "asphalt_domestic" + start_urls = [ + ('国内炼厂重交沥青出厂价格', "http://www.baiinfo.com/api/website/price/priceInfo/getPriceList", + {"channelId": "18", "pricesGroupId": 526}), + ('国内市场沥青批发价格汇总', "http://www.baiinfo.com/api/website/price/priceInfo/getPriceList", + {"channelId": "18", "pricesGroupId": 530}), + ] + cookie = None + user_agent = None + _token = None + + @property + def token(self): + if self._token: + return self._token + else: + self._token = json.loads(cookie['user'])['token'] + return self._token + + def start_requests(self): + for source, url, data in self.start_urls: + yield Request( + method='POST', + body=json.dumps(data), + url=url, + headers={ + 'User-Agent': self.user_agent, + 'Content-Type': 'application/json', + 'Baiinfo-Auth': self.token, + # 'Baiinfo-Auth': TOKEN, + }, + meta={'source': source} + ) + + def parse(self, response, **kwargs): + ret = json.loads(response.text) + if ret.get('success') and ret.get('data'): + for item in ret['data']: + item['source'] = response.meta['source'] + for date in item['priceData']: + try: + price = int(item['priceData'][date]) + except ValueError: + price = 0 + yield { + 'name': item['targetName'], + 'price': price, + 'date': date, + # 'fluctuating': item['changePriceData'][date], + 'from_': response.meta['source'], + } + + +if __name__ == '__main__': + import json + + from spiders import run_spider, BaiinfoCookieTools + from commons.models.asphalt_domestic import AsphaltDomestic + from core.factory import ClientApp + + # cookie 读取 + cookie = BaiinfoCookieTools.get_cookies() + # 爬取 + AsphaltDomesticSpider.cookie = cookie + AsphaltDomesticSpider.user_agent = BaiinfoCookieTools.user_agent + file_path = run_spider(AsphaltDomesticSpider) + # 入库 + data = json.loads(open(file_path, 'r', encoding='utf-8').read()) + with ClientApp().app_context(): + for item in data: + print(item) + AsphaltDomestic(**item).upsert() + diff --git a/web/spiders/asphalt_imported.py b/web/spiders/asphalt_imported.py new file mode 100644 index 0000000..58c6542 --- /dev/null +++ b/web/spiders/asphalt_imported.py @@ -0,0 +1,85 @@ +import scrapy +from scrapy import Request + + +class AsphaltImportedSpider(scrapy.Spider): + name = "asphalt_imported" + start_urls = [ + ('沥青', "http://www.baiinfo.com/news/newscategory/17847/18/1"), + ('沥青', "http://www.baiinfo.com/news/newscategory/17847/18/2"), + ('沥青', "http://www.baiinfo.com/news/newscategory/17847/18/3"), + ('沥青', "http://www.baiinfo.com/news/newscategory/17847/18/4"), + ('沥青', "http://www.baiinfo.com/news/newscategory/17847/18/5"), + ] + cookie = None + user_agent = None + + def start_requests(self): + for source, url in self.start_urls: + yield Request( + method='GET', + url=url, + headers={ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36', + }, + cookies=self.cookie, + meta={'source': source, 'type': 'home'} + ) + + def parse(self, response, **kwargs): + if response.meta['type'] == 'home': + yield from self.parse_home(response) + elif response.meta['type'] == 'list_page': + yield from self.parse_list_page(response) + + def parse_home(self, response): + for item in response.xpath('//*[@id="__nuxt"]/div/div[5]/div/div[2]/div[1]/div[1]/div[2]/ul/li/a'): + name = item.xpath('text()').get() + if '散装进口沥青到岸价' in name: + print(name, 'http://www.baiinfo.com{}'.format(item.xpath('@href').get())) + yield Request( + method='GET', + url='http://www.baiinfo.com{}'.format(item.xpath('@href').get()), + headers={ + 'User-Agent': self.user_agent, + }, + cookies=self.cookie, + meta={'source': name, 'type': 'list_page'} + ) + + def parse_list_page(self, response): + date = response.xpath('//*[@id="__nuxt"]/div/div[5]/div/div[2]/div[1]/div[2]/p[1]/span[4]/text()').get() + date = date.strip('日').replace('年', '-').replace('月', '-') + + for item in response.xpath('//*[@id="__nuxt"]/div/div[5]/div/div[2]/div[1]/div[3]/div/div/table/tbody/tr'): + line = [cell.xpath('text()').get() for cell in item.xpath('td/span/span/span/span/span')][:7] + print(line) + if line[-1] == '备注' or '品质' in line[0]: + continue + name, *_, price, fluctuating = line + yield { + 'name': name, + 'date': date, + 'price': int(price.split('-')[-1]), + } + + +if __name__ == '__main__': + import json + + from spiders import run_spider, BaiinfoCookieTools + from commons.models.asphalt_imported import AsphaltImported + from core.factory import ClientApp + + # cookie 读取 + cookie = BaiinfoCookieTools.get_cookies() + # 爬取 + AsphaltImportedSpider.cookie = cookie + AsphaltImportedSpider.user_agent = BaiinfoCookieTools.user_agent + file_path = run_spider(AsphaltImportedSpider) + # 入库 + data = json.loads(open(file_path, 'r', encoding='utf-8').read()) + with ClientApp().app_context(): + for item in data: + print(item) + AsphaltImported(**item).upsert() diff --git a/web/spiders/cement.py b/web/spiders/cement.py new file mode 100644 index 0000000..a471a26 --- /dev/null +++ b/web/spiders/cement.py @@ -0,0 +1,96 @@ +import scrapy +from scrapy import Request + + +class CementSpider(scrapy.Spider): + name = "cement" + start_urls = [ + ('水泥', "http://www.baiinfo.com/news/newscategory/4596/33/1"), + ('水泥', "http://www.baiinfo.com/news/newscategory/4596/33/2"), + ('水泥', "http://www.baiinfo.com/news/newscategory/4596/33/3"), + ('水泥', "http://www.baiinfo.com/news/newscategory/4596/33/4"), + ('水泥', "http://www.baiinfo.com/news/newscategory/4596/33/5"), + ('水泥', "http://www.baiinfo.com/news/newscategory/4596/33/6"), + ('水泥', "http://www.baiinfo.com/news/newscategory/4596/33/7"), + ('水泥', "http://www.baiinfo.com/news/newscategory/4596/33/8"), + ('水泥', "http://www.baiinfo.com/news/newscategory/4596/33/9"), + ('水泥', "http://www.baiinfo.com/news/newscategory/4596/33/10"), + ] + cookie = None + user_agent = None + + def start_requests(self): + for source, url in self.start_urls: + yield Request( + method='GET', + url=url, + headers={ + 'User-Agent': self.user_agent, + }, + cookies=self.cookie, + meta={'source': source, 'type': 'home'} + ) + + def parse(self, response, **kwargs): + if response.meta['type'] == 'home': + yield from self.parse_home(response) + elif response.meta['type'] == 'list_page': + yield from self.parse_list_page(response) + + def parse_home(self, response): + for item in response.xpath('//*[@id="__nuxt"]/div/div[5]/div/div[2]/div[1]/div[1]/div[2]/ul/li/a'): + title = item.xpath('text()').get() + if '福建水泥市场参考价格' in title: + print(title, 'http://www.baiinfo.com{}'.format(item.xpath('@href').get())) + yield Request( + method='GET', + url='http://www.baiinfo.com{}'.format(item.xpath('@href').get()), + headers={ + 'User-Agent': self.user_agent, + }, + cookies=self.cookie, + meta={'source': title, 'type': 'list_page'} + ) + + def parse_list_page(self, response): + date = response.xpath('//*[@id="__nuxt"]/div/div[5]/div/div[2]/div[1]/div[2]/p[1]/span[4]/text()').get() + date = date.strip('日').replace('年', '-').replace('月', '-') + + for item in response.xpath('//tr[position()>2]'): + block_1 = [cell.get() for cell in item.xpath('td/span/span/span/span/span/text()') if cell.get()] + price, *_ = block_1 + + block_2 = [cell.get() for cell in item.xpath('td/span/span/span/span/span/span/text()') if cell.get()] + spec, name, pack, source, _, fluctuating = block_2 + + yield { + 'name': name, + 'price': price, + 'spec': spec, + 'pack': pack, + 'date': date, + 'source': source, + 'fluctuating': int(fluctuating) + } + + +if __name__ == '__main__': + import json + + from spiders import run_spider, BaiinfoCookieTools + from commons.models.cement import Cement + from core.factory import ClientApp + + # cookie 读取 + cookie = BaiinfoCookieTools.get_cookies() + # 爬取 + CementSpider.cookie = cookie + CementSpider.user_agent = BaiinfoCookieTools.user_agent + file_path = run_spider(CementSpider) + # 入库 + data = json.loads(open(file_path, 'r', encoding='utf-8').read()) + with ClientApp().app_context(): + for item in data: + print(item) + Cement(**item).upsert() + diff --git a/web/spiders/data_fujian.py b/web/spiders/data_fujian.py new file mode 100644 index 0000000..0c78151 --- /dev/null +++ b/web/spiders/data_fujian.py @@ -0,0 +1,91 @@ +import datetime +from dateutil.relativedelta import relativedelta + +import scrapy +from scrapy import Request + + +CITY_ID = [ + ('93', '福州市'), + ('94', '厦门市'), + ('95', '宁德市'), + ('96', '莆田市'), + ('97', '泉州市'), + ('98', '漳州市'), + ('99', '龙岩市'), + ('100', '三明市'), + ('101', '南平市'), + ('102', '平潭综合实验区'), +] + +CLASS_CODE = [ + ('01', '01黑色及有色金属'), + ('04', '04水泥、砖瓦灰砂'), + ('05', '05木、竹材料及其制品'), + ('13', '13涂料及防腐、防水材料'), + ('14', '14油品、化工原料'), +] + +URL = 'http://49.4.85.126/Information/Index?qClassCode={class_code}&qMatType=0&WayID=14&WayID2=4&CityID=7&CityID2={city_id}&Year={year}&Month={month}&Week=0&Day=0&qKeyWord=' +MONTHS = 2 # 爬取最近月份数量 + + +class DataFujianSpider(scrapy.Spider): + name = "data_fujian" + + def start_requests(self): + for city_id, city_name in CITY_ID: + for class_code, source in CLASS_CODE: + for month in range(1, 1 + MONTHS): + date = datetime.date.today() - relativedelta(months=month) + yield Request( + method='GET', + url=URL.format(year=date.year, month=date.month, class_code=class_code, city_id=city_id), + headers={ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36', + }, + meta={'source': source, 'type': 'home', 'city': city_name, 'month': date.month, 'year': date.year} + ) + + def parse(self, response, **kwargs): + for item in response.xpath('//*[@id="searcList"]/div/div[2]/div[3]/div[3]/table/tr'): + block_1 = [i.xpath('text()').get().strip() for i in item.xpath('td')] + print(block_1) + if not block_1: + continue + number, _, type_, unit, price, price_with_tax, *_ = block_1 + + block_2 = [i.xpath('text()').get().strip() for i in item.xpath('td/span')] + print(block_2) + name, *_ = block_2 + + yield { + 'number': number, + 'name': name, + 'spec': type_, + 'unit': unit, + 'price_without_tax': price, + 'price': price_with_tax, + 'category': response.meta['source'], + 'year': response.meta['year'], + 'month': response.meta['month'], + 'city': response.meta['city'], + 'date': datetime.date.today().strftime('%Y-%m-%d') + } + + +if __name__ == '__main__': + import json + + from spiders import run_spider + from commons.models.data_fujian import DataFujian + from core.factory import ClientApp + + # 爬取 + file_path = run_spider(DataFujianSpider) + # 入库 + data = json.loads(open(file_path, 'r', encoding='utf-8').read()) + with ClientApp().app_context(): + for item in data: + print(item) + DataFujian(**item).upsert() diff --git a/web/spiders/data_guangdong.py b/web/spiders/data_guangdong.py new file mode 100644 index 0000000..c9e38a2 --- /dev/null +++ b/web/spiders/data_guangdong.py @@ -0,0 +1,78 @@ +import scrapy +from scrapy import Request + + +class DataGuangdongSpider(scrapy.Spider): + name = "data_guangdong" + start_urls = [ + ('材料信息价', "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/list.shtml"), + ('材料信息价', "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/list_2.shtml"), + ('材料信息价', "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/list_3.shtml"), + ('材料信息价', "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/list_4.shtml"), + ('材料信息价', "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/list_5.shtml"), + ] + + def start_requests(self): + for source, url in self.start_urls: + yield Request( + method='GET', + url=url, + headers={ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36', + }, + meta={'source': source, 'type': 'home'} + ) + + def parse(self, response, **kwargs): + if response.meta['type'] == 'home': + yield from self.parse_home(response) + elif response.meta['type'] == 'list': + yield from self.parse_list(response) + + def parse_home(self, response): + for item in response.xpath('/html/body/div/div[3]/div[2]/div[2]/div/ul/li/a'): + uri = item.xpath('@href').get() + name = item.xpath('text()').get() + if '广东省交通建设工程主要外购材料信息价表' not in name: + continue + yield Request( + method='GET', + url=f'http://zjz.gdcd.gov.cn{uri}', + headers={ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36', + }, + meta={'source': name, 'type': 'list'} + ) + + def parse_list(self, response): + date = response.xpath('/html/body/div[1]/div[4]/div/div[1]/div[2]/span[2]/text()').get().strip('发布时间:') + source = response.xpath('/html/body/div[1]/div[4]/div/div[1]/div[2]/span[1]/b/text()').get() + for item in response.xpath('//*[@id="zoomcon"]/p/a'): + uri = item.xpath('@href').get() + name = item.xpath('text()').get() + url_prefix = '/'.join(response.url.split('/')[:-1]) + print(uri, name) + yield { + 'url': f'{url_prefix}/{uri}', + 'name': name, + # 'source': response.meta['source'], + 'source': source, + 'date': date + } + + +if __name__ == '__main__': + import json + + from spiders import run_spider + from commons.models.data_guangdong import DataGuangdong + from core.factory import ClientApp + + # 爬取 + file_path = run_spider(DataGuangdongSpider) + # 入库 + data = json.loads(open(file_path, 'r', encoding='utf-8').read()) + with ClientApp().app_context(): + for item in data: + print(item) + DataGuangdong(**item).upsert() diff --git a/web/spiders/date_zhejiang.py b/web/spiders/date_zhejiang.py new file mode 100644 index 0000000..b66080f --- /dev/null +++ b/web/spiders/date_zhejiang.py @@ -0,0 +1,84 @@ +import scrapy +from lxml import html, etree +from scrapy import Request + + +class DataZhejiangSpider(scrapy.Spider): + name = "data_zhejiang" + start_urls = [ + ('材料价格', "http://jtyst.zj.gov.cn/col/col1228999576/index.html"), + ('材料价格', "http://jtyst.zj.gov.cn/col/col1228999576/index.html?uid=5509220&pageNum=2"), + ('材料价格', "http://jtyst.zj.gov.cn/col/col1228999576/index.html?uid=5509220&pageNum=3"), + ('材料价格', "http://jtyst.zj.gov.cn/col/col1228999576/index.html?uid=5509220&pageNum=4"), + ('材料价格', "http://jtyst.zj.gov.cn/col/col1228999576/index.html?uid=5509220&pageNum=5"), + ] + + def start_requests(self): + for source, url in self.start_urls: + yield Request( + method='GET', + url=url, + headers={ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36', + }, + meta={'source': source, 'type': 'home'} + ) + + def parse(self, response, **kwargs): + if response.meta['type'] == 'home': + yield from self.parse_home(response) + elif response.meta['type'] == 'list': + yield from self.parse_list(response) + + def parse_home(self, response): + rsp = response.xpath('//*[@id="5509220"]/script/text()').get() + for t in ('', '', '', '', '', '', '', '', ''): + rsp = rsp.replace(t, '') + html = etree.HTML(rsp) + for item in html.xpath('//li/a'): + print(item) + uri = item.xpath('@href')[0] + name = item.xpath('text()')[0] + print(uri, name) + if '《质监与造价》价格信息专辑' not in name: + continue + yield Request( + method='GET', + url=f'http://jtyst.zj.gov.cn{uri}', + headers={ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36', + }, + meta={'source': name, 'type': 'list'} + ) + + def parse_list(self, response): + date = response.xpath('/html/body/div[2]/div[1]/div[2]/div[1]/p/span[1]/text()').get().split('日')[0].replace('年', '-').replace('月', '-') + source = response.xpath('/html/body/div[2]/div[1]/div[2]/div[1]/p/span[2]/text()[2]').get() + for item in response.xpath('//*[@id="zoom"]/p/a'): + uri = item.xpath('@href').get() + name = item.xpath('text()').get() + print(uri, name) + yield { + 'url': f'https://jtyst.zj.gov.cn{uri}', + 'name': name, + # 'source': response.meta['source'] + 'source': source, + 'date': date, + } + + +if __name__ == '__main__': + import json + + from spiders import run_spider + from commons.models.data_zhejiang import DataZhejiang + from core.factory import ClientApp + + # 爬取 + file_path = run_spider(DataZhejiangSpider) + # 入库 + data = json.loads(open(file_path, 'r', encoding='utf-8').read()) + with ClientApp().app_context(): + for item in data: + print(item) + DataZhejiang(**item).upsert() diff --git a/web/spiders/oil.py b/web/spiders/oil.py new file mode 100644 index 0000000..f73695b --- /dev/null +++ b/web/spiders/oil.py @@ -0,0 +1,83 @@ +import json + +import scrapy +from scrapy import Request + + +class OilSpider(scrapy.Spider): + name = "oil" + start_urls = [ + ('成品油价格调整', "https://fgw.fujian.gov.cn/was5/web/search?channelid=217025&templet=advsch.jsp&sortfield=-docreltime&classsql=%25%E6%88%90%E5%93%81%E6%B2%B9%E4%BB%B7%E6%A0%BC%E8%B0%83%E6%95%B4%25*siteid%3D31*siteid%3D31&prepage=100&page=1"), + ] + + def start_requests(self): + for source, url in self.start_urls: + yield Request( + method='GET', + url=url, + headers={ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36', + }, + meta={'source': source, 'type': 'list'} + ) + + def parse(self, response, **kwargs): + if response.meta['type'] == 'list': + yield from self.parse_list(response) + elif response.meta['type'] == 'detail': + yield from self.parse_detail(response) + + def parse_list(self, response): + ret = json.loads(response.text.replace('\n', '')) + if ret.get('count') and ret.get('docs'): + for item in ret['docs']: + if not item.get('title2'): + continue + print(f"{item['title2']} {item['pubtime']}") + yield Request( + method='GET', + url=item['url'], + meta={'source': f"{item['title2']} {item['pubtime']}", 'type': 'detail', 'time': item['pubtime']} + ) + + def parse_detail(self, response): + for item in response.xpath('//table[1]/tbody/tr'): + if len([i.get() for i in item.xpath('td/span/text()')]) > 0: + first_word = item.xpath('td/span/text()').get() + print() + if first_word.strip() == '油品' or first_word.strip() == '元/吨': + continue + name = first_word + price, *_ = [i.get() for i in item.xpath('td/text()')] + yield { + 'name': name, + 'price': int(price), + 'date': response.meta['time'].split(' ')[0], + } + elif len([i.get() for i in item.xpath('td/text()')]) > 0: + first_word = item.xpath('td/text()').get() + if first_word.strip() == '油品' or first_word.strip() == '元/吨' or first_word.startswith('\xa0') or first_word.startswith('\n'): + continue + name, price, *_ = [i.get() for i in item.xpath('td/text()')] + yield { + 'name': name, + 'price': price, + 'date': response.meta['time'].split(' ')[0], + } + else: + print() + + +if __name__ == '__main__': + from spiders import run_spider + from commons.models.oil import Oil + from core.factory import ClientApp + + # 爬取 + file_path = run_spider(OilSpider) + # 入库 + data = json.loads(open(file_path, 'r', encoding='utf-8').read()) + with ClientApp().app_context(): + for item in data: + print(item) + Oil(**item).upsert() diff --git a/web/spiders/steel_plate.py b/web/spiders/steel_plate.py new file mode 100644 index 0000000..a1ed14e --- /dev/null +++ b/web/spiders/steel_plate.py @@ -0,0 +1,89 @@ +import scrapy +from scrapy import Request + +from commons.constants.mysteel import PageType + + +class SteelPlateSpider(scrapy.Spider): + name = "steel_plate" + start_urls = [ + (PageType.PLATE_LIST, "https://list1.mysteel.com/market/p-219-----010102-0-01010502-------1.html"), + ] + cookie = None + user_agent = None + + def start_requests(self): + for source, url in self.start_urls: + yield Request( + method='GET', + url=url, + headers={ + 'User-Agent': self.user_agent, + }, + meta={'source': source, 'type': source} + ) + + def parse(self, response, **kwargs): + if response.meta['type'] == PageType.PLATE_LIST: + yield from self.parse_board_list(response) + if response.meta['type'] == PageType.PLATE_DETAIL: + yield from self.parse_board_detail(response) + + def parse_board_list(self, response): + for item in response.xpath('//*[@id="articleList"]/ul/li/a'): + uri = item.xpath('@href').get() + name = item.xpath('text()').get() + print(uri, name) + if '福州市场中厚板价格行情' not in name: + continue + yield Request( + method='GET', + url=uri, + headers={ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36', + }, + cookies=self.cookie, + meta={'source': name, 'type': PageType.PLATE_DETAIL} + ) + + def parse_board_detail(self, response): + title = response.xpath('//*[@id="content-title"]/text()').get() + date = title.split('日')[0].replace('年', '-').replace('月', '-') + + for item in response.xpath('//*[@id="marketTable"]/tr[position()>2]'): + line = [cell.xpath('text()').get().strip() for cell in item.xpath('td')] + print(line) + if len(line) < 7: + continue + name, spec, material, source, price, fluctuating, *_ = line + yield { + 'name': name, + 'spec': spec, + 'material': material, + 'source': source, + 'price': int(price), + 'fluctuating': 0 if fluctuating == '-' else int(fluctuating), + 'date': date + } + + +if __name__ == '__main__': + import json + + from spiders import run_spider, MysteelCookieTools + from commons.models.steel_plate import SteelPlate + from core.factory import ClientApp + + # cookie 读取 + cookie = MysteelCookieTools.get_cookies() + # 爬取 + SteelPlateSpider.cookie = cookie + SteelPlateSpider.user_agent = MysteelCookieTools.user_agent + file_path = run_spider(SteelPlateSpider) + # 入库 + data = json.loads(open(file_path, 'r', encoding='utf-8').read()) + with ClientApp().app_context(): + for item in data: + print(item) + SteelPlate(**item).upsert() + diff --git a/web/spiders/steel_rebar.py b/web/spiders/steel_rebar.py new file mode 100644 index 0000000..7cba368 --- /dev/null +++ b/web/spiders/steel_rebar.py @@ -0,0 +1,90 @@ +import scrapy +from scrapy import Request + +from price.constants.mysteel import PageType + + +class SteelRebarSpider(scrapy.Spider): + name = "steel_rebar" + start_urls = [ + (PageType.REBAR_LIST, "https://jiancai.mysteel.com/market/pa228aa010101a0a01010502aaaa1.html"), + ] + cookie = None + user_agent = None + + def start_requests(self): + for source, url in self.start_urls: + yield Request( + method='GET', + url=url, + headers={ + 'User-Agent': self.user_agent, + }, + meta={'source': source, 'type': source} + ) + + def parse(self, response, **kwargs): + if response.meta['type'] == PageType.REBAR_LIST: + yield from self.parse_steel_list(response) + elif response.meta['type'] == PageType.REBAR_DETAIL: + yield from self.parse_steel_detail(response) + + def parse_steel_list(self, response): + for item in response.xpath('//*[@id="articleList"]/ul/li/a'): + uri = item.xpath('@href').get() + name = item.xpath('text()').get() + print(uri, name) + if ')福州市场建筑钢材价格行情' not in name: + continue + yield Request( + method='GET', + url=uri, + headers={ + 'User-Agent': self.user_agent, + }, + cookies=self.cookie, + meta={'source': name, 'type': PageType.REBAR_DETAIL} + ) + + @staticmethod + def parse_steel_detail(response): + # 解析日期 + title = response.xpath('//*[@id="content-title"]/text()').get() + date = title.split('日')[0].replace('年', '-').replace('月', '-') + # + for item in response.xpath('//*[@id="marketTable"]/tr[position()>2]'): + line = [cell.xpath('text()').get().strip() for cell in item.xpath('td')] + print(line) + if len(line) < 8: + continue + name, spec, material, source, price, fluctuating, *_ = line + yield { + 'name': name, + 'spec': spec, + 'material': material, + 'source': source, + 'price': int(price), + 'fluctuating': 0 if fluctuating == '-' else int(fluctuating), + 'date': date + } + + +if __name__ == '__main__': + import json + + from spiders import run_spider, MysteelCookieTools + from commons.models.steel_rebar import SteelRebar + from core.factory import ClientApp + + # cookie 读取 + cookie = MysteelCookieTools.get_cookies() + # 爬取 + SteelRebarSpider.cookie = cookie + SteelRebarSpider.user_agent = MysteelCookieTools.user_agent + file_path = run_spider(SteelRebarSpider) + # 入库 + data = json.loads(open(file_path, 'r', encoding='utf-8').read()) + with ClientApp().app_context(): + for item in data: + print(item) + SteelRebar(**item).upsert() diff --git a/web/spiders/steel_section.py b/web/spiders/steel_section.py new file mode 100644 index 0000000..5744902 --- /dev/null +++ b/web/spiders/steel_section.py @@ -0,0 +1,88 @@ +import scrapy +from scrapy import Request + +from commons.constants.mysteel import PageType + + +class SteelSectionSpider(scrapy.Spider): + name = "steel_section" + start_urls = [ + (PageType.SECTION_LIST, "https://list1.mysteel.com/market/p-227-----010107-0-01010502-------1.html"), + ] + cookie = None + user_agent = None + + def start_requests(self): + for source, url in self.start_urls: + yield Request( + method='GET', + url=url, + headers={ + 'User-Agent': self.user_agent, + }, + meta={'source': source, 'type': source} + ) + + def parse(self, response, **kwargs): + if response.meta['type'] == PageType.SECTION_LIST: + yield from self.parse_section_list(response) + if response.meta['type'] == PageType.SECTION_DETAIL: + yield from self.parse_section_detail(response) + + def parse_section_list(self, response): + for item in response.xpath('//*[@id="articleList"]/ul/li/a'): + uri = item.xpath('@href').get() + name = item.xpath('text()').get() + print(uri, name) + if '福州市场工角槽钢价格行情' not in name: + continue + yield Request( + method='GET', + url=uri, + headers={ + 'User-Agent': self.user_agent, + }, + cookies=self.cookie, + meta={'source': name, 'type': PageType.SECTION_DETAIL} + ) + + def parse_section_detail(self, response): + title = response.xpath('//*[@id="content-title"]/text()').get() + date = title.split('日')[0].replace('年', '-').replace('月', '-') + + for item in response.xpath('//*[@id="marketTable"]/tr[position()>2]'): + line = [cell.xpath('text()').get().strip() for cell in item.xpath('td')] + print(line) + if len(line) < 7: + continue + name, spec, material, source, price, fluctuating, *_ = line + yield { + 'name': name, + 'spec': spec, + 'material': material, + 'source': source, + 'price': int(price), + 'fluctuating': 0 if fluctuating == '-' else int(fluctuating), + 'date': date + } + + +if __name__ == '__main__': + import json + + from spiders import run_spider, MysteelCookieTools + from commons.models.steel_section import SteelSection + from core.factory import ClientApp + + # cookie 读取 + cookie = MysteelCookieTools.get_cookies() + # 爬取 + SteelSectionSpider.cookie = cookie + SteelSectionSpider.user_agent = MysteelCookieTools.user_agent + file_path = run_spider(SteelSectionSpider) + # 入库 + data = json.loads(open(file_path, 'r', encoding='utf-8').read()) + with ClientApp().app_context(): + for item in data: + print(item) + SteelSection(**item).upsert() diff --git a/web/supervisor.conf b/web/supervisor.conf new file mode 100644 index 0000000..03ed4e0 --- /dev/null +++ b/web/supervisor.conf @@ -0,0 +1,52 @@ +[supervisord] +nodaemon=true +logfile=/logs/supervisord.log +logfile_backups = 1 +pidfile=/logs/supervisord.pid + +[inet_http_server] +port = 0.0.0.0:9998 +username = root +password = passw0rd + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[program:api] +command =/root/.local/bin/gunicorn core.app:app --config /usr/src/app/gunicorn_conf.py +environment=PYTHONPATH="/usr/src/app/",PYTHONIOENCODING="UTF-8" +directory = /usr/src/app/ +autostart = true +autorestart = true +stdout_logfile = /logs/www.log +stdout_logfile_maxbytes = 100000000 +stdout_logfile_backups = 3 +stopsignal = TERM +numprocs=1 +redirect_stderr = true + +[program:crond] +command = /usr/local/bin/python -u /usr/src/app/tasks/crond/scheduler.py +environment=PYTHONPATH="/usr/src/app",PYTHONIOENCODING="UTF-8" +directory = /usr/src/app +autostart = true +autorestart = true +stdout_logfile = /logs/crond.log +stdout_logfile_maxbytes = 100000000 +stdout_logfile_backups = 3 +stopsignal = QUIT +numprocs=1 +redirect_stderr = true + +[program:celery_worker] +command = /root/.local/bin/celery -A tasks.asynced.celery_worker.celery worker -c 4 --loglevel=INFO +environment=PYTHONPATH="/usr/src/app",PYTHONIOENCODING="UTF-8" +directory = /usr/src/app +autostart = true +autorestart = true +stdout_logfile = /logs/celery.log +stdout_logfile_maxbytes = 100000000 +stdout_logfile_backups = 3 +stopsignal = QUIT +numprocs=1 +redirect_stderr = true \ No newline at end of file diff --git a/web/tasks/__init__.py b/web/tasks/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/web/tasks/crond/__init__.py b/web/tasks/crond/__init__.py new file mode 100644 index 0000000..0a17d16 --- /dev/null +++ b/web/tasks/crond/__init__.py @@ -0,0 +1,21 @@ +import os +import glob +from importlib import import_module + +from apscheduler.schedulers.blocking import BlockingScheduler +from apscheduler.schedulers.gevent import GeventScheduler + +from worker import ASYNC_MODE, MODE_GEVENT + + +if ASYNC_MODE == MODE_GEVENT: + sched = GeventScheduler(timezone="Asia/Shanghai") +else: + sched = BlockingScheduler(timezone="Asia/Shanghai") + +# 定时任放到jobs里统一加载 +path = os.path.dirname(__file__) +file_names = glob.glob(os.path.join(path, 'jobs', '*.py')) +for filename in file_names: + module = os.path.basename(filename)[:-3] + import_module('.' + module, "tasks.crond.jobs") diff --git a/web/tasks/crond/jobs/__init__.py b/web/tasks/crond/jobs/__init__.py new file mode 100644 index 0000000..7c68785 --- /dev/null +++ b/web/tasks/crond/jobs/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- \ No newline at end of file diff --git a/web/tasks/crond/jobs/create_last_month_publish_data.py b/web/tasks/crond/jobs/create_last_month_publish_data.py new file mode 100644 index 0000000..b79136c --- /dev/null +++ b/web/tasks/crond/jobs/create_last_month_publish_data.py @@ -0,0 +1,35 @@ +import datetime + +from dateutil.relativedelta import relativedelta + +from commons.models.price_publish import PricePublish +from commons.models.price_result import PriceResult +from core.factory import ClientApp +from tasks.crond import sched +from tasks.once.calculate import calculate +from tasks.once.collect import collect + + +@sched.scheduled_job(trigger='cron', day='*/1', hour='2', minute="30") +def create_last_month_publish_data(): + """ + :return: + """ + today = datetime.date.today() + last_month = today - relativedelta(months=1) + year, month = last_month.year, last_month.month + + with ClientApp().app_context: + # 检查是否生成上月数据 + query = PriceResult.get_query(year=year, month=month) + result = PriceResult.get_list(query) + if not result: + calculate(year=year, month=month) + + # 检查是否生成上月数据 + query = PricePublish.get_query(year=last_month.year, month=last_month.month) + result = PricePublish.get_list(query) + if not result: + collect(year=year, month=month) + + return diff --git a/web/tasks/crond/scheduler.py b/web/tasks/crond/scheduler.py new file mode 100644 index 0000000..8867406 --- /dev/null +++ b/web/tasks/crond/scheduler.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +""" +定时任务入口 +""" +from core.factory import ClientApp +from worker import ASYNC_MODE, MODE_GEVENT +from tasks.crond import sched + + +app = ClientApp() + +if __name__ == '__main__': + try: + g = sched.start() + if ASYNC_MODE == MODE_GEVENT: + g.join() + except (KeyboardInterrupt, SystemExit): + pass diff --git a/web/tasks/once/__init__.py b/web/tasks/once/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/web/tasks/once/calculate.py b/web/tasks/once/calculate.py new file mode 100644 index 0000000..1e562de --- /dev/null +++ b/web/tasks/once/calculate.py @@ -0,0 +1,44 @@ +from calculators.asphalt_domestic import AsphaltDomesticCalculator +from calculators.asphalt_imported import AsphaltImportedCalculator +from calculators.cement_325 import Cement325Calculator +from calculators.cement_425 import Cement425Calculator +from calculators.oil_0 import Oil0Calculator +from calculators.oil_89 import Oil89Calculator +from calculators.oil_92 import Oil92Calculator +from calculators.steel_plate import SteelPlateCalculator +from calculators.steel_rebar_300 import Reber300Calculator +from calculators.steel_rebar_400 import Reber400Calculator +from calculators.steel_section import SteelSectionCalculator +from calculators.steel_strand import SteelStrandCalculator +from calculators.asphalt_domestic_modifier import AsphaltDomesticModifierCalculator +from calculators.asphalt_imported_modifier import AsphaltImportedModifierCalculator + + +def calculate(year=2023, month=8): + for Calculator in [ + AsphaltDomesticCalculator, + AsphaltImportedCalculator, + Cement325Calculator, + Cement425Calculator, + Oil0Calculator, + Oil89Calculator, + Oil92Calculator, + SteelPlateCalculator, + Reber300Calculator, + Reber400Calculator, + SteelSectionCalculator, + SteelStrandCalculator, + AsphaltDomesticModifierCalculator, + AsphaltImportedModifierCalculator, + ]: + calculator = Calculator(year=year, month=month) + _result = calculator.run() + calculator.save() + print(_result) + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context: + calculate() diff --git a/web/tasks/once/collect.py b/web/tasks/once/collect.py new file mode 100644 index 0000000..09f1fb9 --- /dev/null +++ b/web/tasks/once/collect.py @@ -0,0 +1,13 @@ +from collectors import Collector + + +def collect(year=2023, month=11): + collector = Collector(year, month) + collector.run() + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context: + collect() diff --git a/web/tasks/once/crawler.py b/web/tasks/once/crawler.py new file mode 100644 index 0000000..4f9c4c0 --- /dev/null +++ b/web/tasks/once/crawler.py @@ -0,0 +1,43 @@ +# 爬虫 +import datetime +import json +import traceback + +from commons.constants.material_task import MaterialTaskType, MaterialTaskStatus +from commons.models.material_task import MaterialTask +from commons.services.data import DataService + + +def crawler(): + today = datetime.date.today() + for task_type in MaterialTaskType.values: + with MaterialTask.atomic() as session: + # 创建任务 + item = MaterialTask( + name=None, + status=MaterialTaskStatus.DOING, + file=None, + type=task_type, + year=today.year, + month=today.month, + content=None, + ) + session.add(item) + session.flush() + # 运行爬虫 + try: + content = DataService.get_content(type=task_type) + item.content = json.dumps(content, ensure_ascii=False) + item.status = MaterialTaskStatus.DONE + session.flush() + except Exception as e: + traceback.print_exc() + item.status = MaterialTaskStatus.FAILED + session.flush() + + +if __name__ == '__main__': + from core.factory import ClientApp + + with ClientApp().app_context(): + crawler() diff --git a/web/tasks/once/data_fujian.json b/web/tasks/once/data_fujian.json new file mode 100644 index 0000000..6243cfb --- /dev/null +++ b/web/tasks/once/data_fujian.json @@ -0,0 +1,905 @@ +[ +{"number": "04010060", "name": "袋装水泥", "spec": "32.5R", "unit": "t", "price_without_tax": "406.96", "price": "459.87", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04010080", "name": "袋装水泥", "spec": "42.5", "unit": "t", "price_without_tax": "433.77", "price": "490.17", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04010160", "name": "散装水泥", "spec": "42.5", "unit": "t", "price_without_tax": "407.86", "price": "460.88", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04010180", "name": "散装水泥", "spec": "42.5R", "unit": "t", "price_without_tax": "416.80", "price": "470.98", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04010200", "name": "散装水泥", "spec": "52.5", "unit": "t", "price_without_tax": "443.61", "price": "501", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04030090", "name": "天然河砂", "spec": "", "unit": "m³", "price_without_tax": "172.58", "price": "177.76", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04030172", "name": "机制砂", "spec": "用于混凝土、砂浆", "unit": "m³", "price_without_tax": "131.40", "price": "135.34", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04050210", "name": "碎石", "spec": "Φ5-16", "unit": "m³", "price_without_tax": "110.23", "price": "113.54", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04050220", "name": "碎石", "spec": "Φ5-20", "unit": "m³", "price_without_tax": "107.86", "price": "111.10", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04050240", "name": "碎石", "spec": "Φ5-31.5", "unit": "m³", "price_without_tax": "104.31", "price": "107.44", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04050250", "name": "碎石", "spec": "Φ5-40", "unit": "m³", "price_without_tax": "101.94", "price": "105.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04050260", "name": "碎石", "spec": "Φ5-80", "unit": "m³", "price_without_tax": "100.75", "price": "103.77", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04050280", "name": "碎石", "spec": "Φ10-20", "unit": "m³", "price_without_tax": "109.05", "price": "112.32", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04050290", "name": "碎石", "spec": "Φ20-40", "unit": "m³", "price_without_tax": "106.68", "price": "109.88", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04050320", "name": "碎石", "spec": "Φ40以上", "unit": "m³", "price_without_tax": "100.75", "price": "103.77", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04090030", "name": "粉煤灰", "spec": "Ⅱ级", "unit": "kg", "price_without_tax": "0.21", "price": "0.23", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04090440", "name": "矿粉", "spec": "S95", "unit": "kg", "price_without_tax": "0.40", "price": "0.45", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04110001", "name": "方整石", "spec": "小规格", "unit": "m³", "price_without_tax": "521", "price": "537", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04110010", "name": "方整石", "spec": "大规格", "unit": "m³", "price_without_tax": "538", "price": "554", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04110200", "name": "片石", "spec": "", "unit": "m³", "price_without_tax": "115.43", "price": "118.89", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04110240", "name": "小乱毛石", "spec": "", "unit": "m³", "price_without_tax": "110.45", "price": "113.77", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04110250", "name": "乱毛石", "spec": "", "unit": "m³", "price_without_tax": "119.41", "price": "122.99", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04110280", "name": "整毛石", "spec": "定长", "unit": "m³", "price_without_tax": "538", "price": "554", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04110290", "name": "整毛石", "spec": "不定长", "unit": "m³", "price_without_tax": "521", "price": "537", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04130260", "name": "水泥多孔砖", "spec": "190×90×90 MU7.5", "unit": "块", "price_without_tax": "0.48", "price": "0.49", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04130270", "name": "水泥多孔砖", "spec": "190×190×90 MU7.5", "unit": "块", "price_without_tax": "0.70", "price": "0.72", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04130280", "name": "水泥多孔砖", "spec": "240×115×53 MU7.5", "unit": "块", "price_without_tax": "0.37", "price": "0.38", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04130290", "name": "水泥多孔砖", "spec": "240×115×90 MU7.5", "unit": "块", "price_without_tax": "0.74", "price": "0.76", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04130350", "name": "水泥砖", "spec": "240×115×53", "unit": "块", "price_without_tax": "0.36", "price": "0.37", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04131370", "name": "再生骨料透水砖", "spec": "厚度60 Rf4.0 B级透水", "unit": "㎡", "price_without_tax": "62.56", "price": "70.69", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04131550", "name": "再生骨料仿石透水砖", "spec": "厚度60 Rf4.0 B级透水", "unit": "㎡", "price_without_tax": "115.94", "price": "131.01", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04131640", "name": "再生骨料仿石透水砖", "spec": "厚度80 Rf4.0 B级透水", "unit": "㎡", "price_without_tax": "123.24", "price": "139.26", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04150090", "name": "加气混凝土砌块", "spec": "A5.0", "unit": "m³", "price_without_tax": "238.03", "price": "268.98", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04290070", "name": "钢筋混凝土PHC管桩", "spec": "Φ400 A95", "unit": "m", "price_without_tax": "141.33", "price": "159.71", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04290080", "name": "钢筋混凝土PHC管桩", "spec": "Φ400 AB95", "unit": "m", "price_without_tax": "149.20", "price": "168.59", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04290110", "name": "钢筋混凝土PHC管桩", "spec": "Φ500 A125", "unit": "m", "price_without_tax": "193.98", "price": "219.20", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04290120", "name": "钢筋混凝土PHC管桩", "spec": "Φ500 AB125", "unit": "m", "price_without_tax": "206.56", "price": "233.42", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04290130", "name": "钢筋混凝土PHC管桩", "spec": "Φ600 A110", "unit": "m", "price_without_tax": "235.74", "price": "266.38", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04290140", "name": "钢筋混凝土PHC管桩", "spec": "Φ600 AB110", "unit": "m", "price_without_tax": "246.52", "price": "278.56", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "04290150", "name": "钢筋混凝土PHC管桩", "spec": "Φ600 A130", "unit": "m", "price_without_tax": "250.21", "price": "282.74", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "05050010", "name": "胶合板", "spec": "5厚", "unit": "㎡", "price_without_tax": "12.54", "price": "14.17", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "05050030", "name": "胶合板", "spec": "9厚", "unit": "㎡", "price_without_tax": "20.06", "price": "22.66", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "05050040", "name": "胶合板", "spec": "12厚", "unit": "㎡", "price_without_tax": "24.95", "price": "28.19", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "05050060", "name": "胶合板", "spec": "15厚", "unit": "㎡", "price_without_tax": "30.28", "price": "34.22", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "05050070", "name": "胶合板", "spec": "18厚", "unit": "㎡", "price_without_tax": "35.13", "price": "39.70", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "13010670", "name": "内墙用乳胶漆底漆", "spec": "", "unit": "kg", "price_without_tax": "7.85", "price": "8.88", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "13010671", "name": "外墙用乳胶漆底漆", "spec": "", "unit": "kg", "price_without_tax": "12.38", "price": "13.99", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "13030660", "name": "真石漆", "spec": "", "unit": "kg", "price_without_tax": "5.10", "price": "5.77", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "13030670", "name": "真石面漆", "spec": "", "unit": "kg", "price_without_tax": "6.13", "price": "6.93", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "13030680", "name": "内墙用乳胶漆面漆", "spec": "", "unit": "kg", "price_without_tax": "8.05", "price": "9.10", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "13030690", "name": "外墙用乳胶漆面漆", "spec": "", "unit": "kg", "price_without_tax": "17.91", "price": "20.24", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "13090080", "name": "氟碳罩面清漆", "spec": "", "unit": "kg", "price_without_tax": "48.10", "price": "54.35", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "13310001", "name": "改性乳化沥青", "spec": "中裂", "unit": "t", "price_without_tax": "2490", "price": "2814", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "13310040", "name": "石油沥青", "spec": "60-100#", "unit": "kg", "price_without_tax": "3.56", "price": "4.02", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "13330070", "name": "SBS改性沥青玻璃布胎防水卷材(铝箔)", "spec": "3", "unit": "㎡", "price_without_tax": "27.74", "price": "31.35", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "13330360", "name": "自粘聚合物改性沥青防水卷材", "spec": "", "unit": "㎡", "price_without_tax": "29.06", "price": "32.84", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "13350010", "name": "聚氨酯防水涂料", "spec": "", "unit": "kg", "price_without_tax": "16.16", "price": "18.26", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "13350610", "name": "水泥基渗透结晶防水涂料", "spec": "I型", "unit": "kg", "price_without_tax": "12.74", "price": "14.40", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "13350620", "name": "JS防水涂料", "spec": "", "unit": "kg", "price_without_tax": "11.60", "price": "13.11", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "14030010", "name": "柴油", "spec": "0#", "unit": "kg", "price_without_tax": "7.81", "price": "8.82", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "14030060", "name": "汽油", "spec": "92#", "unit": "kg", "price_without_tax": "9.30", "price": "10.50", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010330", "name": "螺纹钢筋", "spec": "HRB400EΦ12", "unit": "t", "price_without_tax": "3749", "price": "4236", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010340", "name": "螺纹钢筋", "spec": "HRB400EΦ14", "unit": "t", "price_without_tax": "3676", "price": "4153", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010350", "name": "螺纹钢筋", "spec": "HRB400EΦ16", "unit": "t", "price_without_tax": "3619", "price": "4089", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010360", "name": "螺纹钢筋", "spec": "HRB400EΦ18", "unit": "t", "price_without_tax": "3624", "price": "4095", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010370", "name": "螺纹钢筋", "spec": "HRB400EΦ20", "unit": "t", "price_without_tax": "3624", "price": "4095", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010380", "name": "螺纹钢筋", "spec": "HRB400EΦ22", "unit": "t", "price_without_tax": "3624", "price": "4095", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010390", "name": "螺纹钢筋", "spec": "HRB400EΦ25", "unit": "t", "price_without_tax": "3689", "price": "4169", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010400", "name": "螺纹钢筋", "spec": "HRB400EΦ28", "unit": "t", "price_without_tax": "3735", "price": "4220", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010410", "name": "螺纹钢筋", "spec": "HRB400EΦ32", "unit": "t", "price_without_tax": "3735", "price": "4220", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010420", "name": "螺纹钢筋", "spec": "HRB500EΦ12", "unit": "t", "price_without_tax": "4108", "price": "4642", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010430", "name": "螺纹钢筋", "spec": "HRB500EΦ14", "unit": "t", "price_without_tax": "4031", "price": "4555", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010440", "name": "螺纹钢筋", "spec": "HRB500EΦ16", "unit": "t", "price_without_tax": "3969", "price": "4485", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010450", "name": "螺纹钢筋", "spec": "HRB500EΦ18", "unit": "t", "price_without_tax": "3969", "price": "4485", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010460", "name": "螺纹钢筋", "spec": "HRB500EΦ20", "unit": "t", "price_without_tax": "3969", "price": "4485", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010470", "name": "螺纹钢筋", "spec": "HRB500EΦ22", "unit": "t", "price_without_tax": "3969", "price": "4485", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010480", "name": "螺纹钢筋", "spec": "HRB500EΦ25", "unit": "t", "price_without_tax": "4020", "price": "4542", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010560", "name": "线材", "spec": "HPB300Φ8", "unit": "t", "price_without_tax": "4052", "price": "4579", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010570", "name": "线材", "spec": "HPB300Φ10", "unit": "t", "price_without_tax": "4052", "price": "4579", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010580", "name": "线材", "spec": "HRB400EΦ6", "unit": "t", "price_without_tax": "4396", "price": "4968", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010590", "name": "线材", "spec": "HRB400EΦ8", "unit": "t", "price_without_tax": "4138", "price": "4676", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010600", "name": "线材", "spec": "HRB400EΦ10", "unit": "t", "price_without_tax": "4138", "price": "4676", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010730", "name": "圆钢筋", "spec": "HPB300Φ12", "unit": "t", "price_without_tax": "4225", "price": "4774", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01070001", "name": "钢绞线", "spec": "", "unit": "t", "price_without_tax": "4611", "price": "5210", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01170150", "name": "热轧工字钢", "spec": "", "unit": "t", "price_without_tax": "3924", "price": "4434", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01190170", "name": "热轧槽钢", "spec": "", "unit": "t", "price_without_tax": "3785", "price": "4277", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01210380", "name": "热轧角钢", "spec": "", "unit": "t", "price_without_tax": "3824", "price": "4321", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01230010", "name": "热轧H型钢", "spec": "", "unit": "t", "price_without_tax": "3455", "price": "3904", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01290370", "name": "钢板(Q235)", "spec": "δ14-20", "unit": "t", "price_without_tax": "3748", "price": "4235", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01290380", "name": "钢板(Q235)", "spec": "δ22-28", "unit": "t", "price_without_tax": "3748", "price": "4235", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01290390", "name": "钢板(Q235)", "spec": "δ30-40", "unit": "t", "price_without_tax": "3792", "price": "4285", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01290400", "name": "钢板(Q235)", "spec": "δ42-50", "unit": "t", "price_without_tax": "3819", "price": "4315", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01290430", "name": "钢板(Q235)", "spec": "δ8", "unit": "t", "price_without_tax": "3916", "price": "4425", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01290450", "name": "钢板(Q235)", "spec": "δ12", "unit": "t", "price_without_tax": "3792", "price": "4285", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01291020", "name": "镜面不锈钢板", "spec": "δ0.8", "unit": "㎡", "price_without_tax": "104.42", "price": "118.00", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01291030", "name": "镜面不锈钢板", "spec": "δ1.0", "unit": "㎡", "price_without_tax": "150.44", "price": "170.00", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01291070", "name": "热镀锌钢板", "spec": "δ0.5", "unit": "t", "price_without_tax": "4863", "price": "5495", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01291080", "name": "热镀锌钢板", "spec": "δ0.75", "unit": "t", "price_without_tax": "4730", "price": "5345", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01291090", "name": "热镀锌钢板", "spec": "δ1", "unit": "t", "price_without_tax": "4642", "price": "5245", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01291100", "name": "热镀锌钢板", "spec": "δ1.2", "unit": "t", "price_without_tax": "4642", "price": "5245", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01292250", "name": "钢板(Q355)", "spec": "δ14-20", "unit": "t", "price_without_tax": "3925", "price": "4435", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "福州市", "date": "2024-01-04"}, +{"number": "01010330", "name": "螺纹钢筋", "spec": "HRB400EΦ12", "unit": "t", "price_without_tax": "3683", "price": "4162", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010340", "name": "螺纹钢筋", "spec": "HRB400EΦ14", "unit": "t", "price_without_tax": "3582", "price": "4048", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010350", "name": "螺纹钢筋", "spec": "HRB400EΦ16", "unit": "t", "price_without_tax": "3545", "price": "4006", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010360", "name": "螺纹钢筋", "spec": "HRB400EΦ18", "unit": "t", "price_without_tax": "3545", "price": "4006", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010370", "name": "螺纹钢筋", "spec": "HRB400EΦ20", "unit": "t", "price_without_tax": "3545", "price": "4006", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010380", "name": "螺纹钢筋", "spec": "HRB400EΦ22", "unit": "t", "price_without_tax": "3545", "price": "4006", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010390", "name": "螺纹钢筋", "spec": "HRB400EΦ25", "unit": "t", "price_without_tax": "3545", "price": "4006", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010400", "name": "螺纹钢筋", "spec": "HRB400EΦ28", "unit": "t", "price_without_tax": "3648", "price": "4122", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010410", "name": "螺纹钢筋", "spec": "HRB400EΦ32", "unit": "t", "price_without_tax": "3648", "price": "4122", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010420", "name": "螺纹钢筋", "spec": "HRB500EΦ12", "unit": "t", "price_without_tax": "3986", "price": "4504", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010430", "name": "螺纹钢筋", "spec": "HRB500EΦ14", "unit": "t", "price_without_tax": "3916", "price": "4425", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010440", "name": "螺纹钢筋", "spec": "HRB500EΦ16", "unit": "t", "price_without_tax": "3867", "price": "4370", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010450", "name": "螺纹钢筋", "spec": "HRB500EΦ18", "unit": "t", "price_without_tax": "3867", "price": "4370", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010460", "name": "螺纹钢筋", "spec": "HRB500EΦ20", "unit": "t", "price_without_tax": "3867", "price": "4370", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010470", "name": "螺纹钢筋", "spec": "HRB500EΦ22", "unit": "t", "price_without_tax": "3867", "price": "4370", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010480", "name": "螺纹钢筋", "spec": "HRB500EΦ25", "unit": "t", "price_without_tax": "3867", "price": "4370", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010548", "name": "线材", "spec": "HPB300Φ6", "unit": "t", "price_without_tax": "4012", "price": "4533", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010550", "name": "线材", "spec": "HPB300Φ6.5", "unit": "t", "price_without_tax": "4012", "price": "4533", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010560", "name": "线材", "spec": "HPB300Φ8", "unit": "t", "price_without_tax": "4012", "price": "4533", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010570", "name": "线材", "spec": "HPB300Φ10", "unit": "t", "price_without_tax": "4012", "price": "4533", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010730", "name": "圆钢筋", "spec": "HPB300Φ12", "unit": "t", "price_without_tax": "3771", "price": "4261", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010740", "name": "圆钢筋", "spec": "HPB300Φ14", "unit": "t", "price_without_tax": "3787", "price": "4279", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01070001", "name": "钢绞线", "spec": "", "unit": "t", "price_without_tax": "7717", "price": "8720", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01070040", "name": "无粘结钢绞线", "spec": "", "unit": "t", "price_without_tax": "6329", "price": "7152", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01130200", "name": "镀锌扁钢", "spec": "冷镀锌", "unit": "t", "price_without_tax": "4973", "price": "5620", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01130260", "name": "热轧扁钢", "spec": "", "unit": "t", "price_without_tax": "3735", "price": "4220", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01170020", "name": "镀锌工字钢", "spec": "冷镀锌", "unit": "t", "price_without_tax": "5121", "price": "5787", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01170150", "name": "热轧工字钢", "spec": "", "unit": "t", "price_without_tax": "3882", "price": "4387", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01190160", "name": "镀锌槽钢", "spec": "冷镀锌", "unit": "t", "price_without_tax": "5050", "price": "5707", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01190170", "name": "热轧槽钢", "spec": "", "unit": "t", "price_without_tax": "3812", "price": "4307", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01210360", "name": "镀锌角钢", "spec": "冷镀锌", "unit": "t", "price_without_tax": "5049", "price": "5705", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01210380", "name": "热轧角钢", "spec": "", "unit": "t", "price_without_tax": "3810", "price": "4305", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01291070", "name": "热镀锌钢板", "spec": "δ0.5", "unit": "t", "price_without_tax": "3918", "price": "4427", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01291080", "name": "热镀锌钢板", "spec": "δ0.75", "unit": "t", "price_without_tax": "3829", "price": "4327", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01291090", "name": "热镀锌钢板", "spec": "δ1", "unit": "t", "price_without_tax": "3829", "price": "4327", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01291100", "name": "热镀锌钢板", "spec": "δ1.2", "unit": "t", "price_without_tax": "3829", "price": "4327", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01291510", "name": "热轧薄钢板(Q235)", "spec": "<δ2.0", "unit": "t", "price_without_tax": "3650", "price": "4124", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01292230", "name": "钢板(Q355)", "spec": "δ10", "unit": "t", "price_without_tax": "3923", "price": "4433", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01510070", "name": "铝合金型材", "spec": "氧化白材", "unit": "t", "price_without_tax": "21575", "price": "24380", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01510120", "name": "隔热铝合金型材", "spec": "断桥铝 粉末喷涂", "unit": "t", "price_without_tax": "24673", "price": "27880", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "05050001", "name": "胶合板", "spec": "3厚", "unit": "㎡", "price_without_tax": "11.50", "price": "13.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "05050010", "name": "胶合板", "spec": "5厚", "unit": "㎡", "price_without_tax": "15.93", "price": "18.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "05050030", "name": "胶合板", "spec": "9厚", "unit": "㎡", "price_without_tax": "23.01", "price": "26.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "05050040", "name": "胶合板", "spec": "12厚", "unit": "㎡", "price_without_tax": "28.32", "price": "32.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "05050070", "name": "胶合板", "spec": "18厚", "unit": "㎡", "price_without_tax": "39.82", "price": "45.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "05090030", "name": "细木工板", "spec": "12厚 夹心板", "unit": "㎡", "price_without_tax": "30.09", "price": "34.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "05090040", "name": "细木工板", "spec": "15厚 夹心板", "unit": "㎡", "price_without_tax": "41.59", "price": "47.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "05090050", "name": "细木工板", "spec": "18厚 夹心板", "unit": "㎡", "price_without_tax": "51.33", "price": "58.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04010060", "name": "袋装水泥", "spec": "32.5R", "unit": "t", "price_without_tax": "370.80", "price": "419.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04010080", "name": "袋装水泥", "spec": "42.5", "unit": "t", "price_without_tax": "381.42", "price": "431.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04030172", "name": "机制砂", "spec": "用于混凝土、砂浆", "unit": "m³", "price_without_tax": "138.84", "price": "143.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04030190", "name": "海砂", "spec": "用于回填", "unit": "m³", "price_without_tax": "97.09", "price": "100.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04050210", "name": "碎石", "spec": "Φ5-16", "unit": "m³", "price_without_tax": "135.92", "price": "140.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04050230", "name": "碎石", "spec": "Φ5-25", "unit": "m³", "price_without_tax": "135.92", "price": "140.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04050250", "name": "碎石", "spec": "Φ5-40", "unit": "m³", "price_without_tax": "135.92", "price": "140.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04110001", "name": "方整石", "spec": "小规格", "unit": "m³", "price_without_tax": "237.86", "price": "245.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04110010", "name": "方整石", "spec": "大规格", "unit": "m³", "price_without_tax": "257.28", "price": "265.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04110090", "name": "路沿石", "spec": "120×280-350 露明二凿、倒棱一剁", "unit": "m", "price_without_tax": "41.74", "price": "42.99", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04110100", "name": "路沿石", "spec": "120×380-450 露明二凿、倒棱一剁", "unit": "m", "price_without_tax": "54.92", "price": "56.57", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04110200", "name": "片石", "spec": "", "unit": "m³", "price_without_tax": "127.57", "price": "131.40", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04110240", "name": "小乱毛石", "spec": "", "unit": "m³", "price_without_tax": "145.63", "price": "150.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04110250", "name": "乱毛石", "spec": "", "unit": "m³", "price_without_tax": "160.19", "price": "165.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04110280", "name": "整毛石", "spec": "定长", "unit": "m³", "price_without_tax": "223.30", "price": "230.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04110290", "name": "整毛石", "spec": "不定长", "unit": "m³", "price_without_tax": "203.88", "price": "210.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04130260", "name": "水泥多孔砖", "spec": "190×90×90 MU7.5", "unit": "块", "price_without_tax": "0.43", "price": "0.44", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04130270", "name": "水泥多孔砖", "spec": "190×190×90 MU7.5", "unit": "块", "price_without_tax": "0.52", "price": "0.54", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04130350", "name": "水泥砖", "spec": "240×115×53", "unit": "块", "price_without_tax": "0.39", "price": "0.40", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04130360", "name": "透水砖", "spec": "80×160×80", "unit": "㎡", "price_without_tax": "58.25", "price": "60.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04130370", "name": "透水砖", "spec": "115×230×80", "unit": "㎡", "price_without_tax": "77.67", "price": "80.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04130420", "name": "植草砖 无筋", "spec": "250×250×80", "unit": "㎡", "price_without_tax": "41.75", "price": "43.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04130430", "name": "植草砖 无筋", "spec": "450×450×80", "unit": "㎡", "price_without_tax": "45.63", "price": "47.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04130440", "name": "植草砖 有筋", "spec": "450×450×80", "unit": "㎡", "price_without_tax": "50.49", "price": "52.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04130540", "name": "烧结煤矸石普通砖", "spec": "240×115×53", "unit": "块", "price_without_tax": "0.56", "price": "0.58", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04130560", "name": "烧结煤矸石多孔砖", "spec": "190×90×90", "unit": "块", "price_without_tax": "0.66", "price": "0.68", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04130567", "name": "烧结煤矸石多孔砖", "spec": "190×190×90", "unit": "块", "price_without_tax": "1.18", "price": "1.22", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04130576", "name": "烧结煤矸石多孔砖", "spec": "240×115×90", "unit": "块", "price_without_tax": "0.93", "price": "0.96", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04130590", "name": "烧结煤矸石空心砖", "spec": "190×90×90", "unit": "块", "price_without_tax": "0.64", "price": "0.66", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04130600", "name": "烧结煤矸石空心砖", "spec": "190×190×90", "unit": "块", "price_without_tax": "1.13", "price": "1.16", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04130610", "name": "烧结煤矸石空心砖", "spec": "190×190×190", "unit": "块", "price_without_tax": "1.65", "price": "1.70", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04290070", "name": "钢筋混凝土PHC管桩", "spec": "Φ400 A95", "unit": "m", "price_without_tax": "101.77", "price": "115.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04290080", "name": "钢筋混凝土PHC管桩", "spec": "Φ400 AB95", "unit": "m", "price_without_tax": "110.62", "price": "125.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04290110", "name": "钢筋混凝土PHC管桩", "spec": "Φ500 A125", "unit": "m", "price_without_tax": "184.07", "price": "208.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04290120", "name": "钢筋混凝土PHC管桩", "spec": "Φ500 AB125", "unit": "m", "price_without_tax": "199.12", "price": "225.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04290130", "name": "钢筋混凝土PHC管桩", "spec": "Φ600 A110", "unit": "m", "price_without_tax": "216.81", "price": "245.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04290140", "name": "钢筋混凝土PHC管桩", "spec": "Φ600 AB110", "unit": "m", "price_without_tax": "230.09", "price": "260.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04290150", "name": "钢筋混凝土PHC管桩", "spec": "Φ600 A130", "unit": "m", "price_without_tax": "239.82", "price": "271.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04290160", "name": "钢筋混凝土PHC管桩", "spec": "Φ600 AB130", "unit": "m", "price_without_tax": "252.21", "price": "285.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "04290452", "name": "预制钢筋混凝土叠合梁", "spec": "C30 钢筋200kg/m³", "unit": "m³", "price_without_tax": "2411", "price": "2725", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "14030010", "name": "柴油", "spec": "0#", "unit": "kg", "price_without_tax": "8.34", "price": "9.42", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "14030060", "name": "汽油", "spec": "92#", "unit": "kg", "price_without_tax": "10.05", "price": "11.36", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "13010001", "name": "调和漆", "spec": "", "unit": "kg", "price_without_tax": "9.73", "price": "11.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "13010650", "name": "丙烯酸聚氨酯中间漆", "spec": "", "unit": "kg", "price_without_tax": "14.72", "price": "16.63", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "13050001", "name": "防火涂料", "spec": "", "unit": "kg", "price_without_tax": "15.09", "price": "17.05", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "13050280", "name": "JS聚合物水泥基粉料", "spec": "", "unit": "kg", "price_without_tax": "22.57", "price": "25.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "13050290", "name": "JS聚合物水泥基液料", "spec": "", "unit": "kg", "price_without_tax": "11.95", "price": "13.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "13310001", "name": "改性乳化沥青", "spec": "中裂", "unit": "t", "price_without_tax": "4867", "price": "5500", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "13310040", "name": "石油沥青", "spec": "60-100#", "unit": "kg", "price_without_tax": "3.45", "price": "3.90", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "13330070", "name": "SBS改性沥青玻璃布胎防水卷材(铝箔)", "spec": "3", "unit": "㎡", "price_without_tax": "23.57", "price": "26.63", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "13330190", "name": "耐根穿刺复合铜胎基SBS改性沥青卷材", "spec": "3mm", "unit": "㎡", "price_without_tax": "72.57", "price": "82.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "13330200", "name": "高聚物改性沥青自粘卷材", "spec": "3mm", "unit": "㎡", "price_without_tax": "18.58", "price": "21.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "13330210", "name": "高分子自粘胶膜卷材", "spec": "3mm", "unit": "㎡", "price_without_tax": "21.06", "price": "23.80", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "13330240", "name": "聚乙烯丙纶防水卷材", "spec": "1.5mm厚", "unit": "㎡", "price_without_tax": "7.79", "price": "8.80", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "13350010", "name": "聚氨酯防水涂料", "spec": "", "unit": "kg", "price_without_tax": "9.25", "price": "10.45", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "13350610", "name": "水泥基渗透结晶防水涂料", "spec": "I型", "unit": "kg", "price_without_tax": "6.19", "price": "7.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "13350620", "name": "JS防水涂料", "spec": "", "unit": "kg", "price_without_tax": "7.52", "price": "8.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "厦门市", "date": "2024-01-04"}, +{"number": "01010330", "name": "螺纹钢筋", "spec": "HRB400EΦ12", "unit": "t", "price_without_tax": "3637", "price": "4110", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01010340", "name": "螺纹钢筋", "spec": "HRB400EΦ14", "unit": "t", "price_without_tax": "3549", "price": "4010", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01010350", "name": "螺纹钢筋", "spec": "HRB400EΦ16", "unit": "t", "price_without_tax": "3504", "price": "3960", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01010360", "name": "螺纹钢筋", "spec": "HRB400EΦ18", "unit": "t", "price_without_tax": "3504", "price": "3960", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01010370", "name": "螺纹钢筋", "spec": "HRB400EΦ20", "unit": "t", "price_without_tax": "3504", "price": "3960", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01010380", "name": "螺纹钢筋", "spec": "HRB400EΦ22", "unit": "t", "price_without_tax": "3504", "price": "3960", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01010390", "name": "螺纹钢筋", "spec": "HRB400EΦ25", "unit": "t", "price_without_tax": "3504", "price": "3960", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01010400", "name": "螺纹钢筋", "spec": "HRB400EΦ28", "unit": "t", "price_without_tax": "3575", "price": "4040", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01010410", "name": "螺纹钢筋", "spec": "HRB400EΦ32", "unit": "t", "price_without_tax": "3575", "price": "4040", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01010550", "name": "线材", "spec": "HPB300Φ6.5", "unit": "t", "price_without_tax": "3894", "price": "4400", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01010560", "name": "线材", "spec": "HPB300Φ8", "unit": "t", "price_without_tax": "3894", "price": "4400", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01010570", "name": "线材", "spec": "HPB300Φ10", "unit": "t", "price_without_tax": "3894", "price": "4400", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01010580", "name": "线材", "spec": "HRB400EΦ6", "unit": "t", "price_without_tax": "3982", "price": "4500", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01010590", "name": "线材", "spec": "HRB400EΦ8", "unit": "t", "price_without_tax": "3982", "price": "4500", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01010600", "name": "线材", "spec": "HRB400EΦ10", "unit": "t", "price_without_tax": "3982", "price": "4500", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01010730", "name": "圆钢筋", "spec": "HPB300Φ12", "unit": "t", "price_without_tax": "4018", "price": "4540", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01010740", "name": "圆钢筋", "spec": "HPB300Φ14", "unit": "t", "price_without_tax": "4018", "price": "4540", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01070001", "name": "钢绞线", "spec": "", "unit": "t", "price_without_tax": "4602", "price": "5200", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01070040", "name": "无粘结钢绞线", "spec": "", "unit": "t", "price_without_tax": "4947", "price": "5590", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01130260", "name": "热轧扁钢", "spec": "", "unit": "t", "price_without_tax": "3885", "price": "4390", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01170150", "name": "热轧工字钢", "spec": "", "unit": "t", "price_without_tax": "3912", "price": "4420", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01190170", "name": "热轧槽钢", "spec": "", "unit": "t", "price_without_tax": "3867", "price": "4370", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01210380", "name": "热轧角钢", "spec": "", "unit": "t", "price_without_tax": "3876", "price": "4380", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01230010", "name": "热轧H型钢", "spec": "", "unit": "t", "price_without_tax": "3796", "price": "4290", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01290370", "name": "钢板(Q235)", "spec": "δ14-20", "unit": "t", "price_without_tax": "3938", "price": "4450", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01290380", "name": "钢板(Q235)", "spec": "δ22-28", "unit": "t", "price_without_tax": "3947", "price": "4460", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01290390", "name": "钢板(Q235)", "spec": "δ30-40", "unit": "t", "price_without_tax": "3973", "price": "4490", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01290400", "name": "钢板(Q235)", "spec": "δ42-50", "unit": "t", "price_without_tax": "3973", "price": "4490", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01290410", "name": "钢板(Q235)", "spec": "δ50以外", "unit": "t", "price_without_tax": "3973", "price": "4490", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01290420", "name": "钢板(Q235)", "spec": "δ6", "unit": "t", "price_without_tax": "3938", "price": "4450", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01290430", "name": "钢板(Q235)", "spec": "δ8", "unit": "t", "price_without_tax": "3938", "price": "4450", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01290440", "name": "钢板(Q235)", "spec": "δ10", "unit": "t", "price_without_tax": "3938", "price": "4450", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01290450", "name": "钢板(Q235)", "spec": "δ12", "unit": "t", "price_without_tax": "3938", "price": "4450", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01290840", "name": "不锈钢板", "spec": "材质201", "unit": "t", "price_without_tax": "14425", "price": "16300", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01290850", "name": "不锈钢板", "spec": "材质304", "unit": "t", "price_without_tax": "16876", "price": "19070", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01291020", "name": "镜面不锈钢板", "spec": "δ0.8", "unit": "㎡", "price_without_tax": "106.19", "price": "120.00", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01291030", "name": "镜面不锈钢板", "spec": "δ1.0", "unit": "㎡", "price_without_tax": "157.52", "price": "178.00", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01291070", "name": "热镀锌钢板", "spec": "δ0.5", "unit": "t", "price_without_tax": "4726", "price": "5340", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01291080", "name": "热镀锌钢板", "spec": "δ0.75", "unit": "t", "price_without_tax": "4593", "price": "5190", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01291090", "name": "热镀锌钢板", "spec": "δ1", "unit": "t", "price_without_tax": "4593", "price": "5190", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04010060", "name": "袋装水泥", "spec": "32.5R", "unit": "t", "price_without_tax": "339.65", "price": "383.80", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04010080", "name": "袋装水泥", "spec": "42.5", "unit": "t", "price_without_tax": "375.40", "price": "424.20", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04010160", "name": "散装水泥", "spec": "42.5", "unit": "t", "price_without_tax": "348.58", "price": "393.90", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04030172", "name": "机制砂", "spec": "用于混凝土、砂浆", "unit": "m³", "price_without_tax": "107.86", "price": "111.10", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04030212", "name": "混合砂", "spec": "用于混凝土、砂浆", "unit": "m³", "price_without_tax": "103.94", "price": "107.06", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04050210", "name": "碎石", "spec": "Φ5-16", "unit": "m³", "price_without_tax": "113.75", "price": "117.16", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04050220", "name": "碎石", "spec": "Φ5-20", "unit": "m³", "price_without_tax": "113.75", "price": "117.16", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04050230", "name": "碎石", "spec": "Φ5-25", "unit": "m³", "price_without_tax": "113.75", "price": "117.16", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04050240", "name": "碎石", "spec": "Φ5-31.5", "unit": "m³", "price_without_tax": "113.75", "price": "117.16", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04050250", "name": "碎石", "spec": "Φ5-40", "unit": "m³", "price_without_tax": "113.75", "price": "117.16", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04050260", "name": "碎石", "spec": "Φ5-80", "unit": "m³", "price_without_tax": "113.75", "price": "117.16", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04050280", "name": "碎石", "spec": "Φ10-20", "unit": "m³", "price_without_tax": "113.75", "price": "117.16", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04050290", "name": "碎石", "spec": "Φ20-40", "unit": "m³", "price_without_tax": "113.75", "price": "117.16", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04050320", "name": "碎石", "spec": "Φ40以上", "unit": "m³", "price_without_tax": "113.75", "price": "117.16", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04090030", "name": "粉煤灰", "spec": "Ⅱ级", "unit": "kg", "price_without_tax": "0.22", "price": "0.25", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04110200", "name": "片石", "spec": "", "unit": "m³", "price_without_tax": "87.82", "price": "90.45", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04110240", "name": "小乱毛石", "spec": "", "unit": "m³", "price_without_tax": "93.67", "price": "96.48", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04110250", "name": "乱毛石", "spec": "", "unit": "m³", "price_without_tax": "97.57", "price": "100.50", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04110280", "name": "整毛石", "spec": "定长", "unit": "m³", "price_without_tax": "438.10", "price": "451.25", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04110290", "name": "整毛石", "spec": "不定长", "unit": "m³", "price_without_tax": "403.95", "price": "416.07", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04130270", "name": "水泥多孔砖", "spec": "190×190×90 MU7.5", "unit": "块", "price_without_tax": "0.74", "price": "0.76", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04130290", "name": "水泥多孔砖", "spec": "240×115×90 MU7.5", "unit": "块", "price_without_tax": "0.84", "price": "0.87", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04130350", "name": "水泥砖", "spec": "240×115×53", "unit": "块", "price_without_tax": "0.52", "price": "0.54", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04130360", "name": "透水砖", "spec": "80×160×80", "unit": "㎡", "price_without_tax": "58.83", "price": "60.60", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04130420", "name": "植草砖 无筋", "spec": "250×250×80", "unit": "㎡", "price_without_tax": "57.85", "price": "59.59", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04130430", "name": "植草砖 无筋", "spec": "450×450×80", "unit": "㎡", "price_without_tax": "59.82", "price": "61.61", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04130440", "name": "植草砖 有筋", "spec": "450×450×80", "unit": "㎡", "price_without_tax": "61.78", "price": "63.63", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04150080", "name": "加气混凝土砌块", "spec": "A3.5", "unit": "m³", "price_without_tax": "277.55", "price": "313.64", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04150090", "name": "加气混凝土砌块", "spec": "A5.0", "unit": "m³", "price_without_tax": "287.43", "price": "324.80", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04290070", "name": "钢筋混凝土PHC管桩", "spec": "Φ400 A95", "unit": "m", "price_without_tax": "167.20", "price": "188.94", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04290080", "name": "钢筋混凝土PHC管桩", "spec": "Φ400 AB95", "unit": "m", "price_without_tax": "176.10", "price": "198.99", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04290110", "name": "钢筋混凝土PHC管桩", "spec": "Φ500 A125", "unit": "m", "price_without_tax": "228.57", "price": "258.29", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "04290120", "name": "钢筋混凝土PHC管桩", "spec": "Φ500 AB125", "unit": "m", "price_without_tax": "242.80", "price": "274.37", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "05050010", "name": "胶合板", "spec": "5厚", "unit": "㎡", "price_without_tax": "22.23", "price": "25.13", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "05050030", "name": "胶合板", "spec": "9厚", "unit": "㎡", "price_without_tax": "26.68", "price": "30.15", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "05050040", "name": "胶合板", "spec": "12厚", "unit": "㎡", "price_without_tax": "29.35", "price": "33.17", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "05050060", "name": "胶合板", "spec": "15厚", "unit": "㎡", "price_without_tax": "36.46", "price": "41.21", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "05050070", "name": "胶合板", "spec": "18厚", "unit": "㎡", "price_without_tax": "41.80", "price": "47.24", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "05090030", "name": "细木工板", "spec": "12厚 夹心板", "unit": "㎡", "price_without_tax": "32.91", "price": "37.19", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "05090040", "name": "细木工板", "spec": "15厚 夹心板", "unit": "㎡", "price_without_tax": "37.35", "price": "42.21", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "05090050", "name": "细木工板", "spec": "18厚 夹心板", "unit": "㎡", "price_without_tax": "41.80", "price": "47.24", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "14030010", "name": "柴油", "spec": "0#", "unit": "kg", "price_without_tax": "8.31", "price": "9.39", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "14030060", "name": "汽油", "spec": "92#", "unit": "kg", "price_without_tax": "10.24", "price": "11.57", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "13010550", "name": "醇酸调和漆", "spec": "各色", "unit": "kg", "price_without_tax": "9.78", "price": "11.06", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "13010650", "name": "丙烯酸聚氨酯中间漆", "spec": "", "unit": "kg", "price_without_tax": "10.67", "price": "12.06", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "13010670", "name": "内墙用乳胶漆底漆", "spec": "", "unit": "kg", "price_without_tax": "16.01", "price": "18.09", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "13010671", "name": "外墙用乳胶漆底漆", "spec": "", "unit": "kg", "price_without_tax": "22.23", "price": "25.13", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "13030680", "name": "内墙用乳胶漆面漆", "spec": "", "unit": "kg", "price_without_tax": "18.68", "price": "21.11", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "13030690", "name": "外墙用乳胶漆面漆", "spec": "", "unit": "kg", "price_without_tax": "24.90", "price": "28.14", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "13050001", "name": "防火涂料", "spec": "", "unit": "kg", "price_without_tax": "15.12", "price": "17.09", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "13050070", "name": "防锈漆", "spec": "红丹", "unit": "kg", "price_without_tax": "17.79", "price": "20.10", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "13050280", "name": "JS聚合物水泥基粉料", "spec": "", "unit": "kg", "price_without_tax": "2.67", "price": "3.02", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "13050290", "name": "JS聚合物水泥基液料", "spec": "", "unit": "kg", "price_without_tax": "5.34", "price": "6.03", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "13310001", "name": "改性乳化沥青", "spec": "中裂", "unit": "t", "price_without_tax": "3584", "price": "4050", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "13310040", "name": "石油沥青", "spec": "60-100#", "unit": "kg", "price_without_tax": "4.12", "price": "4.65", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "宁德市", "date": "2024-01-04"}, +{"number": "01010330", "name": "螺纹钢筋", "spec": "HRB400EΦ12", "unit": "t", "price_without_tax": "3637", "price": "4110", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010340", "name": "螺纹钢筋", "spec": "HRB400EΦ14", "unit": "t", "price_without_tax": "3531", "price": "3990", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010350", "name": "螺纹钢筋", "spec": "HRB400EΦ16", "unit": "t", "price_without_tax": "3487", "price": "3940", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010360", "name": "螺纹钢筋", "spec": "HRB400EΦ18", "unit": "t", "price_without_tax": "3487", "price": "3940", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010370", "name": "螺纹钢筋", "spec": "HRB400EΦ20", "unit": "t", "price_without_tax": "3487", "price": "3940", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010380", "name": "螺纹钢筋", "spec": "HRB400EΦ22", "unit": "t", "price_without_tax": "3487", "price": "3940", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010390", "name": "螺纹钢筋", "spec": "HRB400EΦ25", "unit": "t", "price_without_tax": "3531", "price": "3990", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010400", "name": "螺纹钢筋", "spec": "HRB400EΦ28", "unit": "t", "price_without_tax": "3593", "price": "4060", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010410", "name": "螺纹钢筋", "spec": "HRB400EΦ32", "unit": "t", "price_without_tax": "3593", "price": "4060", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010420", "name": "螺纹钢筋", "spec": "HRB500EΦ12", "unit": "t", "price_without_tax": "3965", "price": "4480", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010430", "name": "螺纹钢筋", "spec": "HRB500EΦ14", "unit": "t", "price_without_tax": "4009", "price": "4530", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010440", "name": "螺纹钢筋", "spec": "HRB500EΦ16", "unit": "t", "price_without_tax": "3841", "price": "4340", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010450", "name": "螺纹钢筋", "spec": "HRB500EΦ18", "unit": "t", "price_without_tax": "3841", "price": "4340", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010460", "name": "螺纹钢筋", "spec": "HRB500EΦ20", "unit": "t", "price_without_tax": "3841", "price": "4340", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010470", "name": "螺纹钢筋", "spec": "HRB500EΦ22", "unit": "t", "price_without_tax": "3841", "price": "4340", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010480", "name": "螺纹钢筋", "spec": "HRB500EΦ25", "unit": "t", "price_without_tax": "3885", "price": "4390", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010550", "name": "线材", "spec": "HPB300Φ6.5", "unit": "t", "price_without_tax": "3912", "price": "4420", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010560", "name": "线材", "spec": "HPB300Φ8", "unit": "t", "price_without_tax": "3743", "price": "4230", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010570", "name": "线材", "spec": "HPB300Φ10", "unit": "t", "price_without_tax": "3743", "price": "4230", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010580", "name": "线材", "spec": "HRB400EΦ6", "unit": "t", "price_without_tax": "4062", "price": "4590", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010590", "name": "线材", "spec": "HRB400EΦ8", "unit": "t", "price_without_tax": "3796", "price": "4290", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010600", "name": "线材", "spec": "HRB400EΦ10", "unit": "t", "price_without_tax": "3796", "price": "4290", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010730", "name": "圆钢筋", "spec": "HPB300Φ12", "unit": "t", "price_without_tax": "3841", "price": "4340", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010740", "name": "圆钢筋", "spec": "HPB300Φ14", "unit": "t", "price_without_tax": "3796", "price": "4290", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01130260", "name": "热轧扁钢", "spec": "", "unit": "t", "price_without_tax": "3735", "price": "4220", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01190170", "name": "热轧槽钢", "spec": "", "unit": "t", "price_without_tax": "3690", "price": "4170", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01210380", "name": "热轧角钢", "spec": "", "unit": "t", "price_without_tax": "3743", "price": "4230", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01230010", "name": "热轧H型钢", "spec": "", "unit": "t", "price_without_tax": "3717", "price": "4200", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01290370", "name": "钢板(Q235)", "spec": "δ14-20", "unit": "t", "price_without_tax": "3717", "price": "4200", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01290380", "name": "钢板(Q235)", "spec": "δ22-28", "unit": "t", "price_without_tax": "3752", "price": "4240", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01290420", "name": "钢板(Q235)", "spec": "δ6", "unit": "t", "price_without_tax": "3805", "price": "4300", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01290430", "name": "钢板(Q235)", "spec": "δ8", "unit": "t", "price_without_tax": "3805", "price": "4300", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01290440", "name": "钢板(Q235)", "spec": "δ10", "unit": "t", "price_without_tax": "3805", "price": "4300", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01290450", "name": "钢板(Q235)", "spec": "δ12", "unit": "t", "price_without_tax": "3761", "price": "4250", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01291070", "name": "热镀锌钢板", "spec": "δ0.5", "unit": "t", "price_without_tax": "5044", "price": "5700", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01291080", "name": "热镀锌钢板", "spec": "δ0.75", "unit": "t", "price_without_tax": "5044", "price": "5700", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01291090", "name": "热镀锌钢板", "spec": "δ1", "unit": "t", "price_without_tax": "5018", "price": "5670", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01291100", "name": "热镀锌钢板", "spec": "δ1.2", "unit": "t", "price_without_tax": "5018", "price": "5670", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01291510", "name": "热轧薄钢板(Q235)", "spec": "<δ2.0", "unit": "t", "price_without_tax": "4106", "price": "4640", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01292210", "name": "钢板(Q355)", "spec": "δ6", "unit": "t", "price_without_tax": "3938", "price": "4450", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "05020020", "name": "杉圆木", "spec": "Ф14-18 4m", "unit": "m³", "price_without_tax": "1283", "price": "1450", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "05020040", "name": "松圆木", "spec": "Ф20-28 4m", "unit": "m³", "price_without_tax": "1133", "price": "1280", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "05050001", "name": "胶合板", "spec": "3厚", "unit": "㎡", "price_without_tax": "11.06", "price": "12.50", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "05050010", "name": "胶合板", "spec": "5厚", "unit": "㎡", "price_without_tax": "14.16", "price": "16.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "05050030", "name": "胶合板", "spec": "9厚", "unit": "㎡", "price_without_tax": "19.91", "price": "22.50", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "05050040", "name": "胶合板", "spec": "12厚", "unit": "㎡", "price_without_tax": "23.72", "price": "26.80", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "05050060", "name": "胶合板", "spec": "15厚", "unit": "㎡", "price_without_tax": "30.97", "price": "35.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "05050070", "name": "胶合板", "spec": "18厚", "unit": "㎡", "price_without_tax": "41.59", "price": "47.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "05090030", "name": "细木工板", "spec": "12厚 夹心板", "unit": "㎡", "price_without_tax": "27.43", "price": "31.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "05090040", "name": "细木工板", "spec": "15厚 夹心板", "unit": "㎡", "price_without_tax": "34.51", "price": "39.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "05090050", "name": "细木工板", "spec": "18厚 夹心板", "unit": "㎡", "price_without_tax": "38.50", "price": "43.50", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "14030010", "name": "柴油", "spec": "0#", "unit": "kg", "price_without_tax": "7.98", "price": "9.01", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "14030060", "name": "汽油", "spec": "92#", "unit": "kg", "price_without_tax": "9.62", "price": "10.87", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04010060", "name": "袋装水泥", "spec": "32.5R", "unit": "t", "price_without_tax": "340.71", "price": "385.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04010080", "name": "袋装水泥", "spec": "42.5", "unit": "t", "price_without_tax": "358.41", "price": "405.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04010100", "name": "袋装水泥", "spec": "42.5R", "unit": "t", "price_without_tax": "367.26", "price": "415.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04010160", "name": "散装水泥", "spec": "42.5", "unit": "t", "price_without_tax": "331.86", "price": "375.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04010180", "name": "散装水泥", "spec": "42.5R", "unit": "t", "price_without_tax": "340.71", "price": "385.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04010200", "name": "散装水泥", "spec": "52.5", "unit": "t", "price_without_tax": "367.26", "price": "415.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04010220", "name": "散装水泥", "spec": "52.5R", "unit": "t", "price_without_tax": "376.11", "price": "425.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04030172", "name": "机制砂", "spec": "用于混凝土、砂浆", "unit": "m³", "price_without_tax": "129.13", "price": "133.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04030174", "name": "机制砂", "spec": "用于回填、垫层", "unit": "m³", "price_without_tax": "87.38", "price": "90.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04050220", "name": "碎石", "spec": "Φ5-20", "unit": "m³", "price_without_tax": "106.80", "price": "110.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04050250", "name": "碎石", "spec": "Φ5-40", "unit": "m³", "price_without_tax": "101.94", "price": "105.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04050260", "name": "碎石", "spec": "Φ5-80", "unit": "m³", "price_without_tax": "101.94", "price": "105.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04110001", "name": "方整石", "spec": "小规格", "unit": "m³", "price_without_tax": "368.93", "price": "380.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04110010", "name": "方整石", "spec": "大规格", "unit": "m³", "price_without_tax": "378.64", "price": "390.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04110090", "name": "路沿石", "spec": "120×280-350 露明二凿、倒棱一剁", "unit": "m", "price_without_tax": "45.63", "price": "47.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04110100", "name": "路沿石", "spec": "120×380-450 露明二凿、倒棱一剁", "unit": "m", "price_without_tax": "61.17", "price": "63.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04110240", "name": "小乱毛石", "spec": "", "unit": "m³", "price_without_tax": "91.26", "price": "94.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04110250", "name": "乱毛石", "spec": "", "unit": "m³", "price_without_tax": "93.20", "price": "96.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04110280", "name": "整毛石", "spec": "定长", "unit": "m³", "price_without_tax": "364.08", "price": "375.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04110290", "name": "整毛石", "spec": "不定长", "unit": "m³", "price_without_tax": "334.95", "price": "345.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04130270", "name": "水泥多孔砖", "spec": "190×190×90 MU7.5", "unit": "块", "price_without_tax": "0.76", "price": "0.78", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04130290", "name": "水泥多孔砖", "spec": "240×115×90 MU7.5", "unit": "块", "price_without_tax": "0.60", "price": "0.62", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04130350", "name": "水泥砖", "spec": "240×115×53", "unit": "块", "price_without_tax": "0.37", "price": "0.38", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04150080", "name": "加气混凝土砌块", "spec": "A3.5", "unit": "m³", "price_without_tax": "256.64", "price": "290.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04150090", "name": "加气混凝土砌块", "spec": "A5.0", "unit": "m³", "price_without_tax": "265.49", "price": "300.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04290070", "name": "钢筋混凝土PHC管桩", "spec": "Φ400 A95", "unit": "m", "price_without_tax": "104.42", "price": "118.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04290080", "name": "钢筋混凝土PHC管桩", "spec": "Φ400 AB95", "unit": "m", "price_without_tax": "113.27", "price": "128.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04290110", "name": "钢筋混凝土PHC管桩", "spec": "Φ500 A125", "unit": "m", "price_without_tax": "159.29", "price": "180.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04290120", "name": "钢筋混凝土PHC管桩", "spec": "Φ500 AB125", "unit": "m", "price_without_tax": "168.14", "price": "190.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04290150", "name": "钢筋混凝土PHC管桩", "spec": "Φ600 A130", "unit": "m", "price_without_tax": "199.12", "price": "225.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "04290160", "name": "钢筋混凝土PHC管桩", "spec": "Φ600 AB130", "unit": "m", "price_without_tax": "212.39", "price": "240.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "13010001", "name": "调和漆", "spec": "", "unit": "kg", "price_without_tax": "10.62", "price": "12.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "13010670", "name": "内墙用乳胶漆底漆", "spec": "", "unit": "kg", "price_without_tax": "10.62", "price": "12.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "13030680", "name": "内墙用乳胶漆面漆", "spec": "", "unit": "kg", "price_without_tax": "14.60", "price": "16.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "13050001", "name": "防火涂料", "spec": "", "unit": "kg", "price_without_tax": "12.39", "price": "14.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "13050070", "name": "防锈漆", "spec": "红丹", "unit": "kg", "price_without_tax": "12.48", "price": "14.10", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "13310001", "name": "改性乳化沥青", "spec": "中裂", "unit": "t", "price_without_tax": "3204", "price": "3620", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "13310040", "name": "石油沥青", "spec": "60-100#", "unit": "kg", "price_without_tax": "3.45", "price": "3.90", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "13330070", "name": "SBS改性沥青玻璃布胎防水卷材(铝箔)", "spec": "3", "unit": "㎡", "price_without_tax": "20.53", "price": "23.20", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "13330200", "name": "高聚物改性沥青自粘卷材", "spec": "3mm", "unit": "㎡", "price_without_tax": "20.09", "price": "22.70", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "13330210", "name": "高分子自粘胶膜卷材", "spec": "3mm", "unit": "㎡", "price_without_tax": "21.86", "price": "24.70", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "13350010", "name": "聚氨酯防水涂料", "spec": "", "unit": "kg", "price_without_tax": "9.29", "price": "10.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "13350610", "name": "水泥基渗透结晶防水涂料", "spec": "I型", "unit": "kg", "price_without_tax": "6.64", "price": "7.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "13350620", "name": "JS防水涂料", "spec": "", "unit": "kg", "price_without_tax": "6.64", "price": "7.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "泉州市", "date": "2024-01-04"}, +{"number": "01010330", "name": "螺纹钢筋", "spec": "HRB400EΦ12", "unit": "t", "price_without_tax": "3624", "price": "4095", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010340", "name": "螺纹钢筋", "spec": "HRB400EΦ14", "unit": "t", "price_without_tax": "3535", "price": "3995", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010350", "name": "螺纹钢筋", "spec": "HRB400EΦ16", "unit": "t", "price_without_tax": "3491", "price": "3945", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010360", "name": "螺纹钢筋", "spec": "HRB400EΦ18", "unit": "t", "price_without_tax": "3491", "price": "3945", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010370", "name": "螺纹钢筋", "spec": "HRB400EΦ20", "unit": "t", "price_without_tax": "3491", "price": "3945", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010380", "name": "螺纹钢筋", "spec": "HRB400EΦ22", "unit": "t", "price_without_tax": "3491", "price": "3945", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010390", "name": "螺纹钢筋", "spec": "HRB400EΦ25", "unit": "t", "price_without_tax": "3491", "price": "3945", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010400", "name": "螺纹钢筋", "spec": "HRB400EΦ28", "unit": "t", "price_without_tax": "3597", "price": "4065", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010410", "name": "螺纹钢筋", "spec": "HRB400EΦ32", "unit": "t", "price_without_tax": "3597", "price": "4065", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010420", "name": "螺纹钢筋", "spec": "HRB500EΦ12", "unit": "t", "price_without_tax": "3934", "price": "4445", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010430", "name": "螺纹钢筋", "spec": "HRB500EΦ14", "unit": "t", "price_without_tax": "3845", "price": "4345", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010440", "name": "螺纹钢筋", "spec": "HRB500EΦ16", "unit": "t", "price_without_tax": "3801", "price": "4295", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010450", "name": "螺纹钢筋", "spec": "HRB500EΦ18", "unit": "t", "price_without_tax": "3801", "price": "4295", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010460", "name": "螺纹钢筋", "spec": "HRB500EΦ20", "unit": "t", "price_without_tax": "3801", "price": "4295", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010470", "name": "螺纹钢筋", "spec": "HRB500EΦ22", "unit": "t", "price_without_tax": "3801", "price": "4295", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010480", "name": "螺纹钢筋", "spec": "HRB500EΦ25", "unit": "t", "price_without_tax": "3801", "price": "4295", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010548", "name": "线材", "spec": "HPB300Φ6", "unit": "t", "price_without_tax": "3956", "price": "4470", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010550", "name": "线材", "spec": "HPB300Φ6.5", "unit": "t", "price_without_tax": "3801", "price": "4295", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010560", "name": "线材", "spec": "HPB300Φ8", "unit": "t", "price_without_tax": "3801", "price": "4295", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010570", "name": "线材", "spec": "HPB300Φ10", "unit": "t", "price_without_tax": "3801", "price": "4295", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010580", "name": "线材", "spec": "HRB400EΦ6", "unit": "t", "price_without_tax": "4111", "price": "4645", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010590", "name": "线材", "spec": "HRB400EΦ8", "unit": "t", "price_without_tax": "3889", "price": "4395", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010600", "name": "线材", "spec": "HRB400EΦ10", "unit": "t", "price_without_tax": "3889", "price": "4395", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010730", "name": "圆钢筋", "spec": "HPB300Φ12", "unit": "t", "price_without_tax": "3783", "price": "4275", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010740", "name": "圆钢筋", "spec": "HPB300Φ14", "unit": "t", "price_without_tax": "3783", "price": "4275", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01011100", "name": "耐氯离子腐蚀钢筋", "spec": "HRB400cE Φ12", "unit": "t", "price_without_tax": "5774", "price": "6525", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01011110", "name": "耐氯离子腐蚀钢筋", "spec": "HRB400cE Φ14", "unit": "t", "price_without_tax": "5686", "price": "6425", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01011120", "name": "耐氯离子腐蚀钢筋", "spec": "HRB400cE Φ16", "unit": "t", "price_without_tax": "5642", "price": "6375", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01011130", "name": "耐氯离子腐蚀钢筋", "spec": "HRB400cE Φ18", "unit": "t", "price_without_tax": "5642", "price": "6375", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01011140", "name": "耐氯离子腐蚀钢筋", "spec": "HRB400cE Φ20", "unit": "t", "price_without_tax": "5642", "price": "6375", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01011150", "name": "耐氯离子腐蚀钢筋", "spec": "HRB400cE Φ22", "unit": "t", "price_without_tax": "5642", "price": "6375", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01011160", "name": "耐氯离子腐蚀钢筋", "spec": "HRB400cE Φ25", "unit": "t", "price_without_tax": "5642", "price": "6375", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01011170", "name": "耐氯离子腐蚀钢筋", "spec": "HRB400cE Φ28", "unit": "t", "price_without_tax": "5748", "price": "6495", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01011180", "name": "耐氯离子腐蚀钢筋", "spec": "HRB400cE Φ32", "unit": "t", "price_without_tax": "5748", "price": "6495", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01011400", "name": "耐氯离子腐蚀钢筋", "spec": "HRB500cE Φ12", "unit": "t", "price_without_tax": "6084", "price": "6875", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01011410", "name": "耐氯离子腐蚀钢筋", "spec": "HRB500cE Φ14", "unit": "t", "price_without_tax": "5996", "price": "6775", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01011420", "name": "耐氯离子腐蚀钢筋", "spec": "HRB500cE Φ16", "unit": "t", "price_without_tax": "5951", "price": "6725", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01011430", "name": "耐氯离子腐蚀钢筋", "spec": "HRB500cE Φ18", "unit": "t", "price_without_tax": "5951", "price": "6725", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01011440", "name": "耐氯离子腐蚀钢筋", "spec": "HRB500cE Φ20", "unit": "t", "price_without_tax": "5951", "price": "6725", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01011450", "name": "耐氯离子腐蚀钢筋", "spec": "HRB500cE Φ22", "unit": "t", "price_without_tax": "5951", "price": "6725", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "05050001", "name": "胶合板", "spec": "3厚", "unit": "㎡", "price_without_tax": "11.50", "price": "13.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "05050010", "name": "胶合板", "spec": "5厚", "unit": "㎡", "price_without_tax": "15.04", "price": "17.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "05050030", "name": "胶合板", "spec": "9厚", "unit": "㎡", "price_without_tax": "19.47", "price": "22.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "05050040", "name": "胶合板", "spec": "12厚", "unit": "㎡", "price_without_tax": "24.34", "price": "27.50", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "05050060", "name": "胶合板", "spec": "15厚", "unit": "㎡", "price_without_tax": "30.53", "price": "34.50", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "05050070", "name": "胶合板", "spec": "18厚", "unit": "㎡", "price_without_tax": "36.73", "price": "41.50", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "05090030", "name": "细木工板", "spec": "12厚 夹心板", "unit": "㎡", "price_without_tax": "26.11", "price": "29.50", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "05090040", "name": "细木工板", "spec": "15厚 夹心板", "unit": "㎡", "price_without_tax": "36.28", "price": "41.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "05090050", "name": "细木工板", "spec": "18厚 夹心板", "unit": "㎡", "price_without_tax": "44.25", "price": "50.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13010001", "name": "调和漆", "spec": "", "unit": "kg", "price_without_tax": "10.18", "price": "11.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13010050", "name": "醇酸磁漆", "spec": "", "unit": "kg", "price_without_tax": "10.62", "price": "12.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13010270", "name": "聚氨酯磁漆", "spec": "", "unit": "kg", "price_without_tax": "17.26", "price": "19.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13010550", "name": "醇酸调和漆", "spec": "各色", "unit": "kg", "price_without_tax": "9.29", "price": "10.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13010670", "name": "内墙用乳胶漆底漆", "spec": "", "unit": "kg", "price_without_tax": "9.29", "price": "10.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13010671", "name": "外墙用乳胶漆底漆", "spec": "", "unit": "kg", "price_without_tax": "15.04", "price": "17.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13030680", "name": "内墙用乳胶漆面漆", "spec": "", "unit": "kg", "price_without_tax": "12.83", "price": "14.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13030690", "name": "外墙用乳胶漆面漆", "spec": "", "unit": "kg", "price_without_tax": "23.01", "price": "26.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13050001", "name": "防火涂料", "spec": "", "unit": "kg", "price_without_tax": "12.83", "price": "14.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13050070", "name": "防锈漆", "spec": "红丹", "unit": "kg", "price_without_tax": "12.92", "price": "14.60", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13050280", "name": "JS聚合物水泥基粉料", "spec": "", "unit": "kg", "price_without_tax": "3.85", "price": "4.35", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13050290", "name": "JS聚合物水泥基液料", "spec": "", "unit": "kg", "price_without_tax": "12.83", "price": "14.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13310040", "name": "石油沥青", "spec": "60-100#", "unit": "kg", "price_without_tax": "3.63", "price": "4.10", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13330070", "name": "SBS改性沥青玻璃布胎防水卷材(铝箔)", "spec": "3", "unit": "㎡", "price_without_tax": "23.01", "price": "26.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13330210", "name": "高分子自粘胶膜卷材", "spec": "3mm", "unit": "㎡", "price_without_tax": "20.35", "price": "23.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13330240", "name": "聚乙烯丙纶防水卷材", "spec": "1.5mm厚", "unit": "㎡", "price_without_tax": "7.96", "price": "9.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13330360", "name": "自粘聚合物改性沥青防水卷材", "spec": "", "unit": "㎡", "price_without_tax": "24.78", "price": "28.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13350010", "name": "聚氨酯防水涂料", "spec": "", "unit": "kg", "price_without_tax": "11.50", "price": "13.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "13350610", "name": "水泥基渗透结晶防水涂料", "spec": "I型", "unit": "kg", "price_without_tax": "7.96", "price": "9.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04010060", "name": "袋装水泥", "spec": "32.5R", "unit": "t", "price_without_tax": "347.79", "price": "393.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04010080", "name": "袋装水泥", "spec": "42.5", "unit": "t", "price_without_tax": "374.34", "price": "423.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04010160", "name": "散装水泥", "spec": "42.5", "unit": "t", "price_without_tax": "347.79", "price": "393.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04010180", "name": "散装水泥", "spec": "42.5R", "unit": "t", "price_without_tax": "356.64", "price": "403.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04030090", "name": "天然河砂", "spec": "", "unit": "m³", "price_without_tax": "155.34", "price": "160.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04030172", "name": "机制砂", "spec": "用于混凝土、砂浆", "unit": "m³", "price_without_tax": "111.65", "price": "115.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04030174", "name": "机制砂", "spec": "用于回填、垫层", "unit": "m³", "price_without_tax": "82.52", "price": "85.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04050200", "name": "碎石", "spec": "Φ5-10 (细石)", "unit": "m³", "price_without_tax": "106.80", "price": "110.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04050210", "name": "碎石", "spec": "Φ5-16", "unit": "m³", "price_without_tax": "106.80", "price": "110.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04050220", "name": "碎石", "spec": "Φ5-20", "unit": "m³", "price_without_tax": "106.80", "price": "110.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04050230", "name": "碎石", "spec": "Φ5-25", "unit": "m³", "price_without_tax": "106.80", "price": "110.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04050240", "name": "碎石", "spec": "Φ5-31.5", "unit": "m³", "price_without_tax": "106.80", "price": "110.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04050250", "name": "碎石", "spec": "Φ5-40", "unit": "m³", "price_without_tax": "106.80", "price": "110.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04050260", "name": "碎石", "spec": "Φ5-80", "unit": "m³", "price_without_tax": "106.80", "price": "110.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04050280", "name": "碎石", "spec": "Φ10-20", "unit": "m³", "price_without_tax": "106.80", "price": "110.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04050290", "name": "碎石", "spec": "Φ20-40", "unit": "m³", "price_without_tax": "106.80", "price": "110.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04050320", "name": "碎石", "spec": "Φ40以上", "unit": "m³", "price_without_tax": "106.80", "price": "110.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04050590", "name": "再生粗骨料", "spec": "Φ5-20 I类", "unit": "m³", "price_without_tax": "33.46", "price": "37.81", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04050600", "name": "再生粗骨料", "spec": "Φ5-25 I类", "unit": "m³", "price_without_tax": "33.46", "price": "37.81", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04050610", "name": "再生粗骨料", "spec": "Φ10-20 I类", "unit": "m³", "price_without_tax": "33.46", "price": "37.81", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04050620", "name": "再生粗骨料", "spec": "Φ20-31.5 I类", "unit": "m³", "price_without_tax": "33.46", "price": "37.81", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04050630", "name": "再生粗骨料", "spec": "Φ20-40 I类", "unit": "m³", "price_without_tax": "33.46", "price": "37.81", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04050650", "name": "再生粗骨料", "spec": "Φ5-20 II类", "unit": "m³", "price_without_tax": "30.80", "price": "34.81", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04050710", "name": "再生粗骨料", "spec": "Φ5-20 III类", "unit": "m³", "price_without_tax": "30.80", "price": "34.81", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04110001", "name": "方整石", "spec": "小规格", "unit": "m³", "price_without_tax": "262.14", "price": "270.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04110010", "name": "方整石", "spec": "大规格", "unit": "m³", "price_without_tax": "330.10", "price": "340.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04110200", "name": "片石", "spec": "", "unit": "m³", "price_without_tax": "82.52", "price": "85.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04110240", "name": "小乱毛石", "spec": "", "unit": "m³", "price_without_tax": "92.23", "price": "95.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04110250", "name": "乱毛石", "spec": "", "unit": "m³", "price_without_tax": "82.52", "price": "85.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04110280", "name": "整毛石", "spec": "定长", "unit": "m³", "price_without_tax": "281.55", "price": "290.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04110290", "name": "整毛石", "spec": "不定长", "unit": "m³", "price_without_tax": "252.43", "price": "260.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04130260", "name": "水泥多孔砖", "spec": "190×90×90 MU7.5", "unit": "块", "price_without_tax": "0.42", "price": "0.43", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04130270", "name": "水泥多孔砖", "spec": "190×190×90 MU7.5", "unit": "块", "price_without_tax": "0.52", "price": "0.54", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04130280", "name": "水泥多孔砖", "spec": "240×115×53 MU7.5", "unit": "块", "price_without_tax": "0.38", "price": "0.39", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04130290", "name": "水泥多孔砖", "spec": "240×115×90 MU7.5", "unit": "块", "price_without_tax": "0.58", "price": "0.60", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04130350", "name": "水泥砖", "spec": "240×115×53", "unit": "块", "price_without_tax": "0.38", "price": "0.39", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04130360", "name": "透水砖", "spec": "80×160×80", "unit": "㎡", "price_without_tax": "46.60", "price": "48.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04130370", "name": "透水砖", "spec": "115×230×80", "unit": "㎡", "price_without_tax": "56.31", "price": "58.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04130420", "name": "植草砖 无筋", "spec": "250×250×80", "unit": "㎡", "price_without_tax": "38.84", "price": "40.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "04130430", "name": "植草砖 无筋", "spec": "450×450×80", "unit": "㎡", "price_without_tax": "38.84", "price": "40.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "05050001", "name": "胶合板", "spec": "3厚", "unit": "㎡", "price_without_tax": "8.77", "price": "9.91", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "05050010", "name": "胶合板", "spec": "5厚", "unit": "㎡", "price_without_tax": "12.82", "price": "14.49", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "05050030", "name": "胶合板", "spec": "9厚", "unit": "㎡", "price_without_tax": "21.94", "price": "24.79", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "05050040", "name": "胶合板", "spec": "12厚", "unit": "㎡", "price_without_tax": "26.33", "price": "29.76", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "05050070", "name": "胶合板", "spec": "18厚", "unit": "㎡", "price_without_tax": "42.20", "price": "47.69", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "05090040", "name": "细木工板", "spec": "15厚 夹心板", "unit": "㎡", "price_without_tax": "37.14", "price": "41.97", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "05090050", "name": "细木工板", "spec": "18厚 夹心板", "unit": "㎡", "price_without_tax": "40.51", "price": "45.78", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04010060", "name": "袋装水泥", "spec": "32.5R", "unit": "t", "price_without_tax": "339.65", "price": "383.80", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04010100", "name": "袋装水泥", "spec": "42.5R", "unit": "t", "price_without_tax": "370.93", "price": "419.15", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04010160", "name": "散装水泥", "spec": "42.5", "unit": "t", "price_without_tax": "361.99", "price": "409.05", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04010180", "name": "散装水泥", "spec": "42.5R", "unit": "t", "price_without_tax": "370.93", "price": "419.15", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04030090", "name": "天然河砂", "spec": "", "unit": "m³", "price_without_tax": "146.94", "price": "151.35", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04030172", "name": "机制砂", "spec": "用于混凝土、砂浆", "unit": "m³", "price_without_tax": "107.03", "price": "110.24", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04030174", "name": "机制砂", "spec": "用于回填、垫层", "unit": "m³", "price_without_tax": "70.00", "price": "72.10", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04050200", "name": "碎石", "spec": "Φ5-10 (细石)", "unit": "m³", "price_without_tax": "95.94", "price": "98.82", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04050210", "name": "碎石", "spec": "Φ5-16", "unit": "m³", "price_without_tax": "95.94", "price": "98.82", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04050220", "name": "碎石", "spec": "Φ5-20", "unit": "m³", "price_without_tax": "94.94", "price": "97.79", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04050230", "name": "碎石", "spec": "Φ5-25", "unit": "m³", "price_without_tax": "94.94", "price": "97.79", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04050240", "name": "碎石", "spec": "Φ5-31.5", "unit": "m³", "price_without_tax": "94.94", "price": "97.79", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04050250", "name": "碎石", "spec": "Φ5-40", "unit": "m³", "price_without_tax": "93.95", "price": "96.77", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04050280", "name": "碎石", "spec": "Φ10-20", "unit": "m³", "price_without_tax": "94.94", "price": "97.79", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04050290", "name": "碎石", "spec": "Φ20-40", "unit": "m³", "price_without_tax": "93.95", "price": "96.77", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04050410", "name": "碎石(级配)", "spec": "", "unit": "m³", "price_without_tax": "157.13", "price": "161.84", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04090440", "name": "矿粉", "spec": "S95", "unit": "kg", "price_without_tax": "0.18", "price": "0.20", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04110001", "name": "方整石", "spec": "小规格", "unit": "m³", "price_without_tax": "439.56", "price": "452.74", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04110010", "name": "方整石", "spec": "大规格", "unit": "m³", "price_without_tax": "439.56", "price": "452.74", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04110240", "name": "小乱毛石", "spec": "", "unit": "m³", "price_without_tax": "79.27", "price": "81.65", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04110250", "name": "乱毛石", "spec": "", "unit": "m³", "price_without_tax": "79.27", "price": "81.65", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04110280", "name": "整毛石", "spec": "定长", "unit": "m³", "price_without_tax": "439.56", "price": "452.74", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04110290", "name": "整毛石", "spec": "不定长", "unit": "m³", "price_without_tax": "439.56", "price": "452.74", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04130290", "name": "水泥多孔砖", "spec": "240×115×90 MU7.5", "unit": "块", "price_without_tax": "0.57", "price": "0.59", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04130800", "name": "砂基透水砖", "spec": "通体型500×250×80 Cc30 Cf4", "unit": "㎡", "price_without_tax": "95.06", "price": "107.41", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04150080", "name": "加气混凝土砌块", "spec": "A3.5", "unit": "m³", "price_without_tax": "190.70", "price": "215.49", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04150090", "name": "加气混凝土砌块", "spec": "A5.0", "unit": "m³", "price_without_tax": "208.02", "price": "235.06", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04150300", "name": "聚苯颗粒轻集料混凝土砌块", "spec": "MU5", "unit": "m3", "price_without_tax": "223.29", "price": "229.99", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04150310", "name": "聚苯颗粒轻集料混凝土砌块", "spec": "MU7.5", "unit": "m3", "price_without_tax": "228.30", "price": "235.15", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04290070", "name": "钢筋混凝土PHC管桩", "spec": "Φ400 A95", "unit": "m", "price_without_tax": "115.62", "price": "130.65", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04290080", "name": "钢筋混凝土PHC管桩", "spec": "Φ400 AB95", "unit": "m", "price_without_tax": "124.51", "price": "140.70", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04290110", "name": "钢筋混凝土PHC管桩", "spec": "Φ500 A125", "unit": "m", "price_without_tax": "173.43", "price": "195.98", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04290120", "name": "钢筋混凝土PHC管桩", "spec": "Φ500 AB125", "unit": "m", "price_without_tax": "186.77", "price": "211.05", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04290452", "name": "预制钢筋混凝土叠合梁", "spec": "C30 钢筋200kg/m³", "unit": "m³", "price_without_tax": "2389", "price": "2700", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04290532", "name": "预制钢筋混凝土叠合楼板", "spec": "C30 钢筋160kg/m³", "unit": "m³", "price_without_tax": "2080", "price": "2350", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04290552", "name": "预制钢筋混凝土全预制板式阳台", "spec": "C30 钢筋140kg/m³", "unit": "m³", "price_without_tax": "2106", "price": "2380", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04290562", "name": "预制钢筋混凝土楼梯", "spec": "C30 钢筋110kg/m³", "unit": "m³", "price_without_tax": "2168", "price": "2450", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "04290572", "name": "预制钢筋混凝土空调板", "spec": "C30 钢筋100kg/m³", "unit": "m³", "price_without_tax": "2097", "price": "2370", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "13010001", "name": "调和漆", "spec": "", "unit": "kg", "price_without_tax": "17.33", "price": "19.58", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "13010270", "name": "聚氨酯磁漆", "spec": "", "unit": "kg", "price_without_tax": "22.90", "price": "25.88", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "13010670", "name": "内墙用乳胶漆底漆", "spec": "", "unit": "kg", "price_without_tax": "12.36", "price": "13.97", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "13010671", "name": "外墙用乳胶漆底漆", "spec": "", "unit": "kg", "price_without_tax": "20.49", "price": "23.16", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "13030210", "name": "聚氨酯漆", "spec": "", "unit": "kg", "price_without_tax": "23.79", "price": "26.88", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "13030680", "name": "内墙用乳胶漆面漆", "spec": "", "unit": "kg", "price_without_tax": "20.61", "price": "23.29", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "13030690", "name": "外墙用乳胶漆面漆", "spec": "", "unit": "kg", "price_without_tax": "23.84", "price": "26.93", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "13050070", "name": "防锈漆", "spec": "红丹", "unit": "kg", "price_without_tax": "17.99", "price": "20.33", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "13310001", "name": "改性乳化沥青", "spec": "中裂", "unit": "t", "price_without_tax": "3965", "price": "4480", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "13310040", "name": "石油沥青", "spec": "60-100#", "unit": "kg", "price_without_tax": "3.10", "price": "3.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "13330070", "name": "SBS改性沥青玻璃布胎防水卷材(铝箔)", "spec": "3", "unit": "㎡", "price_without_tax": "19.33", "price": "21.84", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "13330071", "name": "SBS改性沥青玻璃布胎防水卷材(铝箔)", "spec": "4.0", "unit": "㎡", "price_without_tax": "22.34", "price": "25.25", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "13350610", "name": "水泥基渗透结晶防水涂料", "spec": "I型", "unit": "kg", "price_without_tax": "7.12", "price": "8.04", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "14030010", "name": "柴油", "spec": "0#", "unit": "kg", "price_without_tax": "7.90", "price": "8.93", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "14030060", "name": "汽油", "spec": "92#", "unit": "kg", "price_without_tax": "9.79", "price": "11.06", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "漳州市", "date": "2024-01-04"}, +{"number": "01010330", "name": "螺纹钢筋", "spec": "HRB400EΦ12", "unit": "t", "price_without_tax": "3679", "price": "4158", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010340", "name": "螺纹钢筋", "spec": "HRB400EΦ14", "unit": "t", "price_without_tax": "3591", "price": "4058", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010350", "name": "螺纹钢筋", "spec": "HRB400EΦ16", "unit": "t", "price_without_tax": "3557", "price": "4020", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010360", "name": "螺纹钢筋", "spec": "HRB400EΦ18", "unit": "t", "price_without_tax": "3557", "price": "4020", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010370", "name": "螺纹钢筋", "spec": "HRB400EΦ20", "unit": "t", "price_without_tax": "3557", "price": "4020", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010380", "name": "螺纹钢筋", "spec": "HRB400EΦ22", "unit": "t", "price_without_tax": "3557", "price": "4020", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010390", "name": "螺纹钢筋", "spec": "HRB400EΦ25", "unit": "t", "price_without_tax": "3557", "price": "4020", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010400", "name": "螺纹钢筋", "spec": "HRB400EΦ28", "unit": "t", "price_without_tax": "3662", "price": "4138", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010410", "name": "螺纹钢筋", "spec": "HRB400EΦ32", "unit": "t", "price_without_tax": "3662", "price": "4138", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010420", "name": "螺纹钢筋", "spec": "HRB500EΦ12", "unit": "t", "price_without_tax": "3856", "price": "4358", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010430", "name": "螺纹钢筋", "spec": "HRB500EΦ14", "unit": "t", "price_without_tax": "3768", "price": "4258", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010440", "name": "螺纹钢筋", "spec": "HRB500EΦ16", "unit": "t", "price_without_tax": "3734", "price": "4220", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010450", "name": "螺纹钢筋", "spec": "HRB500EΦ18", "unit": "t", "price_without_tax": "3734", "price": "4220", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010460", "name": "螺纹钢筋", "spec": "HRB500EΦ20", "unit": "t", "price_without_tax": "3690", "price": "4170", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010470", "name": "螺纹钢筋", "spec": "HRB500EΦ22", "unit": "t", "price_without_tax": "3734", "price": "4220", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010480", "name": "螺纹钢筋", "spec": "HRB500EΦ25", "unit": "t", "price_without_tax": "3734", "price": "4220", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010550", "name": "线材", "spec": "HPB300Φ6.5", "unit": "t", "price_without_tax": "3973", "price": "4490", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010560", "name": "线材", "spec": "HPB300Φ8", "unit": "t", "price_without_tax": "3956", "price": "4470", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010570", "name": "线材", "spec": "HPB300Φ10", "unit": "t", "price_without_tax": "3956", "price": "4470", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010580", "name": "线材", "spec": "HRB400EΦ6", "unit": "t", "price_without_tax": "4315", "price": "4876", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010590", "name": "线材", "spec": "HRB400EΦ8", "unit": "t", "price_without_tax": "4010", "price": "4531", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010600", "name": "线材", "spec": "HRB400EΦ10", "unit": "t", "price_without_tax": "4010", "price": "4531", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010730", "name": "圆钢筋", "spec": "HPB300Φ12", "unit": "t", "price_without_tax": "3930", "price": "4441", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01010740", "name": "圆钢筋", "spec": "HPB300Φ14", "unit": "t", "price_without_tax": "3859", "price": "4361", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01130260", "name": "热轧扁钢", "spec": "", "unit": "t", "price_without_tax": "4073", "price": "4603", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01170150", "name": "热轧工字钢", "spec": "", "unit": "t", "price_without_tax": "4130", "price": "4667", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01190170", "name": "热轧槽钢", "spec": "", "unit": "t", "price_without_tax": "4013", "price": "4535", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01210380", "name": "热轧角钢", "spec": "", "unit": "t", "price_without_tax": "4173", "price": "4715", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01290370", "name": "钢板(Q235)", "spec": "δ14-20", "unit": "t", "price_without_tax": "3859", "price": "4361", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01290380", "name": "钢板(Q235)", "spec": "δ22-28", "unit": "t", "price_without_tax": "3850", "price": "4350", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01290390", "name": "钢板(Q235)", "spec": "δ30-40", "unit": "t", "price_without_tax": "3872", "price": "4375", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01290420", "name": "钢板(Q235)", "spec": "δ6", "unit": "t", "price_without_tax": "3844", "price": "4343", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01290430", "name": "钢板(Q235)", "spec": "δ8", "unit": "t", "price_without_tax": "3844", "price": "4343", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01290440", "name": "钢板(Q235)", "spec": "δ10", "unit": "t", "price_without_tax": "3844", "price": "4343", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01290450", "name": "钢板(Q235)", "spec": "δ12", "unit": "t", "price_without_tax": "3844", "price": "4343", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01291070", "name": "热镀锌钢板", "spec": "δ0.5", "unit": "t", "price_without_tax": "5183", "price": "5857", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01291080", "name": "热镀锌钢板", "spec": "δ0.75", "unit": "t", "price_without_tax": "5183", "price": "5857", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01291090", "name": "热镀锌钢板", "spec": "δ1", "unit": "t", "price_without_tax": "5006", "price": "5657", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01291100", "name": "热镀锌钢板", "spec": "δ1.2", "unit": "t", "price_without_tax": "5006", "price": "5657", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "01291510", "name": "热轧薄钢板(Q235)", "spec": "<δ2.0", "unit": "t", "price_without_tax": "4056", "price": "4583", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "14030010", "name": "柴油", "spec": "0#", "unit": "kg", "price_without_tax": "8.24", "price": "9.32", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "14030060", "name": "汽油", "spec": "92#", "unit": "kg", "price_without_tax": "9.63", "price": "10.88", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "龙岩市", "date": "2024-01-04"}, +{"number": "05030211", "name": "杉木锯材", "spec": "Ф14-18 4m", "unit": "m³", "price_without_tax": "1761", "price": "1990", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "05030221", "name": "松木锯材", "spec": "Ф20-28 4m", "unit": "m³", "price_without_tax": "1258", "price": "1422", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "05050010", "name": "胶合板", "spec": "5厚", "unit": "㎡", "price_without_tax": "16.45", "price": "18.59", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "05050030", "name": "胶合板", "spec": "9厚", "unit": "㎡", "price_without_tax": "22.41", "price": "25.33", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "05050040", "name": "胶合板", "spec": "12厚", "unit": "㎡", "price_without_tax": "25.35", "price": "28.64", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "05050060", "name": "胶合板", "spec": "15厚", "unit": "㎡", "price_without_tax": "30.68", "price": "34.67", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "05050070", "name": "胶合板", "spec": "18厚", "unit": "㎡", "price_without_tax": "36.16", "price": "40.86", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "05090050", "name": "细木工板", "spec": "18厚 夹心板", "unit": "㎡", "price_without_tax": "42.69", "price": "48.24", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01000020", "name": "型钢", "spec": "综合", "unit": "t", "price_without_tax": "4072", "price": "4601", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010330", "name": "螺纹钢筋", "spec": "HRB400EΦ12", "unit": "t", "price_without_tax": "3801", "price": "4295", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010340", "name": "螺纹钢筋", "spec": "HRB400EΦ14", "unit": "t", "price_without_tax": "3700", "price": "4181", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010350", "name": "螺纹钢筋", "spec": "HRB400EΦ16", "unit": "t", "price_without_tax": "3574", "price": "4039", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010360", "name": "螺纹钢筋", "spec": "HRB400EΦ18", "unit": "t", "price_without_tax": "3559", "price": "4021", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010370", "name": "螺纹钢筋", "spec": "HRB400EΦ20", "unit": "t", "price_without_tax": "3570", "price": "4034", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010380", "name": "螺纹钢筋", "spec": "HRB400EΦ22", "unit": "t", "price_without_tax": "3587", "price": "4054", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010390", "name": "螺纹钢筋", "spec": "HRB400EΦ25", "unit": "t", "price_without_tax": "3623", "price": "4094", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010400", "name": "螺纹钢筋", "spec": "HRB400EΦ28", "unit": "t", "price_without_tax": "3688", "price": "4168", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010410", "name": "螺纹钢筋", "spec": "HRB400EΦ32", "unit": "t", "price_without_tax": "3741", "price": "4228", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010412", "name": "螺纹钢筋", "spec": "HRB400E Φ36", "unit": "t", "price_without_tax": "3874", "price": "4378", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010414", "name": "螺纹钢筋", "spec": "HRB400E Φ40", "unit": "t", "price_without_tax": "3874", "price": "4378", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010416", "name": "螺纹钢筋", "spec": "HRB400E Φ50", "unit": "t", "price_without_tax": "4051", "price": "4578", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010420", "name": "螺纹钢筋", "spec": "HRB500EΦ12", "unit": "t", "price_without_tax": "4066", "price": "4595", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010430", "name": "螺纹钢筋", "spec": "HRB500EΦ14", "unit": "t", "price_without_tax": "3966", "price": "4481", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010440", "name": "螺纹钢筋", "spec": "HRB500EΦ16", "unit": "t", "price_without_tax": "3840", "price": "4339", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010450", "name": "螺纹钢筋", "spec": "HRB500EΦ18", "unit": "t", "price_without_tax": "3824", "price": "4321", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010460", "name": "螺纹钢筋", "spec": "HRB500EΦ20", "unit": "t", "price_without_tax": "3835", "price": "4334", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010470", "name": "螺纹钢筋", "spec": "HRB500EΦ22", "unit": "t", "price_without_tax": "3853", "price": "4354", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010480", "name": "螺纹钢筋", "spec": "HRB500EΦ25", "unit": "t", "price_without_tax": "3888", "price": "4394", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010490", "name": "螺纹钢筋", "spec": "HRB500EΦ28", "unit": "t", "price_without_tax": "3954", "price": "4468", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010500", "name": "螺纹钢筋", "spec": "HRB500EΦ32", "unit": "t", "price_without_tax": "4007", "price": "4528", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010502", "name": "螺纹钢筋", "spec": "HRB500E Φ36", "unit": "t", "price_without_tax": "4139", "price": "4678", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010504", "name": "螺纹钢筋", "spec": "HRB500E Φ40", "unit": "t", "price_without_tax": "4139", "price": "4678", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010506", "name": "螺纹钢筋", "spec": "HRB500E Φ50", "unit": "t", "price_without_tax": "4316", "price": "4878", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010516", "name": "线材", "spec": "HRB500E Φ6", "unit": "t", "price_without_tax": "4492", "price": "5076", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010518", "name": "线材", "spec": "HRB500E Φ8", "unit": "t", "price_without_tax": "4291", "price": "4849", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010520", "name": "线材", "spec": "HRB500EΦ10", "unit": "t", "price_without_tax": "4287", "price": "4844", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010548", "name": "线材", "spec": "HPB300Φ6", "unit": "t", "price_without_tax": "4097", "price": "4630", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010560", "name": "线材", "spec": "HPB300Φ8", "unit": "t", "price_without_tax": "3954", "price": "4468", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010570", "name": "线材", "spec": "HPB300Φ10", "unit": "t", "price_without_tax": "3954", "price": "4468", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010580", "name": "线材", "spec": "HRB400EΦ6", "unit": "t", "price_without_tax": "4227", "price": "4776", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010590", "name": "线材", "spec": "HRB400EΦ8", "unit": "t", "price_without_tax": "4025", "price": "4549", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010600", "name": "线材", "spec": "HRB400EΦ10", "unit": "t", "price_without_tax": "4021", "price": "4544", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010730", "name": "圆钢筋", "spec": "HPB300Φ12", "unit": "t", "price_without_tax": "4042", "price": "4568", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010740", "name": "圆钢筋", "spec": "HPB300Φ14", "unit": "t", "price_without_tax": "4042", "price": "4568", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01070001", "name": "钢绞线", "spec": "", "unit": "t", "price_without_tax": "4558", "price": "5150", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01070040", "name": "无粘结钢绞线", "spec": "", "unit": "t", "price_without_tax": "5000", "price": "5650", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01130200", "name": "镀锌扁钢", "spec": "冷镀锌", "unit": "t", "price_without_tax": "5218", "price": "5896", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01130260", "name": "热轧扁钢", "spec": "", "unit": "t", "price_without_tax": "4103", "price": "4636", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13010001", "name": "调和漆", "spec": "", "unit": "kg", "price_without_tax": "9.96", "price": "11.26", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13010050", "name": "醇酸磁漆", "spec": "", "unit": "kg", "price_without_tax": "14.32", "price": "16.18", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13010235", "name": "环氧云铁中间漆", "spec": "", "unit": "kg", "price_without_tax": "22.25", "price": "25.15", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13010270", "name": "聚氨酯磁漆", "spec": "", "unit": "kg", "price_without_tax": "19.61", "price": "22.16", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13010550", "name": "醇酸调和漆", "spec": "各色", "unit": "kg", "price_without_tax": "10.67", "price": "12.06", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13010640", "name": "丙烯酸聚氨酯底漆", "spec": "", "unit": "kg", "price_without_tax": "15.16", "price": "17.14", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13010650", "name": "丙烯酸聚氨酯中间漆", "spec": "", "unit": "kg", "price_without_tax": "16.59", "price": "18.74", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13010670", "name": "内墙用乳胶漆底漆", "spec": "", "unit": "kg", "price_without_tax": "10.18", "price": "11.51", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13010671", "name": "外墙用乳胶漆底漆", "spec": "", "unit": "kg", "price_without_tax": "16.85", "price": "19.04", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13030200", "name": "环氧富锌漆", "spec": "", "unit": "kg", "price_without_tax": "31.57", "price": "35.68", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13030210", "name": "聚氨酯漆", "spec": "", "unit": "kg", "price_without_tax": "16.54", "price": "18.69", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13030660", "name": "真石漆", "spec": "", "unit": "kg", "price_without_tax": "6.23", "price": "7.04", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13030670", "name": "真石面漆", "spec": "", "unit": "kg", "price_without_tax": "16.81", "price": "18.99", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13030680", "name": "内墙用乳胶漆面漆", "spec": "", "unit": "kg", "price_without_tax": "10.54", "price": "11.91", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13030690", "name": "外墙用乳胶漆面漆", "spec": "", "unit": "kg", "price_without_tax": "18.72", "price": "21.16", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13050001", "name": "防火涂料", "spec": "", "unit": "kg", "price_without_tax": "8.54", "price": "9.65", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13050070", "name": "防锈漆", "spec": "红丹", "unit": "kg", "price_without_tax": "12.36", "price": "13.97", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13050280", "name": "JS聚合物水泥基粉料", "spec": "", "unit": "kg", "price_without_tax": "3.16", "price": "3.57", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13050290", "name": "JS聚合物水泥基液料", "spec": "", "unit": "kg", "price_without_tax": "11.19", "price": "12.65", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13310001", "name": "改性乳化沥青", "spec": "中裂", "unit": "t", "price_without_tax": "4580", "price": "5176", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13310040", "name": "石油沥青", "spec": "60-100#", "unit": "kg", "price_without_tax": "3.87", "price": "4.37", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13330070", "name": "SBS改性沥青玻璃布胎防水卷材(铝箔)", "spec": "3", "unit": "㎡", "price_without_tax": "20.94", "price": "23.67", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13330071", "name": "SBS改性沥青玻璃布胎防水卷材(铝箔)", "spec": "4.0", "unit": "㎡", "price_without_tax": "33.43", "price": "37.78", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13330190", "name": "耐根穿刺复合铜胎基SBS改性沥青卷材", "spec": "3mm", "unit": "㎡", "price_without_tax": "63.17", "price": "71.39", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13330191", "name": "耐根穿刺复合铜胎基SBS改性沥青卷材", "spec": "4.0", "unit": "㎡", "price_without_tax": "71.17", "price": "80.42", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13330200", "name": "高聚物改性沥青自粘卷材", "spec": "3mm", "unit": "㎡", "price_without_tax": "20.19", "price": "22.81", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13330208", "name": "高分子自粘胶膜卷材", "spec": "1.2", "unit": "㎡", "price_without_tax": "18.23", "price": "20.60", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13330210", "name": "高分子自粘胶膜卷材", "spec": "3mm", "unit": "㎡", "price_without_tax": "26.32", "price": "29.74", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13330240", "name": "聚乙烯丙纶防水卷材", "spec": "1.5mm厚", "unit": "㎡", "price_without_tax": "9.61", "price": "10.85", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13330275", "name": "弹性体SBS改性沥青防水卷材(聚酯胎)", "spec": "3.0", "unit": "㎡", "price_without_tax": "16.05", "price": "18.14", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13330360", "name": "自粘聚合物改性沥青防水卷材", "spec": "", "unit": "㎡", "price_without_tax": "24.60", "price": "27.80", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13330365", "name": "RSA耐盐碱型聚合物改性沥青防水卷材", "spec": "4.0", "unit": "㎡", "price_without_tax": "26.86", "price": "30.35", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13330405", "name": "弹性体SBS改性沥青化学阻根耐根穿刺防水卷材", "spec": "4.0", "unit": "㎡", "price_without_tax": "45.09", "price": "50.95", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13330460", "name": "TPO热塑性聚烯烃类防水卷材", "spec": "1.2", "unit": "㎡", "price_without_tax": "31.75", "price": "35.88", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13350010", "name": "聚氨酯防水涂料", "spec": "", "unit": "kg", "price_without_tax": "10.05", "price": "11.36", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13350610", "name": "水泥基渗透结晶防水涂料", "spec": "I型", "unit": "kg", "price_without_tax": "6.45", "price": "7.29", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13350620", "name": "JS防水涂料", "spec": "", "unit": "kg", "price_without_tax": "6.45", "price": "7.29", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "13350630", "name": "聚合物复合改性沥青防水涂料", "spec": "", "unit": "kg", "price_without_tax": "6.36", "price": "7.19", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "14030010", "name": "柴油", "spec": "0#", "unit": "kg", "price_without_tax": "8.23", "price": "9.30", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "14030060", "name": "汽油", "spec": "92#", "unit": "kg", "price_without_tax": "9.73", "price": "10.99", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "14351350", "name": "双组份美缝剂", "spec": "400g", "unit": "组", "price_without_tax": "22.23", "price": "25.13", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04010040", "name": "袋装水泥", "spec": "32.5", "unit": "t", "price_without_tax": "309.73", "price": "350.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04010060", "name": "袋装水泥", "spec": "32.5R", "unit": "t", "price_without_tax": "327.43", "price": "370.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04010080", "name": "袋装水泥", "spec": "42.5", "unit": "t", "price_without_tax": "345.13", "price": "390.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04010100", "name": "袋装水泥", "spec": "42.5R", "unit": "t", "price_without_tax": "362.83", "price": "410.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04010160", "name": "散装水泥", "spec": "42.5", "unit": "t", "price_without_tax": "296.46", "price": "335.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04010180", "name": "散装水泥", "spec": "42.5R", "unit": "t", "price_without_tax": "314.16", "price": "355.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04010200", "name": "散装水泥", "spec": "52.5", "unit": "t", "price_without_tax": "336.28", "price": "380.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04010220", "name": "散装水泥", "spec": "52.5R", "unit": "t", "price_without_tax": "353.98", "price": "400.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04030090", "name": "天然河砂", "spec": "", "unit": "m³", "price_without_tax": "142.18", "price": "146.45", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04030172", "name": "机制砂", "spec": "用于混凝土、砂浆", "unit": "m³", "price_without_tax": "96.10", "price": "98.98", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04030174", "name": "机制砂", "spec": "用于回填、垫层", "unit": "m³", "price_without_tax": "73.54", "price": "75.75", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04030260", "name": "再生细骨料", "spec": "Φ0-4.75", "unit": "m³", "price_without_tax": "80.44", "price": "90.90", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04050200", "name": "碎石", "spec": "Φ5-10 (细石)", "unit": "m³", "price_without_tax": "74.52", "price": "76.76", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04050210", "name": "碎石", "spec": "Φ5-16", "unit": "m³", "price_without_tax": "74.52", "price": "76.76", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04050220", "name": "碎石", "spec": "Φ5-20", "unit": "m³", "price_without_tax": "74.52", "price": "76.76", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04050230", "name": "碎石", "spec": "Φ5-25", "unit": "m³", "price_without_tax": "74.52", "price": "76.76", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04050240", "name": "碎石", "spec": "Φ5-31.5", "unit": "m³", "price_without_tax": "74.52", "price": "76.76", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04050250", "name": "碎石", "spec": "Φ5-40", "unit": "m³", "price_without_tax": "74.52", "price": "76.76", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04050260", "name": "碎石", "spec": "Φ5-80", "unit": "m³", "price_without_tax": "74.52", "price": "76.76", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04050280", "name": "碎石", "spec": "Φ10-20", "unit": "m³", "price_without_tax": "74.52", "price": "76.76", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04050290", "name": "碎石", "spec": "Φ20-40", "unit": "m³", "price_without_tax": "74.52", "price": "76.76", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04050320", "name": "碎石", "spec": "Φ40以上", "unit": "m³", "price_without_tax": "74.52", "price": "76.76", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04050410", "name": "碎石(级配)", "spec": "", "unit": "m³", "price_without_tax": "74.52", "price": "76.76", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04050610", "name": "再生粗骨料", "spec": "Φ10-20 I类", "unit": "m³", "price_without_tax": "67.04", "price": "75.75", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04090020", "name": "粉煤灰", "spec": "Ⅰ级", "unit": "kg", "price_without_tax": "0.29", "price": "0.32", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04090030", "name": "粉煤灰", "spec": "Ⅱ级", "unit": "kg", "price_without_tax": "0.23", "price": "0.26", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04090440", "name": "矿粉", "spec": "S95", "unit": "kg", "price_without_tax": "0.38", "price": "0.43", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04110200", "name": "片石", "spec": "", "unit": "m³", "price_without_tax": "73.18", "price": "75.38", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04110240", "name": "小乱毛石", "spec": "", "unit": "m³", "price_without_tax": "63.42", "price": "65.33", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010330", "name": "螺纹钢筋", "spec": "HRB400EΦ12", "unit": "t", "price_without_tax": "3905", "price": "4413", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04110250", "name": "乱毛石", "spec": "", "unit": "m³", "price_without_tax": "63.42", "price": "65.33", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04110300", "name": "石质路沿石", "spec": "200×100×1000", "unit": "m", "price_without_tax": "35.32", "price": "36.38", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04110310", "name": "石质路沿石", "spec": "300×150×1000", "unit": "m", "price_without_tax": "78.25", "price": "80.60", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04110320", "name": "石质路沿石", "spec": "350×150×1000", "unit": "m", "price_without_tax": "87.82", "price": "90.45", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04110330", "name": "石质路沿石", "spec": "400×150×1000", "unit": "m", "price_without_tax": "104.40", "price": "107.54", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04110340", "name": "石质路沿石", "spec": "450×150×1000", "unit": "m", "price_without_tax": "114.16", "price": "117.59", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010340", "name": "螺纹钢筋", "spec": "HRB400EΦ14", "unit": "t", "price_without_tax": "3834", "price": "4333", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01010350", "name": "螺纹钢筋", "spec": "HRB400EΦ16", "unit": "t", "price_without_tax": "3772", "price": "4262", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01010360", "name": "螺纹钢筋", "spec": "HRB400EΦ18", "unit": "t", "price_without_tax": "3772", "price": "4262", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04110350", "name": "石质路沿石", "spec": "350×180×1000", "unit": "m", "price_without_tax": "106.35", "price": "109.55", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04110360", "name": "石质路沿石", "spec": "400×180×1000", "unit": "m", "price_without_tax": "125.19", "price": "128.94", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04130270", "name": "水泥多孔砖", "spec": "190×190×90 MU7.5", "unit": "块", "price_without_tax": "0.72", "price": "0.74", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010370", "name": "螺纹钢筋", "spec": "HRB400EΦ20", "unit": "t", "price_without_tax": "3772", "price": "4262", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01010380", "name": "螺纹钢筋", "spec": "HRB400EΦ22", "unit": "t", "price_without_tax": "3772", "price": "4262", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01010390", "name": "螺纹钢筋", "spec": "HRB400EΦ25", "unit": "t", "price_without_tax": "3772", "price": "4262", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01010400", "name": "螺纹钢筋", "spec": "HRB400EΦ28", "unit": "t", "price_without_tax": "3896", "price": "4403", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01010410", "name": "螺纹钢筋", "spec": "HRB400EΦ32", "unit": "t", "price_without_tax": "3896", "price": "4403", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04130290", "name": "水泥多孔砖", "spec": "240×115×90 MU7.5", "unit": "块", "price_without_tax": "0.69", "price": "0.71", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "04130350", "name": "水泥砖", "spec": "240×115×53", "unit": "块", "price_without_tax": "0.44", "price": "0.45", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "三明市", "date": "2024-01-04"}, +{"number": "01010550", "name": "线材", "spec": "HPB300Φ6.5", "unit": "t", "price_without_tax": "4006", "price": "4527", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01010560", "name": "线材", "spec": "HPB300Φ8", "unit": "t", "price_without_tax": "4227", "price": "4777", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01010570", "name": "线材", "spec": "HPB300Φ10", "unit": "t", "price_without_tax": "4227", "price": "4777", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01130260", "name": "热轧扁钢", "spec": "", "unit": "t", "price_without_tax": "3860", "price": "4361", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01170150", "name": "热轧工字钢", "spec": "", "unit": "t", "price_without_tax": "4105", "price": "4639", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01190160", "name": "镀锌槽钢", "spec": "冷镀锌", "unit": "t", "price_without_tax": "4838", "price": "5467", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01190170", "name": "热轧槽钢", "spec": "", "unit": "t", "price_without_tax": "3971", "price": "4487", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01210380", "name": "热轧角钢", "spec": "", "unit": "t", "price_without_tax": "3942", "price": "4454", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01290390", "name": "钢板(Q235)", "spec": "δ30-40", "unit": "t", "price_without_tax": "3940", "price": "4452", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01290400", "name": "钢板(Q235)", "spec": "δ42-50", "unit": "t", "price_without_tax": "3940", "price": "4452", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01290420", "name": "钢板(Q235)", "spec": "δ6", "unit": "t", "price_without_tax": "3933", "price": "4444", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01290430", "name": "钢板(Q235)", "spec": "δ8", "unit": "t", "price_without_tax": "3933", "price": "4444", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01290440", "name": "钢板(Q235)", "spec": "δ10", "unit": "t", "price_without_tax": "3933", "price": "4444", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01290450", "name": "钢板(Q235)", "spec": "δ12", "unit": "t", "price_without_tax": "3933", "price": "4444", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01290840", "name": "不锈钢板", "spec": "材质201", "unit": "t", "price_without_tax": "9292", "price": "10500", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01290850", "name": "不锈钢板", "spec": "材质304", "unit": "t", "price_without_tax": "15575", "price": "17600", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01291070", "name": "热镀锌钢板", "spec": "δ0.5", "unit": "t", "price_without_tax": "4941", "price": "5583", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01291090", "name": "热镀锌钢板", "spec": "δ1", "unit": "t", "price_without_tax": "4673", "price": "5281", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01291510", "name": "热轧薄钢板(Q235)", "spec": "<δ2.0", "unit": "t", "price_without_tax": "4212", "price": "4760", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01510070", "name": "铝合金型材", "spec": "氧化白材", "unit": "t", "price_without_tax": "20796", "price": "23500", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04010060", "name": "袋装水泥", "spec": "32.5R", "unit": "t", "price_without_tax": "393.81", "price": "445.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04010080", "name": "袋装水泥", "spec": "42.5", "unit": "t", "price_without_tax": "405.31", "price": "458.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04010160", "name": "散装水泥", "spec": "42.5", "unit": "t", "price_without_tax": "369.91", "price": "418.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04010200", "name": "散装水泥", "spec": "52.5", "unit": "t", "price_without_tax": "423.01", "price": "478.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04030090", "name": "天然河砂", "spec": "", "unit": "m³", "price_without_tax": "174.76", "price": "180.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04030172", "name": "机制砂", "spec": "用于混凝土、砂浆", "unit": "m³", "price_without_tax": "131.07", "price": "135.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04050220", "name": "碎石", "spec": "Φ5-20", "unit": "m³", "price_without_tax": "121.36", "price": "125.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04050290", "name": "碎石", "spec": "Φ20-40", "unit": "m³", "price_without_tax": "116.50", "price": "120.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04110250", "name": "乱毛石", "spec": "", "unit": "m³", "price_without_tax": "67.96", "price": "70.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04110280", "name": "整毛石", "spec": "定长", "unit": "m³", "price_without_tax": "271.84", "price": "280.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04110290", "name": "整毛石", "spec": "不定长", "unit": "m³", "price_without_tax": "194.17", "price": "200.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04130260", "name": "水泥多孔砖", "spec": "190×90×90 MU7.5", "unit": "块", "price_without_tax": "0.46", "price": "0.47", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04130270", "name": "水泥多孔砖", "spec": "190×190×90 MU7.5", "unit": "块", "price_without_tax": "0.66", "price": "0.68", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04130280", "name": "水泥多孔砖", "spec": "240×115×53 MU7.5", "unit": "块", "price_without_tax": "0.36", "price": "0.37", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04130290", "name": "水泥多孔砖", "spec": "240×115×90 MU7.5", "unit": "块", "price_without_tax": "0.62", "price": "0.64", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04130350", "name": "水泥砖", "spec": "240×115×53", "unit": "块", "price_without_tax": "0.39", "price": "0.40", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04130360", "name": "透水砖", "spec": "80×160×80", "unit": "㎡", "price_without_tax": "33.98", "price": "35.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04130370", "name": "透水砖", "spec": "115×230×80", "unit": "㎡", "price_without_tax": "38.84", "price": "40.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04130420", "name": "植草砖 无筋", "spec": "250×250×80", "unit": "㎡", "price_without_tax": "31.07", "price": "32.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04130430", "name": "植草砖 无筋", "spec": "450×450×80", "unit": "㎡", "price_without_tax": "34.95", "price": "36.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04150080", "name": "加气混凝土砌块", "spec": "A3.5", "unit": "m³", "price_without_tax": "265.49", "price": "300.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04150090", "name": "加气混凝土砌块", "spec": "A5.0", "unit": "m³", "price_without_tax": "283.19", "price": "320.00", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "", "name": "", "spec": "C30 钢筋200kg/m³", "unit": "m³", "price_without_tax": "2566", "price": "2900", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "", "name": "", "spec": "C30 钢筋200kg/m³", "unit": "m³", "price_without_tax": "2566", "price": "2900", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "", "name": "", "spec": "C30 钢筋160kg/m³", "unit": "m³", "price_without_tax": "2212", "price": "2500", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "", "name": "", "spec": "C30 钢筋110kg/m³", "unit": "m³", "price_without_tax": "2212", "price": "2500", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "14030010", "name": "柴油", "spec": "0#", "unit": "kg", "price_without_tax": "8.15", "price": "9.21", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "14030060", "name": "汽油", "spec": "92#", "unit": "kg", "price_without_tax": "9.80", "price": "11.08", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "13010001", "name": "调和漆", "spec": "", "unit": "kg", "price_without_tax": "11.50", "price": "13.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "13010670", "name": "内墙用乳胶漆底漆", "spec": "", "unit": "kg", "price_without_tax": "7.52", "price": "8.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "13010671", "name": "外墙用乳胶漆底漆", "spec": "", "unit": "kg", "price_without_tax": "6.64", "price": "7.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "13030210", "name": "聚氨酯漆", "spec": "", "unit": "kg", "price_without_tax": "5.75", "price": "6.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "13030670", "name": "真石面漆", "spec": "", "unit": "kg", "price_without_tax": "15.93", "price": "18.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "13030680", "name": "内墙用乳胶漆面漆", "spec": "", "unit": "kg", "price_without_tax": "17.70", "price": "20.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "13050001", "name": "防火涂料", "spec": "", "unit": "kg", "price_without_tax": "8.41", "price": "9.50", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "13050280", "name": "JS聚合物水泥基粉料", "spec": "", "unit": "kg", "price_without_tax": "8.85", "price": "10.00", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "13310040", "name": "石油沥青", "spec": "60-100#", "unit": "kg", "price_without_tax": "3.95", "price": "4.46", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "04010060", "name": "袋装水泥", "spec": "32.5R", "unit": "t", "price_without_tax": "415.20", "price": "469.17", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04010080", "name": "袋装水泥", "spec": "42.5", "unit": "t", "price_without_tax": "438.21", "price": "495.17", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04010160", "name": "散装水泥", "spec": "42.5", "unit": "t", "price_without_tax": "414.31", "price": "468.17", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04010180", "name": "散装水泥", "spec": "42.5R", "unit": "t", "price_without_tax": "424.05", "price": "479.17", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04010200", "name": "散装水泥", "spec": "52.5", "unit": "t", "price_without_tax": "453.26", "price": "512", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04030090", "name": "天然河砂", "spec": "", "unit": "m³", "price_without_tax": "201.02", "price": "207.05", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04030172", "name": "机制砂", "spec": "用于混凝土、砂浆", "unit": "m³", "price_without_tax": "131.21", "price": "135.15", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04050200", "name": "碎石", "spec": "Φ5-10 (细石)", "unit": "m³", "price_without_tax": "122.29", "price": "125.96", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04050210", "name": "碎石", "spec": "Φ5-16", "unit": "m³", "price_without_tax": "117.48", "price": "121.01", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04050220", "name": "碎石", "spec": "Φ5-20", "unit": "m³", "price_without_tax": "117.48", "price": "121.01", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04050230", "name": "碎石", "spec": "Φ5-25", "unit": "m³", "price_without_tax": "117.48", "price": "121.01", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04050240", "name": "碎石", "spec": "Φ5-31.5", "unit": "m³", "price_without_tax": "114.54", "price": "117.98", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04050250", "name": "碎石", "spec": "Φ5-40", "unit": "m³", "price_without_tax": "114.54", "price": "117.98", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04050260", "name": "碎石", "spec": "Φ5-80", "unit": "m³", "price_without_tax": "114.54", "price": "117.98", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04050280", "name": "碎石", "spec": "Φ10-20", "unit": "m³", "price_without_tax": "114.54", "price": "117.98", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04050290", "name": "碎石", "spec": "Φ20-40", "unit": "m³", "price_without_tax": "114.54", "price": "117.98", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04050320", "name": "碎石", "spec": "Φ40以上", "unit": "m³", "price_without_tax": "114.54", "price": "117.98", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04110045", "name": "旧厝方整石", "spec": "500-550*180-200*200", "unit": "m3", "price_without_tax": "381.99", "price": "393.45", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04110200", "name": "片石", "spec": "", "unit": "m³", "price_without_tax": "91.50", "price": "94.24", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04110240", "name": "小乱毛石", "spec": "", "unit": "m³", "price_without_tax": "93.46", "price": "96.26", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04110250", "name": "乱毛石", "spec": "", "unit": "m³", "price_without_tax": "91.50", "price": "94.24", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04110280", "name": "整毛石", "spec": "定长", "unit": "m³", "price_without_tax": "353.01", "price": "363.60", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04110290", "name": "整毛石", "spec": "不定长", "unit": "m³", "price_without_tax": "343.20", "price": "353.50", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04130050", "name": "粉煤灰砖", "spec": "240×115×53 MU10", "unit": "块", "price_without_tax": "0.34", "price": "0.35", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04130260", "name": "水泥多孔砖", "spec": "190×90×90 MU7.5", "unit": "块", "price_without_tax": "0.44", "price": "0.45", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04130270", "name": "水泥多孔砖", "spec": "190×190×90 MU7.5", "unit": "块", "price_without_tax": "0.64", "price": "0.66", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04130280", "name": "水泥多孔砖", "spec": "240×115×53 MU7.5", "unit": "块", "price_without_tax": "0.34", "price": "0.35", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04130290", "name": "水泥多孔砖", "spec": "240×115×90 MU7.5", "unit": "块", "price_without_tax": "0.64", "price": "0.66", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04130350", "name": "水泥砖", "spec": "240×115×53", "unit": "块", "price_without_tax": "0.34", "price": "0.35", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04130360", "name": "透水砖", "spec": "80×160×80", "unit": "㎡", "price_without_tax": "63.74", "price": "65.65", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04130370", "name": "透水砖", "spec": "115×230×80", "unit": "㎡", "price_without_tax": "73.54", "price": "75.75", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04150080", "name": "加气混凝土砌块", "spec": "A3.5", "unit": "m³", "price_without_tax": "253.67", "price": "286.65", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04150090", "name": "加气混凝土砌块", "spec": "A5.0", "unit": "m³", "price_without_tax": "252.54", "price": "285.37", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04290070", "name": "钢筋混凝土PHC管桩", "spec": "Φ400 A95", "unit": "m", "price_without_tax": "170.68", "price": "192.87", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04290080", "name": "钢筋混凝土PHC管桩", "spec": "Φ400 AB95", "unit": "m", "price_without_tax": "179.47", "price": "202.80", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04290110", "name": "钢筋混凝土PHC管桩", "spec": "Φ500 A125", "unit": "m", "price_without_tax": "223.23", "price": "252.26", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "04290120", "name": "钢筋混凝土PHC管桩", "spec": "Φ500 AB125", "unit": "m", "price_without_tax": "231.99", "price": "262.15", "category": "04水泥、砖瓦灰砂", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "05050010", "name": "胶合板", "spec": "5厚", "unit": "㎡", "price_without_tax": "13.45", "price": "15.20", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "05050030", "name": "胶合板", "spec": "9厚", "unit": "㎡", "price_without_tax": "19.47", "price": "22.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01010330", "name": "螺纹钢筋", "spec": "HRB400EΦ12", "unit": "t", "price_without_tax": "3805", "price": "4300", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "05050040", "name": "胶合板", "spec": "12厚", "unit": "㎡", "price_without_tax": "23.89", "price": "27.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "05050060", "name": "胶合板", "spec": "15厚", "unit": "㎡", "price_without_tax": "30.97", "price": "35.00", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "05090030", "name": "细木工板", "spec": "12厚 夹心板", "unit": "㎡", "price_without_tax": "22.57", "price": "25.50", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "05090040", "name": "细木工板", "spec": "15厚 夹心板", "unit": "㎡", "price_without_tax": "25.04", "price": "28.30", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "05090050", "name": "细木工板", "spec": "18厚 夹心板", "unit": "㎡", "price_without_tax": "28.85", "price": "32.60", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "南平市", "date": "2024-01-04"}, +{"number": "01010340", "name": "螺纹钢筋", "spec": "HRB400EΦ14", "unit": "t", "price_without_tax": "3761", "price": "4250", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010350", "name": "螺纹钢筋", "spec": "HRB400EΦ16", "unit": "t", "price_without_tax": "3726", "price": "4210", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010360", "name": "螺纹钢筋", "spec": "HRB400EΦ18", "unit": "t", "price_without_tax": "3726", "price": "4210", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010370", "name": "螺纹钢筋", "spec": "HRB400EΦ20", "unit": "t", "price_without_tax": "3726", "price": "4210", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010380", "name": "螺纹钢筋", "spec": "HRB400EΦ22", "unit": "t", "price_without_tax": "3726", "price": "4210", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010390", "name": "螺纹钢筋", "spec": "HRB400EΦ25", "unit": "t", "price_without_tax": "3726", "price": "4210", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010400", "name": "螺纹钢筋", "spec": "HRB400EΦ28", "unit": "t", "price_without_tax": "3814", "price": "4310", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010410", "name": "螺纹钢筋", "spec": "HRB400EΦ32", "unit": "t", "price_without_tax": "3814", "price": "4310", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010420", "name": "螺纹钢筋", "spec": "HRB500EΦ12", "unit": "t", "price_without_tax": "4150", "price": "4690", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010430", "name": "螺纹钢筋", "spec": "HRB500EΦ14", "unit": "t", "price_without_tax": "4080", "price": "4610", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010440", "name": "螺纹钢筋", "spec": "HRB500EΦ16", "unit": "t", "price_without_tax": "4009", "price": "4530", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010450", "name": "螺纹钢筋", "spec": "HRB500EΦ18", "unit": "t", "price_without_tax": "4009", "price": "4530", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010460", "name": "螺纹钢筋", "spec": "HRB500EΦ20", "unit": "t", "price_without_tax": "4009", "price": "4530", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010470", "name": "螺纹钢筋", "spec": "HRB500EΦ22", "unit": "t", "price_without_tax": "4009", "price": "4530", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010480", "name": "螺纹钢筋", "spec": "HRB500EΦ25", "unit": "t", "price_without_tax": "4009", "price": "4530", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010550", "name": "线材", "spec": "HPB300Φ6.5", "unit": "t", "price_without_tax": "4239", "price": "4790", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010560", "name": "线材", "spec": "HPB300Φ8", "unit": "t", "price_without_tax": "4195", "price": "4740", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010570", "name": "线材", "spec": "HPB300Φ10", "unit": "t", "price_without_tax": "4133", "price": "4670", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010580", "name": "线材", "spec": "HRB400EΦ6", "unit": "t", "price_without_tax": "4159", "price": "4700", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010590", "name": "线材", "spec": "HRB400EΦ8", "unit": "t", "price_without_tax": "4124", "price": "4660", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010600", "name": "线材", "spec": "HRB400EΦ10", "unit": "t", "price_without_tax": "4106", "price": "4640", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010730", "name": "圆钢筋", "spec": "HPB300Φ12", "unit": "t", "price_without_tax": "4003", "price": "4523", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01010740", "name": "圆钢筋", "spec": "HPB300Φ14", "unit": "t", "price_without_tax": "3994", "price": "4513", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01070001", "name": "钢绞线", "spec": "", "unit": "t", "price_without_tax": "4668", "price": "5275", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01130260", "name": "热轧扁钢", "spec": "", "unit": "t", "price_without_tax": "3965", "price": "4480", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01170150", "name": "热轧工字钢", "spec": "", "unit": "t", "price_without_tax": "3929", "price": "4440", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01190170", "name": "热轧槽钢", "spec": "", "unit": "t", "price_without_tax": "3810", "price": "4305", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01210380", "name": "热轧角钢", "spec": "", "unit": "t", "price_without_tax": "3832", "price": "4330", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01230010", "name": "热轧H型钢", "spec": "", "unit": "t", "price_without_tax": "3646", "price": "4120", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01290370", "name": "钢板(Q235)", "spec": "δ14-20", "unit": "t", "price_without_tax": "3982", "price": "4500", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01290390", "name": "钢板(Q235)", "spec": "δ30-40", "unit": "t", "price_without_tax": "3863", "price": "4365", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01290400", "name": "钢板(Q235)", "spec": "δ42-50", "unit": "t", "price_without_tax": "3876", "price": "4380", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01290430", "name": "钢板(Q235)", "spec": "δ8", "unit": "t", "price_without_tax": "4000", "price": "4520", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01290450", "name": "钢板(Q235)", "spec": "δ12", "unit": "t", "price_without_tax": "3867", "price": "4370", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01291020", "name": "镜面不锈钢板", "spec": "δ0.8", "unit": "㎡", "price_without_tax": "104.42", "price": "118.00", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01291030", "name": "镜面不锈钢板", "spec": "δ1.0", "unit": "㎡", "price_without_tax": "150.44", "price": "170.00", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01291070", "name": "热镀锌钢板", "spec": "δ0.5", "unit": "t", "price_without_tax": "4947", "price": "5590", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01291080", "name": "热镀锌钢板", "spec": "δ0.75", "unit": "t", "price_without_tax": "4788", "price": "5410", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "01291090", "name": "热镀锌钢板", "spec": "δ1", "unit": "t", "price_without_tax": "4690", "price": "5300", "category": "01黑色及有色金属", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "13010670", "name": "内墙用乳胶漆底漆", "spec": "", "unit": "kg", "price_without_tax": "9.67", "price": "10.93", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "13010671", "name": "外墙用乳胶漆底漆", "spec": "", "unit": "kg", "price_without_tax": "15.52", "price": "17.54", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "13030680", "name": "内墙用乳胶漆面漆", "spec": "", "unit": "kg", "price_without_tax": "9.93", "price": "11.22", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "13030690", "name": "外墙用乳胶漆面漆", "spec": "", "unit": "kg", "price_without_tax": "22.50", "price": "25.43", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "13050140", "name": "钢结构超薄型防火涂料", "spec": "", "unit": "kg", "price_without_tax": "15.12", "price": "17.09", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "13050150", "name": "钢结构薄型防火涂料", "spec": "", "unit": "kg", "price_without_tax": "16.01", "price": "18.09", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "13310040", "name": "石油沥青", "spec": "60-100#", "unit": "kg", "price_without_tax": "3.58", "price": "4.04", "category": "13涂料及防腐、防水材料", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "05020020", "name": "杉圆木", "spec": "Ф14-18 4m", "unit": "m³", "price_without_tax": "1210", "price": "1367", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "05020040", "name": "松圆木", "spec": "Ф20-28 4m", "unit": "m³", "price_without_tax": "1192", "price": "1347", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "05050010", "name": "胶合板", "spec": "5厚", "unit": "㎡", "price_without_tax": "12.54", "price": "14.17", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "05050030", "name": "胶合板", "spec": "9厚", "unit": "㎡", "price_without_tax": "20.06", "price": "22.66", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "05050040", "name": "胶合板", "spec": "12厚", "unit": "㎡", "price_without_tax": "24.95", "price": "28.19", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "05050060", "name": "胶合板", "spec": "15厚", "unit": "㎡", "price_without_tax": "30.29", "price": "34.23", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "05050070", "name": "胶合板", "spec": "18厚", "unit": "㎡", "price_without_tax": "35.13", "price": "39.70", "category": "05木、竹材料及其制品", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "14030010", "name": "柴油", "spec": "0#", "unit": "kg", "price_without_tax": "7.99", "price": "9.02", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"}, +{"number": "14030060", "name": "汽油", "spec": "92#", "unit": "kg", "price_without_tax": "9.52", "price": "10.76", "category": "14油品、化工原料", "year": 2023, "month": 11, "city": "平潭综合实验区", "date": "2024-01-04"} +] \ No newline at end of file diff --git a/web/tasks/once/data_guangdong.json b/web/tasks/once/data_guangdong.json new file mode 100644 index 0000000..6171ca3 --- /dev/null +++ b/web/tasks/once/data_guangdong.json @@ -0,0 +1,90 @@ +[ +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202107/15793063044e41128cf398d662c87ded/files/广东省交通建设工程主要外购材料信息价表一(2021年6月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2021年6月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-07-29"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202107/77e62ac549d2499092ecbdc31e7d1be1/files/广东省交通建设工程主要外购材料信息价表二(2021年6月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2021年6月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-07-29"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202108/803521836573496e803f2d4f0456e8ee/files/广东省交通建设工程主要外购材料信息价表二(2021年7月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2021年7月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-08-30"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202109/a632da1aed744ebabab2a4220b4f3d74/files/广东省交通建设工程主要外购材料信息价表一(2021年8月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2021年8月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-09-30"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202108/e26f3e8f766e446dbe5c5ecea3c43c07/files/广东省交通建设工程主要外购材料信息价表一(2021年7月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2021年7月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-08-30"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202111/7405f7ce75b34940a10b78d1c8d75cfe/files/广东省交通建设工程主要外购材料信息价表一(2021年10月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2021年10月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-11-30"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202110/5d6b8e8d2ef948a883a15f8610b21588/files/广东省交通建设工程主要外购材料信息价表二(2021年9月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2021年9月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-10-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202110/e9849914b38641fd9e30b45e51fdfa6a/files/广东省交通建设工程主要外购材料信息价表一(2021年9月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2021年9月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-10-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202109/80a400d31840467b85128a28c188c756/files/广东省交通建设工程主要外购材料信息价表二(2021年8月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2021年8月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-09-30"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202112/646866104d50471e8e64d526dc3df025/files/广东省交通建设工程主要外购材料信息价表一(2021年11月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2021年11月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-12-27"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202201/353264b924b04dcb9adeae22e0d2182c/files/广东省交通建设工程主要外购材料信息价表二(2021年12月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2021年12月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-01-25"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202201/41f66d4f14c04a87909461a6df1bef08/files/广东省交通建设工程主要外购材料信息价表一(2021年12月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2021年12月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-01-25"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202111/638a869f1ba84a56bccd7744c91fe074/files/广东省交通建设工程主要外购材料信息价表二(2021年10月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2021年10月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-11-30"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/tzgg/202202/6acb11689c91457992e8eb38d41f0ce8/files/广东省交通建设工程主要外购材料信息价表一(2022年1月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2022年1月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-02-25"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202202/c4d5e52857c84ee8907af3f7746b3b74/files/广东省交通建设工程主要外购材料信息价表二(2022年1月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2022年1月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-02-25"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202112/72bad61983074a278fc89e14c02eeca6/files/广东省交通建设工程主要外购材料信息价表二(2021年11月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2021年11月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-12-27"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202206/08df44fa3fa54e54a5d9ef98a7cd2f3c/files/广东省交通建设工程主要外购材料信息价表二(2022年4月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2022年4月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-06-01"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202203/ed40700fa92847d59b46ffe449cd6b78/files/广东省交通建设工程主要外购材料信息价表二(2022年2月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2022年2月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-03-31"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202203/740e13b01ce9406f98f704cef31b19a9/files/广东省交通建设工程主要外购材料信息价表一(2022年2月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2022年2月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-03-31"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202204/faedac051fe84eba880ea1144d351038/files/广东省交通建设工程主要外购材料信息价表一(2022年3月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2022年3月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-04-25"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202204/9b5f6b75105e4723865a3d9de94ad229/files/广东省交通建设工程主要外购材料信息价表二(2022年3月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2022年3月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-04-25"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202206/7521c8eb964b4c30a906ce761097915a/files/广东省交通建设工程主要外购材料信息价表一(2022年4月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2022年4月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-06-01"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202206/a4a0ef1e7c474e8fac4cc446fbfda271/files/广东省交通建设工程主要外购材料信息价表二(2022年5月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2022年5月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-06-30"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202206/4f084c2951314e419a5b1c6026493ba3/files/广东省交通建设工程主要外购材料信息价表一(2022年5月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2022年5月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-06-30"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202207/9fa9edca7dce40189f74ca9574e99f7b/files/广东省交通建设工程主要外购材料信息价表二(2022年6月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2022年6月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-07-25"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202207/cc01a10c98de442eb2e27ffaf6ff1cad/files/广东省交通建设工程主要外购材料信息价表一(2022年6月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2022年6月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-07-25"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202208/cda5a88e0ee94bfeb4f4f8e4fccaa3d4/files/广东省交通建设工程主要外购材料信息价表二(2022年7月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2022年7月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-08-29"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202208/3792b0e039ce43c9aeaa40f6411539e8/files/广东省交通建设工程主要外购材料信息价表一(2022年7月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2022年7月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-08-29"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202209/14e54c6b91014c898d0de67a254afbfb/files/广东省交通建设工程主要外购材料信息价表一(2022年8月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2022年8月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-09-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202210/66d97a88a7b047bea13e8a6d1a6d20c3/files/广东省交通建设工程主要外购材料信息价表二(2022年9月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2022年9月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-10-27"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202209/56d7e65b1b88482f8614c557421eec31/files/广东省交通建设工程主要外购材料信息价表二(2022年8月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2022年8月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-09-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202210/a522fa3f5e994f8f96418bcf0b0b3589/files/广东省交通建设工程主要外购材料信息价表一(2022年9月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2022年9月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-10-27"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202211/17e2d0ebb98a49df97a576edeafaca1b/files/广东省交通建设工程主要外购材料信息价表一(2022年10月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2022年10月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-11-29"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202211/ac2fbe0cf6aa4a3297fe8a64e2be8262/files/广东省交通建设工程主要外购材料信息价表二(2022年10月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2022年10月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-11-29"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202212/6ac390f04736449b9a861935fbbc4f66/files/广东省交通建设工程主要外购材料信息价表二(2022年11月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2022年11月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-12-30"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202212/9e91a7023ce7444aa16f4b496b40c972/files/广东省交通建设工程主要外购材料信息价表一(2022年11月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2022年11月)", "source": "广东省交通运输工程造价事务中心", "date": "2022-12-30"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202301/b0106473b2314b4c9688dbda4753dd5d/files/广东省交通建设工程主要外购材料信息价表一(2022年12月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2022年12月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-01-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202301/0d1c5c2ed5644ebb97bc2024988886bf/files/广东省交通建设工程主要外购材料信息价表二(2022年12月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2022年12月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-01-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202302/a9030b69ead747aa88fb69ca35bc3358/files/广东省交通建设工程主要外购材料信息价表二(2023年1月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2023年1月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-02-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202303/8bba47da24664fb3bd341781e0d65c26/files/广东省交通建设工程主要外购材料信息价表一(2023年2月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2023年2月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-03-31"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202302/dff1de40ecc446b6bd7ac5e255a3d49b/files/广东省交通建设工程主要外购材料信息价表一(2023年1月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2023年1月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-02-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202303/683a28c5251244d0bcde16d35e3de8db/files/广东省交通建设工程主要外购材料信息价表二(2023年2月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2023年2月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-03-31"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202304/b66d85c8b28f46c8aed286418e9cc8cd/files/广东省交通建设工程主要外购材料信息价表一(2023年3月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2023年3月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-04-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202304/ba2da99f14714014a9534dc3840043b7/files/广东省交通建设工程主要外购材料信息价表二(2023年3月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2023年3月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-04-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202305/81ab4c58822a4d9a9f9dcd3e2a6d6b0e/files/广东省交通建设工程主要外购材料信息价表一(2023年4月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2023年4月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-05-25"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202305/98be366ba4d44ad0ad0ede9146922dd9/files/广东省交通建设工程主要外购材料信息价表二(2023年4月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2023年4月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-05-25"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202306/0fac1fe4172643f39e02a7aaf5eeb1eb/files/广东省交通建设工程主要外购材料信息价表一(2023年5月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2023年5月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-06-29"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202306/d74c144e441748cdbd9ae8912a6fa093/files/广东省交通建设工程主要外购材料信息价表二(2023年5月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2023年5月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-06-29"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202307/3f975fb7da3342faab735ead48160784/files/广东省交通建设工程主要外购材料信息价表二(2023年6月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2023年6月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-07-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202308/0a962139c66a4b4db1764d732b2e7871/files/广东省交通建设工程主要外购材料信息价表一(2023年7月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2023年7月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-08-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202308/e335db1a4e974812bfe4ce8e1ed0c738/files/广东省交通建设工程主要外购材料信息价表二(2023年7月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2023年7月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-08-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202309/f4a9eedbdbf445dab72d722bd43d5446/files/广东省交通建设工程主要外购材料信息价表一(2023年8月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2023年8月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-09-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202309/636d6aa3536849988355fff786012475/files/广东省交通建设工程主要外购材料信息价表二(2023年8月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2023年8月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-09-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202310/41ca6655bc15437fbb1c48d257b65b5f/files/广东省交通建设工程主要外购材料信息价表一(2023年9月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2023年9月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-10-31"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202310/0281b60c227d46968468b74b5a8f1019/files/广东省交通建设工程主要外购材料信息价表二(2023年9月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2023年9月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-10-31"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202311/da71832b3b4d4817a06d6721936413d6/files/广东省交通建设工程主要外购材料信息价表二(2023年10月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2023年10月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-11-29"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202311/f23f01c6520644f9949c988dad92cec9/files/广东省交通建设工程主要外购材料信息价表一(2023年10月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2023年10月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-11-29"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202312/0194f70790664b64894deeffad841d4d/files/广东省交通建设工程主要外购材料信息价表二(2023年11月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2023年11月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-12-29"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202312/4803eab8f0364f9290125792d2bfc134/files/广东省交通建设工程主要外购材料信息价表一(2023年11月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2023年11月)", "source": "广东省交通运输工程造价事务中心", "date": "2023-12-29"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202010/16367629e9464ed98d0f62425df30145/files/f16139aacc5543ddb8845737b9d4bc5d.pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2020年9月)", "source": "广东省交通运输工程造价事务中心", "date": "2020-10-27"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202010/f9fe5b97eddf4500917df4718dbe59c2/files/b995aedbc5d541a5adc57bc657b0666a.pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2020年9月)", "source": "广东省交通运输工程造价事务中心", "date": "2020-10-27"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202011/54253642e05a4fde9fa662c2e3734503/files/4eaa3152ff0d4282937534bc267a588d.pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2020年10月)", "source": "广东省交通运输工程造价事务中心", "date": "2020-11-25"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202011/b711db1b4e264a6288367a1ce0267aa4/files/d03375de8f924ad381b442eb5951ea99.pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2020年10月)", "source": "广东省交通运输工程造价事务中心", "date": "2020-11-25"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202012/04923b0cae834f0e8875b67a9e020835/files/c435410567504419b5d177856b41ecbc.pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2020年11月)", "source": "广东省交通运输工程造价事务中心", "date": "2020-12-24"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202012/ce2113b1d87240e89ff4609693cd00ee/files/7b94f3b74a8c4e75860b5325f9934f26.pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2020年11月)", "source": "广东省交通运输工程造价事务中心", "date": "2020-12-24"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202101/14102445254348d29154f4b1c0475949/files/611260232f8f462086d2b01f446ba1b1.pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2020年12月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-01-25"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202103/d8ce3f45fe6d4d28a541fc25383f713c/files/647a4f49189d4bf9b6cfe9ad16b210d8.pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2021年1月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-03-02"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202103/7dde3df1c326442cafac87176b529172/files/0f75530cf459476d8447babcabd85ebd.pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2021年1月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-03-02"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202101/859132a79ccf486d9697c4334941bab7/files/c35b07d8458e48afa3f7bb681de05864.pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2020年12月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-01-25"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202103/d70bb060bb9c48f484f1648114bdb7c6/files/广东省交通建设工程主要外购材料信息价表二(2021年2月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2021年2月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-03-26"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202104/2a46d6939dbc404db16d76320c89e78c/files/广东省交通建设工程主要外购材料信息价表二(2021年3月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2021年3月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-04-29"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202103/2ced8b7a526b4fe3b75f7415532171e6/files/广东省交通建设工程主要外购材料信息价表一(2021年2月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2021年2月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-03-26"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202104/36fec5b6728549b5bb737de94a0c04c2/files/广东省交通建设工程主要外购材料信息价表一(2021年3月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2021年3月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-04-29"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202105/3da9385629374a7aa1330a98d5f61ef1/files/广东省交通建设工程主要外购材料信息价表一(2021年4月).pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2021年4月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-05-27"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202105/9cb53ffd0c824d15a50563e003f61e91/files/广东省交通建设工程主要外购材料信息价表二(2021年4月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2021年4月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-05-27"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202106/32579bb540864f329aea783d9068e8c1/files/广东省交通建设工程主要外购材料信息价表一(2021年5月)-20210628145748111.pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2021年5月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-06-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202106/e78f4673d61341a0989be156d38bd8d6/files/广东省交通建设工程主要外购材料信息价表二(2021年5月).pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2021年5月)", "source": "广东省交通运输工程造价事务中心", "date": "2021-06-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202009/e77960f8d82f423ea32c8efae78cd0ac/files/a4803bc7f9d34256b6712959a5a97143.pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2020年3月)", "source": "广东省交通运输工程造价事务中心", "date": "2020-04-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/tzgg/202009/eaf5847b2b114c1bad611bafd9d9a937/files/ed0befc5dc724573bb48661808e3b70e.pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2020年4月)", "source": "广东省交通运输工程造价事务中心", "date": "2020-05-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/tzgg/202009/b07e45d1ae68476e832b388d78607c8c/files/571987a9abb44b839d85400324691978.pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2020年4月)", "source": "广东省交通运输工程造价事务中心", "date": "2020-05-28"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/tzgg/202009/07aefbf1753d49dbab513fa37209cf5d/files/3f84670b13194ab1a59a0e84162b7b0b.pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2020年5月)", "source": "广东省交通运输工程造价事务中心", "date": "2020-06-23"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/tzgg/202009/0450ffb0feb3456ba1420beb399e14b9/files/f841488342d94d29b61528fa6ab5ece5.pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2020年5月)", "source": "广东省交通运输工程造价事务中心", "date": "2020-06-23"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/tzgg/202009/33aa984353594c7da3613ad7d786fc6a/files/b0d55c74ad94494bb7a08775866fd2c2.pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2020年6月)", "source": "广东省交通运输工程造价事务中心", "date": "2020-07-29"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/tzgg/202009/071f61bc8a524c73bcca327fa3b4ffa3/files/ddf97e99218f4106b1261d37231047db.pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2020年6月)", "source": "广东省交通运输工程造价事务中心", "date": "2020-07-29"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/tzgg/202009/574ef09f478849a38ce0cd013648212b/files/6b7953b7373146a7985dac807ef69dd8.pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2020年7月)", "source": "广东省交通运输工程造价事务中心", "date": "2020-08-21"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/tzgg/202009/ceeecbc1192e4c1c9ef326f48e92a104/files/c1e0e77c282c4911823f4113e57c7669.pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2020年7月)", "source": "广东省交通运输工程造价事务中心", "date": "2020-08-21"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202009/dbefae829e9546ae9b0698d22fae09cf/files/ca2caa3b68cd46fcbec49b1f0052940a.pdf", "name": "广东省交通建设工程主要外购材料信息价表一(2020年8月)", "source": "广东省交通运输工程造价事务中心", "date": "2020-09-21"}, +{"url": "http://zjz.gdcd.gov.cn/zjzgdcd/zjxx_clxxj/202009/4469f9300cf048fa873ab686a3372c4c/files/baac2344b5434ccd9cbbe227d49d8f35.pdf", "name": "广东省交通建设工程主要外购材料信息价表二(2020年8月)", "source": "广东省交通运输工程造价事务中心", "date": "2020-09-21"} +] \ No newline at end of file diff --git a/web/tasks/once/data_zhejiang.json b/web/tasks/once/data_zhejiang.json new file mode 100644 index 0000000..4246258 --- /dev/null +++ b/web/tasks/once/data_zhejiang.json @@ -0,0 +1,34 @@ +[ +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=fb4970a1c47843acaeedcdc28d234542.pdf", "name": "《质监与造价》价格信息专辑2022年第三期(总第218期).pdf", "source": "省交通工程管理中心", "date": "2022-04-11"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=115577c096fc4b9dbd5226d9c631ea0c.pdf", "name": "《质监与造价》价格信息专辑2022年第五期(总第220期).pdf", "source": "省交通工程管理中心", "date": "2022-06-10"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=a5588454a5d2493e84b1da41e355d8c4.pdf", "name": "《质监与造价》价格信息专辑2022年第六期(总第221期).pdf", "source": "省交通工程管理中心", "date": "2022-07-11"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=89f18f9f1a104e86b1ebece9d4f54e9a.pdf", "name": "《质监与造价》价格信息专辑2022年第四期(总第219期).pdf", "source": "省交通工程管理中心", "date": "2022-05-12"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=f9850959bc874109bbf969d4f1407765.pdf", "name": "《质监与造价》价格信息专辑2022年第二期(总第217期).pdf", "source": "省交通工程管理中心", "date": "2022-03-10"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=7b65f691b00446bea1364fef476a74e1.pdf", "name": "《质监与造价》价格信息专辑2022年第七期(总第222期).pdf", "source": "省交通工程管理中心", "date": "2022-08-12"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=6813301dc7664bce89531ec9e3b11f26.pdf", "name": "《质监与造价》价格信息专辑2022年第九期(总第224期).pdf", "source": "省交通工程管理中心", "date": "2022-10-10"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=492109fa11004378b8d8ddd876857a3b.pdf", "name": "《质监与造价》价格信息专辑2022年第十期(总第225期).pdf", "source": "省交通工程管理中心", "date": "2022-11-14"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=b6819feaa98f4dc48890b6f50bf5edb8.pdf", "name": "《质监与造价》价格信息专辑2022年第八期(总第223期).pdf", "source": "省交通工程管理中心", "date": "2022-09-14"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=04591e88c9894076a5afe096fa6bb8aa.pdf", "name": "《质监与造价》价格信息专辑2022年第十二期(总第227期).pdf", "source": "省交通工程管理中心", "date": "2023-01-19"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=9e02544c7a444ba6bc0da5d285b560ed.pdf", "name": "《质监与造价》价格信息专辑2023年第二期(总第229期).pdf", "source": "省交通工程管理中心", "date": "2023-03-20"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=ea07c46c718041af8a6138e15dec98e5.pdf", "name": "《质监与造价》价格信息专辑2023年第一期(总第228期).pdf", "source": "省交通工程管理中心", "date": "2023-02-17"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=3de209f960fd4115b5b27666dfd8a076.pdf", "name": "《质监与造价》价格信息专辑2022年第十一期(总第226期).pdf", "source": "省交通工程管理中心", "date": "2022-12-19"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=37ebc26c180c4fa3a4d3d29b24d3600f.pdf", "name": "《质监与造价》价格信息专辑2023年第五期(总第232期).pdf", "source": "省交通工程管理中心", "date": "2023-06-16"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=61f09bc9376946bba47824301d082a0f.pdf", "name": "《质监与造价》价格信息专辑2023年第三期(总第230期).pdf", "source": "省交通工程管理中心", "date": "2023-04-18"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=f95443c3fbf44148963e719b2767c2d7.pdf", "name": "《质监与造价》价格信息专辑2023年第四期(总第231期).pdf", "source": "省交通工程管理中心", "date": "2023-05-18"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=93ac1fa626f04a53990ab5fd5cf12435.pdf", "name": "《质监与造价》价格信息专辑2021年第三期(总第206期).pdf", "source": "省交通工程管理中心", "date": "2021-04-15"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=3bf36f92107a4deb8bbae0ff26acf9d9.pdf", "name": "《质监与造价》价格信息专辑2021年第五期(总第208期).pdf", "source": "省交通工程管理中心", "date": "2021-06-17"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=1d40420b6f9c468d94cb3f1d0eb577af.pdf", "name": "《质监与造价》价格信息专辑2021年第七期(总第210期).pdf", "source": "省交通工程管理中心", "date": "2021-08-13"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=1fe1d4dca46941bf8c9da241e5269861.pdf", "name": "《质监与造价》价格信息专辑2021年第六期(总第209期).pdf", "source": "省交通工程管理中心", "date": "2021-07-14"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=7c592f33ed434085b60f68b67dd599f0.pdf", "name": "《质监与造价》价格信息专辑2021年第十一期(总第214期).pdf", "source": "省交通工程管理中心", "date": "2021-12-14"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=52b5a0bdea234bbba1c0499ef2a454f5.pdf", "name": "《质监与造价》价格信息专辑2021年第八期(总第211期).pdf", "source": "省交通工程管理中心", "date": "2021-09-15"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=b1674e6ad80d4e62b7cf3db3a250e30f.pdf", "name": "《质监与造价》价格信息专辑2021年第九期(总第212期).pdf", "source": "省交通工程管理中心", "date": "2021-10-14"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=30d17daef28547a69bafd96270639e50.pdf", "name": "《质监与造价》价格信息专辑2021年第十二期(总第215期).pdf", "source": "省交通工程管理中心", "date": "2022-01-11"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=f5305a086b1b448383225db31b6ae0a6.pdf", "name": "《质监与造价》价格信息专辑2021年第十期(总第213期).pdf", "source": "省交通工程管理中心", "date": "2021-11-12"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=1767e7d015db40c1863ddccef0aa868e.pdf", "name": "《质监与造价》价格信息专辑2023年第七期(总第234期).pdf", "source": "省交通工程管理中心", "date": "2023-08-17"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=2c98c3aa8c57479c8c8f3e53ed0fd2c3.pdf", "name": "《质监与造价》价格信息专辑2022年第一期(总第216期).pdf", "source": "省交通工程管理中心", "date": "2022-02-15"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=b05c996abbec421aa0c48c4fe7d52d94.pdf", "name": "《质监与造价》价格信息专辑2023年第六期(总第233期).pdf", "source": "省交通工程管理中心", "date": "2023-07-14"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=63171cac60d446888953f44f24aa201e.pdf", "name": "《质监与造价》价格信息专辑2023年第八期(总第235期).pdf", "source": "省交通工程管理中心", "date": "2023-09-14"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=e8a1565edb4e4fe4823c23db415e3996.pdf", "name": "《质监与造价》价格信息专辑2023年第九期(总第236期).pdf", "source": "省交通工程管理中心", "date": "2023-10-18"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=61e5ac8a0d5c431a90667114b6b59323.pdf", "name": "《质监与造价》价格信息专辑2023年第十期(总第237期).pdf", "source": "省交通工程管理中心", "date": "2023-11-20"}, +{"url": "https://jtyst.zj.gov.cn/module/download/downfile.jsp?classid=0&filename=94a4858eed7b49abb0ba714268683a03.pdf", "name": "《质监与造价》价格信息专辑2023年第十一期(总第238期).pdf", "source": "省交通工程管理中心", "date": "2023-12-15"} +] \ No newline at end of file diff --git a/web/tasks/once/oil.json b/web/tasks/once/oil.json new file mode 100644 index 0000000..813d24b --- /dev/null +++ b/web/tasks/once/oil.json @@ -0,0 +1,232 @@ +[ +{"name": "车用89号汽油(ⅥB)", "price": 9850, "date": "2023-12-05"}, +{"name": "车用92号汽油(ⅥB)", "price": 10441, "date": "2023-12-05"}, +{"name": "车用95号汽油(ⅥB)", "price": 11032, "date": "2023-12-05"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8800, "date": "2023-12-05"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9328, "date": "2023-12-05"}, +{"name": "车用89号汽油(ⅥB)", "price": 9850, "date": "2023-12-05"}, +{"name": "车用92号汽油(ⅥB)", "price": 10441, "date": "2023-12-05"}, +{"name": "车用95号汽油(ⅥB)", "price": 11032, "date": "2023-12-05"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8800, "date": "2023-12-05"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9328, "date": "2023-12-05"}, +{"name": "车用89号汽油(ⅥB)", "price": 9905, "date": "2023-11-21"}, +{"name": "车用92号汽油(ⅥB)", "price": 10499, "date": "2023-11-21"}, +{"name": "车用95号汽油(ⅥB)", "price": 11094, "date": "2023-11-21"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8850, "date": "2023-11-21"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9381, "date": "2023-11-21"}, +{"name": "车用89号汽油(ⅥB)", "price": 9905, "date": "2023-11-21"}, +{"name": "车用92号汽油(ⅥB)", "price": 10499, "date": "2023-11-21"}, +{"name": "车用95号汽油(ⅥB)", "price": 11094, "date": "2023-11-21"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8850, "date": "2023-11-21"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9381, "date": "2023-11-21"}, +{"name": "车用89号汽油(ⅥB)", "price": 9635, "date": "2024-01-03"}, +{"name": "车用92号汽油(ⅥB)", "price": 10213, "date": "2024-01-03"}, +{"name": "车用95号汽油(ⅥB)", "price": 10791, "date": "2024-01-03"}, +{"name": "车用89号汽油(ⅥB)", "price": 10245, "date": "2023-11-07"}, +{"name": "车用92号汽油(ⅥB)", "price": 10860, "date": "2023-11-07"}, +{"name": "车用95号汽油(ⅥB)", "price": 11474, "date": "2023-11-07"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9180, "date": "2023-11-07"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9731, "date": "2023-11-07"}, +{"name": "车用89号汽油(ⅥB)", "price": 10245, "date": "2023-11-07"}, +{"name": "车用92号汽油(ⅥB)", "price": 10860, "date": "2023-11-07"}, +{"name": "车用95号汽油(ⅥB)", "price": 11474, "date": "2023-11-07"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9180, "date": "2023-11-07"}, +{"name": "车用89号汽油(ⅥB)", "price": 9860, "date": "2023-07-26"}, +{"name": "车用92号汽油(ⅥB)", "price": 10452, "date": "2023-07-26"}, +{"name": "车用95号汽油(ⅥB)", "price": 11043, "date": "2023-07-26"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8810, "date": "2023-07-26"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9339, "date": "2023-07-26"}, +{"name": "车用89号汽油(ⅥB)", "price": 9860, "date": "2023-07-26"}, +{"name": "车用92号汽油(ⅥB)", "price": 10452, "date": "2023-07-26"}, +{"name": "车用95号汽油(ⅥB)", "price": 11043, "date": "2023-07-26"}, +{"name": "车用89号汽油(ⅥB)", "price": "9585", "date": "2023-07-12"}, +{"name": "车用92号汽油(ⅥB)", "price": "10160", "date": "2023-07-12"}, +{"name": "车用95号汽油(ⅥB)", "price": "10735", "date": "2023-07-12"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8550", "date": "2023-07-12"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9063", "date": "2023-07-12"}, +{"name": "车用89号汽油(ⅥB)", "price": "9585", "date": "2023-07-12"}, +{"name": "车用92号汽油(ⅥB)", "price": "10160", "date": "2023-07-12"}, +{"name": "车用95号汽油(ⅥB)", "price": "10735", "date": "2023-07-12"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8550", "date": "2023-07-12"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8590, "date": "2024-01-03"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9105, "date": "2024-01-03"}, +{"name": "车用89号汽油(ⅥB)", "price": 9635, "date": "2024-01-03"}, +{"name": "车用92号汽油(ⅥB)", "price": 10213, "date": "2024-01-03"}, +{"name": "车用95号汽油(ⅥB)", "price": 10791, "date": "2024-01-03"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8590, "date": "2024-01-03"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9105, "date": "2024-01-03"}, +{"name": "车用89号汽油(ⅥB)", "price": 9435, "date": "2023-12-19"}, +{"name": "车用92号汽油(ⅥB)", "price": 10001, "date": "2023-12-19"}, +{"name": "车用95号汽油(ⅥB)", "price": 10567, "date": "2023-12-19"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8400, "date": "2023-12-19"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 8904, "date": "2023-12-19"}, +{"name": "车用89号汽油(ⅥB)", "price": 9435, "date": "2023-12-19"}, +{"name": "车用92号汽油(ⅥB)", "price": 10001, "date": "2023-12-19"}, +{"name": "车用95号汽油(ⅥB)", "price": 10567, "date": "2023-12-19"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8400, "date": "2023-12-19"}, +{"name": "车用89号汽油(ⅥB)", "price": 10385, "date": "2023-10-24"}, +{"name": "车用92号汽油(ⅥB)", "price": 11008, "date": "2023-10-24"}, +{"name": "车用95号汽油(ⅥB)", "price": 11631, "date": "2023-10-24"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9315, "date": "2023-10-24"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9874, "date": "2023-10-24"}, +{"name": "车用89号汽油(ⅥB)", "price": 10385, "date": "2023-10-24"}, +{"name": "车用92号汽油(ⅥB)", "price": 11008, "date": "2023-10-24"}, +{"name": "车用95号汽油(ⅥB)", "price": 11631, "date": "2023-10-24"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9731, "date": "2023-11-07"}, +{"name": "车用0号柴油(Ⅵ)", "price": 8810, "date": "2023-07-26"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9339, "date": "2023-07-26"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9063", "date": "2023-07-12"}, +{"name": "车用89号汽油(ⅥB)", "price": 10100, "date": "2023-08-09"}, +{"name": "车用92号汽油(ⅥB)", "price": 10706, "date": "2023-08-09"}, +{"name": "车用95号汽油(ⅥB)", "price": 11312, "date": "2023-08-09"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9040, "date": "2023-08-09"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9582, "date": "2023-08-09"}, +{"name": "车用89号汽油(ⅥB)", "price": 10100, "date": "2023-08-09"}, +{"name": "车用92号汽油(ⅥB)", "price": 10706, "date": "2023-08-09"}, +{"name": "车用95号汽油(ⅥB)", "price": 11312, "date": "2023-08-09"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9040, "date": "2023-08-09"}, +{"name": "车用89号汽油(ⅥB)", "price": 10155, "date": "2023-08-23"}, +{"name": "车用92号汽油(ⅥB)", "price": 10764, "date": "2023-08-23"}, +{"name": "车用95号汽油(ⅥB)", "price": 11374, "date": "2023-08-23"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9095, "date": "2023-08-23"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9641, "date": "2023-08-23"}, +{"name": "车用89号汽油(ⅥB)", "price": 10155, "date": "2023-08-23"}, +{"name": "车用92号汽油(ⅥB)", "price": 10764, "date": "2023-08-23"}, +{"name": "车用95号汽油(ⅥB)", "price": 11374, "date": "2023-08-23"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9095, "date": "2023-08-23"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9641, "date": "2023-08-23"}, +{"name": "车用89号汽油(ⅥB)", "price": 10540, "date": "2023-09-20"}, +{"name": "车用92号汽油(ⅥB)", "price": 11172, "date": "2023-09-20"}, +{"name": "车用95号汽油(ⅥB)", "price": 11805, "date": "2023-09-20"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9465, "date": "2023-09-20"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 10033, "date": "2023-09-20"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 8904, "date": "2023-12-19"}, +{"name": "车用89号汽油(ⅥB)", "price": "10455", "date": "2023-10-10"}, +{"name": "车用92号汽油(ⅥB)", "price": "11082", "date": "2023-10-10"}, +{"name": "车用95号汽油(ⅥB)", "price": "11710", "date": "2023-10-10"}, +{"name": "车用0号柴油(Ⅵ)", "price": "9385", "date": "2023-10-10"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9948", "date": "2023-10-10"}, +{"name": "车用89号汽油(ⅥB)", "price": "10455", "date": "2023-10-10"}, +{"name": "车用92号汽油(ⅥB)", "price": "11082", "date": "2023-10-10"}, +{"name": "车用95号汽油(ⅥB)", "price": "11710", "date": "2023-10-10"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9315, "date": "2023-10-24"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9874, "date": "2023-10-24"}, +{"name": "车用89号汽油(ⅥB)", "price": "9305", "date": "2023-03-31"}, +{"name": "车用92号汽油(ⅥB)", "price": "9863", "date": "2023-03-31"}, +{"name": "车用95号汽油(ⅥB)", "price": "10422", "date": "2023-03-31"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8280", "date": "2023-03-31"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8777", "date": "2023-03-31"}, +{"name": "车用89号汽油(ⅥB)", "price": "9305", "date": "2023-03-31"}, +{"name": "车用92号汽油(ⅥB)", "price": "9863", "date": "2023-03-31"}, +{"name": "车用89号汽油(ⅥB)", "price": "9855", "date": "2023-04-17"}, +{"name": "车用92号汽油(ⅥB)", "price": "10446", "date": "2023-04-17"}, +{"name": "车用95号汽油(ⅥB)", "price": "11038", "date": "2023-04-17"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8805", "date": "2023-04-17"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9333", "date": "2023-04-17"}, +{"name": "车用89号汽油(ⅥB)", "price": "9855", "date": "2023-04-17"}, +{"name": "车用92号汽油(ⅥB)", "price": "10446", "date": "2023-04-17"}, +{"name": "车用95号汽油(ⅥB)", "price": "11038", "date": "2023-04-17"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8805", "date": "2023-04-17"}, +{"name": "车用89号汽油(ⅥB)", "price": "9695", "date": "2023-04-28"}, +{"name": "车用92号汽油(ⅥB)", "price": "10277", "date": "2023-04-28"}, +{"name": "车用95号汽油(ⅥB)", "price": "10858", "date": "2023-04-28"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8650", "date": "2023-04-28"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9169", "date": "2023-04-28"}, +{"name": "车用89号汽油(ⅥB)", "price": "9695", "date": "2023-04-28"}, +{"name": "车用92号汽油(ⅥB)", "price": "10277", "date": "2023-04-28"}, +{"name": "车用95号汽油(ⅥB)", "price": "10858", "date": "2023-04-28"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8650", "date": "2023-04-28"}, +{"name": "车用89号汽油(ⅥB)", "price": "9315", "date": "2023-05-16"}, +{"name": "车用92号汽油(ⅥB)", "price": "9874", "date": "2023-05-16"}, +{"name": "车用95号汽油(ⅥB)", "price": "10433", "date": "2023-05-16"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8285", "date": "2023-05-16"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8782", "date": "2023-05-16"}, +{"name": "车用89号汽油(ⅥB)", "price": "9315", "date": "2023-05-16"}, +{"name": "车用92号汽油(ⅥB)", "price": "9874", "date": "2023-05-16"}, +{"name": "车用95号汽油(ⅥB)", "price": "10433", "date": "2023-05-16"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8285", "date": "2023-05-16"}, +{"name": "车用89号汽油(ⅥA)", "price": "9735", "date": "2023-01-03"}, +{"name": "车用92号汽油(ⅥA)", "price": "10319", "date": "2023-01-03"}, +{"name": "车用95号汽油(ⅥA)", "price": "10903", "date": "2023-01-03"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8690", "date": "2023-01-03"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9211", "date": "2023-01-03"}, +{"name": "车用89号汽油(ⅥA)", "price": "9735", "date": "2023-01-03"}, +{"name": "车用92号汽油(ⅥA)", "price": "10319", "date": "2023-01-03"}, +{"name": "车用95号汽油(ⅥA)", "price": "10903", "date": "2023-01-03"}, +{"name": "车用89号汽油(ⅥA)", "price": "9640", "date": "2023-03-17"}, +{"name": "车用92号汽油(ⅥA)", "price": "10218", "date": "2023-03-17"}, +{"name": "车用95号汽油(ⅥA)", "price": "10797", "date": "2023-03-17"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8600", "date": "2023-03-17"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9116", "date": "2023-03-17"}, +{"name": "车用89号汽油(ⅥA)", "price": "9640", "date": "2023-03-17"}, +{"name": "车用92号汽油(ⅥA)", "price": "10218", "date": "2023-03-17"}, +{"name": "车用95号汽油(ⅥA)", "price": "10797", "date": "2023-03-17"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8600", "date": "2023-03-17"}, +{"name": "车用89号汽油(ⅥA)", "price": "9740", "date": "2023-02-03"}, +{"name": "车用92号汽油(ⅥA)", "price": "10324", "date": "2023-02-03"}, +{"name": "车用95号汽油(ⅥA)", "price": "10909", "date": "2023-02-03"}, +{"name": "车用89号汽油(ⅥB)", "price": "9415", "date": "2023-05-30"}, +{"name": "车用92号汽油(ⅥB)", "price": "9980", "date": "2023-05-30"}, +{"name": "车用95号汽油(ⅥB)", "price": "10545", "date": "2023-05-30"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8380", "date": "2023-05-30"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8883", "date": "2023-05-30"}, +{"name": "车用89号汽油(ⅥB)", "price": "9415", "date": "2023-05-30"}, +{"name": "车用92号汽油(ⅥB)", "price": "9980", "date": "2023-05-30"}, +{"name": "车用89号汽油(ⅥB)", "price": "9360", "date": "2023-06-13"}, +{"name": "车用92号汽油(ⅥB)", "price": "9922", "date": "2023-06-13"}, +{"name": "车用95号汽油(ⅥB)", "price": "10483", "date": "2023-06-13"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8330", "date": "2023-06-13"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8830", "date": "2023-06-13"}, +{"name": "车用89号汽油(ⅥB)", "price": "9360", "date": "2023-06-13"}, +{"name": "车用92号汽油(ⅥB)", "price": "9922", "date": "2023-06-13"}, +{"name": "车用95号汽油(ⅥB)", "price": "10483", "date": "2023-06-13"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8330", "date": "2023-06-13"}, +{"name": "车用89号汽油(ⅥA)", "price": "9530", "date": "2023-01-17"}, +{"name": "车用92号汽油(ⅥA)", "price": "10102", "date": "2023-01-17"}, +{"name": "车用95号汽油(ⅥA)", "price": "10674", "date": "2023-01-17"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8495", "date": "2023-01-17"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9005", "date": "2023-01-17"}, +{"name": "车用89号汽油(ⅥA)", "price": "9530", "date": "2023-01-17"}, +{"name": "车用92号汽油(ⅥA)", "price": "10102", "date": "2023-01-17"}, +{"name": "车用95号汽油(ⅥA)", "price": "10674", "date": "2023-01-17"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8495", "date": "2023-01-17"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 9582, "date": "2023-08-09"}, +{"name": "车用89号汽油(ⅥB)", "price": "9430", "date": "2023-06-28"}, +{"name": "车用92号汽油(ⅥB)", "price": "9996", "date": "2023-06-28"}, +{"name": "车用95号汽油(ⅥB)", "price": "10562", "date": "2023-06-28"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8400", "date": "2023-06-28"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8904", "date": "2023-06-28"}, +{"name": "车用89号汽油(ⅥB)", "price": "9430", "date": "2023-06-28"}, +{"name": "车用92号汽油(ⅥB)", "price": "9996", "date": "2023-06-28"}, +{"name": "车用95号汽油(ⅥB)", "price": "10562", "date": "2023-06-28"}, +{"name": "车用89号汽油(ⅥB)", "price": 10540, "date": "2023-09-20"}, +{"name": "车用92号汽油(ⅥB)", "price": 11172, "date": "2023-09-20"}, +{"name": "车用95号汽油(ⅥB)", "price": 11805, "date": "2023-09-20"}, +{"name": "车用0号柴油(Ⅵ)", "price": 9465, "date": "2023-09-20"}, +{"name": "车用-10号柴油(Ⅵ)", "price": 10033, "date": "2023-09-20"}, +{"name": "车用0号柴油(Ⅵ)", "price": "9385", "date": "2023-10-10"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9948", "date": "2023-10-10"}, +{"name": "车用95号汽油(ⅥB)", "price": "10422", "date": "2023-03-31"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8280", "date": "2023-03-31"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8777", "date": "2023-03-31"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9333", "date": "2023-04-17"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9169", "date": "2023-04-28"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8782", "date": "2023-05-16"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8690", "date": "2023-01-03"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9211", "date": "2023-01-03"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9116", "date": "2023-03-17"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8695", "date": "2023-02-03"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9217", "date": "2023-02-03"}, +{"name": "车用89号汽油(ⅥA)", "price": "9740", "date": "2023-02-03"}, +{"name": "车用92号汽油(ⅥA)", "price": "10324", "date": "2023-02-03"}, +{"name": "车用95号汽油(ⅥA)", "price": "10909", "date": "2023-02-03"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8695", "date": "2023-02-03"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9217", "date": "2023-02-03"}, +{"name": "车用95号汽油(ⅥB)", "price": "10545", "date": "2023-05-30"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8380", "date": "2023-05-30"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8883", "date": "2023-05-30"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8830", "date": "2023-06-13"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "9005", "date": "2023-01-17"}, +{"name": "车用0号柴油(Ⅵ)", "price": "8400", "date": "2023-06-28"}, +{"name": "车用-10号柴油(Ⅵ)", "price": "8904", "date": "2023-06-28"} +] \ No newline at end of file diff --git a/web/utils/__init__.py b/web/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/web/utils/fe_sucks.py b/web/utils/fe_sucks.py new file mode 100644 index 0000000..2b5ec8e --- /dev/null +++ b/web/utils/fe_sucks.py @@ -0,0 +1,44 @@ +from nc_http.tools.fe_sucks import FESucks +from nc_http.tools.helpers.dict import camelize_dict + + +class FESucks(FESucks): + @classmethod + def set_placeholder(cls, data, key, placeholder_name_list, placeholder=None): + """ + :param data: + :param key: + :param placeholder_name_list: + :param placeholder: + :return: + [{'a': 1, 'b': 'name_1'}] + + + ['name_1', 'name_2', 'name_3'] + + + {'a': 0} + = + [{'a': 1, 'b': 'name_1'}, {'a': 0, 'b': 'name_2'}, {'a': 0, 'b': 'name_3'}] + """ + placeholder = placeholder or {} + miss_placeholder_name_list = set(placeholder_name_list) - set(item[key] for item in data) + for placeholder_name in miss_placeholder_name_list: + _placeholder = placeholder.copy() + _placeholder[key] = placeholder_name + data.append(_placeholder) + return data + + @classmethod + def camelize(cls, result): + """ + :param result: + :return: + """ + if isinstance(result, dict): + return camelize_dict(result) + if isinstance(result, list): + _result = [] + for item in result: + _result.append(camelize_dict(item)) + return _result + + return result diff --git a/web/utils/flask_pylint.py b/web/utils/flask_pylint.py new file mode 100644 index 0000000..213ad6b --- /dev/null +++ b/web/utils/flask_pylint.py @@ -0,0 +1,63 @@ +import os +import subprocess + + +class Pylint: + + def __init__(self, app=None): + self._disable = True + self.app = None + if app is not None: + self.init_app(app) + + def init_app(self, app): + self.app = app + + # 避免在 flask debug 模式下重复执行 + if os.environ.get('WERKZEUG_RUN_MAIN') != 'true': + return self + + if 'PYLINT_DISABLE' in app.config: + self._disable = app.config.get('PYLINT_DISABLE') + else: + self._disable = not app.config.get('DEBUG', True) + + if not self._disable: + self._prepare_hook() + # todo 移入脚本 + self._check_code() + + return self + + @staticmethod + def _prepare_hook(): + subprocess.call(['pre-commit', 'install']) + + @staticmethod + def _check_code(): + # 预检查代码风格 + _, output = subprocess.getstatusoutput('pre-commit run --all-files') + # 输出最差评分代码信息 + output_lines = output.split('\n') + for line in output_lines[0:3]: + print(line) + + worst_score_info = [] + current_info = [] + worst_score = 10 + for line in output_lines[3:]: + current_info.append(line) + + if line.startswith('Your code has been rated at'): + score = float(line.split()[6].split('/')[0]) + if score < worst_score: + worst_score = score + worst_score_info = tuple(current_info) + current_info = [] + + for line in worst_score_info: + print(line) + # 通过检查或无法获取最差分数的场合 直接输出所有信息 + if not worst_score_info: + for line in output_lines[3:]: + print(line) diff --git a/web/utils/login.py b/web/utils/login.py new file mode 100644 index 0000000..ef64a77 --- /dev/null +++ b/web/utils/login.py @@ -0,0 +1,97 @@ +import time + +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.support import expected_conditions +from selenium.webdriver.support.wait import WebDriverWait + +HOME_PAGE_URL = 'https://fuzhou.mysteel.com/' +USERNSAME = '13960925044' +PASSWORD = 'mysteel336627' + + +def load_element(browser, pattern, time=3600.0): + ''' 等待元素载入 ''' + element = WebDriverWait(browser, time).until(expected_conditions.presence_of_element_located((By.XPATH, pattern))) + return element + + +def login_mysteel(): + options = webdriver.ChromeOptions() + browser = webdriver.Remote( + command_executor="http://localhost:4444/wd/hub", + options=options + ) + + browser.get(HOME_PAGE_URL) + print('Visit {0} ...'.format(HOME_PAGE_URL)) + print(browser.title) + try: + # 打开登陆窗口 + print('Click Login...') + time.sleep(1) + load_element(browser, '//*[@id="mysteel-topBar"]/div[3]/p').click() + time.sleep(1) + + # 填写登陆资料 + print('Insert data ...') + print('username: {0}'.format(USERNSAME)) + browser.find_elements(By.XPATH, "//div[contains(text(),'账号登录')]")[0].click() + time.sleep(2) + browser.find_elements(By.XPATH, '/html/body/div/div/div[2]/div[5]/div[1]/input')[0].send_keys(USERNSAME) + browser.find_elements(By.XPATH, '/html/body/div/div/div[2]/div[5]/div[3]/input')[0].send_keys(PASSWORD) + time.sleep(1) + browser.find_elements(By.XPATH, '/html/body/div/div/div[2]/div[6]/div[1]/div[1]')[0].click() + time.sleep(5) + + cookies = browser.get_cookies() + for i in range(10): + if cookies: + break + else: + browser.refresh() + time.sleep(5) + cookies = browser.get_cookies() + + print(cookies) + print([i for i in cookies if i['name'] == '_login_token']) + print([i for i in cookies if i['name'] == '_MSPASS_SESSION']) + return cookies + finally: + browser.close() + browser.quit() + + +def login_baiinfo(home_page_url='http://www.baiinfo.com/shiyou/liqing', usernsame='fjglsl', password='111111'): + options = webdriver.ChromeOptions() + browser = webdriver.Remote( + command_executor="http://localhost:4444/wd/hub", + options=options + ) + browser.set_window_size(1280, 800) + browser.get('http://www.baiinfo.com/login') + print('Visit {0} ...'.format(home_page_url)) + print(browser.title) + try: + # 填写登陆资料 + print('Insert data ...') + print('username: {0}'.format(usernsame)) + load_element(browser, '//*[@id="__nuxt"]') + print('ddd') + time.sleep(2) + browser.find_elements(By.XPATH, '//form/div[1]/input')[0].click() + browser.find_elements(By.XPATH, '//form/div[1]/input')[0].send_keys(usernsame) + browser.find_elements(By.XPATH, '//form/div[2]/input')[0].send_keys(password) + time.sleep(3) + browser.find_elements(By.XPATH, '//*[@id="__nuxt"]/div/div[5]/div/div[2]/div/div[2]/div[2]/div[2]/form/div[4]/div/img')[0].click() + time.sleep(4) + cookies = browser.get_cookies() + print(cookies) + return cookies + finally: + browser.close() + browser.quit() + + +if __name__ == '__main__': + login_baiinfo() diff --git a/web/worker/__init__.py b/web/worker/__init__.py new file mode 100644 index 0000000..41328f6 --- /dev/null +++ b/web/worker/__init__.py @@ -0,0 +1,116 @@ +import gevent +from gevent import monkey + +import threading +import time + +from config import DEBUG + +MODE_GEVENT = 'gevent' +MODE_THREADING = 'threading' + +ASYNC_MODE = MODE_THREADING if DEBUG else MODE_GEVENT + + +class GeventWorker: + def __init__(self): + self.init() + + def monkey_patch(self): + monkey.patch_all() + + def spawn(self, *args, **kwargs): + return gevent.spawn(*args, **kwargs) + + def patch_greenlet(self, f): + def inner(*args, **kwargs): + return self.spawn(f, *args, **kwargs) + + return inner + + def joinall(self, threads): + gevent.joinall(threads) + + def is_alive(self, thread): + alive = False + if thread: + alive = not thread.ready() + return alive + + def kill(self, thread): + if thread: + return thread.kill() + return None + + def sleep(self, seconds=0): + gevent.sleep(seconds) + + def init(self): + self.monkey_patch() + + def lock(self): + return gevent.lock.RLock() + + +class ThreadingWorker: + @classmethod + def spawn(cls, *args, **kwargs): + thread = threading.Thread(target=args[0], args=args[1:], kwargs=kwargs) + thread.start() + return thread + + @classmethod + def patch_greenlet(cls, f): + def inner(*args, **kwargs): + return cls.spawn(f, *args, **kwargs) + + return inner + + @classmethod + def joinall(cls, threads): + for thread in threads: + thread.join() + + @classmethod + def is_alive(cls, thread): + alive = False + if thread: + alive = thread.is_alive() + return alive + + @classmethod + def sleep(cls, seconds=0): + time.sleep(seconds) + + @classmethod + def init(cls): + pass + + @classmethod + def kill(cls, thread): + if thread: + return thread.join(0) + return None + + @classmethod + def lock(cls): + return threading.RLock() + + +if ASYNC_MODE == MODE_GEVENT: + patch = GeventWorker() + from gevent.queue import Queue, Empty + +else: + patch = ThreadingWorker() + + from six.moves.queue import Queue, Empty + +spawn = patch.spawn +patch_greenlet = patch.patch_greenlet +joinall = patch.joinall +is_alive = patch.is_alive +sleep = patch.sleep +init = patch.init +kill = patch.kill +lock = patch.lock