소스 검색

动态打包问题

rambo 8 달 전
부모
커밋
1892b95130

+ 45 - 40
python/api.py

@@ -8,6 +8,7 @@ from serial.tools import list_ports
 from model import PhotoRecord
 import settings
 
+
 from utils.hlm_http_request import forward_request
 from utils.utils_func import check_path
 from sockets.socket_client import socket_manager
@@ -21,6 +22,12 @@ from service.run_main import RunMain
 import importlib
 from service.auto_deal_pics.upload_pic import UploadPic
 # from service.AutoDealPics import AutoDealPics
+# for plugin in settings.plugins:
+#     module_path, class_name = plugin.rsplit(".", 1)
+#     print("module_path", module_path, class_name)
+#     module = importlib.import_module(module_path)
+#     getattr(module, class_name)
+
 
 @app.get("/")
 async def index():
@@ -131,11 +138,13 @@ async def handle_detail(request: Request, params: HandlerDetail):
             images = pr.read_all(session, conditions={"goods_art_no": goods_art_no})
             if not images:
                 raise UnicornException("没有可用货号数据")
-            image_dir = "{}/data/".format(os.getcwd())
+            image_dir = "{}/data/".format(os.getcwd()).replace("\\", "/")
+            check_path(image_dir)
             for itemImg in images:
-                if not os.path.exists(image_dir + "/" + os.path.basename(itemImg.image_path)):
+                if not os.path.exists(
+                    image_dir + "/" + os.path.basename(itemImg.image_path)
+                ):
                     shutil.copy(itemImg.image_path, image_dir)
-            check_path(image_dir)
             dealImage = DealImage(image_dir)
             resFlag, path = dealImage.dealMoveImage(
                 image_dir=image_dir, callback_func=None, goods_art_no=goods_art_no
@@ -148,28 +157,28 @@ async def handle_detail(request: Request, params: HandlerDetail):
                 temp_class[tempItem.template_id] = tempItem.template_local_classes
                 temp_name_list.append(tempItem.template_id)
             config_data = {
-                "image_dir": path,
-                "image_order": params.template_image_order,
-                "goods_art_no": goods_art_no,
-                "is_check_number": False,
-                "resize_image_view": "后跟",
-                "cutout_mode": "0",
-                "logo_path": params.logo_path,
-                "special_goods_art_no_folder_line": "",
-                "is_use_excel": False if params.excel_path == "" else True,  # 是否使用excel
-                "excel_path": params.excel_path,  # excel路径
-                "is_check_color_is_all": False,
-                "cutout_is_pass": True,
-                "assigned_page_dict": {},
-                "detail_is_pass": True,
-                "upload_is_pass": False,
-                "upload_is_enable": False,
-                "is_filter": False,
-                "temp_class": temp_class,
-                "temp_name": params.temp_name,
-                "temp_name_list": temp_name_list,
-                "target_error_folder": f"{path}/软件-生成详情错误",
-            }
+                    "image_dir": path,
+                    "image_order": params.template_image_order,
+                    "goods_art_no": goods_art_no,
+                    "is_check_number": False,
+                    "resize_image_view": "后跟",
+                    "cutout_mode": "0",
+                    "logo_path": params.logo_path,
+                    "special_goods_art_no_folder_line": "",
+                    "is_use_excel": False if params.excel_path == "" else True,  # 是否使用excel
+                    "excel_path": params.excel_path,  # excel路径
+                    "is_check_color_is_all": False,
+                    "cutout_is_pass": True,
+                    "assigned_page_dict": {},
+                    "detail_is_pass": True,
+                    "upload_is_pass": False,
+                    "upload_is_enable": False,
+                    "is_filter": False,
+                    "temp_class": temp_class,
+                    "temp_name": params.temp_name,
+                    "temp_name_list": temp_name_list,
+                    "target_error_folder": f"{path}/软件-生成详情错误",
+                }
             # 动态导入类
             temp_class_dict = {}
             for key, class_path in config_data["temp_class"].items():
@@ -187,8 +196,8 @@ async def handle_detail(request: Request, params: HandlerDetail):
             if cutout_res == True:
                 return_data_check_before_detail = run_main.check_before_detail(config_data)
                 check_for_detail_first_res = run_main.check_for_detail_first_call_back(
-                    return_data_check_before_detail
-                )
+                        return_data_check_before_detail
+                    )
             if isinstance(check_for_detail_first_res, partial):
                 result = check_for_detail_first_res()
                 try:
@@ -204,26 +213,22 @@ async def handle_detail(request: Request, params: HandlerDetail):
                     print("to_deal_dir", to_deal_dir)
                     if os.path.exists(to_deal_dir):
                         upload_pic = UploadPic(
-                            windows=None,
-                            to_deal_dir=to_deal_dir,
-                            config_data=config_data,
-                            token=token,
-                        )
+                                windows=None,
+                                to_deal_dir=to_deal_dir,
+                                config_data=config_data,
+                                token=token,
+                            )
                         upload_pic.run()
                 out_put_dir = config_data["out_put_dir"]
                 out_put_dir_path = "{}/{}".format(os.getcwd(), out_put_dir).replace("\\", "/")
                 handler_result_folder = os.path.dirname(out_put_dir_path)
                 handler_result.append(
-                    {"goods_art_no": goods_art_no, "success": True, "info": "处理成功"}
-                )
+                        {"goods_art_no": goods_art_no, "success": True, "info": "处理成功"}
+                    )
             else:
-                # return {
-                #     "code": 1,
-                #     "msg": "处理失败,请联系管理员",
-                #     "data": None}
                 handler_result.append(
-                    {"goods_art_no": goods_art_no, "success": False, "info": "处理失败"}
-                )
+                        {"goods_art_no": goods_art_no, "success": False, "info": "处理失败"}
+                    )
         except Exception as e:
             handler_result.append(
                 {"goods_art_no": goods_art_no, "success": False, "info": str(e)}

+ 3 - 2
python/config.ini

@@ -4,15 +4,16 @@ app_name=智慧拍-后端应用
 # 应用版本号
 version=1.0.0
 # 应用host地址
-host=10.56.42.51
+host=127.0.0.1
 # 应用服务启动名称
 app_run=api:app
 # 端口号
 port=7074
-debug=true
+debug=false
 env=dev
 # 线程数
 works=1
+url_mode=dev
 project=惠利玛
 [log]
 # 日志相关

+ 12 - 11
python/index.py

@@ -11,7 +11,6 @@ import uvicorn.lifespan.on
 from multiprocessing import Process, freeze_support
 from service.init_load_source import init_load_source
 
-
 def handle_shutdown(signum, frame):
     """关闭系统应用服务"""
      # 终止事件循环
@@ -33,7 +32,9 @@ async def run_server():
     await server.serve()
 
 async def main():
-    await  asyncio.gather(run_server(), init_load_source().load_source())
+    await init_load_source().load_source()
+    await run_server()
+    # await  asyncio.gather(run_server(), init_load_source().load_source())
 
 
 if __name__ == "__main__":
@@ -41,12 +42,12 @@ if __name__ == "__main__":
     signal.signal(signal.SIGTERM, handle_shutdown)
     print("python server is running at port:", PORT)
     print("python server is running at port:", APP_RUN)
-    # asyncio.run(main())
-    isDebug = True if IS_DEBUG == "true" else False
-    uvicorn.run(
-        app=APP_RUN,
-        host=APP_HOST,
-        port=int(PORT),
-        reload=isDebug,
-        loop="auto",
-    )
+    asyncio.run(main())
+    # isDebug = True if IS_DEBUG == "true" else False
+    # uvicorn.run(
+    #     app=APP_RUN,
+    #     host=APP_HOST,
+    #     port=int(PORT),
+    #     reload=isDebug,
+    #     loop="auto",
+    # )

+ 1 - 1
python/mcu/DeviceControl.py

@@ -1172,7 +1172,7 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
                 data={
                     "goods_art_no": goods_art_no,
                     "image_counts": image_counts,
-                    "current_time":datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
+                    "current_time":datetime.datetime.now(settings.TIME_ZONE).strftime("%Y-%m-%d %H:%M:%S"),
                 },
             )
             self.msg_type = "mcu"

+ 1 - 0
python/mcu/ProgramItem.py

@@ -15,6 +15,7 @@ class ProgramItem(BaseClass):
         super().__init__(BaseClass)
         # 1 表示等待中,2表示没有等待
         self.wait_state = 2
+        self.msg_type = "mcu"
         self.data = action_data
         self.capture_one = DigiCam()
         captrure_folder_path = self.capture_one.getCaptureFolderPath()

+ 5 - 3
python/model/photo_record.py

@@ -1,7 +1,7 @@
 from sqlmodel import SQLModel, Field
 from datetime import datetime
 from typing import Optional
-
+from settings import TIME_ZONE
 class PhotoRecord(SQLModel, table=True):
     __tablename__ = "photo_record"
     id: Optional[int] = Field(default=None, primary_key=True, index=True)
@@ -10,6 +10,8 @@ class PhotoRecord(SQLModel, table=True):
     image_index: Optional[int] = Field(default=None)
     image_deal_mode: Optional[int] = Field(default=None)
     photo_create_time: Optional[datetime] = Field(default=None)
-    update_time: Optional[datetime] = Field(default=None)
-    create_time: Optional[datetime] = Field(default_factory=datetime.utcnow)
+    update_time: Optional[datetime] = Field(
+        default_factory=lambda: datetime.now(TIME_ZONE)
+    )
+    create_time: Optional[datetime] = Field(default_factory=lambda: datetime.now(TIME_ZONE))
     delete_time: Optional[datetime] = Field(default=None)

+ 12 - 0
python/service/data.py

@@ -117,6 +117,18 @@ class DataModeGenerateDetail(DataBaseModel):
         goods_art_no_all_data = self.get_goods_art_no_info(
             goods_art_list=goods_art_no_list
         )
+        print("goods_art_no_all_data===========>>>>>", "")
+        print("goods_art_no_all_data===========>>>>>", "")
+        print("goods_art_no_all_data===========>>>>>", "")
+        print("goods_art_no_all_data===========>>>>>", "")
+        print("goods_art_no_all_data===========>>>>>", "")
+        print("goods_art_no_all_data===========>>>>>", "")
+        print("goods_art_no_all_data===========>>>>>", goods_art_no_all_data)
+        print("goods_art_no_all_data===========>>>>>", "")
+        print("goods_art_no_all_data===========>>>>>", "")
+        print("goods_art_no_all_data===========>>>>>", "")
+        print("goods_art_no_all_data===========>>>>>", "")
+        print("goods_art_no_all_data===========>>>>>", "")
         for folder_name, value in return_dict.items():
             if value["type"] == "goods_art_no":
                 if value["name"] in goods_art_no_all_data:

+ 3 - 0
python/service/online_request/module_online_data.py

@@ -69,9 +69,11 @@ class OnlineDataRequest(object):
 
     def get_goods_art_no_info(self, numbers_list=None, goods_art_list=None,token=None):
         # 获取商品基础信息,入参为商品的编号
+
         url = "{domain}/api/backend/produce/goods/info".format(
             domain=settings.DOMAIN
         )
+        print("执行   get_goods_art_no_info   ", url)
         if numbers_list:
             data = {
                 'numbers': numbers_list
@@ -83,6 +85,7 @@ class OnlineDataRequest(object):
             }
             print("请求货号:", goods_art_list)
             print("请求货号=====>", self.token)
+        print("执行   get_goods_art_no_info----------------", data)
         post_headers = {
             "Authorization": token,
             # "Origin": settings.Headers["Origin"],

+ 30 - 4
python/settings.py

@@ -1,7 +1,8 @@
 from dotenv import load_dotenv, find_dotenv
 from pathlib import Path  # Python 3.6+ only
-import configparser, json
+import configparser, json, pytz
 
+TIME_ZONE = pytz.timezone("Asia/Shanghai")
 from numpy import true_divide
 from databases import (
     create_all_database,
@@ -160,7 +161,7 @@ STOP = _mcu_config_dict["stop"]
 
 DOMAIN = (
     "https://dev2.valimart.net"
-    if config.get("app", "debug") == "false"
+    if config.get("app", "url_mode") != "dev"
     else "https://dev2.pubdata.cn"
 )
 
@@ -180,7 +181,7 @@ OUT_PIC_FACTOR = float(
     getSysConfigs("basic_configs", "image_sharpening", "1")
 )  # 图片锐化
 
- 
+
 RESIZE_IMAGE_MODE = 1
 
 GRENERATE_MAIN_PIC_BRIGHTNESS = 254  # 色阶是否调整到位判断
@@ -191,4 +192,29 @@ RUNNING_MODE = getSysConfigs("other_configs", "running_mode", "普通模式")
 DEFAULT_CUTOUT_MODE = getSysConfigs("other_configs", "cutout_mode", "普通抠图")
 
 
-CUTOUT_MODE = 0 if getSysConfigs("other_configs", "cutout_mode", "普通抠图") =="普通抠图" else 1
+CUTOUT_MODE = 0 if getSysConfigs("other_configs", "cutout_mode", "普通抠图") =="普通抠图" else 1
+import importlib
+
+# plugins = [
+#     # "custom_plugins.plugins.detail_template.huilima.detail_huilima1.DetailPicGet",
+#     ".custom_plugins.plugins.detail_template.huilima.detail_huilima1.DetailPicGet",
+#     # "custom_plugins.plugins.detail_template.huilima.detail_huilima2.DetailPicGet",
+#     # "custom_plugins.plugins.detail_template.huilima.detail_huilima3.DetailPicGet",
+#     # "custom_plugins.plugins.detail_template.huilima.detail_huilima4.DetailPicGet",
+#     # "custom_plugins.plugins.detail_template.xiaosushuoxie.detail_xiaosushuoxie1",
+#     # "custom_plugins.plugins.detail_template.xiaosushuoxie.detail_xiaosushuoxie2",
+#     # "custom_plugins.plugins.detail_template.xiaosushuoxie.detail_xiaosushuoxie3",
+#     # "custom_plugins.plugins.detail_template.xiaosushuoxie.detail_xiaosushuoxie4",
+#     # "custom_plugins.plugins.detail_template.xiaosushuoxie.detail_xiaosushuoxie5",
+#     # "custom_plugins.plugins.detail_template.xiaosushuoxie.detail_xiaosushuoxie6",
+#     # "custom_plugins.plugins.detail_template.hongqingting.detail_hongqingting1.DetailPicGet",
+#     # "custom_plugins.plugins_mode.detail_generate_base.DetailBase",
+#     # "custom_plugins.plugins_mode.pic_deal.PictureProcessing",
+# ]
+# def load_plugin(plugin_path):
+#     module_name, class_name = plugin_path.rsplit(".", 1)
+#     module = importlib.import_module(module_name)
+#     return getattr(module, class_name)
+
+
+# loaded_plugins = [load_plugin(p.lstrip(".")) for p in plugins]

+ 8 - 1
python/setup.py

@@ -9,9 +9,16 @@ executableApp = Executable(
 # 打包的参数配置
 options = {
     "build_exe": {
+        "packages": ["custom_plugins"],
         "build_exe": "./dist/",
         "excludes": ["*.txt"],
-        "include_files": ["config.ini","action.json","sys_configs.json"],
+        "include_files": [
+            "config.ini",
+            "action.json",
+            "sys_configs.json",
+            "database.db",
+            # "custom_plugins/",
+        ],
         "optimize": 2,
     }
 }

+ 2 - 2
python/sockets/connect_manager.py

@@ -7,9 +7,9 @@ class ConnectionManager:
     def __init__(self):
         self.active_connections: list[WebSocket] = []
 
-    def jsonMessage(self, code=0, msg="", data: object = None):
+    def jsonMessage(self, code=0, msg="", data: object = None,msg_type=""):
         """json字符串数据"""
-        jsonData = {"code": code, "msg": msg, "data": data}
+        jsonData = {"code": code, "msg": msg, "data": data, "msg_type": msg_type}
         return jsonData
 
     async def connect(self, websocket: WebSocket):

+ 19 - 6
python/sockets/message_handler.py

@@ -52,37 +52,50 @@ async def handlerSend(
             if (device_name == "" or device_name == None) or (
                 value == "" or value == None
             ):
-                data = manager.jsonMessage(code=1,msg="参数错误")
+                data = manager.jsonMessage(
+                    code=1, msg="参数错误", msg_type="mcu"
+                )
                 await manager.send_personal_message(data, websocket)
                 return
             device_ctrl = DeviceControl(websocket_manager=manager)
             device_ctrl.controlDevice(device_name, value)
         case "run_mcu":
+            msg_type = "mcu"
             try:
                 # 判断拍照软件是否初始化
                 digicam = DigiCam()
                 camera_is_connect = digicam.checkCameraConnect()
                 if camera_is_connect is not True:
-                    data = manager.jsonMessage(code=1, msg="相机未连接,请检查")
+                    data = manager.jsonMessage(
+                        code=1, msg="相机未连接,请检查", msg_type=msg_type
+                    )
                     await manager.send_personal_message(data, websocket)
                     return
                 digicam.getCaptureFolderPath()
             except:
-                data = manager.jsonMessage(code=1, msg="digicam未初始化,请检查")
+                data = manager.jsonMessage(
+                    code=1, msg="digicam未初始化,请检查", msg_type=msg_type
+                )
                 await manager.send_personal_message(data, websocket)
                 return
             action_info = data.get("action", "执行左脚程序")
             goods_art_no = data.get("goods_art_no", None)
             if goods_art_no == None or goods_art_no =="":
                 # 判断货号是否存在
-                data = manager.jsonMessage(code=1, msg="goods_art_no不能为空")
+                data = manager.jsonMessage(
+                    code=1, msg="goods_art_no不能为空", msg_type=msg_type
+                )
                 await manager.send_personal_message(data, websocket)
                 return
             session = SqlQuery()
             photoRecord = CRUD(PhotoRecord)
             goods_art_record = photoRecord.read(session,conditions={"goods_art_no": goods_art_no})
             if goods_art_record != None:
-                data = manager.jsonMessage(code=1, msg=f"货号[{goods_art_no}]已存在,请勿重复拍摄~")
+                data = manager.jsonMessage(
+                    code=1,
+                    msg=f"货号[{goods_art_no}]已存在,请勿重复拍摄~",
+                    msg_type=msg_type,
+                )
                 await manager.send_personal_message(data, websocket)
                 return
             crud = CRUD(DeviceConfig)
@@ -93,7 +106,7 @@ async def handlerSend(
             if len(all_devices) == 0:
                 # 判断是否有可用配置
                 data = manager.jsonMessage(code=1, msg="当前没有可用配置")
-                await manager.send_personal_message(data, websocket)
+                await manager.send_personal_message(data, websocket, msg_type=msg_type)
                 return
             action_list = [device.model_dump() for device in all_devices]
             print("action_list", action_list)

+ 20 - 12
python/temp.py

@@ -1,13 +1,21 @@
-from databases import CRUD, SqlQuery, PhotoRecord, insert_photo_records
-from datetime import datetime
+# from databases import CRUD, SqlQuery, PhotoRecord, insert_photo_records
+# from datetime import datetime
 
-session = SqlQuery()
-crud = CRUD(PhotoRecord)
-record = crud.read(session=session, order_by="id", ascending=False)
-if record == None:
-    # 发送失败消息
-    pass
-else:
-    insert_photo_records(
-        record.image_deal_mode, record.goods_art_no, record.image_index+1
-    )
+# session = SqlQuery()
+# crud = CRUD(PhotoRecord)
+# record = crud.read(session=session, order_by="id", ascending=False)
+# if record == None:
+#     # 发送失败消息
+#     pass
+# else:
+#     insert_photo_records(
+#         record.image_deal_mode, record.goods_art_no, record.image_index+1
+#     )
+import time, shutil
+from utils.utils_func import check_path
+dst_path = "C:/Development/project/python/CameraMachine/build/extraResources/py/data/"
+check_path(dst_path)
+shutil.copy(
+    "C:\Development\project\python\auto_photo\data\DSC_0438.jpg",
+    dst_path,
+)